@lumeweb/portal-framework-ui 0.0.1 → 0.1.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/LICENSE +9 -0
- package/README.md +1 -45
- package/dist/esm/components/Copyable.d.ts +43 -0
- package/dist/esm/components/Copyable.js +50 -0
- package/dist/esm/components/Copyable.js.map +1 -0
- package/dist/esm/components/FilterChip.d.ts +16 -0
- package/dist/esm/components/FilterChip.js +47 -0
- package/dist/esm/components/FilterChip.js.map +1 -0
- package/dist/esm/components/Forms.d.ts +55 -0
- package/dist/esm/components/Forms.js +123 -0
- package/dist/esm/components/Forms.js.map +1 -0
- package/dist/esm/components/InlineAuthLinkBanner.d.ts +18 -0
- package/dist/esm/components/InlineAuthLinkBanner.js +23 -0
- package/dist/esm/components/InlineAuthLinkBanner.js.map +1 -0
- package/dist/esm/components/KeyboardShortcutDialog.d.ts +12 -0
- package/dist/esm/components/KeyboardShortcutDialog.js +48 -0
- package/dist/esm/components/KeyboardShortcutDialog.js.map +1 -0
- package/dist/esm/components/Loading.d.ts +13 -0
- package/dist/esm/components/Loading.js +38 -0
- package/dist/esm/components/Loading.js.map +1 -0
- package/dist/esm/components/LumeLogo.d.ts +12 -0
- package/dist/esm/components/LumeLogo.js +22 -0
- package/dist/esm/components/LumeLogo.js.map +1 -0
- package/dist/esm/components/MainNavigation.d.ts +11 -0
- package/dist/esm/components/MainNavigation.js +227 -0
- package/dist/esm/components/MainNavigation.js.map +1 -0
- package/dist/esm/components/SkeletonLoader.d.ts +25 -0
- package/dist/esm/components/SkeletonLoader.js +78 -0
- package/dist/esm/components/SkeletonLoader.js.map +1 -0
- package/dist/esm/components/TableActionsDropdown.d.ts +18 -0
- package/dist/esm/components/TableActionsDropdown.js +34 -0
- package/dist/esm/components/TableActionsDropdown.js.map +1 -0
- package/dist/esm/components/TableContainer.d.ts +13 -0
- package/dist/esm/components/TableContainer.js +15 -0
- package/dist/esm/components/TableContainer.js.map +1 -0
- package/dist/esm/components/ThemeSwitcher.d.ts +7 -0
- package/dist/esm/components/ThemeSwitcher.js +38 -0
- package/dist/esm/components/ThemeSwitcher.js.map +1 -0
- package/dist/esm/components/ThemedBadge.d.ts +23 -0
- package/dist/esm/components/ThemedBadge.js +20 -0
- package/dist/esm/components/ThemedBadge.js.map +1 -0
- package/dist/esm/components/actions/ActionListRenderer.d.ts +15 -0
- package/dist/esm/components/actions/ActionListRenderer.js +38 -0
- package/dist/esm/components/actions/ActionListRenderer.js.map +1 -0
- package/dist/esm/components/actions/actionHelpers.d.ts +127 -0
- package/dist/esm/components/actions/actionHelpers.js +205 -0
- package/dist/esm/components/actions/actionHelpers.js.map +1 -0
- package/dist/esm/components/actions/index.d.ts +6 -0
- package/dist/esm/components/actions/index.js +7 -0
- package/dist/esm/components/actions/items/ButtonActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/ButtonActionItem.js +23 -0
- package/dist/esm/components/actions/items/ButtonActionItem.js.map +1 -0
- package/dist/esm/components/actions/items/CancelActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/CancelActionItem.js +28 -0
- package/dist/esm/components/actions/items/CancelActionItem.js.map +1 -0
- package/dist/esm/components/actions/items/CustomActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/CustomActionItem.js +27 -0
- package/dist/esm/components/actions/items/CustomActionItem.js.map +1 -0
- package/dist/esm/components/actions/items/LinkActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/LinkActionItem.js +33 -0
- package/dist/esm/components/actions/items/LinkActionItem.js.map +1 -0
- package/dist/esm/components/actions/items/RetryActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/RetryActionItem.js +23 -0
- package/dist/esm/components/actions/items/RetryActionItem.js.map +1 -0
- package/dist/esm/components/actions/items/SubmitActionItem.d.ts +9 -0
- package/dist/esm/components/actions/items/SubmitActionItem.js +26 -0
- package/dist/esm/components/actions/items/SubmitActionItem.js.map +1 -0
- package/dist/esm/components/actions/register.d.ts +5 -0
- package/dist/esm/components/actions/register.js +20 -0
- package/dist/esm/components/actions/register.js.map +1 -0
- package/dist/esm/components/actions/registry.d.ts +14 -0
- package/dist/esm/components/actions/registry.js +20 -0
- package/dist/esm/components/actions/registry.js.map +1 -0
- package/dist/esm/components/actions/types.d.ts +132 -0
- package/dist/esm/components/actions/types.js +29 -0
- package/dist/esm/components/actions/types.js.map +1 -0
- package/dist/esm/components/app/AppComponent.d.ts +17 -0
- package/dist/esm/components/app/AppComponent.js +179 -0
- package/dist/esm/components/app/AppComponent.js.map +1 -0
- package/dist/esm/components/data-table/BaseTable.d.ts +86 -0
- package/dist/esm/components/data-table/BaseTable.js +123 -0
- package/dist/esm/components/data-table/BaseTable.js.map +1 -0
- package/dist/esm/components/data-table/BaseTableContent.d.ts +48 -0
- package/dist/esm/components/data-table/BaseTableContent.js +38 -0
- package/dist/esm/components/data-table/BaseTableContent.js.map +1 -0
- package/dist/esm/components/data-table/BaseTableInner.d.ts +11 -0
- package/dist/esm/components/data-table/BaseTableInner.js +35 -0
- package/dist/esm/components/data-table/BaseTableInner.js.map +1 -0
- package/dist/esm/components/data-table/BaseTableStackedLayout.d.ts +31 -0
- package/dist/esm/components/data-table/BaseTableStackedLayout.js +137 -0
- package/dist/esm/components/data-table/BaseTableStackedLayout.js.map +1 -0
- package/dist/esm/components/data-table/DataTable.d.ts +18 -0
- package/dist/esm/components/data-table/DataTable.js +97 -0
- package/dist/esm/components/data-table/DataTable.js.map +1 -0
- package/dist/esm/components/data-table/DataTable.types.d.ts +203 -0
- package/dist/esm/components/data-table/DataTable.types.js +25 -0
- package/dist/esm/components/data-table/DataTable.types.js.map +1 -0
- package/dist/esm/components/data-table/DataTableController.d.ts +19 -0
- package/dist/esm/components/data-table/DataTableController.js +31 -0
- package/dist/esm/components/data-table/DataTableController.js.map +1 -0
- package/dist/esm/components/data-table/DefaultPagination.d.ts +7 -0
- package/dist/esm/components/data-table/DefaultPagination.js +62 -0
- package/dist/esm/components/data-table/DefaultPagination.js.map +1 -0
- package/dist/esm/components/data-table/DefaultTableLayout.d.ts +28 -0
- package/dist/esm/components/data-table/DefaultTableLayout.js +70 -0
- package/dist/esm/components/data-table/DefaultTableLayout.js.map +1 -0
- package/dist/esm/components/data-table/EmptyState.d.ts +19 -0
- package/dist/esm/components/data-table/EmptyState.js +16 -0
- package/dist/esm/components/data-table/EmptyState.js.map +1 -0
- package/dist/esm/components/data-table/LoadingState.d.ts +19 -0
- package/dist/esm/components/data-table/LoadingState.js +34 -0
- package/dist/esm/components/data-table/LoadingState.js.map +1 -0
- package/dist/esm/components/data-table/TableAction.d.ts +21 -0
- package/dist/esm/components/data-table/TableAction.js +26 -0
- package/dist/esm/components/data-table/TableAction.js.map +1 -0
- package/dist/esm/components/data-table/TableActionMenu.d.ts +20 -0
- package/dist/esm/components/data-table/TableActionMenu.js +31 -0
- package/dist/esm/components/data-table/TableActionMenu.js.map +1 -0
- package/dist/esm/components/data-table/TableLayoutRenderer.d.ts +48 -0
- package/dist/esm/components/data-table/TableLayoutRenderer.js +45 -0
- package/dist/esm/components/data-table/TableLayoutRenderer.js.map +1 -0
- package/dist/esm/components/data-table/Toolbar.d.ts +17 -0
- package/dist/esm/components/data-table/Toolbar.js +176 -0
- package/dist/esm/components/data-table/Toolbar.js.map +1 -0
- package/dist/esm/components/data-table/ToolbarRegistry.d.ts +66 -0
- package/dist/esm/components/data-table/ToolbarRegistry.js +89 -0
- package/dist/esm/components/data-table/ToolbarRegistry.js.map +1 -0
- package/dist/esm/components/data-table/ToolbarRenderer.d.ts +45 -0
- package/dist/esm/components/data-table/ToolbarRenderer.js +137 -0
- package/dist/esm/components/data-table/ToolbarRenderer.js.map +1 -0
- package/dist/esm/components/data-table/contexts/FilterHelpers.d.ts +30 -0
- package/dist/esm/components/data-table/contexts/FilterHelpers.js +60 -0
- package/dist/esm/components/data-table/contexts/FilterHelpers.js.map +1 -0
- package/dist/esm/components/data-table/contexts/RefineTable.d.ts +25 -0
- package/dist/esm/components/data-table/contexts/RefineTable.js +69 -0
- package/dist/esm/components/data-table/contexts/RefineTable.js.map +1 -0
- package/dist/esm/components/data-table/contexts/TableConfig.d.ts +24 -0
- package/dist/esm/components/data-table/contexts/TableConfig.js +29 -0
- package/dist/esm/components/data-table/contexts/TableConfig.js.map +1 -0
- package/dist/esm/components/data-table/contexts/TableInstance.d.ts +20 -0
- package/dist/esm/components/data-table/contexts/TableInstance.js +21 -0
- package/dist/esm/components/data-table/contexts/TableInstance.js.map +1 -0
- package/dist/esm/components/data-table/contexts/index.d.ts +5 -0
- package/dist/esm/components/data-table/contexts/index.js +6 -0
- package/dist/esm/components/data-table/filterColumnsForMobile.d.ts +16 -0
- package/dist/esm/components/data-table/filterColumnsForMobile.js +31 -0
- package/dist/esm/components/data-table/filterColumnsForMobile.js.map +1 -0
- package/dist/esm/components/data-table/index.d.ts +50 -0
- package/dist/esm/components/data-table/index.js +39 -0
- package/dist/esm/components/data-table/register.d.ts +1 -0
- package/dist/esm/components/data-table/register.js +1 -0
- package/dist/esm/components/data-table/tableOptions.d.ts +18 -0
- package/dist/esm/components/data-table/tableOptions.js +40 -0
- package/dist/esm/components/data-table/tableOptions.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/FilterGroup.d.ts +18 -0
- package/dist/esm/components/data-table/toolbarItems/FilterGroup.js +105 -0
- package/dist/esm/components/data-table/toolbarItems/FilterGroup.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/FilterResolver.d.ts +22 -0
- package/dist/esm/components/data-table/toolbarItems/FilterResolver.js +74 -0
- package/dist/esm/components/data-table/toolbarItems/FilterResolver.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/BaseFilter.d.ts +27 -0
- package/dist/esm/components/data-table/toolbarItems/filters/BaseFilter.js +29 -0
- package/dist/esm/components/data-table/toolbarItems/filters/BaseFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/FilterRegistry.d.ts +52 -0
- package/dist/esm/components/data-table/toolbarItems/filters/FilterRegistry.js +57 -0
- package/dist/esm/components/data-table/toolbarItems/filters/FilterRegistry.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/BooleanFilter.d.ts +12 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/BooleanFilter.js +34 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/BooleanFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/DateFilter.d.ts +12 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/DateFilter.js +25 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/DateFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/MultiSelectFilter.d.ts +13 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/MultiSelectFilter.js +44 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/MultiSelectFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/NumberFilter.d.ts +12 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/NumberFilter.js +29 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/NumberFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/RangeFilter.d.ts +16 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/RangeFilter.js +61 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/RangeFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SearchFilter.d.ts +12 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SearchFilter.js +33 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SearchFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SelectFilter.d.ts +13 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SelectFilter.js +95 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/SelectFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/TextFilter.d.ts +12 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/TextFilter.js +25 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/TextFilter.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/index.d.ts +9 -0
- package/dist/esm/components/data-table/toolbarItems/filters/components/index.js +10 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterOperators.d.ts +43 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterOperators.js +102 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterOperators.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterTooltip.d.ts +19 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterTooltip.js +34 -0
- package/dist/esm/components/data-table/toolbarItems/filters/hooks/useFilterTooltip.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/index.d.ts +11 -0
- package/dist/esm/components/data-table/toolbarItems/filters/index.js +13 -0
- package/dist/esm/components/data-table/toolbarItems/filters/register.d.ts +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/register.js +8 -0
- package/dist/esm/components/data-table/toolbarItems/filters/types.d.ts +140 -0
- package/dist/esm/components/data-table/toolbarItems/filters/types.js +58 -0
- package/dist/esm/components/data-table/toolbarItems/filters/types.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/filters/util.d.ts +24 -0
- package/dist/esm/components/data-table/toolbarItems/filters/util.js +43 -0
- package/dist/esm/components/data-table/toolbarItems/filters/util.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/index.d.ts +17 -0
- package/dist/esm/components/data-table/toolbarItems/index.js +18 -0
- package/dist/esm/components/data-table/toolbarItems/items/custom.d.ts +15 -0
- package/dist/esm/components/data-table/toolbarItems/items/custom.js +19 -0
- package/dist/esm/components/data-table/toolbarItems/items/custom.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/items/index.d.ts +6 -0
- package/dist/esm/components/data-table/toolbarItems/items/index.js +6 -0
- package/dist/esm/components/data-table/toolbarItems/items/refresh.d.ts +7 -0
- package/dist/esm/components/data-table/toolbarItems/items/refresh.js +36 -0
- package/dist/esm/components/data-table/toolbarItems/items/refresh.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/items/search.d.ts +7 -0
- package/dist/esm/components/data-table/toolbarItems/items/search.js +66 -0
- package/dist/esm/components/data-table/toolbarItems/items/search.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/items/separator.d.ts +16 -0
- package/dist/esm/components/data-table/toolbarItems/items/separator.js +20 -0
- package/dist/esm/components/data-table/toolbarItems/items/separator.js.map +1 -0
- package/dist/esm/components/data-table/toolbarItems/register.d.ts +24 -0
- package/dist/esm/components/data-table/toolbarItems/register.js +119 -0
- package/dist/esm/components/data-table/toolbarItems/register.js.map +1 -0
- package/dist/esm/components/data-table/useMobileDetection.d.ts +18 -0
- package/dist/esm/components/data-table/useMobileDetection.js +32 -0
- package/dist/esm/components/data-table/useMobileDetection.js.map +1 -0
- package/dist/esm/components/data-table/useTableHandlers.d.ts +57 -0
- package/dist/esm/components/data-table/useTableHandlers.js +69 -0
- package/dist/esm/components/data-table/useTableHandlers.js.map +1 -0
- package/dist/esm/components/data-table/useTableLayoutSelector.d.ts +16 -0
- package/dist/esm/components/data-table/useTableLayoutSelector.js +12 -0
- package/dist/esm/components/data-table/useTableLayoutSelector.js.map +1 -0
- package/dist/esm/components/dialog/Dialog.context.d.ts +18 -0
- package/dist/esm/components/dialog/Dialog.context.js +80 -0
- package/dist/esm/components/dialog/Dialog.context.js.map +1 -0
- package/dist/esm/components/dialog/Dialog.registry.d.ts +22 -0
- package/dist/esm/components/dialog/Dialog.registry.js +24 -0
- package/dist/esm/components/dialog/Dialog.registry.js.map +1 -0
- package/dist/esm/components/dialog/Dialog.renderer.d.ts +9 -0
- package/dist/esm/components/dialog/Dialog.renderer.js +63 -0
- package/dist/esm/components/dialog/Dialog.renderer.js.map +1 -0
- package/dist/esm/components/dialog/Dialog.types.d.ts +273 -0
- package/dist/esm/components/dialog/Dialog.types.js +233 -0
- package/dist/esm/components/dialog/Dialog.types.js.map +1 -0
- package/dist/esm/components/dialog/DialogActions.context.d.ts +13 -0
- package/dist/esm/components/dialog/DialogActions.context.js +13 -0
- package/dist/esm/components/dialog/DialogActions.context.js.map +1 -0
- package/dist/esm/components/dialog/DialogContainer.d.ts +15 -0
- package/dist/esm/components/dialog/DialogContainer.js +37 -0
- package/dist/esm/components/dialog/DialogContainer.js.map +1 -0
- package/dist/esm/components/dialog/DialogContent.d.ts +14 -0
- package/dist/esm/components/dialog/DialogContent.js +18 -0
- package/dist/esm/components/dialog/DialogContent.js.map +1 -0
- package/dist/esm/components/dialog/DialogFooterContent.d.ts +14 -0
- package/dist/esm/components/dialog/DialogFooterContent.js +20 -0
- package/dist/esm/components/dialog/DialogFooterContent.js.map +1 -0
- package/dist/esm/components/dialog/DialogHeaderContent.d.ts +12 -0
- package/dist/esm/components/dialog/DialogHeaderContent.js +24 -0
- package/dist/esm/components/dialog/DialogHeaderContent.js.map +1 -0
- package/dist/esm/components/dialog/DialogState.context.d.ts +11 -0
- package/dist/esm/components/dialog/DialogState.context.js +11 -0
- package/dist/esm/components/dialog/DialogState.context.js.map +1 -0
- package/dist/esm/components/dialog/index.d.ts +6 -0
- package/dist/esm/components/dialog/index.js +8 -0
- package/dist/esm/components/dialog/types/AlertDialog.d.ts +19 -0
- package/dist/esm/components/dialog/types/AlertDialog.js +29 -0
- package/dist/esm/components/dialog/types/AlertDialog.js.map +1 -0
- package/dist/esm/components/dialog/types/ConfirmDialog.d.ts +17 -0
- package/dist/esm/components/dialog/types/ConfirmDialog.js +24 -0
- package/dist/esm/components/dialog/types/ConfirmDialog.js.map +1 -0
- package/dist/esm/components/dialog/types/CustomDialog.d.ts +28 -0
- package/dist/esm/components/dialog/types/CustomDialog.js +17 -0
- package/dist/esm/components/dialog/types/CustomDialog.js.map +1 -0
- package/dist/esm/components/dialog/types/FormDialog.d.ts +22 -0
- package/dist/esm/components/dialog/types/FormDialog.js +46 -0
- package/dist/esm/components/dialog/types/FormDialog.js.map +1 -0
- package/dist/esm/components/dialog/types/WizardDialog.d.ts +29 -0
- package/dist/esm/components/dialog/types/WizardDialog.js +43 -0
- package/dist/esm/components/dialog/types/WizardDialog.js.map +1 -0
- package/dist/esm/components/dialog/utils/dialogClasses.d.ts +7 -0
- package/dist/esm/components/dialog/utils/dialogClasses.js +14 -0
- package/dist/esm/components/dialog/utils/dialogClasses.js.map +1 -0
- package/dist/esm/components/dialog/utils/dialogDetection.d.ts +32 -0
- package/dist/esm/components/dialog/utils/dialogDetection.js +47 -0
- package/dist/esm/components/dialog/utils/dialogDetection.js.map +1 -0
- package/dist/esm/components/dialog/utils/index.d.ts +3 -0
- package/dist/esm/components/dialog/utils/index.js +4 -0
- package/dist/esm/components/editor/BlockTypeDropdown.d.ts +12 -0
- package/dist/esm/components/editor/BlockTypeDropdown.js +57 -0
- package/dist/esm/components/editor/BlockTypeDropdown.js.map +1 -0
- package/dist/esm/components/editor/Editor.d.ts +7 -0
- package/dist/esm/components/editor/Editor.js +17 -0
- package/dist/esm/components/editor/Editor.js.map +1 -0
- package/dist/esm/components/editor/EditorInner.d.ts +14 -0
- package/dist/esm/components/editor/EditorInner.js +107 -0
- package/dist/esm/components/editor/EditorInner.js.map +1 -0
- package/dist/esm/components/editor/Preview.d.ts +5 -0
- package/dist/esm/components/editor/Preview.js +18 -0
- package/dist/esm/components/editor/Preview.js.map +1 -0
- package/dist/esm/components/editor/ToolbarContext.d.ts +39 -0
- package/dist/esm/components/editor/ToolbarContext.js +54 -0
- package/dist/esm/components/editor/ToolbarContext.js.map +1 -0
- package/dist/esm/components/editor/ToolbarPlugin.d.ts +20 -0
- package/dist/esm/components/editor/ToolbarPlugin.js +194 -0
- package/dist/esm/components/editor/ToolbarPlugin.js.map +1 -0
- package/dist/esm/components/editor/formatting.d.ts +15 -0
- package/dist/esm/components/editor/formatting.js +117 -0
- package/dist/esm/components/editor/formatting.js.map +1 -0
- package/dist/esm/components/editor/index.d.ts +3 -0
- package/dist/esm/components/editor/index.js +3 -0
- package/dist/esm/components/form/FormGroup.d.ts +18 -0
- package/dist/esm/components/form/FormGroup.js +28 -0
- package/dist/esm/components/form/FormGroup.js.map +1 -0
- package/dist/esm/components/form/FormRenderer.d.ts +14 -0
- package/dist/esm/components/form/FormRenderer.js +179 -0
- package/dist/esm/components/form/FormRenderer.js.map +1 -0
- package/dist/esm/components/form/SchemaForm.d.ts +18 -0
- package/dist/esm/components/form/SchemaForm.js +172 -0
- package/dist/esm/components/form/SchemaForm.js.map +1 -0
- package/dist/esm/components/form/StepControlContext.d.ts +199 -0
- package/dist/esm/components/form/StepControlContext.js +249 -0
- package/dist/esm/components/form/StepControlContext.js.map +1 -0
- package/dist/esm/components/form/StepSchemaForm.d.ts +22 -0
- package/dist/esm/components/form/StepSchemaForm.js +176 -0
- package/dist/esm/components/form/StepSchemaForm.js.map +1 -0
- package/dist/esm/components/form/WizardForm.d.ts +16 -0
- package/dist/esm/components/form/WizardForm.js +126 -0
- package/dist/esm/components/form/WizardForm.js.map +1 -0
- package/dist/esm/components/form/WizardStepContent.d.ts +26 -0
- package/dist/esm/components/form/WizardStepContent.js +46 -0
- package/dist/esm/components/form/WizardStepContent.js.map +1 -0
- package/dist/esm/components/form/__mocks__/@hookform/resolvers/zod.d.ts +8 -0
- package/dist/esm/components/form/adapters.d.ts +23 -0
- package/dist/esm/components/form/adapters.js +43 -0
- package/dist/esm/components/form/adapters.js.map +1 -0
- package/dist/esm/components/form/autocomplete/index.d.ts +3 -0
- package/dist/esm/components/form/autocomplete/index.js +4 -0
- package/dist/esm/components/form/autocomplete/register.d.ts +8 -0
- package/dist/esm/components/form/autocomplete/register.js +161 -0
- package/dist/esm/components/form/autocomplete/register.js.map +1 -0
- package/dist/esm/components/form/autocomplete/rules.d.ts +15 -0
- package/dist/esm/components/form/autocomplete/rules.js +198 -0
- package/dist/esm/components/form/autocomplete/rules.js.map +1 -0
- package/dist/esm/components/form/context.d.ts +29 -0
- package/dist/esm/components/form/context.js +25 -0
- package/dist/esm/components/form/context.js.map +1 -0
- package/dist/esm/components/form/fields/Checkbox.d.ts +6 -0
- package/dist/esm/components/form/fields/Checkbox.js +33 -0
- package/dist/esm/components/form/fields/Checkbox.js.map +1 -0
- package/dist/esm/components/form/fields/DatePicker.d.ts +6 -0
- package/dist/esm/components/form/fields/DatePicker.js +29 -0
- package/dist/esm/components/form/fields/DatePicker.js.map +1 -0
- package/dist/esm/components/form/fields/EmailInput.d.ts +6 -0
- package/dist/esm/components/form/fields/EmailInput.js +25 -0
- package/dist/esm/components/form/fields/EmailInput.js.map +1 -0
- package/dist/esm/components/form/fields/FileInput.d.ts +6 -0
- package/dist/esm/components/form/fields/FileInput.js +28 -0
- package/dist/esm/components/form/fields/FileInput.js.map +1 -0
- package/dist/esm/components/form/fields/Input.d.ts +6 -0
- package/dist/esm/components/form/fields/Input.js +30 -0
- package/dist/esm/components/form/fields/Input.js.map +1 -0
- package/dist/esm/components/form/fields/RadioGroup.d.ts +6 -0
- package/dist/esm/components/form/fields/RadioGroup.js +42 -0
- package/dist/esm/components/form/fields/RadioGroup.js.map +1 -0
- package/dist/esm/components/form/fields/RichText.d.ts +6 -0
- package/dist/esm/components/form/fields/RichText.js +30 -0
- package/dist/esm/components/form/fields/RichText.js.map +1 -0
- package/dist/esm/components/form/fields/Select.d.ts +6 -0
- package/dist/esm/components/form/fields/Select.js +37 -0
- package/dist/esm/components/form/fields/Select.js.map +1 -0
- package/dist/esm/components/form/fields/Slider.d.ts +6 -0
- package/dist/esm/components/form/fields/Slider.js +29 -0
- package/dist/esm/components/form/fields/Slider.js.map +1 -0
- package/dist/esm/components/form/fields/Switch.d.ts +6 -0
- package/dist/esm/components/form/fields/Switch.js +33 -0
- package/dist/esm/components/form/fields/Switch.js.map +1 -0
- package/dist/esm/components/form/fields/Textarea.d.ts +6 -0
- package/dist/esm/components/form/fields/Textarea.js +28 -0
- package/dist/esm/components/form/fields/Textarea.js.map +1 -0
- package/dist/esm/components/form/fields/index.d.ts +13 -0
- package/dist/esm/components/form/fields/index.js +14 -0
- package/dist/esm/components/form/fields/registry.d.ts +11 -0
- package/dist/esm/components/form/fields/registry.js +15 -0
- package/dist/esm/components/form/fields/registry.js.map +1 -0
- package/dist/esm/components/form/fields/types.d.ts +37 -0
- package/dist/esm/components/form/fields/types.js +21 -0
- package/dist/esm/components/form/fields/types.js.map +1 -0
- package/dist/esm/components/form/handlers/core.d.ts +19 -0
- package/dist/esm/components/form/handlers/core.js +51 -0
- package/dist/esm/components/form/handlers/core.js.map +1 -0
- package/dist/esm/components/form/handlers/step.d.ts +19 -0
- package/dist/esm/components/form/handlers/step.js +40 -0
- package/dist/esm/components/form/handlers/step.js.map +1 -0
- package/dist/esm/components/form/index.d.ts +26 -0
- package/dist/esm/components/form/index.js +28 -0
- package/dist/esm/components/form/register.d.ts +5 -0
- package/dist/esm/components/form/register.js +31 -0
- package/dist/esm/components/form/register.js.map +1 -0
- package/dist/esm/components/form/types.d.ts +521 -0
- package/dist/esm/components/form/types.js +69 -0
- package/dist/esm/components/form/types.js.map +1 -0
- package/dist/esm/components/form/utils/animationUtils.d.ts +14 -0
- package/dist/esm/components/form/utils/animationUtils.js +20 -0
- package/dist/esm/components/form/utils/animationUtils.js.map +1 -0
- package/dist/esm/components/form/utils/autoSave.d.ts +8 -0
- package/dist/esm/components/form/utils/autoSave.js +17 -0
- package/dist/esm/components/form/utils/autoSave.js.map +1 -0
- package/dist/esm/components/form/utils/index.d.ts +4 -0
- package/dist/esm/components/form/utils/index.js +5 -0
- package/dist/esm/components/form/utils/stepRetry.d.ts +12 -0
- package/dist/esm/components/form/utils/stepRetry.js +16 -0
- package/dist/esm/components/form/utils/stepRetry.js.map +1 -0
- package/dist/esm/components/index.d.ts +126 -0
- package/dist/esm/components/index.js +130 -0
- package/dist/esm/components/layout/DesktopSidebar.d.ts +5 -0
- package/dist/esm/components/layout/DesktopSidebar.js +51 -0
- package/dist/esm/components/layout/DesktopSidebar.js.map +1 -0
- package/dist/esm/components/layout/GeneralLayout.d.ts +5 -0
- package/dist/esm/components/layout/GeneralLayout.js +34 -0
- package/dist/esm/components/layout/GeneralLayout.js.map +1 -0
- package/dist/esm/components/layout/MobileMenu.d.ts +5 -0
- package/dist/esm/components/layout/MobileMenu.js +48 -0
- package/dist/esm/components/layout/MobileMenu.js.map +1 -0
- package/dist/esm/components/layout/PageHeader.d.ts +16 -0
- package/dist/esm/components/layout/PageHeader.js +20 -0
- package/dist/esm/components/layout/PageHeader.js.map +1 -0
- package/dist/esm/components/layout/SidebarContext.d.ts +10 -0
- package/dist/esm/components/layout/SidebarContext.js +27 -0
- package/dist/esm/components/layout/SidebarContext.js.map +1 -0
- package/dist/esm/components/layout/SidebarToggle.d.ts +12 -0
- package/dist/esm/components/layout/SidebarToggle.js +23 -0
- package/dist/esm/components/layout/SidebarToggle.js.map +1 -0
- package/dist/esm/components/layout/UserNav.d.ts +5 -0
- package/dist/esm/components/layout/UserNav.js +110 -0
- package/dist/esm/components/layout/UserNav.js.map +1 -0
- package/dist/esm/components/layout/index.d.ts +7 -0
- package/dist/esm/components/layout/index.js +9 -0
- package/dist/esm/components/screen-reader/ScreenReaderAnnouncement.d.ts +23 -0
- package/dist/esm/components/screen-reader/ScreenReaderAnnouncement.js +28 -0
- package/dist/esm/components/screen-reader/ScreenReaderAnnouncement.js.map +1 -0
- package/dist/esm/components/screen-reader/hooks/useScreenReaderAnnouncement.d.ts +10 -0
- package/dist/esm/components/screen-reader/hooks/useScreenReaderAnnouncement.js +30 -0
- package/dist/esm/components/screen-reader/hooks/useScreenReaderAnnouncement.js.map +1 -0
- package/dist/esm/components/shared/UnifiedFooter.d.ts +17 -0
- package/dist/esm/components/shared/UnifiedFooter.js +210 -0
- package/dist/esm/components/shared/UnifiedFooter.js.map +1 -0
- package/dist/esm/components/shared/UnifiedHeader.d.ts +17 -0
- package/dist/esm/components/shared/UnifiedHeader.js +48 -0
- package/dist/esm/components/shared/UnifiedHeader.js.map +1 -0
- package/dist/esm/components/shared/context/FooterContext.d.ts +18 -0
- package/dist/esm/components/shared/context/FooterContext.js +24 -0
- package/dist/esm/components/shared/context/FooterContext.js.map +1 -0
- package/dist/esm/components/shared/context/HeaderContext.d.ts +18 -0
- package/dist/esm/components/shared/context/HeaderContext.js +23 -0
- package/dist/esm/components/shared/context/HeaderContext.js.map +1 -0
- package/dist/esm/components/shared/context/index.d.ts +3 -0
- package/dist/esm/components/shared/context/index.js +4 -0
- package/dist/esm/components/shared/environment/builders.d.ts +95 -0
- package/dist/esm/components/shared/environment/builders.js +163 -0
- package/dist/esm/components/shared/environment/builders.js.map +1 -0
- package/dist/esm/components/shared/environment/index.d.ts +7 -0
- package/dist/esm/components/shared/environment/index.js +3 -0
- package/dist/esm/components/shared/footers/ActionsFooter.d.ts +11 -0
- package/dist/esm/components/shared/footers/ActionsFooter.js +19 -0
- package/dist/esm/components/shared/footers/ActionsFooter.js.map +1 -0
- package/dist/esm/components/shared/footers/DefaultFooter.d.ts +13 -0
- package/dist/esm/components/shared/footers/DefaultFooter.js +20 -0
- package/dist/esm/components/shared/footers/DefaultFooter.js.map +1 -0
- package/dist/esm/components/shared/footers/FormFooter.d.ts +15 -0
- package/dist/esm/components/shared/footers/FormFooter.js +28 -0
- package/dist/esm/components/shared/footers/FormFooter.js.map +1 -0
- package/dist/esm/components/shared/footers/StepFormFooter.d.ts +15 -0
- package/dist/esm/components/shared/footers/StepFormFooter.js +28 -0
- package/dist/esm/components/shared/footers/StepFormFooter.js.map +1 -0
- package/dist/esm/components/shared/footers/WizardFooter.d.ts +12 -0
- package/dist/esm/components/shared/footers/WizardFooter.js +72 -0
- package/dist/esm/components/shared/footers/WizardFooter.js.map +1 -0
- package/dist/esm/components/shared/footers/index.d.ts +6 -0
- package/dist/esm/components/shared/footers/index.js +7 -0
- package/dist/esm/components/shared/headers/DefaultHeader.d.ts +13 -0
- package/dist/esm/components/shared/headers/DefaultHeader.js +30 -0
- package/dist/esm/components/shared/headers/DefaultHeader.js.map +1 -0
- package/dist/esm/components/shared/headers/FormHeader.d.ts +12 -0
- package/dist/esm/components/shared/headers/FormHeader.js +31 -0
- package/dist/esm/components/shared/headers/FormHeader.js.map +1 -0
- package/dist/esm/components/shared/headers/WizardHeader.d.ts +9 -0
- package/dist/esm/components/shared/headers/WizardHeader.js +116 -0
- package/dist/esm/components/shared/headers/WizardHeader.js.map +1 -0
- package/dist/esm/components/shared/headers/index.d.ts +4 -0
- package/dist/esm/components/shared/headers/index.js +5 -0
- package/dist/esm/components/shared/hooks/index.d.ts +3 -0
- package/dist/esm/components/shared/hooks/index.js +4 -0
- package/dist/esm/components/shared/hooks/useEnvironmentSync.d.ts +17 -0
- package/dist/esm/components/shared/hooks/useEnvironmentSync.js +17 -0
- package/dist/esm/components/shared/hooks/useEnvironmentSync.js.map +1 -0
- package/dist/esm/components/shared/hooks/useForceRerender.d.ts +17 -0
- package/dist/esm/components/shared/hooks/useForceRerender.js +26 -0
- package/dist/esm/components/shared/hooks/useForceRerender.js.map +1 -0
- package/dist/esm/components/shared/index.d.ts +31 -0
- package/dist/esm/components/shared/index.js +36 -0
- package/dist/esm/components/shared/registry/FooterRegistry.d.ts +15 -0
- package/dist/esm/components/shared/registry/FooterRegistry.js +47 -0
- package/dist/esm/components/shared/registry/FooterRegistry.js.map +1 -0
- package/dist/esm/components/shared/registry/HeaderRegistry.d.ts +15 -0
- package/dist/esm/components/shared/registry/HeaderRegistry.js +41 -0
- package/dist/esm/components/shared/registry/HeaderRegistry.js.map +1 -0
- package/dist/esm/components/shared/registry/index.d.ts +4 -0
- package/dist/esm/components/shared/registry/index.js +5 -0
- package/dist/esm/components/shared/registry/types.d.ts +23 -0
- package/dist/esm/components/shared/registry/types.js +21 -0
- package/dist/esm/components/shared/registry/types.js.map +1 -0
- package/dist/esm/components/shared/types/container.d.ts +70 -0
- package/dist/esm/components/shared/types/container.js +35 -0
- package/dist/esm/components/shared/types/container.js.map +1 -0
- package/dist/esm/components/shared/types/environment.d.ts +25 -0
- package/dist/esm/components/shared/types/environment.js +0 -0
- package/dist/esm/components/shared/types/footer.d.ts +121 -0
- package/dist/esm/components/shared/types/footer.js +58 -0
- package/dist/esm/components/shared/types/footer.js.map +1 -0
- package/dist/esm/components/shared/types/form.d.ts +120 -0
- package/dist/esm/components/shared/types/form.js +47 -0
- package/dist/esm/components/shared/types/form.js.map +1 -0
- package/dist/esm/components/shared/types/header.d.ts +81 -0
- package/dist/esm/components/shared/types/header.js +38 -0
- package/dist/esm/components/shared/types/header.js.map +1 -0
- package/dist/esm/components/shared/types/index.d.ts +8 -0
- package/dist/esm/components/shared/types/index.js +7 -0
- package/dist/esm/components/shared/types/navigation.d.ts +9 -0
- package/dist/esm/components/shared/types/navigation.js +0 -0
- package/dist/esm/components/shared/types/step.d.ts +104 -0
- package/dist/esm/components/shared/types/step.js +31 -0
- package/dist/esm/components/shared/types/step.js.map +1 -0
- package/dist/esm/components/shared/utils/createEnvironmentReceiver.d.ts +23 -0
- package/dist/esm/components/shared/utils/createEnvironmentReceiver.js +30 -0
- package/dist/esm/components/shared/utils/createEnvironmentReceiver.js.map +1 -0
- package/dist/esm/components/shared/utils/createForceRerenderReceiver.d.ts +22 -0
- package/dist/esm/components/shared/utils/createForceRerenderReceiver.js +30 -0
- package/dist/esm/components/shared/utils/createForceRerenderReceiver.js.map +1 -0
- package/dist/esm/components/shared/utils/index.d.ts +6 -0
- package/dist/esm/components/shared/utils/index.js +7 -0
- package/dist/esm/components/shared/utils/renderFooter.d.ts +37 -0
- package/dist/esm/components/shared/utils/renderFooter.js +99 -0
- package/dist/esm/components/shared/utils/renderFooter.js.map +1 -0
- package/dist/esm/components/shared/utils/renderHeader.d.ts +39 -0
- package/dist/esm/components/shared/utils/renderHeader.js +120 -0
- package/dist/esm/components/shared/utils/renderHeader.js.map +1 -0
- package/dist/esm/components/shared/utils/stepState.d.ts +36 -0
- package/dist/esm/components/shared/utils/stepState.js +61 -0
- package/dist/esm/components/shared/utils/stepState.js.map +1 -0
- package/dist/esm/components/sizing/index.d.ts +97 -0
- package/dist/esm/components/sizing/index.js +79 -0
- package/dist/esm/components/sizing/index.js.map +1 -0
- package/dist/esm/hooks/index.d.ts +16 -0
- package/dist/esm/hooks/index.js +17 -0
- package/dist/esm/hooks/useAccountSubdomain.d.ts +5 -0
- package/dist/esm/hooks/useAccountSubdomain.js +11 -0
- package/dist/esm/hooks/useAccountSubdomain.js.map +1 -0
- package/dist/esm/hooks/useAccountUrl.d.ts +5 -0
- package/dist/esm/hooks/useAccountUrl.js +27 -0
- package/dist/esm/hooks/useAccountUrl.js.map +1 -0
- package/dist/esm/hooks/useApiUrl.d.ts +5 -0
- package/dist/esm/hooks/useApiUrl.js +14 -0
- package/dist/esm/hooks/useApiUrl.js.map +1 -0
- package/dist/esm/hooks/useAvatar.d.ts +10 -0
- package/dist/esm/hooks/useAvatar.js +20 -0
- package/dist/esm/hooks/useAvatar.js.map +1 -0
- package/dist/esm/hooks/useFeatureFlag.d.ts +5 -0
- package/dist/esm/hooks/useFeatureFlag.js +10 -0
- package/dist/esm/hooks/useFeatureFlag.js.map +1 -0
- package/dist/esm/hooks/useLoginUrl.d.ts +5 -0
- package/dist/esm/hooks/useLoginUrl.js +10 -0
- package/dist/esm/hooks/useLoginUrl.js.map +1 -0
- package/dist/esm/hooks/useMenuItems.d.ts +12 -0
- package/dist/esm/hooks/useMenuItems.js +16 -0
- package/dist/esm/hooks/useMenuItems.js.map +1 -0
- package/dist/esm/hooks/usePluginMeta.d.ts +5 -0
- package/dist/esm/hooks/usePluginMeta.js +11 -0
- package/dist/esm/hooks/usePluginMeta.js.map +1 -0
- package/dist/esm/hooks/usePortalMeta.d.ts +7 -0
- package/dist/esm/hooks/usePortalMeta.js +10 -0
- package/dist/esm/hooks/usePortalMeta.js.map +1 -0
- package/dist/esm/hooks/usePortalUrl.d.ts +5 -0
- package/dist/esm/hooks/usePortalUrl.js +20 -0
- package/dist/esm/hooks/usePortalUrl.js.map +1 -0
- package/dist/esm/hooks/useProtocolDomain.d.ts +5 -0
- package/dist/esm/hooks/useProtocolDomain.js +12 -0
- package/dist/esm/hooks/useProtocolDomain.js.map +1 -0
- package/dist/esm/hooks/useRegisterUrl.d.ts +5 -0
- package/dist/esm/hooks/useRegisterUrl.js +10 -0
- package/dist/esm/hooks/useRegisterUrl.js.map +1 -0
- package/dist/esm/hooks/useResetPasswordUrl.d.ts +5 -0
- package/dist/esm/hooks/useResetPasswordUrl.js +10 -0
- package/dist/esm/hooks/useResetPasswordUrl.js.map +1 -0
- package/dist/esm/hooks/useSdk.d.ts +8 -0
- package/dist/esm/hooks/useSdk.js +33 -0
- package/dist/esm/hooks/useSdk.js.map +1 -0
- package/dist/esm/hooks/useTheme.d.ts +41 -0
- package/dist/esm/hooks/useTheme.js +79 -0
- package/dist/esm/hooks/useTheme.js.map +1 -0
- package/dist/esm/image.d.ts +6 -0
- package/dist/esm/images/account-banner-image.js +6 -0
- package/dist/esm/images/account-banner-image.js.map +1 -0
- package/dist/esm/images/discord-logo.js +6 -0
- package/dist/esm/images/discord-logo.js.map +1 -0
- package/dist/esm/images/lume-bg-image.js +6 -0
- package/dist/esm/images/lume-bg-image.js.map +1 -0
- package/dist/esm/images/lume-bg-login.js +6 -0
- package/dist/esm/images/lume-bg-login.js.map +1 -0
- package/dist/esm/images/lume-color-logo.js +6 -0
- package/dist/esm/images/lume-color-logo.js.map +1 -0
- package/dist/esm/images/lume-logo.js +6 -0
- package/dist/esm/images/lume-logo.js.map +1 -0
- package/dist/esm/images.d.ts +11 -0
- package/dist/esm/images.js +19 -0
- package/dist/esm/images.js.map +1 -0
- package/dist/esm/index.d.ts +150 -0
- package/dist/esm/index.js +149 -0
- package/dist/esm/store/appStore.d.ts +50 -0
- package/dist/esm/store/appStore.js +139 -0
- package/dist/esm/store/appStore.js.map +1 -0
- package/dist/esm/store/index.d.ts +5 -0
- package/dist/esm/store/index.js +6 -0
- package/dist/esm/store/portalStore.d.ts +33 -0
- package/dist/esm/store/portalStore.js +58 -0
- package/dist/esm/store/portalStore.js.map +1 -0
- package/dist/esm/store/saved-filters.d.ts +54 -0
- package/dist/esm/store/saved-filters.js +158 -0
- package/dist/esm/store/saved-filters.js.map +1 -0
- package/dist/esm/store/uiStore.d.ts +11 -0
- package/dist/esm/store/uiStore.js +16 -0
- package/dist/esm/store/uiStore.js.map +1 -0
- package/dist/esm/tests/portalMetaMocks.d.ts +16 -0
- package/dist/esm/tests/portalMetaMocks.js +15 -0
- package/dist/esm/tests/portalMetaMocks.js.map +1 -0
- package/dist/esm/types/badge.d.ts +16 -0
- package/dist/esm/types/badge.js +42 -0
- package/dist/esm/types/badge.js.map +1 -0
- package/dist/esm/types/index.d.ts +3 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/theme.d.ts +35 -0
- package/dist/esm/types/theme.js +0 -0
- package/dist/esm/utils/asyncUtils.d.ts +5 -0
- package/dist/esm/utils/asyncUtils.js +9 -0
- package/dist/esm/utils/asyncUtils.js.map +1 -0
- package/dist/esm/utils/fileSize.d.ts +5 -0
- package/dist/esm/utils/fileSize.js +18 -0
- package/dist/esm/utils/fileSize.js.map +1 -0
- package/dist/esm/utils/index.d.ts +4 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/theme.d.ts +197 -0
- package/dist/esm/utils/theme.js +689 -0
- package/dist/esm/utils/theme.js.map +1 -0
- package/package.json +75 -8
|
@@ -0,0 +1,689 @@
|
|
|
1
|
+
//#region src/utils/theme.ts
|
|
2
|
+
/**
|
|
3
|
+
* Adjusts the hue of a color by a given number of degrees.
|
|
4
|
+
* Hue wraps around at 360.
|
|
5
|
+
* @param color The Color object.
|
|
6
|
+
* @param degrees The number of degrees to adjust the hue by.
|
|
7
|
+
* @returns A new Color object.
|
|
8
|
+
*/
|
|
9
|
+
function adjustHue(color, degrees) {
|
|
10
|
+
let newHue = color.hue + degrees;
|
|
11
|
+
newHue = newHue % 360;
|
|
12
|
+
if (newHue < 0) newHue += 360;
|
|
13
|
+
return {
|
|
14
|
+
...color,
|
|
15
|
+
hue: newHue
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Applies the styles from a Theme object to the DOM.
|
|
20
|
+
* This function manipulates the document head and root element class.
|
|
21
|
+
* @param theme The Theme object to apply.
|
|
22
|
+
*/
|
|
23
|
+
function applyThemeStyles(theme) {
|
|
24
|
+
const css = generateThemeCSS(theme);
|
|
25
|
+
const style = document.createElement("style");
|
|
26
|
+
style.textContent = css;
|
|
27
|
+
const existingStyle = document.head.querySelector("style[data-theme]");
|
|
28
|
+
if (existingStyle) document.head.removeChild(existingStyle);
|
|
29
|
+
style.setAttribute("data-theme", theme.id);
|
|
30
|
+
document.head.appendChild(style);
|
|
31
|
+
document.documentElement.className = `theme-${theme.id}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates default system colors for a light theme.
|
|
35
|
+
*/
|
|
36
|
+
function createDefaultSystemColors() {
|
|
37
|
+
return {
|
|
38
|
+
active_ui_element: {
|
|
39
|
+
hue: 0,
|
|
40
|
+
lightness: 80,
|
|
41
|
+
saturation: 0
|
|
42
|
+
},
|
|
43
|
+
background: {
|
|
44
|
+
hue: 0,
|
|
45
|
+
lightness: 100,
|
|
46
|
+
saturation: 0
|
|
47
|
+
},
|
|
48
|
+
borders: {
|
|
49
|
+
hue: 0,
|
|
50
|
+
lightness: 70,
|
|
51
|
+
saturation: 0
|
|
52
|
+
},
|
|
53
|
+
high_contrast_text: {
|
|
54
|
+
hue: 0,
|
|
55
|
+
lightness: 10,
|
|
56
|
+
saturation: 0
|
|
57
|
+
},
|
|
58
|
+
hovered_element_border: {
|
|
59
|
+
hue: 0,
|
|
60
|
+
lightness: 50,
|
|
61
|
+
saturation: 0
|
|
62
|
+
},
|
|
63
|
+
hovered_solid_bg: {
|
|
64
|
+
hue: 0,
|
|
65
|
+
lightness: 35,
|
|
66
|
+
saturation: 0
|
|
67
|
+
},
|
|
68
|
+
hovered_ui_element: {
|
|
69
|
+
hue: 0,
|
|
70
|
+
lightness: 85,
|
|
71
|
+
saturation: 0
|
|
72
|
+
},
|
|
73
|
+
low_contrast_text: {
|
|
74
|
+
hue: 0,
|
|
75
|
+
lightness: 30,
|
|
76
|
+
saturation: 0
|
|
77
|
+
},
|
|
78
|
+
solid_background: {
|
|
79
|
+
hue: 0,
|
|
80
|
+
lightness: 40,
|
|
81
|
+
saturation: 0
|
|
82
|
+
},
|
|
83
|
+
subtle_background: {
|
|
84
|
+
hue: 0,
|
|
85
|
+
lightness: 95,
|
|
86
|
+
saturation: 0
|
|
87
|
+
},
|
|
88
|
+
ui_element_background: {
|
|
89
|
+
hue: 0,
|
|
90
|
+
lightness: 90,
|
|
91
|
+
saturation: 0
|
|
92
|
+
},
|
|
93
|
+
ui_element_border: {
|
|
94
|
+
hue: 0,
|
|
95
|
+
lightness: 60,
|
|
96
|
+
saturation: 0
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Creates a default theme object.
|
|
102
|
+
* This can be used as a fallback or starting point.
|
|
103
|
+
*/
|
|
104
|
+
function createDefaultTheme() {
|
|
105
|
+
return {
|
|
106
|
+
background_images: {
|
|
107
|
+
login: "",
|
|
108
|
+
register: "",
|
|
109
|
+
reset_password: ""
|
|
110
|
+
},
|
|
111
|
+
id: "default",
|
|
112
|
+
name: "Default Theme",
|
|
113
|
+
system_colors: createDefaultSystemColors()
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Creates a system colors object with all values at zero.
|
|
118
|
+
* Useful for testing and reset operations.
|
|
119
|
+
*/
|
|
120
|
+
function createZeroSystemColors() {
|
|
121
|
+
return {
|
|
122
|
+
active_ui_element: {
|
|
123
|
+
hue: 0,
|
|
124
|
+
lightness: 0,
|
|
125
|
+
saturation: 0
|
|
126
|
+
},
|
|
127
|
+
background: {
|
|
128
|
+
hue: 0,
|
|
129
|
+
lightness: 0,
|
|
130
|
+
saturation: 0
|
|
131
|
+
},
|
|
132
|
+
borders: {
|
|
133
|
+
hue: 0,
|
|
134
|
+
lightness: 0,
|
|
135
|
+
saturation: 0
|
|
136
|
+
},
|
|
137
|
+
high_contrast_text: {
|
|
138
|
+
hue: 0,
|
|
139
|
+
lightness: 0,
|
|
140
|
+
saturation: 0
|
|
141
|
+
},
|
|
142
|
+
hovered_element_border: {
|
|
143
|
+
hue: 0,
|
|
144
|
+
lightness: 0,
|
|
145
|
+
saturation: 0
|
|
146
|
+
},
|
|
147
|
+
hovered_solid_bg: {
|
|
148
|
+
hue: 0,
|
|
149
|
+
lightness: 0,
|
|
150
|
+
saturation: 0
|
|
151
|
+
},
|
|
152
|
+
hovered_ui_element: {
|
|
153
|
+
hue: 0,
|
|
154
|
+
lightness: 0,
|
|
155
|
+
saturation: 0
|
|
156
|
+
},
|
|
157
|
+
low_contrast_text: {
|
|
158
|
+
hue: 0,
|
|
159
|
+
lightness: 0,
|
|
160
|
+
saturation: 0
|
|
161
|
+
},
|
|
162
|
+
solid_background: {
|
|
163
|
+
hue: 0,
|
|
164
|
+
lightness: 0,
|
|
165
|
+
saturation: 0
|
|
166
|
+
},
|
|
167
|
+
subtle_background: {
|
|
168
|
+
hue: 0,
|
|
169
|
+
lightness: 0,
|
|
170
|
+
saturation: 0
|
|
171
|
+
},
|
|
172
|
+
ui_element_background: {
|
|
173
|
+
hue: 0,
|
|
174
|
+
lightness: 0,
|
|
175
|
+
saturation: 0
|
|
176
|
+
},
|
|
177
|
+
ui_element_border: {
|
|
178
|
+
hue: 0,
|
|
179
|
+
lightness: 0,
|
|
180
|
+
saturation: 0
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Darkens a color by a given percentage.
|
|
186
|
+
* @param color The Color object.
|
|
187
|
+
* @param amount The percentage amount to darken by (0-100).
|
|
188
|
+
* @returns A new Color object.
|
|
189
|
+
*/
|
|
190
|
+
function darkenColor(color, amount) {
|
|
191
|
+
const newLightness = clamp(color.lightness - amount, 0, 100);
|
|
192
|
+
return {
|
|
193
|
+
...color,
|
|
194
|
+
lightness: newLightness
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Desaturates a color by a given percentage.
|
|
199
|
+
* @param color The Color object.
|
|
200
|
+
* @param amount The percentage amount to desaturate by (0-100).
|
|
201
|
+
* @returns A new Color object.
|
|
202
|
+
*/
|
|
203
|
+
function desaturateColor(color, amount) {
|
|
204
|
+
const newSaturation = clamp(color.saturation - amount, 0, 100);
|
|
205
|
+
return {
|
|
206
|
+
...color,
|
|
207
|
+
saturation: newSaturation
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Attempts to adjust theme colors to meet WCAG contrast requirements.
|
|
212
|
+
* It iterates through common color pairs and adjusts lightness if contrast is insufficient.
|
|
213
|
+
* Returns a new Theme object if changes were made, otherwise returns the original theme.
|
|
214
|
+
* @param theme The Theme object to check and potentially adjust.
|
|
215
|
+
* @param textLevel The desired WCAG level for text contrast ('AA' or 'AAA'). Defaults to 'AA'.
|
|
216
|
+
* @param nonTextLevel The desired WCAG level for non-text contrast ('AA'). Defaults to 'AA'.
|
|
217
|
+
* @returns A new Theme object with adjusted colors if needed, or the original theme.
|
|
218
|
+
*/
|
|
219
|
+
function ensureWcagContrast(theme, textLevel = "AA", nonTextLevel = "AA") {
|
|
220
|
+
const modifiedTheme = {
|
|
221
|
+
...theme,
|
|
222
|
+
systemColors: { ...theme.system_colors }
|
|
223
|
+
};
|
|
224
|
+
let changesMade = false;
|
|
225
|
+
const colors = modifiedTheme.systemColors;
|
|
226
|
+
for (const { bgKey, fgKey, type } of [
|
|
227
|
+
{
|
|
228
|
+
bgKey: "background",
|
|
229
|
+
fgKey: "high_contrast_text",
|
|
230
|
+
type: "text"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
bgKey: "background",
|
|
234
|
+
fgKey: "low_contrast_text",
|
|
235
|
+
type: "text"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
bgKey: "ui_element_background",
|
|
239
|
+
fgKey: "high_contrast_text",
|
|
240
|
+
type: "text"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
bgKey: "ui_element_background",
|
|
244
|
+
fgKey: "low_contrast_text",
|
|
245
|
+
type: "text"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
bgKey: "ui_element_background",
|
|
249
|
+
fgKey: "ui_element_border",
|
|
250
|
+
type: "non-text"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
bgKey: "hovered_ui_element",
|
|
254
|
+
fgKey: "hovered_element_border",
|
|
255
|
+
type: "non-text"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
bgKey: "ui_element_background",
|
|
259
|
+
fgKey: "active_ui_element",
|
|
260
|
+
type: "non-text"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
bgKey: "background",
|
|
264
|
+
fgKey: "hovered_ui_element",
|
|
265
|
+
type: "non-text"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
bgKey: "background",
|
|
269
|
+
fgKey: "solid_background",
|
|
270
|
+
type: "non-text"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
bgKey: "solid_background",
|
|
274
|
+
fgKey: "hovered_solid_bg",
|
|
275
|
+
type: "non-text"
|
|
276
|
+
}
|
|
277
|
+
]) {
|
|
278
|
+
const fgColor = colors[fgKey];
|
|
279
|
+
const bgColor = colors[bgKey];
|
|
280
|
+
let needsAdjustment = false;
|
|
281
|
+
let requiredRatio;
|
|
282
|
+
if (type === "text") {
|
|
283
|
+
requiredRatio = textLevel === "AAA" ? 7 : 4.5;
|
|
284
|
+
if (!meetsWcagTextContrast(fgColor, bgColor, textLevel, false)) needsAdjustment = true;
|
|
285
|
+
} else {
|
|
286
|
+
requiredRatio = 3;
|
|
287
|
+
if (!meetsWcagNonTextContrast(fgColor, bgColor)) needsAdjustment = true;
|
|
288
|
+
}
|
|
289
|
+
if (needsAdjustment) {
|
|
290
|
+
changesMade = true;
|
|
291
|
+
console.warn(`WCAG Contrast Warning: Pair ${fgKey} vs ${bgKey} (Current Ratio: ${getContrastRatio(fgColor, bgColor)}) does not meet required ratio ${requiredRatio} for ${type === "text" ? textLevel + " Text" : "Non-text"}. Attempting to adjust.`);
|
|
292
|
+
rgbToLuminance(...hslToRgb(fgColor));
|
|
293
|
+
rgbToLuminance(...hslToRgb(bgColor));
|
|
294
|
+
let adjustedFg = { ...fgColor };
|
|
295
|
+
let adjustedBg = { ...bgColor };
|
|
296
|
+
let currentRatio = getContrastRatio(adjustedFg, adjustedBg);
|
|
297
|
+
const step = 1;
|
|
298
|
+
const maxAttempts = 200;
|
|
299
|
+
let attempts = 0;
|
|
300
|
+
let adjustingFg = true;
|
|
301
|
+
while (currentRatio < requiredRatio && attempts < maxAttempts) {
|
|
302
|
+
attempts++;
|
|
303
|
+
const currentFgLuminance = rgbToLuminance(...hslToRgb(adjustedFg));
|
|
304
|
+
const currentBgLuminance = rgbToLuminance(...hslToRgb(adjustedBg));
|
|
305
|
+
let adjustedThisIteration = false;
|
|
306
|
+
if (adjustingFg) {
|
|
307
|
+
const fgAdjustmentDirection = currentFgLuminance < currentBgLuminance ? -1 : 1;
|
|
308
|
+
const nextFgLightness = clamp(adjustedFg.lightness + fgAdjustmentDirection * step, 0, 100);
|
|
309
|
+
if (adjustedFg.lightness === nextFgLightness) adjustingFg = false;
|
|
310
|
+
else {
|
|
311
|
+
adjustedFg = {
|
|
312
|
+
...adjustedFg,
|
|
313
|
+
lightness: nextFgLightness
|
|
314
|
+
};
|
|
315
|
+
currentRatio = getContrastRatio(adjustedFg, adjustedBg);
|
|
316
|
+
adjustedThisIteration = true;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (!adjustedThisIteration && !adjustingFg) {
|
|
320
|
+
const bgAdjustmentDirection = currentBgLuminance < currentFgLuminance ? 1 : -1;
|
|
321
|
+
const nextBgLightness = clamp(adjustedBg.lightness + bgAdjustmentDirection * step, 0, 100);
|
|
322
|
+
if (adjustedBg.lightness === nextBgLightness) break;
|
|
323
|
+
else {
|
|
324
|
+
adjustedBg = {
|
|
325
|
+
...adjustedBg,
|
|
326
|
+
lightness: nextBgLightness
|
|
327
|
+
};
|
|
328
|
+
currentRatio = getContrastRatio(adjustedFg, adjustedBg);
|
|
329
|
+
adjustedThisIteration = true;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (!adjustedThisIteration) {
|
|
333
|
+
console.warn(` WCAG Contrast Warning: Neither FG nor BG could be adjusted further for ${fgKey} vs ${bgKey}. Current Ratio: ${currentRatio}. Required: ${requiredRatio}. Stopping.`);
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
modifiedTheme.systemColors[fgKey] = adjustedFg;
|
|
338
|
+
modifiedTheme.systemColors[bgKey] = adjustedBg;
|
|
339
|
+
if (getContrastRatio(adjustedFg, adjustedBg) < requiredRatio) console.warn(`WCAG Contrast Warning: Pair ${fgKey} vs ${bgKey} could not meet required ratio ${requiredRatio} after ${attempts} attempts. Final Ratio: ${getContrastRatio(adjustedFg, adjustedBg)}.`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return changesMade ? modifiedTheme : theme;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Generates CSS variable declarations for a given theme.
|
|
346
|
+
* @param theme The Theme object.
|
|
347
|
+
* @returns A CSS string with variable declarations.
|
|
348
|
+
*/
|
|
349
|
+
function generateThemeCSS(theme) {
|
|
350
|
+
const systemColors = theme?.system_colors && typeof theme.system_colors === "object" && !Array.isArray(theme.system_colors) ? theme.system_colors : {};
|
|
351
|
+
const backgroundImages = theme?.background_images && typeof theme.background_images === "object" && !Array.isArray(theme.background_images) ? theme.background_images : {};
|
|
352
|
+
const colorVariables = Object.entries(systemColors).map(([key, value]) => {
|
|
353
|
+
if (!isValidColor(value)) {
|
|
354
|
+
console.warn(`Skipping invalid color for key "${key}" in theme "${theme?.id}"`);
|
|
355
|
+
return "";
|
|
356
|
+
}
|
|
357
|
+
return `--theme-${key.replace(/_/g, "-")}: ${hslToRawString(value)};`;
|
|
358
|
+
}).filter((line) => line !== "").join("\n ");
|
|
359
|
+
const backgroundImageVariables = Object.entries(backgroundImages).map(([key, value]) => {
|
|
360
|
+
if (typeof value !== "string") {
|
|
361
|
+
console.warn(`Skipping invalid background image URL for key "${key}" in theme "${theme?.id}"`);
|
|
362
|
+
return "";
|
|
363
|
+
}
|
|
364
|
+
return `--lume-bg-${key.replace(/_/g, "-")}: url("${value}");`;
|
|
365
|
+
}).filter((line) => line !== "").join("\n ");
|
|
366
|
+
return `
|
|
367
|
+
:root.theme-${theme?.id || "unknown"} {
|
|
368
|
+
${colorVariables}
|
|
369
|
+
${backgroundImageVariables}
|
|
370
|
+
}
|
|
371
|
+
`;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Calculates the contrast ratio between two colors.
|
|
375
|
+
* Based on WCAG 2.x guidelines.
|
|
376
|
+
* @param color1 The first Color object.
|
|
377
|
+
* @param color2 The second Color object.
|
|
378
|
+
* @returns The contrast ratio (1 to 21).
|
|
379
|
+
*/
|
|
380
|
+
function getContrastRatio(color1, color2) {
|
|
381
|
+
const [r1, g1, b1] = hslToRgb(color1);
|
|
382
|
+
const [r2, g2, b2] = hslToRgb(color2);
|
|
383
|
+
const luminance1 = rgbToLuminance(r1, g1, b1);
|
|
384
|
+
const luminance2 = rgbToLuminance(r2, g2, b2);
|
|
385
|
+
const lighter = Math.max(luminance1, luminance2);
|
|
386
|
+
const darker = Math.min(luminance1, luminance2);
|
|
387
|
+
const ratio = (lighter + .05) / (darker + .05);
|
|
388
|
+
return Math.round(ratio * 100) / 100;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Finds a specific theme by its ID from a list of themes.
|
|
392
|
+
* @param themes The array of available themes.
|
|
393
|
+
* @param themeId The ID of the theme to find.
|
|
394
|
+
* @returns The found Theme object or undefined if not found.
|
|
395
|
+
*/
|
|
396
|
+
function getThemeById(themes, themeId) {
|
|
397
|
+
return themes.find((t) => t.id === themeId);
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Converts a Hex color string (#RRGGBB or #RGB) to an HSL Color object.
|
|
401
|
+
* @param hex The hex color string.
|
|
402
|
+
* @returns An HSL Color object or undefined if the hex string is invalid.
|
|
403
|
+
*/
|
|
404
|
+
function hexToHsl(hex) {
|
|
405
|
+
const hexMatch = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.exec(hex);
|
|
406
|
+
if (!hexMatch) {
|
|
407
|
+
console.error(`Invalid hex color format: ${hex}`);
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
let cleanHex = hexMatch[1];
|
|
411
|
+
if (cleanHex.length === 3) cleanHex = cleanHex[0] + cleanHex[0] + cleanHex[1] + cleanHex[1] + cleanHex[2] + cleanHex[2];
|
|
412
|
+
return rgbToHsl(parseInt(cleanHex.substring(0, 2), 16), parseInt(cleanHex.substring(2, 4), 16), parseInt(cleanHex.substring(4, 6), 16));
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Converts a Color object to raw HSL values as a string.
|
|
416
|
+
* @param color The Color object.
|
|
417
|
+
* @returns A string in the format "hue, saturation%, lightness%".
|
|
418
|
+
*/
|
|
419
|
+
function hslToRawString(color) {
|
|
420
|
+
return `${color.hue}, ${color.saturation}%, ${color.lightness}%`;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Converts an HSL Color object to RGB values (0-255).
|
|
424
|
+
* Needed for calculating luminance for contrast ratio.
|
|
425
|
+
* @param color The HSL Color object.
|
|
426
|
+
* @returns An array [r, g, b] with values in the range [0, 255].
|
|
427
|
+
*/
|
|
428
|
+
function hslToRgb(color) {
|
|
429
|
+
const h = color.hue / 360;
|
|
430
|
+
const s = color.saturation / 100;
|
|
431
|
+
const l = color.lightness / 100;
|
|
432
|
+
let b, g, r;
|
|
433
|
+
if (s === 0) r = g = b = l;
|
|
434
|
+
else {
|
|
435
|
+
const hue2rgb = (p, q, t) => {
|
|
436
|
+
if (t < 0) t += 1;
|
|
437
|
+
if (t > 1) t -= 1;
|
|
438
|
+
if (t < 1 / 6) return p + (q - p) * 6 * t;
|
|
439
|
+
if (t < 1 / 2) return q;
|
|
440
|
+
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
|
|
441
|
+
return p;
|
|
442
|
+
};
|
|
443
|
+
const q = l < .5 ? l * (1 + s) : l + s - l * s;
|
|
444
|
+
const p = 2 * l - q;
|
|
445
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
446
|
+
g = hue2rgb(p, q, h);
|
|
447
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
448
|
+
}
|
|
449
|
+
return [
|
|
450
|
+
Math.round(r * 255),
|
|
451
|
+
Math.round(g * 255),
|
|
452
|
+
Math.round(b * 255)
|
|
453
|
+
];
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Converts a Color object to a CSS HSL string.
|
|
457
|
+
* @param color The Color object.
|
|
458
|
+
* @returns A string in the format "hsl(hue, saturation%, lightness%)".
|
|
459
|
+
*/
|
|
460
|
+
function hslToString(color) {
|
|
461
|
+
return `hsl(${hslToRawString(color)})`;
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Checks if an object conforms to the BackgroundImages interface structure.
|
|
465
|
+
* @param data The object to validate.
|
|
466
|
+
* @returns True if the object is valid BackgroundImages, false otherwise.
|
|
467
|
+
*/
|
|
468
|
+
function isValidBackgroundImages(data) {
|
|
469
|
+
if (typeof data !== "object" || data === null) return false;
|
|
470
|
+
for (const key of [
|
|
471
|
+
"login",
|
|
472
|
+
"register",
|
|
473
|
+
"reset_password"
|
|
474
|
+
]) if (!Object.prototype.hasOwnProperty.call(data, key) || typeof data[key] !== "string") return false;
|
|
475
|
+
return true;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Checks if an object conforms to the Color interface structure.
|
|
479
|
+
* @param data The object to validate.
|
|
480
|
+
* @returns True if the object is a valid Color, false otherwise.
|
|
481
|
+
*/
|
|
482
|
+
function isValidColor(data) {
|
|
483
|
+
return typeof data === "object" && data !== null && typeof data.hue === "number" && typeof data.saturation === "number" && typeof data.lightness === "number";
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Checks if an object conforms to the SystemColors interface structure.
|
|
487
|
+
* @param data The object to validate.
|
|
488
|
+
* @returns True if the object is valid SystemColors, false otherwise.
|
|
489
|
+
*/
|
|
490
|
+
function isValidSystemColors(data) {
|
|
491
|
+
if (typeof data !== "object" || data === null) return false;
|
|
492
|
+
for (const key of [
|
|
493
|
+
"active_ui_element",
|
|
494
|
+
"background",
|
|
495
|
+
"borders",
|
|
496
|
+
"high_contrast_text",
|
|
497
|
+
"hovered_element_border",
|
|
498
|
+
"hovered_solid_bg",
|
|
499
|
+
"hovered_ui_element",
|
|
500
|
+
"low_contrast_text",
|
|
501
|
+
"solid_background",
|
|
502
|
+
"subtle_background",
|
|
503
|
+
"ui_element_background",
|
|
504
|
+
"ui_element_border"
|
|
505
|
+
]) if (!Object.prototype.hasOwnProperty.call(data, key) || !isValidColor(data[key])) return false;
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Lightens a color by a given percentage.
|
|
510
|
+
* @param color The Color object.
|
|
511
|
+
* @param amount The percentage amount to lighten by (0-100).
|
|
512
|
+
* @returns A new Color object.
|
|
513
|
+
*/
|
|
514
|
+
function lightenColor(color, amount) {
|
|
515
|
+
const newLightness = clamp(color.lightness + amount, 0, 100);
|
|
516
|
+
return {
|
|
517
|
+
...color,
|
|
518
|
+
lightness: newLightness
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Checks if the contrast ratio between two colors meets a specified WCAG level.
|
|
523
|
+
* Assumes normal text size (not large text).
|
|
524
|
+
* WCAG AA requires 4.5:1. WCAG AAA requires 7:1.
|
|
525
|
+
* @param color1 The first Color object.
|
|
526
|
+
* @param color2 The second Color object.
|
|
527
|
+
* @param level The WCAG level to check against ('AA' or 'AAA').
|
|
528
|
+
* @returns True if the contrast ratio meets the level, false otherwise.
|
|
529
|
+
*/
|
|
530
|
+
function meetsWcagContrast(color1, color2, level) {
|
|
531
|
+
return meetsWcagTextContrast(color1, color2, level, false);
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Checks if the contrast ratio between two colors meets the WCAG 2.1 SC 1.4.11 Non-text Contrast (AA) requirement.
|
|
535
|
+
* This applies to graphical objects and user interface components.
|
|
536
|
+
* @param color1 The first Color object (e.g., icon color, border color).
|
|
537
|
+
* @param color2 The second Color object (e.g., adjacent background color).
|
|
538
|
+
* @returns True if the contrast ratio is 3:1 or higher, false otherwise.
|
|
539
|
+
*/
|
|
540
|
+
function meetsWcagNonTextContrast(color1, color2) {
|
|
541
|
+
return getContrastRatio(color1, color2) >= 3;
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Checks if the contrast ratio between two colors meets a specified WCAG level for text.
|
|
545
|
+
* WCAG 2.x/2.1 SC 1.4.3 (Minimum) and SC 1.4.6 (Enhanced).
|
|
546
|
+
* @param color1 The first Color object (e.g., text color).
|
|
547
|
+
* @param color2 The second Color object (e.g., background color).
|
|
548
|
+
* @param level The WCAG level to check against ('AA' or 'AAA').
|
|
549
|
+
* @param isLargeText True if the text is considered "large text" by WCAG definition.
|
|
550
|
+
* @returns True if the contrast ratio meets the level for the given text size, false otherwise.
|
|
551
|
+
*/
|
|
552
|
+
function meetsWcagTextContrast(color1, color2, level, isLargeText) {
|
|
553
|
+
const ratio = getContrastRatio(color1, color2);
|
|
554
|
+
let requiredRatio;
|
|
555
|
+
if (isLargeText) requiredRatio = level === "AAA" ? 4.5 : 3;
|
|
556
|
+
else requiredRatio = level === "AAA" ? 7 : 4.5;
|
|
557
|
+
return ratio >= requiredRatio;
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Merges properties from an overrides object into a base theme object.
|
|
561
|
+
* Performs a deep merge for systemColors and backgroundImages.
|
|
562
|
+
* @param base The base Theme object.
|
|
563
|
+
* @param overrides The partial Theme object with overrides.
|
|
564
|
+
* @returns A new Theme object with overrides applied.
|
|
565
|
+
*/
|
|
566
|
+
function mergeThemes(base, overrides) {
|
|
567
|
+
const mergedTheme = { ...base };
|
|
568
|
+
if (overrides.name !== void 0) mergedTheme.name = overrides.name;
|
|
569
|
+
if (overrides.default !== void 0) mergedTheme.default = overrides.default;
|
|
570
|
+
if (overrides.system_colors) mergedTheme.system_colors = {
|
|
571
|
+
...base.system_colors,
|
|
572
|
+
...overrides.system_colors
|
|
573
|
+
};
|
|
574
|
+
if (overrides.background_images) mergedTheme.background_images = {
|
|
575
|
+
...base.background_images,
|
|
576
|
+
...overrides.background_images
|
|
577
|
+
};
|
|
578
|
+
return mergedTheme;
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Converts RGB values (0-255) to an HSL Color object.
|
|
582
|
+
* @param r Red value (0-255).
|
|
583
|
+
* @param g Green value (0-255).
|
|
584
|
+
* @param b Blue value (0-255).
|
|
585
|
+
* @returns An HSL Color object.
|
|
586
|
+
*/
|
|
587
|
+
function rgbToHsl(r, g, b) {
|
|
588
|
+
r = clamp(r, 0, 255);
|
|
589
|
+
g = clamp(g, 0, 255);
|
|
590
|
+
b = clamp(b, 0, 255);
|
|
591
|
+
const rNorm = r / 255;
|
|
592
|
+
const gNorm = g / 255;
|
|
593
|
+
const bNorm = b / 255;
|
|
594
|
+
const max = Math.max(rNorm, gNorm, bNorm);
|
|
595
|
+
const min = Math.min(rNorm, gNorm, bNorm);
|
|
596
|
+
let h = 0;
|
|
597
|
+
let s = 0;
|
|
598
|
+
const l = (max + min) / 2;
|
|
599
|
+
if (max !== min) {
|
|
600
|
+
const d = max - min;
|
|
601
|
+
s = l > .5 ? d / (2 - max - min) : d / (max + min);
|
|
602
|
+
switch (max) {
|
|
603
|
+
case bNorm:
|
|
604
|
+
h = (rNorm - gNorm) / d + 4;
|
|
605
|
+
break;
|
|
606
|
+
case gNorm:
|
|
607
|
+
h = (bNorm - rNorm) / d + 2;
|
|
608
|
+
break;
|
|
609
|
+
case rNorm:
|
|
610
|
+
h = (gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0);
|
|
611
|
+
break;
|
|
612
|
+
}
|
|
613
|
+
h /= 6;
|
|
614
|
+
}
|
|
615
|
+
const hue = Math.round(h * 360);
|
|
616
|
+
const saturation = Math.round(s * 100);
|
|
617
|
+
return {
|
|
618
|
+
hue,
|
|
619
|
+
lightness: Math.round(l * 100),
|
|
620
|
+
saturation
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Calculates the relative luminance of an RGB color.
|
|
625
|
+
* Based on WCAG 2.x guidelines.
|
|
626
|
+
* @param r Red value (0-255).
|
|
627
|
+
* @param g Green value (0-255).
|
|
628
|
+
* @param b Blue value (0-255).
|
|
629
|
+
* @returns The relative luminance (0-1).
|
|
630
|
+
*/
|
|
631
|
+
function rgbToLuminance(r, g, b) {
|
|
632
|
+
const channelLuminance = (channel) => {
|
|
633
|
+
const srgb = channel / 255;
|
|
634
|
+
return srgb <= .03928 ? srgb / 12.92 : Math.pow((srgb + .055) / 1.055, 2.4);
|
|
635
|
+
};
|
|
636
|
+
const lumR = channelLuminance(r);
|
|
637
|
+
const lumG = channelLuminance(g);
|
|
638
|
+
const lumB = channelLuminance(b);
|
|
639
|
+
return .2126 * lumR + .7152 * lumG + .0722 * lumB;
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* Saturates a color by a given percentage.
|
|
643
|
+
* @param color The Color object.
|
|
644
|
+
* @param amount The percentage amount to saturate by (0-100).
|
|
645
|
+
* @returns A new Color object.
|
|
646
|
+
*/
|
|
647
|
+
function saturateColor(color, amount) {
|
|
648
|
+
const newSaturation = clamp(color.saturation + amount, 0, 100);
|
|
649
|
+
return {
|
|
650
|
+
...color,
|
|
651
|
+
saturation: newSaturation
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Validates if an object conforms to the Theme interface structure.
|
|
656
|
+
* @param data The object to validate.
|
|
657
|
+
* @returns True if the object is a valid Theme, false otherwise.
|
|
658
|
+
*/
|
|
659
|
+
function validateTheme(data) {
|
|
660
|
+
if (typeof data !== "object" || data === null) return false;
|
|
661
|
+
if (typeof data.id !== "string" || typeof data.name !== "string") return false;
|
|
662
|
+
if (!isValidSystemColors(data.systemColors)) return false;
|
|
663
|
+
if (!isValidBackgroundImages(data.backgroundImages)) return false;
|
|
664
|
+
if (data.default !== void 0 && typeof data.default !== "boolean") return false;
|
|
665
|
+
return true;
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Clamps a value between a minimum and maximum.
|
|
669
|
+
* @param value The value to clamp.
|
|
670
|
+
* @param min The minimum allowed value.
|
|
671
|
+
* @param max The maximum allowed value.
|
|
672
|
+
* @returns The clamped value.
|
|
673
|
+
*/
|
|
674
|
+
function clamp(value, min, max) {
|
|
675
|
+
return Math.max(min, Math.min(value, max));
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Merges properties from an overrides object into a base theme object.
|
|
679
|
+
* Useful for applying partial theme customizations.
|
|
680
|
+
* export function mergeThemes(base: Theme, overrides: Partial<Theme>): Theme { ... }
|
|
681
|
+
*/
|
|
682
|
+
/**
|
|
683
|
+
* Validates if an object conforms to the Theme interface structure.
|
|
684
|
+
* export function function validateTheme(theme: any): theme is Theme { ... }
|
|
685
|
+
*/
|
|
686
|
+
|
|
687
|
+
//#endregion
|
|
688
|
+
export { adjustHue, applyThemeStyles, createDefaultSystemColors, createDefaultTheme, createZeroSystemColors, darkenColor, desaturateColor, ensureWcagContrast, generateThemeCSS, getContrastRatio, getThemeById, hexToHsl, hslToRawString, hslToRgb, hslToString, isValidBackgroundImages, isValidColor, isValidSystemColors, lightenColor, meetsWcagContrast, meetsWcagNonTextContrast, meetsWcagTextContrast, mergeThemes, rgbToHsl, rgbToLuminance, saturateColor, validateTheme };
|
|
689
|
+
//# sourceMappingURL=theme.js.map
|