@furcrer/fullstack-components 0.1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.js +2015 -1088
- package/dist/styles.css +1 -1
- package/dist/types/components/containers/Grid/Grid.d.ts +1 -0
- package/dist/types/components/containers/Stack/Stack.d.ts +1 -0
- package/dist/types/components/data/CrudExample/CrudExample.d.ts +1 -0
- package/dist/types/components/data/ResourceTable/ResourceTable.d.ts +3 -2
- package/dist/types/components/data/ResultsCount/ResultsCount.d.ts +11 -0
- package/dist/types/components/data/ResultsCount/ResultsCount.fixture.d.ts +2 -0
- package/dist/types/components/data/ResultsCount/ResultsCount.variants.d.ts +11 -0
- package/dist/types/components/data/ResultsCount/index.d.ts +2 -0
- package/dist/types/components/forms/ColorInput/ColorInput.d.ts +6 -0
- package/dist/types/components/forms/DateInput/DateInput.d.ts +9 -0
- package/dist/types/components/forms/FileInput/FileInput.d.ts +6 -0
- package/dist/types/components/forms/MultiSelectFilter/MultiSelectFilter.d.ts +23 -0
- package/dist/types/components/forms/MultiSelectFilter/MultiSelectFilter.fixture.d.ts +2 -0
- package/dist/types/components/forms/MultiSelectFilter/MultiSelectFilter.variants.d.ts +9 -0
- package/dist/types/components/forms/MultiSelectFilter/index.d.ts +2 -0
- package/dist/types/components/forms/NumberInput/NumberInput.d.ts +8 -0
- package/dist/types/components/forms/PasswordInput/PasswordInput.d.ts +6 -0
- package/dist/types/components/forms/RadioGroup/RadioGroup.d.ts +8 -0
- package/dist/types/components/forms/SearchInput/SearchInput.d.ts +4 -0
- package/dist/types/components/forms/SelectFilter/SelectFilter.d.ts +19 -0
- package/dist/types/components/forms/SelectFilter/SelectFilter.fixture.d.ts +2 -0
- package/dist/types/components/forms/SelectFilter/SelectFilter.variants.d.ts +9 -0
- package/dist/types/components/forms/SelectFilter/index.d.ts +2 -0
- package/dist/types/components/forms/Slider/Slider.d.ts +10 -0
- package/dist/types/components/ohm/ActionBar/ActionBar.d.ts +17 -0
- package/dist/types/components/ohm/ActionBar/ActionBar.fixture.d.ts +2 -0
- package/dist/types/components/ohm/ActionBar/ActionBar.variants.d.ts +13 -0
- package/dist/types/components/ohm/ActionBar/index.d.ts +2 -0
- package/dist/types/components/ohm/DataField/DataField.d.ts +27 -0
- package/dist/types/components/ohm/DataField/DataField.fixture.d.ts +2 -0
- package/dist/types/components/ohm/DataField/DataField.variants.d.ts +5 -0
- package/dist/types/components/ohm/DataField/index.d.ts +2 -0
- package/dist/types/components/ohm/DocumentList/DocumentList.d.ts +21 -0
- package/dist/types/components/ohm/DocumentList/DocumentList.fixture.d.ts +2 -0
- package/dist/types/components/ohm/DocumentList/DocumentList.variants.d.ts +5 -0
- package/dist/types/components/ohm/DocumentList/index.d.ts +2 -0
- package/dist/types/components/ohm/EntityCard/EntityCard.d.ts +14 -0
- package/dist/types/components/ohm/EntityCard/EntityCard.fixture.d.ts +2 -0
- package/dist/types/components/ohm/EntityCard/EntityCard.variants.d.ts +7 -0
- package/dist/types/components/ohm/EntityCard/index.d.ts +2 -0
- package/dist/types/components/ohm/Main/Main.d.ts +8 -0
- package/dist/types/components/ohm/Main/Main.fixture.d.ts +3 -0
- package/dist/types/components/ohm/Main/Main.variants.d.ts +5 -0
- package/dist/types/components/ohm/Main/index.d.ts +2 -0
- package/dist/types/components/ohm/Navbar/Navbar.d.ts +115 -0
- package/dist/types/components/ohm/Navbar/Navbar.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Navbar/Navbar.variants.d.ts +75 -0
- package/dist/types/components/ohm/Navbar/index.d.ts +2 -0
- package/dist/types/components/ohm/PageHeader/PageHeader.d.ts +11 -0
- package/dist/types/components/ohm/PageHeader/PageHeader.fixture.d.ts +2 -0
- package/dist/types/components/ohm/PageHeader/PageHeader.variants.d.ts +15 -0
- package/dist/types/components/ohm/PageHeader/index.d.ts +2 -0
- package/dist/types/components/ohm/PhotoGrid/PhotoGrid.d.ts +19 -0
- package/dist/types/components/ohm/PhotoGrid/PhotoGrid.fixture.d.ts +2 -0
- package/dist/types/components/ohm/PhotoGrid/PhotoGrid.variants.d.ts +5 -0
- package/dist/types/components/ohm/PhotoGrid/index.d.ts +2 -0
- package/dist/types/components/ohm/SearchFilterSection/SearchFilterSection.d.ts +20 -0
- package/dist/types/components/ohm/SearchFilterSection/SearchFilterSection.fixture.d.ts +1 -0
- package/dist/types/components/ohm/SearchFilterSection/SearchFilterSection.variants.d.ts +5 -0
- package/dist/types/components/ohm/SearchFilterSection/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/Table.d.ts +5 -0
- package/dist/types/{data → components/ohm/Table}/Table.fixture.d.ts +1 -1
- package/dist/types/components/ohm/Table/Table.types.d.ts +43 -0
- package/dist/types/components/ohm/Table/Table.variants.d.ts +23 -0
- package/dist/types/components/ohm/Table/TableAction/TableAction.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableAction/TableAction.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableAction/TableAction.variants.d.ts +22 -0
- package/dist/types/components/ohm/Table/TableAction/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableActions/TableActions.d.ts +11 -0
- package/dist/types/components/ohm/Table/TableActions/TableActions.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableActions/TableActions.variants.d.ts +28 -0
- package/dist/types/components/ohm/Table/TableActions/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableBody/TableBody.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableBody/TableBody.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableBody/TableBody.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableBody/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableCell/TableCell.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableCell/TableCell.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableCell/TableCell.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableCell/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableEmpty/TableEmpty.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableEmpty/TableEmpty.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableEmpty/TableEmpty.variants.d.ts +8 -0
- package/dist/types/components/ohm/Table/TableEmpty/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableError/TableError.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableError/TableError.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableError/TableError.variants.d.ts +8 -0
- package/dist/types/components/ohm/Table/TableError/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableExpand/TableExpand.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableExpand/TableExpand.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableExpand/TableExpand.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableExpand/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableFooter/TableFooter.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableFooter/TableFooter.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableFooter/TableFooter.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableFooter/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableHeader/TableHeader.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableHeader/TableHeader.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableHeader/TableHeader.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableHeader/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableHeaderCell/TableHeaderCell.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableHeaderCell/TableHeaderCell.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableHeaderCell/TableHeaderCell.variants.d.ts +15 -0
- package/dist/types/components/ohm/Table/TableHeaderCell/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableLoading/TableLoading.d.ts +5 -0
- package/dist/types/components/ohm/Table/TableLoading/TableLoading.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableLoading/TableLoading.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableLoading/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TablePagination/TablePagination.d.ts +6 -0
- package/dist/types/components/ohm/Table/TablePagination/TablePagination.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TablePagination/TablePagination.variants.d.ts +8 -0
- package/dist/types/components/ohm/Table/TablePagination/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableRow/TableRow.d.ts +8 -0
- package/dist/types/components/ohm/Table/TableRow/TableRow.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableRow/TableRow.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableRow/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableRowActions/TableRowActions.d.ts +6 -0
- package/dist/types/components/ohm/Table/TableRowActions/TableRowActions.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableRowActions/TableRowActions.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableRowActions/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableSelection/TableSelection.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableSelection/TableSelection.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableSelection/TableSelection.variants.d.ts +7 -0
- package/dist/types/components/ohm/Table/TableSelection/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableSort/TableSort.d.ts +8 -0
- package/dist/types/components/ohm/Table/TableSort/TableSort.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableSort/TableSort.variants.d.ts +8 -0
- package/dist/types/components/ohm/Table/TableSort/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableStructure/TableStructure.d.ts +11 -0
- package/dist/types/components/ohm/Table/TableStructure/TableStructure.fixture.d.ts +2 -0
- package/dist/types/components/ohm/Table/TableStructure/TableStructure.variants.d.ts +14 -0
- package/dist/types/components/ohm/Table/TableStructure/index.d.ts +2 -0
- package/dist/types/components/ohm/Table/index.d.ts +21 -0
- package/dist/types/components/overlays/FilterMenu/FilterMenu.d.ts +17 -0
- package/dist/types/components/overlays/FilterMenu/FilterMenu.fixture.d.ts +2 -0
- package/dist/types/components/overlays/FilterMenu/FilterMenu.variants.d.ts +9 -0
- package/dist/types/components/overlays/FilterMenu/index.d.ts +2 -0
- package/dist/types/components/primitives/Accordion/Accordion.d.ts +1 -0
- package/dist/types/components/primitives/Alert/Alert.d.ts +1 -0
- package/dist/types/components/primitives/Avatar/Avatar.d.ts +1 -0
- package/dist/types/components/primitives/Button/Button.types.d.ts +2 -0
- package/dist/types/components/primitives/Button/Button.variants.d.ts +34 -0
- package/dist/types/components/primitives/Carousel/Carousel.d.ts +1 -0
- package/dist/types/components/primitives/Combobox/Combobox.d.ts +1 -0
- package/dist/types/components/primitives/CommandPalette/CommandPalette.d.ts +1 -0
- package/dist/types/components/primitives/ContextMenu/ContextMenu.d.ts +1 -0
- package/dist/types/components/primitives/DatePicker/DatePicker.d.ts +1 -0
- package/dist/types/components/primitives/Drawer/Drawer.d.ts +5 -0
- package/dist/types/components/primitives/DropdownMenu/DropdownMenu.d.ts +1 -0
- package/dist/types/components/primitives/FileUpload/FileUpload.d.ts +1 -0
- package/dist/types/components/primitives/FormField/FormField.variants.d.ts +19 -0
- package/dist/types/components/primitives/Heading/Heading.d.ts +3 -0
- package/dist/types/components/primitives/Link/Link.d.ts +1 -0
- package/dist/types/components/primitives/Menubar/Menubar.d.ts +1 -0
- package/dist/types/components/primitives/MultiSelect/MultiSelect.d.ts +1 -0
- package/dist/types/components/primitives/NavigationMenu/NavigationMenu.d.ts +1 -0
- package/dist/types/components/primitives/Pagination/Pagination.d.ts +4 -0
- package/dist/types/components/primitives/Popover/Popover.d.ts +4 -0
- package/dist/types/components/primitives/Progress/Progress.d.ts +4 -0
- package/dist/types/components/primitives/ResizablePanel/ResizablePanel.d.ts +1 -0
- package/dist/types/components/primitives/SearchBar/SearchBar.d.ts +1 -0
- package/dist/types/components/primitives/Separator/Separator.d.ts +1 -0
- package/dist/types/components/primitives/Sidebar/Sidebar.d.ts +1 -0
- package/dist/types/components/primitives/Skeleton/Skeleton.d.ts +1 -0
- package/dist/types/components/primitives/Spinner/Spinner.d.ts +1 -0
- package/dist/types/components/primitives/Stepper/Stepper.d.ts +1 -0
- package/dist/types/components/primitives/Tabs/Tabs.d.ts +1 -0
- package/dist/types/components/primitives/Text/Text.d.ts +1 -0
- package/dist/types/components/primitives/Toast/Toast.d.ts +1 -0
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +2 -0
- package/dist/types/components/primitives/TreeView/TreeView.d.ts +1 -0
- package/dist/types/data/index.d.ts +0 -1
- package/dist/types/forms/FormActions.d.ts +2 -0
- package/dist/types/forms/FormField.d.ts +4 -0
- package/dist/types/forms/react-form.d.ts +6 -0
- package/dist/types/forms/react.d.ts +6 -1
- package/dist/types/generated/component-registry.d.ts +2913 -50
- package/dist/types/generated/public-exports.d.ts +92 -0
- package/dist/types/types/metadata.d.ts +23 -3
- package/package.json +3 -2
- package/dist/types/data/Table.d.ts +0 -13
- package/dist/types/data/resource-controller.test.d.ts +0 -1
- package/dist/types/theme/theme.test.d.ts +0 -1
- package/dist/types/tooling/discovery/discover.d.ts +0 -9
- package/dist/types/tooling/discovery/discover.test.d.ts +0 -1
- package/dist/types/tooling/discovery/generate-exports.d.ts +0 -6
- package/dist/types/tooling/discovery/generate-registry.d.ts +0 -6
- package/dist/types/tooling/discovery/generate-registry.test.d.ts +0 -1
- package/dist/types/tooling/discovery/generate.d.ts +0 -1
- package/dist/types/tooling/discovery/vite-plugin.d.ts +0 -8
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--fsc-color-surface: #ffffff;--fsc-color-surface-muted: #f7f7f7;--fsc-color-text: #171717;--fsc-color-text-muted: #737373;--fsc-color-border: #d4d4d4;--fsc-color-primary: #2563eb;--fsc-color-primary-contrast: #ffffff;--fsc-color-danger: #b91c1c;--fsc-color-danger-contrast: #ffffff;--fsc-state-focus-ring: #2563eb;--fsc-state-disabled-surface: #e5e5e5;--fsc-state-disabled-text: #737373;--fsc-state-disabled-opacity: .55;--fsc-state-error: #b91c1c;--fsc-state-error-contrast: #ffffff;--fsc-state-error-surface: #fef2f2;--fsc-state-success: #15803d;--fsc-state-success-contrast: #ffffff;--fsc-state-success-surface: #f0fdf4;--fsc-state-warning: #a16207;--fsc-state-warning-contrast: #ffffff;--fsc-state-warning-surface: #fffbeb;--fsc-space-2: .5rem;--fsc-space-3: .75rem;--fsc-space-4: 1rem;--fsc-space-6: 1.5rem;--fsc-radius-small: .25rem;--fsc-radius-medium: .5rem;--fsc-radius-large: .75rem;--fsc-font-size-xs: .75rem;--fsc-font-size-sm: .875rem;--fsc-font-size-md: 1rem;--fsc-font-size-lg: 1.125rem;--fsc-font-size-xl: 1.25rem;--fsc-font-size-2xl: 1.5rem;--fsc-font-weight-regular: 400;--fsc-font-weight-medium: 500;--fsc-font-weight-semibold: 600;--fsc-shadow-sm: 0 1px 2px rgb(0 0 0 / .08);--fsc-shadow-md: 0 4px 10px rgb(0 0 0 / .12);--fsc-shadow-lg: 0 12px 28px rgb(0 0 0 / .16)}.fsc-button,.fsc-input,.fsc-form-field input,.fsc-form-action,.fsc-crud-example button,.fsc-crud-example input{font:inherit}.fsc-button,.fsc-form-action,.fsc-crud-example button{min-height:2.25rem;padding:0 var(--fsc-space-3);border:1px solid transparent;border-radius:var(--fsc-radius-medium);font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,opacity .12s ease}.fsc-button[data-size=small]{min-height:2rem;padding-inline:var(--fsc-space-2);font-size:var(--fsc-font-size-xs)}.fsc-button[data-size=large]{min-height:2.75rem;padding-inline:var(--fsc-space-4);font-size:var(--fsc-font-size-md)}.fsc-button[data-variant=primary],.fsc-form-action[type=submit]{background:var(--fsc-color-primary);color:var(--fsc-color-primary-contrast);border-color:var(--fsc-color-primary)}.fsc-button[data-variant=secondary]{background:var(--fsc-color-surface);color:var(--fsc-color-text);border-color:var(--fsc-color-border)}.fsc-button[data-variant=ghost],.fsc-form-action[type=reset]{background:transparent;color:var(--fsc-color-text)}.fsc-button[data-loading=true]{cursor:progress}.fsc-button:disabled,.fsc-form-action:disabled,.fsc-crud-example button:disabled,.fsc-crud-example input:disabled,.fsc-input:disabled,.fsc-form-field input:disabled,select[data-size]:disabled,textarea[data-size]:disabled,input[type=checkbox][data-size]:disabled,input[type=radio][data-size]:disabled{background:var(--fsc-state-disabled-surface);color:var(--fsc-state-disabled-text);border-color:var(--fsc-color-border);opacity:var(--fsc-state-disabled-opacity);cursor:not-allowed}.fsc-input,.fsc-form-field input,select[data-size],textarea[data-size]{width:100%;min-height:2.5rem;padding:0 var(--fsc-space-3);background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium)}.fsc-input[data-size=small],.fsc-form-field[data-size=small] input,select[data-size=small],textarea[data-size=small]{min-height:2rem;padding-inline:var(--fsc-space-2);font-size:var(--fsc-font-size-sm)}.fsc-input[data-size=large],.fsc-form-field[data-size=large] input,select[data-size=large],textarea[data-size=large]{min-height:2.75rem;font-size:var(--fsc-font-size-lg)}.fsc-form-field{display:grid;gap:var(--fsc-space-2);color:var(--fsc-color-text)}.fsc-form-field>label{font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium)}.fsc-form-field>div[data-role=description]{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-form-field[data-invalid=true] input{border-color:var(--fsc-state-error);background:var(--fsc-state-error-surface)}.fsc-form-field>div[data-role=error]{color:var(--fsc-state-error);font-size:var(--fsc-font-size-sm)}.fsc-button:focus-visible,.fsc-input:focus-visible,.fsc-form-field input:focus-visible,.fsc-form-action:focus-visible,.fsc-crud-example button:focus-visible,.fsc-crud-example input:focus-visible,select[data-size]:focus-visible,textarea[data-size]:focus-visible,input[type=checkbox][data-size]:focus-visible,input[type=radio][data-size]:focus-visible{outline:2px solid var(--fsc-state-focus-ring);outline-offset:2px}.fsc-stat-card{min-width:14rem;padding:var(--fsc-space-4);display:grid;gap:var(--fsc-space-2);background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);box-shadow:var(--fsc-shadow-sm)}.fsc-stat-card [data-role=label],.fsc-stat-card [data-role=description]{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-stat-card [data-role=value]{font-size:var(--fsc-font-size-2xl);font-weight:var(--fsc-font-weight-semibold)}.fsc-stat-card[data-trend=up] [data-role=trend]{color:var(--fsc-state-success)}.fsc-stat-card[data-trend=down] [data-role=trend]{color:var(--fsc-state-error)}.fsc-stat-card[data-trend=neutral] [data-role=trend]{color:var(--fsc-state-warning)}.fsc-resource-table{width:100%;border-collapse:collapse;color:var(--fsc-color-text);background:var(--fsc-color-surface)}.fsc-resource-table th,.fsc-resource-table td{padding:var(--fsc-space-3) var(--fsc-space-4);border-bottom:1px solid var(--fsc-color-border);text-align:left}.fsc-resource-table th{background:var(--fsc-color-surface-muted);font-weight:var(--fsc-font-weight-semibold)}.fsc-crud-example{display:grid;gap:var(--fsc-space-6);width:100%;color:var(--fsc-color-text)}.fsc-crud-example__toolbar{display:flex;align-items:center;gap:var(--fsc-space-3);flex-wrap:wrap}.fsc-crud-example__editor{display:grid;gap:var(--fsc-space-3);max-width:26rem;padding:var(--fsc-space-4);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);box-shadow:var(--fsc-shadow-sm)}.fsc-crud-example__actions,.fsc-crud-example__row-action{display:flex;align-items:center;gap:var(--fsc-space-2)}.fsc-crud-example__field{display:grid;gap:var(--fsc-space-2)}.fsc-crud-example__field>span{font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium)}@media(prefers-reduced-motion:reduce){.fsc-button,.fsc-form-action{transition:none}}
|
|
1
|
+
:root{--fsc-color-surface: #ffffff;--fsc-color-surface-muted: #f7f7f7;--fsc-color-text: #171717;--fsc-color-text-muted: #737373;--fsc-color-border: #d4d4d4;--fsc-color-primary: #2563eb;--fsc-color-primary-contrast: #ffffff;--fsc-color-danger: #b91c1c;--fsc-color-danger-contrast: #ffffff;--fsc-state-focus-ring: #2563eb;--fsc-state-disabled-surface: #e5e5e5;--fsc-state-disabled-text: #737373;--fsc-state-disabled-opacity: .55;--fsc-state-error: #b91c1c;--fsc-state-error-contrast: #ffffff;--fsc-state-error-surface: #fef2f2;--fsc-state-success: #15803d;--fsc-state-success-contrast: #ffffff;--fsc-state-success-surface: #f0fdf4;--fsc-state-warning: #a16207;--fsc-state-warning-contrast: #ffffff;--fsc-state-warning-surface: #fffbeb;--fsc-space-2: .5rem;--fsc-space-3: .75rem;--fsc-space-4: 1rem;--fsc-space-6: 1.5rem;--fsc-radius-small: .25rem;--fsc-radius-medium: .5rem;--fsc-radius-large: .75rem;--fsc-font-size-xs: .75rem;--fsc-font-size-sm: .875rem;--fsc-font-size-md: 1rem;--fsc-font-size-lg: 1.125rem;--fsc-font-size-xl: 1.25rem;--fsc-font-size-2xl: 1.5rem;--fsc-font-weight-regular: 400;--fsc-font-weight-medium: 500;--fsc-font-weight-semibold: 600;--fsc-shadow-sm: 0 1px 2px rgb(0 0 0 / .08);--fsc-shadow-md: 0 4px 10px rgb(0 0 0 / .12);--fsc-shadow-lg: 0 12px 28px rgb(0 0 0 / .16)}.fsc-button,.fsc-input,.fsc-form-field input,.fsc-form-action,.fsc-crud-example button,.fsc-crud-example input{font:inherit}.fsc-button,.fsc-form-action,.fsc-crud-example button{min-height:2.25rem;padding:0 var(--fsc-space-3);border:1px solid transparent;border-radius:var(--fsc-radius-medium);font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,opacity .12s ease}.fsc-button[data-size=small]{min-height:2rem;padding-inline:var(--fsc-space-2);font-size:var(--fsc-font-size-xs)}.fsc-button[data-size=large]{min-height:2.75rem;padding-inline:var(--fsc-space-4);font-size:var(--fsc-font-size-md)}.fsc-button[data-variant=primary],.fsc-form-action[type=submit]{background:var(--fsc-color-primary);color:var(--fsc-color-primary-contrast);border-color:var(--fsc-color-primary)}.fsc-button[data-variant=secondary]{background:var(--fsc-color-surface);color:var(--fsc-color-text);border-color:var(--fsc-color-border)}.fsc-button[data-variant=ghost],.fsc-form-action[type=reset]{background:transparent;color:var(--fsc-color-text)}.fsc-button[data-loading=true]{cursor:progress}.fsc-button:disabled,.fsc-form-action:disabled,.fsc-crud-example button:disabled,.fsc-crud-example input:disabled,.fsc-input:disabled,.fsc-form-field input:disabled,select[data-size]:disabled,textarea[data-size]:disabled,input[type=checkbox][data-size]:disabled,input[type=radio][data-size]:disabled{background:var(--fsc-state-disabled-surface);color:var(--fsc-state-disabled-text);border-color:var(--fsc-color-border);opacity:var(--fsc-state-disabled-opacity);cursor:not-allowed}.fsc-input,.fsc-form-field input,select[data-size],textarea[data-size]{width:100%;min-height:2.5rem;padding:0 var(--fsc-space-3);background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium)}.fsc-input[data-size=small],.fsc-form-field[data-size=small] input,select[data-size=small],textarea[data-size=small]{min-height:2rem;padding-inline:var(--fsc-space-2);font-size:var(--fsc-font-size-sm)}.fsc-input[data-size=large],.fsc-form-field[data-size=large] input,select[data-size=large],textarea[data-size=large]{min-height:2.75rem;font-size:var(--fsc-font-size-lg)}.fsc-form-field{display:grid;gap:var(--fsc-space-2);color:var(--fsc-color-text)}.fsc-form-field>label{font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium)}.fsc-form-field>div[data-role=description]{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-form-field[data-invalid=true] input{border-color:var(--fsc-state-error);background:var(--fsc-state-error-surface)}.fsc-form-field>div[data-role=error]{color:var(--fsc-state-error);font-size:var(--fsc-font-size-sm)}.fsc-button:focus-visible,.fsc-input:focus-visible,.fsc-form-field input:focus-visible,.fsc-form-action:focus-visible,.fsc-crud-example button:focus-visible,.fsc-crud-example input:focus-visible,select[data-size]:focus-visible,textarea[data-size]:focus-visible,input[type=checkbox][data-size]:focus-visible,input[type=radio][data-size]:focus-visible{outline:2px solid var(--fsc-state-focus-ring);outline-offset:2px}.fsc-stat-card{min-width:14rem;padding:var(--fsc-space-4);display:grid;gap:var(--fsc-space-2);background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);box-shadow:var(--fsc-shadow-sm)}.fsc-stat-card [data-role=label],.fsc-stat-card [data-role=description]{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-stat-card [data-role=value]{font-size:var(--fsc-font-size-2xl);font-weight:var(--fsc-font-weight-semibold)}.fsc-stat-card[data-trend=up] [data-role=trend]{color:var(--fsc-state-success)}.fsc-stat-card[data-trend=down] [data-role=trend]{color:var(--fsc-state-error)}.fsc-stat-card[data-trend=neutral] [data-role=trend]{color:var(--fsc-state-warning)}.fsc-resource-table{width:100%;border-collapse:collapse;color:var(--fsc-color-text);background:var(--fsc-color-surface)}.fsc-resource-table th,.fsc-resource-table td{padding:var(--fsc-space-3) var(--fsc-space-4);border-bottom:1px solid var(--fsc-color-border);text-align:left}.fsc-resource-table th{background:var(--fsc-color-surface-muted);font-weight:var(--fsc-font-weight-semibold)}.fsc-crud-example{display:grid;gap:var(--fsc-space-6);width:100%;color:var(--fsc-color-text)}.fsc-crud-example__toolbar{display:flex;align-items:center;gap:var(--fsc-space-3);flex-wrap:wrap}.fsc-crud-example__editor{display:grid;gap:var(--fsc-space-3);max-width:26rem;padding:var(--fsc-space-4);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);box-shadow:var(--fsc-shadow-sm)}.fsc-crud-example__actions,.fsc-crud-example__row-action{display:flex;align-items:center;gap:var(--fsc-space-2)}.fsc-crud-example__field{display:grid;gap:var(--fsc-space-2)}.fsc-crud-example__field>span{font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium)}@media(prefers-reduced-motion:reduce){.fsc-button,.fsc-form-action{transition:none}}.fsc-select-filter{display:grid;gap:.25rem;min-width:9rem}.fsc-select-filter__label,.fsc-multi-select-filter__label{font-size:var(--fsc-font-size-xs);font-weight:var(--fsc-font-weight-medium);color:var(--fsc-color-text-muted)}.fsc-select-filter select{width:100%;min-height:2.25rem;padding:0 2rem 0 .75rem;background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);font:inherit}.fsc-multi-select-filter{display:grid;gap:.625rem;margin:0;padding:0;border:0;min-inline-size:0}.fsc-multi-select-filter__options{display:grid;gap:.5rem}.fsc-multi-select-filter__option{display:flex;align-items:center;gap:.625rem;min-height:2rem;color:var(--fsc-color-text);font-size:var(--fsc-font-size-sm);cursor:pointer}.fsc-multi-select-filter__option input{margin:0}.fsc-filter-menu{position:relative}.fsc-filter-menu__trigger{width:100%;min-height:2.25rem;padding:0 .75rem;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);color:var(--fsc-color-text);font:inherit;font-size:var(--fsc-font-size-sm);cursor:pointer}.fsc-filter-menu__trigger:hover{background:var(--fsc-color-surface-muted)}.fsc-filter-menu__trigger:focus-visible{outline:2px solid var(--fsc-state-focus-ring);outline-offset:2px}.fsc-filter-menu__popup{position:absolute;top:calc(100% + .5rem);right:0;z-index:50;min-width:16rem;max-width:min(24rem,calc(100vw - 2rem));padding:1rem;background:var(--fsc-color-surface);color:var(--fsc-color-text);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);box-shadow:var(--fsc-shadow-md)}.fsc-filter-menu>span:focus-visible{outline:2px solid var(--fsc-state-focus-ring);outline-offset:2px}.fsc-results-count{display:inline-flex;align-items:center;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm);white-space:nowrap}.fsc-ohm-navbar__anchor{position:relative;width:100%;min-width:0}.fsc-ohm-navbar{position:fixed;top:0;left:0;z-index:20;display:flex;flex-direction:column;width:var(--fsc-navbar-expanded-width);height:100dvh;min-height:0;background:var(--fsc-color-surface);color:var(--fsc-color-text);border-right:1px solid var(--fsc-color-border);box-sizing:border-box}.fsc-ohm-navbar__header{display:flex;align-items:center;gap:.5rem;min-height:3.5rem;padding:.75rem 1rem;border-bottom:1px solid var(--fsc-color-border);box-sizing:border-box}.fsc-ohm-navbar__brand{display:flex;align-items:center;gap:.625rem;min-width:0;flex:1;color:inherit;text-decoration:none}.fsc-ohm-navbar__brand-logo{display:grid;place-items:center;width:2rem;height:2rem;flex:0 0 2rem}.fsc-ohm-navbar__brand-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fsc-ohm-navbar__toggle{display:grid;place-items:center;width:2.25rem;height:2.25rem;flex:0 0 2.25rem;padding:0;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:transparent;color:inherit;cursor:pointer}.fsc-ohm-navbar__main{display:flex;flex:1;min-height:0;flex-direction:column;overflow:auto;padding:.75rem}.fsc-ohm-navbar__section{display:grid;gap:.375rem;margin-bottom:1rem}.fsc-ohm-navbar__section-name{display:flex;align-items:center;gap:.5rem;min-height:2rem;padding:0 .5rem;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-xs);font-weight:var(--fsc-font-weight-semibold);text-transform:uppercase;letter-spacing:.04em}.fsc-ohm-navbar__section-items{display:grid;gap:.125rem}.fsc-ohm-navbar__item{display:flex;align-items:center;gap:.75rem;min-width:0;min-height:2.5rem;padding:.5rem .75rem;border-radius:var(--fsc-radius-medium);color:inherit;text-decoration:none;box-sizing:border-box}.fsc-ohm-navbar__item-icon{display:grid;place-items:center;width:1.25rem;height:1.25rem;flex:0 0 1.25rem;line-height:1}.fsc-ohm-navbar__item-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fsc-ohm-navbar__item:hover{background:var(--fsc-color-surface-muted)}.fsc-ohm-navbar__item[data-active=true]{background:var(--fsc-color-surface-muted);font-weight:var(--fsc-font-weight-semibold)}.fsc-ohm-navbar__item[data-disabled=true]{opacity:var(--fsc-state-disabled-opacity);cursor:not-allowed}.fsc-ohm-navbar__section[data-disabled=true]{opacity:.65}.fsc-ohm-navbar__footer{margin-top:auto;padding:.75rem;border-top:1px solid var(--fsc-color-border)}.fsc-ohm-navbar__profile{display:flex;align-items:center;gap:.5rem}.fsc-ohm-navbar__profile>a,.fsc-ohm-navbar__profile>button{display:flex;align-items:center;gap:.5rem;min-height:2.25rem;border:0;background:transparent;color:inherit;text-decoration:none}.fsc-ohm-navbar__profile>a:first-child{flex:1;min-width:0}.fsc-ohm-navbar__profile-picture{display:grid;place-items:center;width:2rem;height:2rem;flex:0 0 2rem;border-radius:50%;object-fit:cover;background:var(--fsc-color-surface-muted);overflow:hidden}.fsc-ohm-navbar__profile--collapsed{position:relative;justify-content:center}.fsc-ohm-navbar__profile-popup{position:absolute;left:calc(100% + .5rem);bottom:0;z-index:40;display:grid;min-width:10rem;padding:.375rem;background:var(--fsc-color-surface);border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);box-shadow:var(--fsc-shadow-md)}.fsc-ohm-navbar__profile-popup a,.fsc-ohm-navbar__profile-popup button{padding:.625rem .75rem;border:0;background:transparent;color:inherit;text-align:left;text-decoration:none;border-radius:var(--fsc-radius-small);font:inherit}.fsc-ohm-navbar__profile-popup a:hover,.fsc-ohm-navbar__profile-popup button:hover{background:var(--fsc-color-surface-muted)}.fsc-ohm-navbar__backdrop{position:fixed;inset:0;z-index:10;border:0;background:#00000059}.fsc-ohm-main{margin-left:var(--fsc-navbar-current-width, 280px);min-width:0;min-height:100dvh;overflow:auto;box-sizing:border-box}.fsc-ohm-navbar[data-collapsed=true]{width:var(--fsc-navbar-collapsed-width)}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__header{gap:.25rem;padding:.5rem}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__brand{flex:0 0 2rem}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__brand-name,.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__section-name,.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__item-name,.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__profile>a:first-child>span:not(.fsc-ohm-navbar__profile-picture){display:none}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__item{justify-content:center;padding-inline:.5rem}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__section-name{visibility:hidden}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__section-name span:first-child{display:none}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__footer{padding:.5rem}.fsc-ohm-navbar[data-collapsed=true] .fsc-ohm-navbar__profile{justify-content:center}.fsc-ohm-navbar[data-mobile=true]{position:fixed;top:0;left:0;width:var(--fsc-navbar-mobile-width);height:auto;max-height:100dvh;min-height:0;border-right:0;border-bottom:1px solid var(--fsc-color-border)}.fsc-ohm-navbar[data-mobile=true] .fsc-ohm-navbar__header{height:3.5rem}.fsc-ohm-navbar[data-mobile=true] .fsc-ohm-navbar__main{display:none;max-height:calc(100dvh - 3.5rem);overflow:auto}.fsc-ohm-navbar[data-mobile=true][data-open=true] .fsc-ohm-navbar__main{display:flex}.fsc-ohm-navbar[data-mobile=true][data-open=true] .fsc-ohm-navbar__footer{display:block}.fsc-ohm-navbar[data-mobile=true]:not([data-open=true]) .fsc-ohm-navbar__footer{display:none}.fsc-ohm-navbar[data-mobile=true] .fsc-ohm-navbar__footer{margin-top:0}.fsc-ohm-navbar[data-mobile=true] .fsc-ohm-navbar__brand-name{display:inline}@media(prefers-reduced-motion:no-preference){.fsc-ohm-navbar[data-mobile=true][data-open=true] .fsc-ohm-navbar__main{animation:fsc-ohm-navbar-slide .16s ease-out}}@media(prefers-reduced-motion:reduce){.fsc-ohm-navbar[data-mobile=true][data-open=true] .fsc-ohm-navbar__main{animation:none}}@keyframes fsc-ohm-navbar-slide{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fsc-ohm-page-header{container-type:inline-size;container-name:fsc-ohm-page-header;display:grid;width:100%;box-sizing:border-box;gap:.75rem;padding:1.5rem 0}.fsc-ohm-page-header__navigation{display:flex;align-items:center;gap:.75rem;width:100%;min-width:0;box-sizing:border-box;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-ohm-page-header__breadcrumb{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fsc-ohm-page-header__main{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;width:100%;min-width:0;box-sizing:border-box}.fsc-ohm-page-header__content{min-width:0;flex:1 1 auto}.fsc-ohm-page-header__title{margin:0;color:var(--fsc-color-text);font-size:var(--fsc-font-size-2xl);font-weight:var(--fsc-font-weight-semibold);line-height:1.2}.fsc-ohm-page-header__description{margin-top:.375rem;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm);line-height:1.5}.fsc-ohm-page-header__actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex:0 0 auto;flex-wrap:wrap}@container fsc-ohm-page-header (max-width:640px){.fsc-ohm-page-header{padding:1rem 0}.fsc-ohm-page-header__main{flex-direction:column;gap:1rem}.fsc-ohm-page-header__content{width:100%;flex:0 0 auto}.fsc-ohm-page-header__title,.fsc-ohm-page-header__description{width:100%}.fsc-ohm-page-header__actions{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;gap:.5rem;flex-wrap:wrap}.fsc-ohm-page-header__actions>*{flex:0 1 auto;max-width:none}}.fsc-ohm-action-bar{container-type:inline-size;container-name:fsc-ohm-action-bar;display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;min-width:0;padding:.75rem 0;box-sizing:border-box}.fsc-ohm-action-bar__controls,.fsc-ohm-action-bar__meta{display:flex;align-items:center;gap:.5rem;min-width:0}.fsc-ohm-action-bar__controls{flex:1 1 auto}.fsc-ohm-action-bar__leading,.fsc-ohm-action-bar__search,.fsc-ohm-action-bar__filters,.fsc-ohm-action-bar__results,.fsc-ohm-action-bar__actions{display:flex;align-items:center;gap:.5rem;min-width:0}.fsc-ohm-action-bar__search{flex:1 1 20rem}.fsc-ohm-action-bar__search>*{width:100%;min-width:0}.fsc-ohm-action-bar__filters,.fsc-ohm-action-bar__actions{flex:0 0 auto;flex-wrap:wrap}.fsc-ohm-action-bar__results{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm);white-space:nowrap}.fsc-ohm-action-bar__actions{justify-content:flex-end}@container fsc-ohm-action-bar (max-width:640px){.fsc-ohm-action-bar{gap:.5rem}.fsc-ohm-action-bar__controls{display:flex;flex-direction:column;align-items:stretch;width:100%;max-width:none;flex:0 0 auto;gap:.5rem}.fsc-ohm-action-bar__leading{order:-1}.fsc-ohm-action-bar__search{width:100%;flex:0 0 auto}.fsc-ohm-action-bar__search>*{width:100%}.fsc-ohm-action-bar__filters{width:100%;display:flex;flex-direction:row;align-items:center;gap:.5rem;overflow:visible}.fsc-ohm-action-bar__filters>*{flex:1 1 0;min-width:0;max-width:none}.fsc-ohm-action-bar__meta{width:100%;display:flex;align-items:flex-start;flex-direction:column;gap:.5rem}.fsc-ohm-action-bar__results{width:100%}.fsc-ohm-action-bar__actions{width:100%;justify-content:flex-start}.fsc-ohm-action-bar__actions>*{flex:1 1 auto}}.fsc-ohm-table__container{width:100%;min-width:0;overflow-x:auto}.fsc-ohm-table{width:100%;min-width:0;table-layout:fixed;border-collapse:collapse;color:var(--fsc-color-text);font-size:var(--fsc-font-size-sm);background:var(--fsc-color-surface)}.fsc-ohm-table th,.fsc-ohm-table td{padding:.75rem 1rem;border-bottom:1px solid var(--fsc-color-border);text-align:left;vertical-align:middle;overflow:hidden}.fsc-ohm-table th{font-weight:var(--fsc-font-weight-semibold);white-space:nowrap}.fsc-ohm-table td{white-space:nowrap;text-overflow:ellipsis}.fsc-ohm-table th:first-child,.fsc-ohm-table td:first-child{min-width:0}.fsc-ohm-table__caption{padding:0 0 .75rem;text-align:left;font-size:var(--fsc-font-size-lg);font-weight:var(--fsc-font-weight-semibold)}.fsc-ohm-table__row[data-selected=true]{background:var(--fsc-color-surface-muted)}.fsc-ohm-table__row[data-clickable=true]{cursor:pointer}.fsc-ohm-table__row[data-clickable=true]:hover{background:var(--fsc-color-surface-muted)}.fsc-ohm-table__row[data-clickable=true]:focus-visible{outline:2px solid var(--fsc-color-primary);outline-offset:-2px}.fsc-ohm-table__sort{display:flex;align-items:center;width:100%;min-width:0;gap:.4rem;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;text-align:left}.fsc-ohm-table__sort-label{min-width:0;overflow:hidden;text-overflow:ellipsis}.fsc-ohm-table__sort-icon{display:inline-grid;place-items:center;flex:0 0 1rem;width:1rem;height:1rem}.fsc-ohm-table__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:.375rem}.fsc-ohm-table__icon-button{display:inline-grid;place-items:center;width:1.75rem;height:1.75rem;padding:0;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-small);background:transparent;color:inherit;cursor:pointer}.fsc-ohm-table__icon-button:hover{background:var(--fsc-color-surface-muted)}.fsc-ohm-table__state-row td{text-align:center;color:var(--fsc-color-text-muted);padding:2rem 1rem}.fsc-ohm-table__state-row--error td{color:var(--fsc-color-danger,#b42318)}.fsc-ohm-table__skeleton{display:block;width:100%;height:1rem;border-radius:var(--fsc-radius-small);background:var(--fsc-color-surface-muted)}.fsc-ohm-table__pagination{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;padding:.75rem 0;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-ohm-table__pagination button{min-height:2rem;padding:.375rem .625rem;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-small);background:var(--fsc-color-surface);color:inherit}.fsc-ohm-table__actions{display:inline-flex;align-items:center;justify-content:flex-start;gap:.25rem;white-space:nowrap;width:max-content;max-width:100%}.fsc-ohm-table__action{display:inline-grid;place-items:center;flex:0 0 2rem;width:2rem;height:2rem;padding:0;border:0;border-radius:var(--fsc-radius-small);background:transparent;color:inherit;cursor:pointer}.fsc-ohm-table__action:hover{background:var(--fsc-color-surface-muted)}.fsc-ohm-table__action:focus-visible{outline:2px solid var(--fsc-color-primary);outline-offset:2px}.fsc-ohm-data-field{display:grid;gap:4px;min-width:0}.fsc-ohm-data-field__label{color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-xs);font-weight:var(--fsc-font-weight-medium);line-height:1.4}.fsc-ohm-data-field__value,.fsc-ohm-data-field__control{min-width:0;min-height:2.25rem;box-sizing:border-box;font-size:var(--fsc-font-size-sm);line-height:1.4}.fsc-ohm-data-field__value{display:flex;align-items:center;min-height:2.25rem;color:var(--fsc-color-text)}.fsc-ohm-data-field__empty{color:var(--fsc-color-text-muted)}.fsc-ohm-data-field__control input,.fsc-ohm-data-field__control select,.fsc-ohm-data-field__control textarea{width:100%;box-sizing:border-box;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);color:var(--fsc-color-text);font:inherit;padding:.5rem .625rem}.fsc-ohm-data-field__control textarea{min-height:5rem;resize:vertical}.fsc-ohm-data-field__control input:focus-visible,.fsc-ohm-data-field__control select:focus-visible,.fsc-ohm-data-field__control textarea:focus-visible{outline:2px solid currentColor;outline-offset:1px}.fsc-ohm-data-field__select-search{position:relative;width:100%}.fsc-ohm-data-field__select-search-trigger{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;min-height:2.25rem;padding:.5rem .625rem;box-sizing:border-box;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);color:var(--fsc-color-text);font:inherit;text-align:left;cursor:pointer}.fsc-ohm-data-field__select-search-trigger:focus-visible{outline:2px solid currentColor;outline-offset:1px}.fsc-ohm-data-field__select-search-trigger:disabled{opacity:var(--fsc-state-disabled-opacity);cursor:not-allowed}.fsc-ohm-data-field__select-search-value,.fsc-ohm-data-field__select-search-placeholder{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fsc-ohm-data-field__select-search-placeholder{color:var(--fsc-color-text-muted)}.fsc-ohm-data-field__select-search-chevron{width:7px;height:7px;flex:0 0 7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);margin-top:-4px}.fsc-ohm-data-field__select-search:has(.fsc-ohm-data-field__select-search-dropdown) .fsc-ohm-data-field__select-search-chevron{transform:rotate(225deg);margin-top:4px}.fsc-ohm-data-field__select-search-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:30;display:grid;gap:4px;width:100%;max-height:20rem;padding:.375rem;box-sizing:border-box;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface);box-shadow:var(--fsc-shadow-md)}.fsc-ohm-data-field__select-search-input{padding:.125rem .5rem;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-small)}.fsc-ohm-data-field__select-search-input input{width:100%;min-width:0;padding:.375rem 0;border:0;outline:0;background:transparent;color:var(--fsc-color-text);font:inherit}.fsc-ohm-data-field__select-search-options{max-height:15rem;overflow:auto}.fsc-ohm-data-field__select-search-option{display:block;width:100%;min-height:2.25rem;padding:.5rem .625rem;border:0;border-radius:var(--fsc-radius-small);background:transparent;color:var(--fsc-color-text);font:inherit;text-align:left;cursor:pointer}.fsc-ohm-data-field__select-search-option:hover,.fsc-ohm-data-field__select-search-option[aria-pressed=true]{background:var(--fsc-color-surface-muted)}.fsc-ohm-data-field__select-search-option--add{font-weight:var(--fsc-font-weight-medium);border-bottom:1px solid var(--fsc-color-border);border-radius:0;margin-bottom:.25rem}.fsc-ohm-data-field__select-search-empty{padding:.625rem;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-sm)}.fsc-ohm-document-list{width:100%;min-width:0}.fsc-ohm-document-list__items{display:grid;gap:8px}.fsc-ohm-document-list__item{display:grid;grid-template-columns:56px minmax(0,1fr) auto;align-items:center;gap:12px;min-width:0;padding:8px;box-sizing:border-box;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface)}.fsc-ohm-document-list__preview{display:flex;align-items:center;justify-content:center;width:56px;height:68px;padding:0;overflow:hidden;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-small);background:var(--fsc-color-surface-muted);color:var(--fsc-color-text);cursor:pointer}.fsc-ohm-document-list__preview:disabled{cursor:default}.fsc-ohm-document-list__preview:not(:disabled):hover{border-color:var(--fsc-color-text-muted)}.fsc-ohm-document-list__preview img{display:block;width:100%;height:100%;object-fit:cover}.fsc-ohm-document-list__preview-sheet{display:grid;align-content:center;gap:5px;width:34px;height:48px;padding:7px 5px;box-sizing:border-box;border:1px solid var(--fsc-color-border);border-radius:2px;background:var(--fsc-color-surface)}.fsc-ohm-document-list__preview-sheet span{display:block;height:3px;border-radius:2px;background:var(--fsc-color-border)}.fsc-ohm-document-list__preview-sheet span:first-child{width:70%;background:var(--fsc-color-text-muted)}.fsc-ohm-document-list__info{min-width:0}.fsc-ohm-document-list__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fsc-font-size-sm);font-weight:var(--fsc-font-weight-medium);color:var(--fsc-color-text)}.fsc-ohm-document-list__meta{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:4px;color:var(--fsc-color-text-muted);font-size:var(--fsc-font-size-xs)}.fsc-ohm-document-list__actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:4px}.fsc-ohm-document-list__action{min-height:32px;padding:0 8px;border:0;border-radius:var(--fsc-radius-small);background:transparent;color:var(--fsc-color-text);font:inherit;font-size:var(--fsc-font-size-xs);cursor:pointer}.fsc-ohm-document-list__action:hover:not(:disabled){background:var(--fsc-color-surface-muted)}.fsc-ohm-document-list__action:focus-visible,.fsc-ohm-document-list__preview:focus-visible{outline:2px solid currentColor;outline-offset:2px}.fsc-ohm-document-list__action:disabled{display:none}.fsc-ohm-document-list__action--danger{color:var(--fsc-color-text)}.fsc-ohm-document-list__empty{padding:20px;border:1px dashed var(--fsc-color-border);border-radius:var(--fsc-radius-medium);color:var(--fsc-color-text-muted);text-align:center;font-size:var(--fsc-font-size-sm)}@media(max-width:700px){.fsc-ohm-document-list__item{grid-template-columns:48px minmax(0,1fr)}.fsc-ohm-document-list__preview{width:48px;height:60px}.fsc-ohm-document-list__actions{grid-column:1 / -1;justify-content:flex-start;padding-left:60px}}.fsc-ohm-entity-card{display:flex;flex-direction:column;width:100%;box-sizing:border-box;border:1px solid var(--fsc-color-border, #d4d4d8);border-radius:var(--fsc-radius-lg, 12px);background:var(--fsc-color-surface, #ffffff);color:var(--fsc-color-foreground, #18181b);overflow:hidden}.fsc-ohm-entity-card__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px}.fsc-ohm-entity-card__heading{display:flex;flex-direction:column;min-width:0;gap:1px}.fsc-ohm-entity-card__title{min-width:0;margin:0;font-size:15px;line-height:20px;font-weight:600}.fsc-ohm-entity-card__description{margin:0;color:var(--fsc-color-muted-foreground, #71717a);font-size:12px;line-height:16px}.fsc-ohm-entity-card__toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:28px;height:28px;padding:0;border:0;border-radius:var(--fsc-radius-sm, 6px);background:transparent;color:inherit;font:inherit;line-height:1;cursor:pointer}.fsc-ohm-entity-card__chevron{width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;display:block}.fsc-ohm-entity-card__chevron--up{transform:rotate(225deg);margin-top:4px}.fsc-ohm-entity-card__chevron--down{transform:rotate(45deg);margin-top:-4px}.fsc-ohm-entity-card__toggle:hover{background:var(--fsc-color-muted, #f4f4f5)}.fsc-ohm-entity-card__toggle:focus-visible{outline:2px solid currentColor;outline-offset:2px}.fsc-ohm-entity-card__content{min-width:0;padding:12px;border-top:1px solid var(--fsc-color-border, #d4d4d8)}@media(max-width:700px){.fsc-ohm-entity-card__header{gap:8px}}.fsc-ohm-photo-grid{width:100%;min-width:0}.fsc-ohm-photo-grid__items{display:grid;grid-template-columns:repeat(var(--fsc-ohm-photo-grid-columns,4),minmax(0,1fr));gap:8px}.fsc-ohm-photo-grid__item{min-width:0;overflow:hidden;border:1px solid var(--fsc-color-border);border-radius:var(--fsc-radius-medium);background:var(--fsc-color-surface)}.fsc-ohm-photo-grid__media{position:relative;aspect-ratio:4/3;overflow:hidden}.fsc-ohm-photo-grid__preview{display:block;width:100%;height:100%;padding:0;overflow:hidden;border:0;background:var(--fsc-color-surface-muted);cursor:pointer}.fsc-ohm-photo-grid__preview img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .12s ease}.fsc-ohm-photo-grid__media:hover .fsc-ohm-photo-grid__preview img{transform:scale(1.02)}.fsc-ohm-photo-grid__overlay{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:space-between;padding:8px;box-sizing:border-box;background:#0000004d;opacity:0;pointer-events:none;transition:opacity .12s ease}.fsc-ohm-photo-grid__media:hover .fsc-ohm-photo-grid__overlay,.fsc-ohm-photo-grid__media:focus-within .fsc-ohm-photo-grid__overlay{opacity:1;pointer-events:auto}.fsc-ohm-photo-grid__overlay-left,.fsc-ohm-photo-grid__overlay-right{display:flex;align-items:center;gap:4px}.fsc-ohm-photo-grid__overlay-action{min-height:32px;padding:0 9px;border:0;border-radius:var(--fsc-radius-small);background:#ffffffeb;color:#18181b;font:inherit;font-size:var(--fsc-font-size-xs);cursor:pointer}.fsc-ohm-photo-grid__overlay-action:hover{background:#fff}.fsc-ohm-photo-grid__overlay-action:focus-visible{outline:2px solid #fff;outline-offset:2px}.fsc-ohm-photo-grid__preview:focus-visible{outline:2px solid currentColor;outline-offset:-2px}.fsc-ohm-photo-grid__footer{display:flex;align-items:center;min-width:0;padding:7px 8px}.fsc-ohm-photo-grid__title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fsc-font-size-xs);color:var(--fsc-color-text)}.fsc-ohm-photo-grid__empty{padding:20px;border:1px dashed var(--fsc-color-border);border-radius:var(--fsc-radius-medium);color:var(--fsc-color-text-muted);text-align:center;font-size:var(--fsc-font-size-sm)}@media(max-width:900px){.fsc-ohm-photo-grid__items{grid-template-columns:repeat(min(3,var(--fsc-ohm-photo-grid-columns,4)),minmax(0,1fr))}}@media(max-width:600px){.fsc-ohm-photo-grid__items{grid-template-columns:repeat(min(2,var(--fsc-ohm-photo-grid-columns,4)),minmax(0,1fr))}}.ohm-search-filter-section{display:flex;min-width:0;align-items:flex-end;justify-content:space-between;gap:var(--spacing-md);margin-bottom:var(--spacing-lg);padding:var(--spacing-md);border:1px solid var(--border);border-radius:var(--radius-xl);background:var(--card);box-shadow:var(--shadow-sm)}.ohm-search-filter-section__controls,.ohm-search-filter-section__actions{display:flex;min-width:0;align-items:flex-end;gap:var(--spacing-sm)}.ohm-search-filter-section__controls{flex:1 1 auto;flex-wrap:wrap}.ohm-search-filter-section__search{flex:1 1 280px;min-width:min(100%,280px)}.ohm-search-filter-section__filters{display:flex;flex:0 1 auto;min-width:0;flex-wrap:wrap;align-items:flex-end;gap:var(--spacing-sm)}.ohm-search-filter-section__actions{flex:0 0 auto}@media(max-width:700px){.ohm-search-filter-section{align-items:stretch;flex-direction:column}.ohm-search-filter-section__controls,.ohm-search-filter-section__actions,.ohm-search-filter-section__search,.ohm-search-filter-section__filters{width:100%;min-width:0}.ohm-search-filter-section__search>*,.ohm-search-filter-section__filters>*{min-width:0}.ohm-search-filter-section__actions{justify-content:flex-end}}
|
|
@@ -4,4 +4,5 @@ export interface GridProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
4
4
|
columns?: number | string;
|
|
5
5
|
gap?: number | string;
|
|
6
6
|
}
|
|
7
|
+
/** Responsive CSS grid layout container. */
|
|
7
8
|
export declare function Grid({ children, columns, gap, ...props }: GridProps): import("react").JSX.Element;
|
|
@@ -4,4 +4,5 @@ export interface StackProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
4
4
|
direction?: "row" | "column";
|
|
5
5
|
gap?: number | string;
|
|
6
6
|
}
|
|
7
|
+
/** Flexbox stack container for arranging children in a row or column. */
|
|
7
8
|
export declare function Stack({ children, direction, gap, ...props }: StackProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export interface CrudExampleProps {
|
|
2
2
|
onEvent?: (event: "create" | "update" | "delete" | "error") => void;
|
|
3
3
|
}
|
|
4
|
+
/** Interactive CRUD example combining a resource table with a form editor. */
|
|
4
5
|
export declare function CrudExample({ onEvent }?: CrudExampleProps): import("react").JSX.Element;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { ReactNode, TableHTMLAttributes } from "react";
|
|
2
2
|
import type { CreateTableOptions } from "../../../data/table-controller.js";
|
|
3
|
-
import type { DataRecord, TableColumn } from "../../../data/types.js";
|
|
3
|
+
import type { DataRecord, TableColumn as ResourceTableColumn } from "../../../data/types.js";
|
|
4
4
|
export interface ResourceTableProps<TData extends DataRecord = DataRecord> extends Omit<TableHTMLAttributes<HTMLTableElement>, "children" | "resource"> {
|
|
5
5
|
resource: CreateTableOptions<TData>["resource"];
|
|
6
|
-
columns?:
|
|
6
|
+
columns?: ResourceTableColumn<TData>[];
|
|
7
7
|
pageSize?: number;
|
|
8
8
|
emptyState?: ReactNode;
|
|
9
9
|
/** Changes to this value trigger a reload of the current table query. */
|
|
10
10
|
reloadKey?: string | number;
|
|
11
11
|
}
|
|
12
|
+
/** Data-driven table connected to a resource controller with loading and empty states. */
|
|
12
13
|
export declare function ResourceTable<TData extends DataRecord>({ resource, columns, pageSize, emptyState, reloadKey, className, ...tableProps }: ResourceTableProps<TData>): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface ResultsCountProps extends HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
/** Number of results represented by the current view. */
|
|
4
|
+
count: number;
|
|
5
|
+
/** Singular label used when exactly one result is present. */
|
|
6
|
+
singularLabel?: ReactNode;
|
|
7
|
+
/** Plural label used for all other counts. */
|
|
8
|
+
pluralLabel?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/** Compact result-count metadata for list and search views. */
|
|
11
|
+
export declare function ResultsCount({ count, singularLabel, pluralLabel, className, ...props }: ResultsCountProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native color input for selecting a CSS color value. */
|
|
2
3
|
export interface ColorInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
4
|
+
/** Current color value.
|
|
5
|
+
* @control color
|
|
6
|
+
* @pattern ^#[0-9A-Fa-f]{6}$
|
|
7
|
+
*/
|
|
3
8
|
value?: string;
|
|
4
9
|
}
|
|
10
|
+
/** Native color input for selecting a CSS color value. */
|
|
5
11
|
export declare function ColorInput(props: ColorInputProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native date input for calendar date values. */
|
|
2
3
|
export interface DateInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
4
|
+
/** Current date in the browser's date input format.
|
|
5
|
+
* @control date
|
|
6
|
+
*/
|
|
3
7
|
value?: string;
|
|
8
|
+
/** Earliest selectable date. */
|
|
9
|
+
min?: string;
|
|
10
|
+
/** Latest selectable date. */
|
|
11
|
+
max?: string;
|
|
4
12
|
}
|
|
13
|
+
/** DateInput component. */
|
|
5
14
|
export declare function DateInput(props: DateInputProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native file input for selecting local files. */
|
|
2
3
|
export interface FileInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
4
|
+
/** File types accepted by the browser file picker. */
|
|
5
|
+
accept?: string;
|
|
6
|
+
/** Allows selecting more than one file. */
|
|
7
|
+
multiple?: boolean;
|
|
3
8
|
}
|
|
9
|
+
/** FileInput component. */
|
|
4
10
|
export declare function FileInput(props: FileInputProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface MultiSelectFilterOption {
|
|
3
|
+
/** Stable value used by the filter. */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Visible option label. */
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
/** Disables this option. */
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface MultiSelectFilterProps {
|
|
11
|
+
/** Visible filter label. */
|
|
12
|
+
label?: string;
|
|
13
|
+
/** Available checkbox options. */
|
|
14
|
+
options: MultiSelectFilterOption[];
|
|
15
|
+
/** Currently selected values. */
|
|
16
|
+
value?: string[];
|
|
17
|
+
/** Called when the selected values change. */
|
|
18
|
+
onValueChange?: (value: string[]) => void;
|
|
19
|
+
/** Disables the entire filter. */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Generic multi-value checkbox filter. */
|
|
23
|
+
export declare function MultiSelectFilter({ label, options, value, onValueChange, disabled, }: MultiSelectFilterProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native numeric input with browser validation and keyboard controls. */
|
|
2
3
|
export interface NumberInputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
4
|
+
/** Minimum allowed numeric value. */
|
|
5
|
+
min?: number;
|
|
6
|
+
/** Maximum allowed numeric value. */
|
|
7
|
+
max?: number;
|
|
8
|
+
/** Numeric increment used by browser controls. */
|
|
9
|
+
step?: number;
|
|
3
10
|
}
|
|
11
|
+
/** NumberInput component. */
|
|
4
12
|
export declare function NumberInput(props: NumberInputProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native password input that masks sensitive text. */
|
|
2
3
|
export interface PasswordInputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
4
|
+
/** Maximum password length accepted by the input. */
|
|
5
|
+
maxLength?: number;
|
|
6
|
+
/** Minimum password length accepted by the input. */
|
|
7
|
+
minLength?: number;
|
|
3
8
|
}
|
|
9
|
+
/** PasswordInput component. */
|
|
4
10
|
export declare function PasswordInput(props: PasswordInputProps): import("react").JSX.Element;
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
export interface RadioOption {
|
|
3
|
+
/** Value submitted for this option. */
|
|
3
4
|
value: string;
|
|
5
|
+
/** Visible option label. */
|
|
4
6
|
label: ReactNode;
|
|
7
|
+
/** Disables this option. */
|
|
5
8
|
disabled?: boolean;
|
|
6
9
|
}
|
|
7
10
|
export interface RadioGroupProps {
|
|
11
|
+
/** Shared name for the radio inputs. */
|
|
8
12
|
name: string;
|
|
13
|
+
/** Available radio options. */
|
|
9
14
|
options: RadioOption[];
|
|
15
|
+
/** Currently selected option value. */
|
|
10
16
|
value?: string;
|
|
17
|
+
/** Called when the selected option changes. */
|
|
11
18
|
onValueChange?: (value: string) => void;
|
|
12
19
|
}
|
|
20
|
+
/** Group of mutually exclusive radio options. */
|
|
13
21
|
export declare function RadioGroup({ name, options, value, onValueChange }: RadioGroupProps): import("react").JSX.Element;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native search input for text-based queries. */
|
|
2
3
|
export interface SearchInputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
4
|
+
/** Text shown when the search field is empty. */
|
|
5
|
+
placeholder?: string;
|
|
3
6
|
}
|
|
7
|
+
/** SearchInput component. */
|
|
4
8
|
export declare function SearchInput(props: SearchInputProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SelectHTMLAttributes } from "react";
|
|
2
|
+
export interface SelectFilterOption {
|
|
3
|
+
/** Value submitted for this filter option. */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Visible option label. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Disables this option. */
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface SelectFilterProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, "children" | "onChange"> {
|
|
11
|
+
/** Visible filter label. */
|
|
12
|
+
label?: string;
|
|
13
|
+
/** Available filter options. */
|
|
14
|
+
options: SelectFilterOption[];
|
|
15
|
+
/** Called when the selected filter value changes. */
|
|
16
|
+
onValueChange?: (value: string) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Generic single-value select filter for list and data views. */
|
|
19
|
+
export declare function SelectFilter({ label, options, onValueChange, value, defaultValue, id, ...props }: SelectFilterProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from "react";
|
|
2
|
+
/** Native range slider for selecting a numeric value. */
|
|
2
3
|
export interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
|
|
4
|
+
/** Current numeric slider value.
|
|
5
|
+
* @control range
|
|
6
|
+
*/
|
|
3
7
|
value?: number;
|
|
8
|
+
/** Minimum slider value. */
|
|
9
|
+
min?: number;
|
|
10
|
+
/** Maximum slider value. */
|
|
11
|
+
max?: number;
|
|
12
|
+
/** Slider increment. */
|
|
13
|
+
step?: number;
|
|
4
14
|
}
|
|
5
15
|
export declare function Slider(props: SliderProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "../ohm.css";
|
|
2
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
3
|
+
export interface ActionBarProps extends Omit<HTMLAttributes<HTMLDivElement>, "children" | "results"> {
|
|
4
|
+
/** Search or primary query control. */
|
|
5
|
+
search?: ReactNode;
|
|
6
|
+
/** Filter controls shown beside the search control. */
|
|
7
|
+
filters?: ReactNode;
|
|
8
|
+
/** Optional leading content such as a title or selection summary. */
|
|
9
|
+
leading?: ReactNode;
|
|
10
|
+
/** Optional result/count information. */
|
|
11
|
+
results?: ReactNode;
|
|
12
|
+
/** Primary and secondary actions. */
|
|
13
|
+
actions?: ReactNode;
|
|
14
|
+
/** Accessible name for the toolbar. */
|
|
15
|
+
ariaLabel?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function ActionBar({ search, filters, leading, results, actions, ariaLabel, className, ...rest }: ActionBarProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const ActionBarVariants: readonly [{
|
|
2
|
+
readonly id: "default";
|
|
3
|
+
readonly name: "Default";
|
|
4
|
+
readonly props: {};
|
|
5
|
+
}, {
|
|
6
|
+
readonly id: "search";
|
|
7
|
+
readonly name: "Search";
|
|
8
|
+
readonly props: {};
|
|
9
|
+
}, {
|
|
10
|
+
readonly id: "actions";
|
|
11
|
+
readonly name: "Actions";
|
|
12
|
+
readonly props: {};
|
|
13
|
+
}];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import "../ohm.css";
|
|
3
|
+
import "./DataField.css";
|
|
4
|
+
export type DataFieldState = "display" | "edit";
|
|
5
|
+
export type DataFieldType = "text" | "number" | "date" | "textarea" | "select" | "select-search";
|
|
6
|
+
export interface DataFieldOption {
|
|
7
|
+
value: string;
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface DataFieldAdd {
|
|
11
|
+
label?: ReactNode;
|
|
12
|
+
onAdd: () => void;
|
|
13
|
+
}
|
|
14
|
+
export interface DataFieldProps {
|
|
15
|
+
label: ReactNode;
|
|
16
|
+
value?: string | number;
|
|
17
|
+
state?: DataFieldState;
|
|
18
|
+
type?: DataFieldType;
|
|
19
|
+
options?: DataFieldOption[];
|
|
20
|
+
add?: DataFieldAdd | boolean;
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
className?: string;
|
|
25
|
+
onChange?: (value: string) => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function DataField({ label, value, state, type, options, add, placeholder, disabled, required, className, onChange, }: DataFieldProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import "../ohm.css";
|
|
3
|
+
import "./DocumentList.css";
|
|
4
|
+
export interface DocumentListItem {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
size?: string;
|
|
9
|
+
date?: string;
|
|
10
|
+
previewUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DocumentListProps {
|
|
13
|
+
documents?: DocumentListItem[];
|
|
14
|
+
emptyState?: ReactNode;
|
|
15
|
+
className?: string;
|
|
16
|
+
onPreview?: (document: DocumentListItem) => void;
|
|
17
|
+
onDelete?: (document: DocumentListItem) => void;
|
|
18
|
+
onDownload?: (document: DocumentListItem) => void;
|
|
19
|
+
onShare?: (document: DocumentListItem) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function DocumentList({ documents, emptyState, className, onPreview, onDelete, onDownload, onShare, }: DocumentListProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "../ohm.css";
|
|
2
|
+
import { type HTMLAttributes, type ReactNode } from "react";
|
|
3
|
+
import "./EntityCard.css";
|
|
4
|
+
export interface EntityCardProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
description?: ReactNode;
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
variant?: "default";
|
|
9
|
+
collapsible?: boolean;
|
|
10
|
+
defaultCollapsed?: boolean;
|
|
11
|
+
collapsed?: boolean;
|
|
12
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function EntityCard({ title, description, children, variant, collapsible, defaultCollapsed, collapsed: controlledCollapsed, onCollapsedChange, className, ...props }: EntityCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "../ohm.css";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
/** Semantic application content region paired with the Ohm Navbar. */
|
|
4
|
+
export interface MainProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function Main({ children, className }: MainProps): import("react").JSX.Element;
|