Pulse/frontend-modern/src/components/shared/Form.ts
rcourtman 6eb1a10d9b Refactor: Code cleanup and localStorage consolidation
This commit includes comprehensive codebase cleanup and refactoring:

## Code Cleanup
- Remove dead TypeScript code (types/monitoring.ts - 194 lines duplicate)
- Remove unused Go functions (GetClusterNodes, MigratePassword, GetClusterHealthInfo)
- Clean up commented-out code blocks across multiple files
- Remove unused TypeScript exports (helpTextClass, private tag color helpers)
- Delete obsolete test files and components

## localStorage Consolidation
- Centralize all storage keys into STORAGE_KEYS constant
- Update 5 files to use centralized keys:
  * utils/apiClient.ts (AUTH, LEGACY_TOKEN)
  * components/Dashboard/Dashboard.tsx (GUEST_METADATA)
  * components/Docker/DockerHosts.tsx (DOCKER_METADATA)
  * App.tsx (PLATFORMS_SEEN)
  * stores/updates.ts (UPDATES)
- Benefits: Single source of truth, prevents typos, better maintainability

## Previous Work Committed
- Docker monitoring improvements and disk metrics
- Security enhancements and setup fixes
- API refactoring and cleanup
- Documentation updates
- Build system improvements

## Testing
- All frontend tests pass (29 tests)
- All Go tests pass (15 packages)
- Production build successful
- Zero breaking changes

Total: 186 files changed, 5825 insertions(+), 11602 deletions(-)
2025-11-04 21:50:46 +00:00

53 lines
1.8 KiB
TypeScript

const baseField = 'flex flex-col gap-1';
const baseLabel = 'text-sm font-medium text-gray-700 dark:text-gray-300';
const baseHelp = 'text-xs text-gray-500 dark:text-gray-400';
const baseControl = [
'w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm',
'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500',
'dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100',
].join(' ');
const baseCheckbox =
'rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-blue-400';
const join = (base: string, extra?: string) => (extra ? `${base} ${extra}`.trim() : base);
export const formSection = 'space-y-6';
export const formField = baseField;
export const formFieldInline = 'flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3';
export const formLabel = baseLabel;
export const formHelpText = baseHelp;
export const formControl = baseControl;
export const formCheckbox = baseCheckbox;
export const formControlDense = join(baseControl, 'py-1.5 px-2');
export const formControlMono = join(baseControl, 'font-mono');
export const formSelect = join(baseControl, 'pr-8 appearance-none');
export const formTextarea = join(baseControl, 'min-h-[120px] resize-vertical');
export const formLabelMuted = join(baseLabel, 'text-gray-500 dark:text-gray-400 font-normal');
export function labelClass(extra?: string) {
return join(baseLabel, extra);
}
export function controlClass(extra?: string) {
return join(baseControl, extra);
}
export default {
formSection,
formField,
formFieldInline,
formLabel,
formLabelMuted,
formHelpText,
formControl,
formControlDense,
formControlMono,
formSelect,
formTextarea,
formCheckbox,
labelClass,
controlClass,
};