@qwickapps/react-framework 1.4.9 → 1.5.0
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 +23 -0
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +9 -9
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -1
- package/dist/components/AccessibilityProvider.d.ts +1 -1
- package/dist/components/AccessibilityProvider.d.ts.map +1 -1
- package/dist/components/ErrorBoundary.d.ts +1 -1
- package/dist/components/Html.d.ts +8 -8
- package/dist/components/Html.d.ts.map +1 -1
- package/dist/components/Logo.d.ts +2 -2
- package/dist/components/Logo.d.ts.map +1 -1
- package/dist/components/Markdown.d.ts +5 -5
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/ProductLogo.d.ts +60 -0
- package/dist/components/ProductLogo.d.ts.map +1 -0
- package/dist/components/QwickAppsLogo.d.ts +1 -1
- package/dist/components/QwickAppsLogo.d.ts.map +1 -1
- package/dist/components/ResponsiveMenu.d.ts.map +1 -1
- package/dist/components/SafeSpan.d.ts +4 -4
- package/dist/components/SafeSpan.d.ts.map +1 -1
- package/dist/components/Scaffold.d.ts.map +1 -1
- package/dist/components/base/Container.d.ts +3 -2
- package/dist/components/base/Container.d.ts.map +1 -1
- package/dist/components/base/ModelView.d.ts +16 -16
- package/dist/components/base/ModelView.d.ts.map +1 -1
- package/dist/components/base/index.d.ts +1 -1
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/blocks/Article.d.ts +4 -18
- package/dist/components/blocks/Article.d.ts.map +1 -1
- package/dist/components/blocks/CardListGrid.d.ts +3 -3
- package/dist/components/blocks/CardListGrid.d.ts.map +1 -1
- package/dist/components/blocks/Code.d.ts +5 -31
- package/dist/components/blocks/Code.d.ts.map +1 -1
- package/dist/components/blocks/Content.d.ts +2 -17
- package/dist/components/blocks/Content.d.ts.map +1 -1
- package/dist/components/blocks/CoverImageHeader.d.ts +2 -12
- package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
- package/dist/components/blocks/FeatureCard.d.ts +0 -17
- package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
- package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
- package/dist/components/blocks/Footer.d.ts +2 -14
- package/dist/components/blocks/Footer.d.ts.map +1 -1
- package/dist/components/blocks/HeroBlock.d.ts +35 -26
- package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
- package/dist/components/blocks/Image.d.ts +23 -23
- package/dist/components/blocks/Image.d.ts.map +1 -1
- package/dist/components/blocks/PageBannerHeader.d.ts +2 -13
- package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
- package/dist/components/blocks/ProductCard.d.ts +0 -9
- package/dist/components/blocks/ProductCard.d.ts.map +1 -1
- package/dist/components/blocks/Section.d.ts +16 -24
- package/dist/components/blocks/Section.d.ts.map +1 -1
- package/dist/components/blocks/Text.d.ts +5 -20
- package/dist/components/blocks/Text.d.ts.map +1 -1
- package/dist/components/buttons/Button.d.ts +19 -23
- package/dist/components/buttons/Button.d.ts.map +1 -1
- package/dist/components/buttons/PaletteSwitcher.d.ts +2 -2
- package/dist/components/buttons/PaletteSwitcher.d.ts.map +1 -1
- package/dist/components/buttons/ThemeSwitcher.d.ts +2 -2
- package/dist/components/buttons/ThemeSwitcher.d.ts.map +1 -1
- package/dist/components/dialogs/Dialog.d.ts +35 -0
- package/dist/components/dialogs/Dialog.d.ts.map +1 -0
- package/dist/components/dialogs/index.d.ts +8 -0
- package/dist/components/dialogs/index.d.ts.map +1 -0
- package/dist/components/forms/Captcha.d.ts +55 -0
- package/dist/components/forms/Captcha.d.ts.map +1 -0
- package/dist/components/forms/FormBlock.d.ts +6 -6
- package/dist/components/forms/FormBlock.d.ts.map +1 -1
- package/dist/components/forms/FormCheckbox.d.ts +27 -0
- package/dist/components/forms/FormCheckbox.d.ts.map +1 -0
- package/dist/components/forms/FormField.d.ts +43 -0
- package/dist/components/forms/FormField.d.ts.map +1 -0
- package/dist/components/forms/FormSelect.d.ts +35 -0
- package/dist/components/forms/FormSelect.d.ts.map +1 -0
- package/dist/components/forms/index.d.ts +8 -0
- package/dist/components/forms/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +10 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/input/ChoiceInputField.d.ts +13 -19
- package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
- package/dist/components/input/HtmlInputField.d.ts +16 -17
- package/dist/components/input/HtmlInputField.d.ts.map +1 -1
- package/dist/components/input/SelectInputField.d.ts +14 -17
- package/dist/components/input/SelectInputField.d.ts.map +1 -1
- package/dist/components/input/SwitchInputField.d.ts +11 -18
- package/dist/components/input/SwitchInputField.d.ts.map +1 -1
- package/dist/components/input/TextInputField.d.ts +16 -19
- package/dist/components/input/TextInputField.d.ts.map +1 -1
- package/dist/components/layout/CollapsibleLayout/CollapsibleLayout.d.ts.map +1 -1
- package/dist/components/layout/GridCell.d.ts +18 -19
- package/dist/components/layout/GridCell.d.ts.map +1 -1
- package/dist/components/layout/GridLayout.d.ts +36 -25
- package/dist/components/layout/GridLayout.d.ts.map +1 -1
- package/dist/components/menu/MenuItem.d.ts +2 -2
- package/dist/components/menu/MenuItem.d.ts.map +1 -1
- package/dist/components/pages/FormPage.d.ts.map +1 -1
- package/dist/components/pages/Page.d.ts +1 -1
- package/dist/components/pages/Page.d.ts.map +1 -1
- package/dist/components/shared/createSerializableView.d.ts +22 -10
- package/dist/components/shared/createSerializableView.d.ts.map +1 -1
- package/dist/components/shared/viewProps.d.ts +3 -3
- package/dist/components/shared/viewProps.d.ts.map +1 -1
- package/dist/config/AppConfig.d.ts +2 -2
- package/dist/config/AppConfig.d.ts.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/contexts/DataContext.d.ts +3 -3
- package/dist/contexts/DataContext.d.ts.map +1 -1
- package/dist/contexts/PaletteContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/hooks/useDataBinding.d.ts +2 -2
- package/dist/hooks/useDataBinding.d.ts.map +1 -1
- package/dist/hooks/usePrintMode.d.ts +2 -2
- package/dist/hooks/usePrintMode.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +3980 -2194
- package/dist/index.js +4006 -2191
- package/dist/palettes/manifest.json +90 -0
- package/dist/palettes/palette-autumn.1.4.9.min.css +1 -0
- package/dist/palettes/palette-autumn.1.5.0.css +172 -0
- package/dist/palettes/palette-autumn.1.5.0.min.css +1 -0
- package/dist/palettes/palette-autumn.latest.css +172 -0
- package/dist/palettes/palette-autumn.latest.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.4.9.min.css +1 -0
- package/dist/palettes/palette-cosmic.1.5.0.css +172 -0
- package/dist/palettes/palette-cosmic.1.5.0.min.css +1 -0
- package/dist/palettes/palette-cosmic.latest.css +172 -0
- package/dist/palettes/palette-cosmic.latest.min.css +1 -0
- package/dist/palettes/palette-default.1.4.9.min.css +1 -0
- package/dist/palettes/palette-default.1.5.0.css +178 -0
- package/dist/palettes/palette-default.1.5.0.min.css +1 -0
- package/dist/palettes/palette-default.latest.css +178 -0
- package/dist/palettes/palette-default.latest.min.css +1 -0
- package/dist/palettes/palette-ocean.1.4.9.min.css +1 -0
- package/dist/palettes/palette-ocean.1.5.0.css +172 -0
- package/dist/palettes/palette-ocean.1.5.0.min.css +1 -0
- package/dist/palettes/palette-ocean.latest.css +172 -0
- package/dist/palettes/palette-ocean.latest.min.css +1 -0
- package/dist/palettes/palette-spring.1.4.9.min.css +1 -0
- package/dist/palettes/palette-spring.1.5.0.css +160 -0
- package/dist/palettes/palette-spring.1.5.0.min.css +1 -0
- package/dist/palettes/palette-spring.latest.css +160 -0
- package/dist/palettes/palette-spring.latest.min.css +1 -0
- package/dist/palettes/palette-winter.1.4.9.min.css +1 -0
- package/dist/palettes/palette-winter.1.5.0.css +172 -0
- package/dist/palettes/palette-winter.1.5.0.min.css +1 -0
- package/dist/palettes/palette-winter.latest.css +172 -0
- package/dist/palettes/palette-winter.latest.min.css +1 -0
- package/dist/schemas/ButtonSchema.d.ts +5 -2
- package/dist/schemas/ButtonSchema.d.ts.map +1 -1
- package/dist/schemas/CardListGridSchema.d.ts +4 -4
- package/dist/schemas/CardListGridSchema.d.ts.map +1 -1
- package/dist/schemas/ChoiceInputFieldSchema.d.ts +2 -2
- package/dist/schemas/ChoiceInputFieldSchema.d.ts.map +1 -1
- package/dist/schemas/CodeSchema.d.ts +1 -2
- package/dist/schemas/CodeSchema.d.ts.map +1 -1
- package/dist/schemas/FormBlockSchema.d.ts +2 -2
- package/dist/schemas/FormBlockSchema.d.ts.map +1 -1
- package/dist/schemas/GridCellSchema.d.ts +2 -4
- package/dist/schemas/GridCellSchema.d.ts.map +1 -1
- package/dist/schemas/GridLayoutSchema.d.ts +3 -5
- package/dist/schemas/GridLayoutSchema.d.ts.map +1 -1
- package/dist/schemas/HeroBlockSchema.d.ts +2 -2
- package/dist/schemas/HeroBlockSchema.d.ts.map +1 -1
- package/dist/schemas/HtmlInputFieldSchema.d.ts +2 -2
- package/dist/schemas/HtmlInputFieldSchema.d.ts.map +1 -1
- package/dist/schemas/ImageSchema.d.ts +2 -2
- package/dist/schemas/ImageSchema.d.ts.map +1 -1
- package/dist/schemas/SectionSchema.d.ts +2 -4
- package/dist/schemas/SectionSchema.d.ts.map +1 -1
- package/dist/schemas/SelectInputFieldSchema.d.ts +2 -2
- package/dist/schemas/SelectInputFieldSchema.d.ts.map +1 -1
- package/dist/schemas/SwitchInputFieldSchema.d.ts +2 -2
- package/dist/schemas/SwitchInputFieldSchema.d.ts.map +1 -1
- package/dist/schemas/TextInputFieldSchema.d.ts +2 -2
- package/dist/schemas/TextInputFieldSchema.d.ts.map +1 -1
- package/dist/schemas/ViewSchema.d.ts +8 -7
- package/dist/schemas/ViewSchema.d.ts.map +1 -1
- package/dist/schemas/transformers/ComponentTransformer.d.ts +2 -2
- package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -1
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts +2 -2
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -1
- package/dist/schemas/transformers/registry.d.ts +0 -7
- package/dist/schemas/transformers/registry.d.ts.map +1 -1
- package/dist/schemas/types/Serializable.d.ts +3 -3
- package/dist/schemas/types/Serializable.d.ts.map +1 -1
- package/dist/stories/_templates/SerializationTemplate.d.ts.map +1 -0
- package/dist/types/CollapsibleLayout.d.ts +3 -3
- package/dist/types/CollapsibleLayout.d.ts.map +1 -1
- package/dist/types/ContentProxy.d.ts +4 -4
- package/dist/types/ContentProxy.d.ts.map +1 -1
- package/dist/types/DataTypes.d.ts +4 -4
- package/dist/types/DataTypes.d.ts.map +1 -1
- package/dist/types/TemplateProvider.d.ts +1 -1
- package/dist/types/TemplateProvider.d.ts.map +1 -1
- package/dist/types/TemplateResolver.d.ts +1 -1
- package/dist/types/TemplateResolver.d.ts.map +1 -1
- package/dist/utils/htmlTransform.d.ts +1 -1
- package/dist/utils/htmlTransform.d.ts.map +1 -1
- package/dist/utils/iconMap.d.ts +48 -0
- package/dist/utils/iconMap.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +11 -7
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/paletteLoader.d.ts +34 -0
- package/dist/utils/paletteLoader.d.ts.map +1 -0
- package/dist/utils/paletteManifest.d.ts +51 -0
- package/dist/utils/paletteManifest.d.ts.map +1 -0
- package/dist/utils/paletteUtils.d.ts.map +1 -1
- package/dist/utils/reactUtils.d.ts +12 -6
- package/dist/utils/reactUtils.d.ts.map +1 -1
- package/dist/utils/spacing.d.ts +2 -2
- package/dist/utils/spacing.d.ts.map +1 -1
- package/dist/utils/themePerformanceMonitor.d.ts.map +1 -1
- package/dist/utils/themeUtils.d.ts.map +1 -1
- package/package.json +20 -9
- package/scripts/build-palettes.cjs +120 -0
- package/src/__tests__/components/Article.test.tsx +1 -1
- package/src/__tests__/components/Breadcrumbs.test.tsx +2 -2
- package/src/__tests__/components/Button.test.tsx +3 -3
- package/src/__tests__/components/CardListGrid.test.tsx +5 -5
- package/src/__tests__/components/ChoiceInputField.test.tsx +2 -2
- package/src/__tests__/components/Code.test.tsx +2 -2
- package/src/__tests__/components/Content.integration.test.tsx +1 -1
- package/src/__tests__/components/Content.test.tsx +5 -5
- package/src/__tests__/components/CoverImageHeader.test.tsx +3 -3
- package/src/__tests__/components/FeatureCard.integration.test.tsx +1 -1
- package/src/__tests__/components/FeatureGrid.integration.test.tsx +1 -1
- package/src/__tests__/components/FeatureGrid.test.tsx +3 -3
- package/src/__tests__/components/Footer.test.tsx +3 -3
- package/src/__tests__/components/FormBlock.test.tsx +2 -2
- package/src/__tests__/components/HeroBlock.integration.test.tsx +1 -1
- package/src/__tests__/components/HeroBlock.test.tsx +4 -4
- package/src/__tests__/components/HtmlInputField.test.tsx +8 -8
- package/src/__tests__/components/PageBannerHeader.test.tsx +7 -7
- package/src/__tests__/components/PaletteSwitcher.test.tsx +3 -3
- package/src/__tests__/components/ProductCard.test.tsx +1 -1
- package/src/__tests__/components/Section.integration.test.tsx +1 -1
- package/src/__tests__/components/Section.test.tsx +1 -1
- package/src/__tests__/components/SelectInputField.test.tsx +2 -2
- package/src/__tests__/components/TextInputField.test.tsx +4 -4
- package/src/__tests__/components/ThemeSwitcher.test.tsx +3 -3
- package/src/__tests__/components/base/Container.test.tsx +22 -21
- package/src/__tests__/components/blocks/Code.performance.test.tsx +10 -10
- package/src/__tests__/components/blocks/Code.serialization.test.tsx +9 -9
- package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +2 -3
- package/src/__tests__/components/blocks/Image.serialization.test.tsx +8 -7
- package/src/__tests__/components/blocks/Section.serialization.test.tsx +8 -8
- package/src/__tests__/components/blocks/Text.performance.test.tsx +5 -5
- package/src/__tests__/components/blocks/Text.serialization.test.tsx +9 -9
- package/src/__tests__/components/buttons/Button.serialization.test.tsx +4 -4
- package/src/__tests__/components/input/FormComponents.serialization.test.tsx +9 -9
- package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +16 -18
- package/src/__tests__/components/input/TextInputField.serialization.test.tsx +9 -9
- package/src/__tests__/components/layout/CollapsibleLayout.test.tsx +5 -9
- package/src/__tests__/components/layout/GridCell.serialization.test.tsx +5 -5
- package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +5 -5
- package/src/__tests__/hooks/usePrintMode.test.ts +1 -0
- package/src/__tests__/schemas/builders.test.ts +2 -2
- package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +28 -28
- package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +5 -5
- package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +11 -11
- package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +10 -10
- package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +15 -15
- package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +19 -19
- package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +15 -15
- package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +19 -21
- package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +15 -15
- package/src/__tests__/schemas/transformers/TestAutomation.test.ts +3 -3
- package/src/__tests__/schemas/transformers/nested-serialization.test.tsx +1 -1
- package/src/__tests__/schemas/transformers/round-trip-component-serialization.test.tsx +10 -10
- package/src/__tests__/utils/optional-logging.test.ts +3 -3
- package/src/components/AccessibilityProvider.tsx +4 -2
- package/src/components/ErrorBoundary.tsx +1 -1
- package/src/components/Html.tsx +13 -16
- package/src/components/Logo.tsx +42 -29
- package/src/components/Markdown.tsx +9 -9
- package/src/components/ProductLogo.tsx +118 -0
- package/src/components/QwickApp.css +37 -1060
- package/src/components/QwickApp.tsx +1 -1
- package/src/components/QwickAppsLogo.tsx +1 -1
- package/src/components/ResponsiveMenu.tsx +1 -1
- package/src/components/SafeSpan.tsx +8 -8
- package/src/components/Scaffold.tsx +55 -25
- package/src/components/base/Container.tsx +2 -2
- package/src/components/base/ModelView.tsx +28 -27
- package/src/components/base/index.ts +1 -1
- package/src/components/blocks/Article.tsx +213 -69
- package/src/components/blocks/CardListGrid.tsx +18 -14
- package/src/components/blocks/Code.tsx +18 -13
- package/src/components/blocks/Content.tsx +15 -10
- package/src/components/blocks/CoverImageHeader.tsx +14 -9
- package/src/components/blocks/FeatureCard.tsx +16 -11
- package/src/components/blocks/FeatureGrid.tsx +13 -8
- package/src/components/blocks/Footer.tsx +25 -16
- package/src/components/blocks/HeroBlock.tsx +12 -13
- package/src/components/blocks/Image.tsx +16 -8
- package/src/components/blocks/PageBannerHeader.tsx +15 -11
- package/src/components/blocks/ProductCard.tsx +32 -25
- package/src/components/blocks/Section.tsx +21 -13
- package/src/components/blocks/Text.tsx +26 -11
- package/src/components/buttons/Button.tsx +18 -112
- package/src/components/buttons/PaletteSwitcher.tsx +11 -8
- package/src/components/buttons/ThemeSwitcher.tsx +20 -16
- package/src/components/dialogs/Dialog.tsx +126 -0
- package/src/components/dialogs/index.ts +15 -0
- package/src/components/forms/Captcha.tsx +291 -0
- package/src/components/forms/FormBlock.tsx +22 -15
- package/src/components/forms/FormCheckbox.tsx +116 -0
- package/src/components/forms/FormField.tsx +180 -0
- package/src/components/forms/FormSelect.tsx +140 -0
- package/src/components/forms/index.ts +13 -1
- package/src/components/index.ts +13 -2
- package/src/components/input/ChoiceInputField.tsx +1 -2
- package/src/components/input/HtmlInputField.tsx +2 -3
- package/src/components/input/SelectInputField.tsx +31 -5
- package/src/components/input/SwitchInputField.tsx +3 -4
- package/src/components/input/TextField.tsx +2 -2
- package/src/components/input/TextInputField.tsx +32 -6
- package/src/components/layout/CollapsibleLayout/CollapsibleLayout.tsx +13 -13
- package/src/components/layout/GridCell.tsx +10 -9
- package/src/components/layout/GridCellWrapper.tsx +1 -1
- package/src/components/layout/GridLayout.tsx +29 -32
- package/src/components/pages/FormPage.tsx +0 -1
- package/src/components/pages/Page.tsx +2 -2
- package/src/components/shared/createSerializableView.tsx +24 -23
- package/src/components/shared/viewProps.ts +11 -11
- package/src/config/AppConfig.ts +2 -2
- package/src/config/__tests__/AppConfig.test.ts +3 -3
- package/src/config/__tests__/AppConfigBuilder.test.ts +10 -11
- package/src/config/types.ts +1 -1
- package/src/contexts/DataContext.tsx +58 -52
- package/src/contexts/PaletteContext.tsx +22 -9
- package/src/contexts/PrintModeContext.tsx +4 -4
- package/src/contexts/ThemeContext.tsx +2 -1
- package/src/hooks/useBaseProps.ts +10 -10
- package/src/hooks/useDataBinding.ts +15 -18
- package/src/hooks/usePrintMode.ts +3 -3
- package/src/index.ts +2 -0
- package/src/palettes/manifest.json +72 -0
- package/src/palettes/manifest.schema.json +74 -0
- package/src/schemas/CardListGridSchema.ts +3 -3
- package/src/schemas/CodeSchema.ts +0 -1
- package/src/schemas/FeatureGridSchema.ts +1 -1
- package/src/schemas/FormBlockSchema.ts +1 -1
- package/src/schemas/GridCellSchema.ts +0 -1
- package/src/schemas/GridLayoutSchema.ts +0 -1
- package/src/schemas/SectionSchema.ts +0 -1
- package/src/schemas/ViewSchema.ts +6 -6
- package/src/schemas/transformers/ComponentTransformer.ts +37 -20
- package/src/schemas/transformers/ReactNodeTransformer.ts +18 -16
- package/src/schemas/transformers/registry.ts +28 -24
- package/src/schemas/types/Serializable.ts +3 -3
- package/src/setupTests.js +9 -0
- package/src/stories/AccessibilityProvider.stories.tsx +0 -1
- package/src/stories/CardListGrid.stories.tsx +1 -1
- package/src/stories/Code.stories.tsx +2 -3
- package/src/stories/CollapsibleLayout.stories.tsx +41 -37
- package/src/stories/Container.stories.tsx +1 -2
- package/src/stories/DataBinding.advanced.stories.tsx +15 -9
- package/src/stories/DataProvider.stories.tsx +33 -16
- package/src/stories/ErrorBoundary.stories.tsx +28 -26
- package/src/stories/FeatureGrid.stories.tsx +0 -1
- package/src/stories/FormBlock.stories.tsx +8 -8
- package/src/stories/FormComponents.stories.tsx +15 -11
- package/src/stories/GridCell.stories.tsx +5 -5
- package/src/stories/GridLayout.stories.tsx +5 -5
- package/src/stories/Image.stories.tsx +5 -7
- package/src/stories/Introduction.stories.tsx +0 -1
- package/src/stories/ModelView.stories.tsx +7 -7
- package/src/stories/SafeSpan.stories.tsx +7 -3
- package/src/stories/Section.stories.tsx +2 -2
- package/src/stories/Text.stories.tsx +1 -3
- package/src/stories/_templates/SerializationTemplate.tsx +0 -1
- package/src/templates/TemplateResolver.ts +2 -2
- package/src/types/CollapsibleLayout.ts +2 -2
- package/src/types/ContentProxy.ts +6 -6
- package/src/types/DataTypes.ts +4 -4
- package/src/types/TemplateProvider.ts +1 -1
- package/src/types/TemplateResolver.ts +1 -1
- package/src/utils/htmlTransform.tsx +17 -11
- package/src/utils/iconMap.tsx +221 -0
- package/src/utils/index.ts +4 -1
- package/src/utils/logger.ts +20 -14
- package/src/utils/paletteLoader.ts +218 -0
- package/src/utils/paletteManifest.ts +268 -0
- package/src/utils/paletteUtils.ts +19 -1
- package/src/utils/reactUtils.tsx +34 -33
- package/src/utils/spacing.ts +16 -17
- package/src/utils/themePerformanceMonitor.js +14 -6
- package/src/utils/themeUtils.ts +17 -2
- package/dist/components/base/ContainerView.d.ts +0 -65
- package/dist/components/base/ContainerView.d.ts.map +0 -1
- package/dist/components/blocks/Code-factory.d.ts +0 -22
- package/dist/components/blocks/Code-factory.d.ts.map +0 -1
- package/dist/components/blocks/Code-old.d.ts +0 -31
- package/dist/components/blocks/Code-old.d.ts.map +0 -1
- package/dist/qa/ConsoleWarningTest.d.ts +0 -5
- package/dist/qa/ConsoleWarningTest.d.ts.map +0 -1
- package/dist/qa/StorageKeyTest.d.ts +0 -6
- package/dist/qa/StorageKeyTest.d.ts.map +0 -1
- package/dist/qa/ThemeStorageKeyTest.d.ts +0 -6
- package/dist/qa/ThemeStorageKeyTest.d.ts.map +0 -1
- package/dist/schemas/ViewModelSchema.d.ts +0 -63
- package/dist/schemas/ViewModelSchema.d.ts.map +0 -1
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +0 -66
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +0 -1
- package/dist/src/__tests__/schemas/transformers/MockSerializableComponent.d.ts +0 -66
- package/dist/src/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +0 -1
- package/dist/src/components/AccessibilityChecker.d.ts +0 -12
- package/dist/src/components/AccessibilityChecker.d.ts.map +0 -1
- package/dist/src/components/AccessibilityProvider.d.ts +0 -64
- package/dist/src/components/AccessibilityProvider.d.ts.map +0 -1
- package/dist/src/components/Breadcrumbs.d.ts +0 -39
- package/dist/src/components/Breadcrumbs.d.ts.map +0 -1
- package/dist/src/components/ErrorBoundary.d.ts +0 -46
- package/dist/src/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/src/components/Html.d.ts +0 -58
- package/dist/src/components/Html.d.ts.map +0 -1
- package/dist/src/components/Logo.d.ts +0 -56
- package/dist/src/components/Logo.d.ts.map +0 -1
- package/dist/src/components/Markdown.d.ts +0 -51
- package/dist/src/components/Markdown.d.ts.map +0 -1
- package/dist/src/components/QwickApp.d.ts +0 -69
- package/dist/src/components/QwickApp.d.ts.map +0 -1
- package/dist/src/components/QwickAppsLogo.d.ts +0 -25
- package/dist/src/components/QwickAppsLogo.d.ts.map +0 -1
- package/dist/src/components/QwickIcon.d.ts +0 -23
- package/dist/src/components/QwickIcon.d.ts.map +0 -1
- package/dist/src/components/ResponsiveMenu.d.ts +0 -38
- package/dist/src/components/ResponsiveMenu.d.ts.map +0 -1
- package/dist/src/components/SafeSpan.d.ts +0 -29
- package/dist/src/components/SafeSpan.d.ts.map +0 -1
- package/dist/src/components/Scaffold.d.ts +0 -57
- package/dist/src/components/Scaffold.d.ts.map +0 -1
- package/dist/src/components/base/Container.d.ts +0 -33
- package/dist/src/components/base/Container.d.ts.map +0 -1
- package/dist/src/components/base/ModelView.d.ts +0 -92
- package/dist/src/components/base/ModelView.d.ts.map +0 -1
- package/dist/src/components/base/index.d.ts +0 -12
- package/dist/src/components/base/index.d.ts.map +0 -1
- package/dist/src/components/blocks/Article.d.ts +0 -32
- package/dist/src/components/blocks/Article.d.ts.map +0 -1
- package/dist/src/components/blocks/CardListGrid.d.ts +0 -23
- package/dist/src/components/blocks/CardListGrid.d.ts.map +0 -1
- package/dist/src/components/blocks/Code.d.ts +0 -37
- package/dist/src/components/blocks/Code.d.ts.map +0 -1
- package/dist/src/components/blocks/Content.d.ts +0 -24
- package/dist/src/components/blocks/Content.d.ts.map +0 -1
- package/dist/src/components/blocks/CoverImageHeader.d.ts +0 -44
- package/dist/src/components/blocks/CoverImageHeader.d.ts.map +0 -1
- package/dist/src/components/blocks/FeatureCard.d.ts +0 -66
- package/dist/src/components/blocks/FeatureCard.d.ts.map +0 -1
- package/dist/src/components/blocks/FeatureGrid.d.ts +0 -48
- package/dist/src/components/blocks/FeatureGrid.d.ts.map +0 -1
- package/dist/src/components/blocks/Footer.d.ts +0 -56
- package/dist/src/components/blocks/Footer.d.ts.map +0 -1
- package/dist/src/components/blocks/HeroBlock.d.ts +0 -55
- package/dist/src/components/blocks/HeroBlock.d.ts.map +0 -1
- package/dist/src/components/blocks/Image.d.ts +0 -40
- package/dist/src/components/blocks/Image.d.ts.map +0 -1
- package/dist/src/components/blocks/PageBannerHeader.d.ts +0 -30
- package/dist/src/components/blocks/PageBannerHeader.d.ts.map +0 -1
- package/dist/src/components/blocks/ProductCard.d.ts +0 -57
- package/dist/src/components/blocks/ProductCard.d.ts.map +0 -1
- package/dist/src/components/blocks/Section.d.ts +0 -45
- package/dist/src/components/blocks/Section.d.ts.map +0 -1
- package/dist/src/components/blocks/Text.d.ts +0 -34
- package/dist/src/components/blocks/Text.d.ts.map +0 -1
- package/dist/src/components/blocks/index.d.ts +0 -41
- package/dist/src/components/blocks/index.d.ts.map +0 -1
- package/dist/src/components/buttons/Button.d.ts +0 -57
- package/dist/src/components/buttons/Button.d.ts.map +0 -1
- package/dist/src/components/buttons/PaletteSwitcher.d.ts +0 -24
- package/dist/src/components/buttons/PaletteSwitcher.d.ts.map +0 -1
- package/dist/src/components/buttons/ThemeSwitcher.d.ts +0 -24
- package/dist/src/components/buttons/ThemeSwitcher.d.ts.map +0 -1
- package/dist/src/components/buttons/index.d.ts +0 -11
- package/dist/src/components/buttons/index.d.ts.map +0 -1
- package/dist/src/components/forms/FormBlock.d.ts +0 -51
- package/dist/src/components/forms/FormBlock.d.ts.map +0 -1
- package/dist/src/components/forms/index.d.ts +0 -8
- package/dist/src/components/forms/index.d.ts.map +0 -1
- package/dist/src/components/index.d.ts +0 -41
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/input/ChoiceInputField.d.ts +0 -29
- package/dist/src/components/input/ChoiceInputField.d.ts.map +0 -1
- package/dist/src/components/input/HtmlInputField.d.ts +0 -33
- package/dist/src/components/input/HtmlInputField.d.ts.map +0 -1
- package/dist/src/components/input/SelectInputField.d.ts +0 -31
- package/dist/src/components/input/SelectInputField.d.ts.map +0 -1
- package/dist/src/components/input/SwitchInputField.d.ts +0 -27
- package/dist/src/components/input/SwitchInputField.d.ts.map +0 -1
- package/dist/src/components/input/TextField.d.ts +0 -18
- package/dist/src/components/input/TextField.d.ts.map +0 -1
- package/dist/src/components/input/TextInputField.d.ts +0 -34
- package/dist/src/components/input/TextInputField.d.ts.map +0 -1
- package/dist/src/components/input/index.d.ts +0 -19
- package/dist/src/components/input/index.d.ts.map +0 -1
- package/dist/src/components/layout/CollapsibleLayout/CollapsibleLayout.d.ts +0 -34
- package/dist/src/components/layout/CollapsibleLayout/CollapsibleLayout.d.ts.map +0 -1
- package/dist/src/components/layout/CollapsibleLayout/index.d.ts +0 -9
- package/dist/src/components/layout/CollapsibleLayout/index.d.ts.map +0 -1
- package/dist/src/components/layout/GridCell.d.ts +0 -32
- package/dist/src/components/layout/GridCell.d.ts.map +0 -1
- package/dist/src/components/layout/GridCellWrapper.d.ts +0 -46
- package/dist/src/components/layout/GridCellWrapper.d.ts.map +0 -1
- package/dist/src/components/layout/GridLayout.d.ts +0 -50
- package/dist/src/components/layout/GridLayout.d.ts.map +0 -1
- package/dist/src/components/layout/index.d.ts +0 -14
- package/dist/src/components/layout/index.d.ts.map +0 -1
- package/dist/src/components/menu/Menu.d.ts +0 -1
- package/dist/src/components/menu/Menu.d.ts.map +0 -1
- package/dist/src/components/menu/MenuItem.d.ts +0 -31
- package/dist/src/components/menu/MenuItem.d.ts.map +0 -1
- package/dist/src/components/menu/index.d.ts +0 -7
- package/dist/src/components/menu/index.d.ts.map +0 -1
- package/dist/src/components/pages/FormPage.d.ts +0 -66
- package/dist/src/components/pages/FormPage.d.ts.map +0 -1
- package/dist/src/components/pages/Page.d.ts +0 -68
- package/dist/src/components/pages/Page.d.ts.map +0 -1
- package/dist/src/components/pages/index.d.ts +0 -10
- package/dist/src/components/pages/index.d.ts.map +0 -1
- package/dist/src/components/shared/createSerializableView.d.ts +0 -81
- package/dist/src/components/shared/createSerializableView.d.ts.map +0 -1
- package/dist/src/components/shared/viewProps.d.ts +0 -37
- package/dist/src/components/shared/viewProps.d.ts.map +0 -1
- package/dist/src/config/AppConfig.d.ts +0 -49
- package/dist/src/config/AppConfig.d.ts.map +0 -1
- package/dist/src/config/AppConfigBuilder.d.ts +0 -75
- package/dist/src/config/AppConfigBuilder.d.ts.map +0 -1
- package/dist/src/config/index.d.ts +0 -13
- package/dist/src/config/index.d.ts.map +0 -1
- package/dist/src/config/types.d.ts +0 -130
- package/dist/src/config/types.d.ts.map +0 -1
- package/dist/src/config.d.ts +0 -15
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/contexts/DataContext.d.ts +0 -139
- package/dist/src/contexts/DataContext.d.ts.map +0 -1
- package/dist/src/contexts/DimensionsContext.d.ts +0 -42
- package/dist/src/contexts/DimensionsContext.d.ts.map +0 -1
- package/dist/src/contexts/PaletteContext.d.ts +0 -53
- package/dist/src/contexts/PaletteContext.d.ts.map +0 -1
- package/dist/src/contexts/PrintModeContext.d.ts +0 -27
- package/dist/src/contexts/PrintModeContext.d.ts.map +0 -1
- package/dist/src/contexts/QwickAppContext.d.ts +0 -71
- package/dist/src/contexts/QwickAppContext.d.ts.map +0 -1
- package/dist/src/contexts/ThemeContext.d.ts +0 -65
- package/dist/src/contexts/ThemeContext.d.ts.map +0 -1
- package/dist/src/contexts/index.d.ts +0 -11
- package/dist/src/contexts/index.d.ts.map +0 -1
- package/dist/src/hooks/index.d.ts +0 -12
- package/dist/src/hooks/index.d.ts.map +0 -1
- package/dist/src/hooks/useBaseProps.d.ts +0 -101
- package/dist/src/hooks/useBaseProps.d.ts.map +0 -1
- package/dist/src/hooks/useDataBinding.d.ts +0 -22
- package/dist/src/hooks/useDataBinding.d.ts.map +0 -1
- package/dist/src/hooks/usePrintMode.d.ts +0 -39
- package/dist/src/hooks/usePrintMode.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -9
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/palettes/PaletteAutumn.d.ts +0 -10
- package/dist/src/palettes/PaletteAutumn.d.ts.map +0 -1
- package/dist/src/palettes/PaletteCosmic.d.ts +0 -10
- package/dist/src/palettes/PaletteCosmic.d.ts.map +0 -1
- package/dist/src/palettes/PaletteDefault.d.ts +0 -10
- package/dist/src/palettes/PaletteDefault.d.ts.map +0 -1
- package/dist/src/palettes/PaletteOcean.d.ts +0 -10
- package/dist/src/palettes/PaletteOcean.d.ts.map +0 -1
- package/dist/src/palettes/PaletteSpring.d.ts +0 -10
- package/dist/src/palettes/PaletteSpring.d.ts.map +0 -1
- package/dist/src/palettes/PaletteWinter.d.ts +0 -10
- package/dist/src/palettes/PaletteWinter.d.ts.map +0 -1
- package/dist/src/palettes/index.d.ts +0 -13
- package/dist/src/palettes/index.d.ts.map +0 -1
- package/dist/src/schemas/ActionSchema.d.ts +0 -21
- package/dist/src/schemas/ActionSchema.d.ts.map +0 -1
- package/dist/src/schemas/ArticleSchema.d.ts +0 -13
- package/dist/src/schemas/ArticleSchema.d.ts.map +0 -1
- package/dist/src/schemas/ButtonSchema.d.ts +0 -22
- package/dist/src/schemas/ButtonSchema.d.ts.map +0 -1
- package/dist/src/schemas/CardListGridSchema.d.ts +0 -17
- package/dist/src/schemas/CardListGridSchema.d.ts.map +0 -1
- package/dist/src/schemas/ChoiceInputFieldSchema.d.ts +0 -18
- package/dist/src/schemas/ChoiceInputFieldSchema.d.ts.map +0 -1
- package/dist/src/schemas/CodeSchema.d.ts +0 -18
- package/dist/src/schemas/CodeSchema.d.ts.map +0 -1
- package/dist/src/schemas/CollapsibleLayoutSchema.d.ts +0 -32
- package/dist/src/schemas/CollapsibleLayoutSchema.d.ts.map +0 -1
- package/dist/src/schemas/ContainerSchema.d.ts +0 -12
- package/dist/src/schemas/ContainerSchema.d.ts.map +0 -1
- package/dist/src/schemas/ContentSchema.d.ts +0 -21
- package/dist/src/schemas/ContentSchema.d.ts.map +0 -1
- package/dist/src/schemas/CoverImageHeaderSchema.d.ts +0 -28
- package/dist/src/schemas/CoverImageHeaderSchema.d.ts.map +0 -1
- package/dist/src/schemas/FeatureCardSchema.d.ts +0 -28
- package/dist/src/schemas/FeatureCardSchema.d.ts.map +0 -1
- package/dist/src/schemas/FeatureGridSchema.d.ts +0 -17
- package/dist/src/schemas/FeatureGridSchema.d.ts.map +0 -1
- package/dist/src/schemas/FeatureItemSchema.d.ts +0 -16
- package/dist/src/schemas/FeatureItemSchema.d.ts.map +0 -1
- package/dist/src/schemas/FooterItemSchema.d.ts +0 -15
- package/dist/src/schemas/FooterItemSchema.d.ts.map +0 -1
- package/dist/src/schemas/FooterSchema.d.ts +0 -20
- package/dist/src/schemas/FooterSchema.d.ts.map +0 -1
- package/dist/src/schemas/FooterSectionSchema.d.ts +0 -15
- package/dist/src/schemas/FooterSectionSchema.d.ts.map +0 -1
- package/dist/src/schemas/FormBlockSchema.d.ts +0 -19
- package/dist/src/schemas/FormBlockSchema.d.ts.map +0 -1
- package/dist/src/schemas/GridCellSchema.d.ts +0 -23
- package/dist/src/schemas/GridCellSchema.d.ts.map +0 -1
- package/dist/src/schemas/GridLayoutSchema.d.ts +0 -21
- package/dist/src/schemas/GridLayoutSchema.d.ts.map +0 -1
- package/dist/src/schemas/HeaderActionSchema.d.ts +0 -17
- package/dist/src/schemas/HeaderActionSchema.d.ts.map +0 -1
- package/dist/src/schemas/HeroBlockSchema.d.ts +0 -22
- package/dist/src/schemas/HeroBlockSchema.d.ts.map +0 -1
- package/dist/src/schemas/HtmlInputFieldSchema.d.ts +0 -18
- package/dist/src/schemas/HtmlInputFieldSchema.d.ts.map +0 -1
- package/dist/src/schemas/HtmlSchema.d.ts +0 -14
- package/dist/src/schemas/HtmlSchema.d.ts.map +0 -1
- package/dist/src/schemas/ImageSchema.d.ts +0 -32
- package/dist/src/schemas/ImageSchema.d.ts.map +0 -1
- package/dist/src/schemas/LogoSchema.d.ts +0 -35
- package/dist/src/schemas/LogoSchema.d.ts.map +0 -1
- package/dist/src/schemas/MarkdownSchema.d.ts +0 -14
- package/dist/src/schemas/MarkdownSchema.d.ts.map +0 -1
- package/dist/src/schemas/MetadataItemSchema.d.ts +0 -13
- package/dist/src/schemas/MetadataItemSchema.d.ts.map +0 -1
- package/dist/src/schemas/PageBannerHeaderSchema.d.ts +0 -28
- package/dist/src/schemas/PageBannerHeaderSchema.d.ts.map +0 -1
- package/dist/src/schemas/PageTemplateSchema.d.ts +0 -31
- package/dist/src/schemas/PageTemplateSchema.d.ts.map +0 -1
- package/dist/src/schemas/PaletteSwitcherSchema.d.ts +0 -16
- package/dist/src/schemas/PaletteSwitcherSchema.d.ts.map +0 -1
- package/dist/src/schemas/PrintConfigSchema.d.ts +0 -31
- package/dist/src/schemas/PrintConfigSchema.d.ts.map +0 -1
- package/dist/src/schemas/ProductCardSchema.d.ts +0 -39
- package/dist/src/schemas/ProductCardSchema.d.ts.map +0 -1
- package/dist/src/schemas/SafeSpanSchema.d.ts +0 -13
- package/dist/src/schemas/SafeSpanSchema.d.ts.map +0 -1
- package/dist/src/schemas/SectionSchema.d.ts +0 -16
- package/dist/src/schemas/SectionSchema.d.ts.map +0 -1
- package/dist/src/schemas/SelectInputFieldSchema.d.ts +0 -27
- package/dist/src/schemas/SelectInputFieldSchema.d.ts.map +0 -1
- package/dist/src/schemas/SwitchInputFieldSchema.d.ts +0 -18
- package/dist/src/schemas/SwitchInputFieldSchema.d.ts.map +0 -1
- package/dist/src/schemas/TextInputFieldSchema.d.ts +0 -22
- package/dist/src/schemas/TextInputFieldSchema.d.ts.map +0 -1
- package/dist/src/schemas/TextSchema.d.ts +0 -37
- package/dist/src/schemas/TextSchema.d.ts.map +0 -1
- package/dist/src/schemas/ThemeSwitcherSchema.d.ts +0 -19
- package/dist/src/schemas/ThemeSwitcherSchema.d.ts.map +0 -1
- package/dist/src/schemas/ViewSchema.d.ts +0 -66
- package/dist/src/schemas/ViewSchema.d.ts.map +0 -1
- package/dist/src/schemas/index.d.ts +0 -47
- package/dist/src/schemas/index.d.ts.map +0 -1
- package/dist/src/schemas/transformers/ComponentTransformer.d.ts +0 -128
- package/dist/src/schemas/transformers/ComponentTransformer.d.ts.map +0 -1
- package/dist/src/schemas/transformers/ReactNodeTransformer.d.ts +0 -53
- package/dist/src/schemas/transformers/ReactNodeTransformer.d.ts.map +0 -1
- package/dist/src/schemas/transformers/registry.d.ts +0 -18
- package/dist/src/schemas/transformers/registry.d.ts.map +0 -1
- package/dist/src/schemas/types/Serializable.d.ts +0 -46
- package/dist/src/schemas/types/Serializable.d.ts.map +0 -1
- package/dist/src/stories/_templates/SerializationTemplate.d.ts.map +0 -1
- package/dist/src/templates/TemplateResolver.d.ts +0 -52
- package/dist/src/templates/TemplateResolver.d.ts.map +0 -1
- package/dist/src/templates/index.d.ts +0 -7
- package/dist/src/templates/index.d.ts.map +0 -1
- package/dist/src/types/CacheProvider.d.ts +0 -18
- package/dist/src/types/CacheProvider.d.ts.map +0 -1
- package/dist/src/types/CollapsibleLayout.d.ts +0 -142
- package/dist/src/types/CollapsibleLayout.d.ts.map +0 -1
- package/dist/src/types/ContentProxy.d.ts +0 -47
- package/dist/src/types/ContentProxy.d.ts.map +0 -1
- package/dist/src/types/DataTypes.d.ts +0 -185
- package/dist/src/types/DataTypes.d.ts.map +0 -1
- package/dist/src/types/TemplateProvider.d.ts +0 -10
- package/dist/src/types/TemplateProvider.d.ts.map +0 -1
- package/dist/src/types/TemplateResolver.d.ts +0 -23
- package/dist/src/types/TemplateResolver.d.ts.map +0 -1
- package/dist/src/types/index.d.ts +0 -82
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/utils/breakpoints.d.ts +0 -35
- package/dist/src/utils/breakpoints.d.ts.map +0 -1
- package/dist/src/utils/cssUtils.d.ts +0 -17
- package/dist/src/utils/cssUtils.d.ts.map +0 -1
- package/dist/src/utils/customPaletteManager.d.ts +0 -8
- package/dist/src/utils/customPaletteManager.d.ts.map +0 -1
- package/dist/src/utils/dimensions.d.ts +0 -34
- package/dist/src/utils/dimensions.d.ts.map +0 -1
- package/dist/src/utils/htmlTransform.d.ts +0 -44
- package/dist/src/utils/htmlTransform.d.ts.map +0 -1
- package/dist/src/utils/index.d.ts +0 -16
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -26
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/paletteUtils.d.ts +0 -38
- package/dist/src/utils/paletteUtils.d.ts.map +0 -1
- package/dist/src/utils/persistenceUtils.d.ts +0 -31
- package/dist/src/utils/persistenceUtils.d.ts.map +0 -1
- package/dist/src/utils/reactUtils.d.ts +0 -33
- package/dist/src/utils/reactUtils.d.ts.map +0 -1
- package/dist/src/utils/spacing.d.ts +0 -34
- package/dist/src/utils/spacing.d.ts.map +0 -1
- package/dist/src/utils/themePerformanceMonitor.d.ts +0 -32
- package/dist/src/utils/themePerformanceMonitor.d.ts.map +0 -1
- package/dist/src/utils/themeUtils.d.ts +0 -27
- package/dist/src/utils/themeUtils.d.ts.map +0 -1
- package/dist/tests/ConsoleWarningTest.d.ts +0 -5
- package/dist/tests/ConsoleWarningTest.d.ts.map +0 -1
- package/dist/tests/StorageKeyTest.d.ts +0 -6
- package/dist/tests/StorageKeyTest.d.ts.map +0 -1
- package/dist/tests/ThemeStorageKeyTest.d.ts +0 -6
- package/dist/tests/ThemeStorageKeyTest.d.ts.map +0 -1
- /package/dist/palettes/{PaletteAutumn.css → palette-autumn.1.4.9.css} +0 -0
- /package/dist/palettes/{PaletteCosmic.css → palette-cosmic.1.4.9.css} +0 -0
- /package/dist/palettes/{PaletteDefault.css → palette-default.1.4.9.css} +0 -0
- /package/dist/palettes/{PaletteOcean.css → palette-ocean.1.4.9.css} +0 -0
- /package/dist/palettes/{PaletteSpring.css → palette-spring.1.4.9.css} +0 -0
- /package/dist/palettes/{PaletteWinter.css → palette-winter.1.4.9.css} +0 -0
- /package/dist/{src/stories → stories}/_templates/SerializationTemplate.d.ts +0 -0
|
@@ -57,12 +57,11 @@ interface CreateSerializableViewConfig<P extends ViewProps> {
|
|
|
57
57
|
/**
|
|
58
58
|
* Serializable component interface with all required static properties
|
|
59
59
|
*/
|
|
60
|
-
export interface SerializableComponent<P extends ViewProps> {
|
|
61
|
-
(props: P): ReactElement;
|
|
60
|
+
export interface SerializableComponent<P extends ViewProps> extends React.FC<P> {
|
|
62
61
|
tagName: string;
|
|
63
62
|
version: string;
|
|
64
|
-
fromJson: (data:
|
|
65
|
-
toJson: (props: P) =>
|
|
63
|
+
fromJson: (data: unknown) => ReactElement;
|
|
64
|
+
toJson: (props: P) => unknown;
|
|
66
65
|
displayName?: string;
|
|
67
66
|
[QWICKAPP_COMPONENT]: symbol;
|
|
68
67
|
}
|
|
@@ -80,7 +79,7 @@ export function createSerializableView<P extends ViewProps>(
|
|
|
80
79
|
|
|
81
80
|
// Create the main component function
|
|
82
81
|
function SerializableViewComponent(props: P): ReactElement {
|
|
83
|
-
const { dataSource, bindingOptions, children, ...schemaProps } = props as
|
|
82
|
+
const { dataSource, bindingOptions, children, ...schemaProps } = props as P & { dataSource?: string; bindingOptions?: Record<string, unknown>; children?: ReactNode };
|
|
84
83
|
|
|
85
84
|
// Step 1: Handle content-prop strategy (map JSX children → content)
|
|
86
85
|
let propsForProcessing = schemaProps;
|
|
@@ -162,14 +161,15 @@ export function createSerializableView<P extends ViewProps>(
|
|
|
162
161
|
component[QWICKAPP_COMPONENT] = QWICKAPP_COMPONENT;
|
|
163
162
|
|
|
164
163
|
// Serialization methods
|
|
165
|
-
component.fromJson = function fromJson(data:
|
|
166
|
-
const { tagName
|
|
167
|
-
|
|
164
|
+
component.fromJson = function fromJson(data: unknown): ReactElement {
|
|
165
|
+
const typedData = data as { tagName?: string; version?: string; data?: unknown };
|
|
166
|
+
const { tagName: dataTagName, version: dataVersion, data: componentData } = typedData;
|
|
167
|
+
|
|
168
168
|
// Validate deserialization data
|
|
169
169
|
if (dataTagName !== tagName) {
|
|
170
170
|
throw new Error(`Tag name mismatch: expected ${tagName}, got ${dataTagName}`);
|
|
171
171
|
}
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
if (dataVersion !== version) {
|
|
174
174
|
console.warn(`Version mismatch for ${tagName}: expected ${version}, got ${dataVersion}`);
|
|
175
175
|
}
|
|
@@ -177,30 +177,31 @@ export function createSerializableView<P extends ViewProps>(
|
|
|
177
177
|
// Handle deserialization based on children strategy
|
|
178
178
|
if (childrenStrategy.mode === 'content-prop') {
|
|
179
179
|
const propName = childrenStrategy.propName || 'content';
|
|
180
|
-
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
181
|
+
const { children, ...rest } = componentData || {};
|
|
181
182
|
const contentData = { ...rest, [propName]: componentData?.[propName] || '' };
|
|
182
183
|
return React.createElement(component as ComponentType<P>, contentData as P);
|
|
183
184
|
} else {
|
|
184
185
|
// For react-children strategy, recursively deserialize children
|
|
185
|
-
const deserializedData = { ...componentData };
|
|
186
|
-
if (componentData.children !== undefined) {
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
deserializedData.children = ComponentTransformer.deserialize(componentData.children);
|
|
186
|
+
const deserializedData = { ...(componentData as Record<string, unknown>) };
|
|
187
|
+
if ((componentData as Record<string, unknown>).children !== undefined) {
|
|
188
|
+
// Recursively deserialize children using ComponentTransformer
|
|
189
|
+
deserializedData.children = ComponentTransformer.deserialize((componentData as Record<string, unknown>).children);
|
|
190
190
|
}
|
|
191
191
|
return React.createElement(component as ComponentType<P>, deserializedData as P);
|
|
192
192
|
}
|
|
193
193
|
};
|
|
194
194
|
|
|
195
|
-
component.toJson = function toJson(props: P):
|
|
195
|
+
component.toJson = function toJson(props: P): unknown {
|
|
196
196
|
// Handle serialization based on children strategy
|
|
197
197
|
if (childrenStrategy.mode === 'content-prop') {
|
|
198
198
|
const propName = childrenStrategy.propName || 'content';
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
|
|
199
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
200
|
+
const { children, ...rest } = props || {};
|
|
201
|
+
const contentValue = (props as Record<string, unknown>)?.[propName] ?? toText((props as Record<string, unknown>)?.children as ReactNode);
|
|
202
|
+
|
|
202
203
|
// Clean props for content-prop serialization
|
|
203
|
-
const cleanProps:
|
|
204
|
+
const cleanProps: Record<string, unknown> = {};
|
|
204
205
|
for (const [key, value] of Object.entries(rest)) {
|
|
205
206
|
if (typeof value === 'function' && key.startsWith('on')) {
|
|
206
207
|
cleanProps[key] = value.toString();
|
|
@@ -216,7 +217,7 @@ export function createSerializableView<P extends ViewProps>(
|
|
|
216
217
|
};
|
|
217
218
|
} else {
|
|
218
219
|
// Handle react-children strategy (existing logic)
|
|
219
|
-
const cleanProps:
|
|
220
|
+
const cleanProps: unknown = {};
|
|
220
221
|
|
|
221
222
|
for (const [key, value] of Object.entries(props)) {
|
|
222
223
|
if (typeof value === 'function' && key.startsWith('on')) {
|
|
@@ -257,7 +258,7 @@ export type SerializableViewComponent<P extends ViewProps> = SerializableCompone
|
|
|
257
258
|
/**
|
|
258
259
|
* Type guard to check if a component is serializable
|
|
259
260
|
*/
|
|
260
|
-
export function isSerializableComponent(component:
|
|
261
|
+
export function isSerializableComponent(component: unknown): component is SerializableComponent<unknown> {
|
|
261
262
|
return component &&
|
|
262
263
|
typeof component === 'function' &&
|
|
263
264
|
typeof component.tagName === 'string' &&
|
|
@@ -270,7 +271,7 @@ export function isSerializableComponent(component: any): component is Serializab
|
|
|
270
271
|
/**
|
|
271
272
|
* Extract component metadata for registration
|
|
272
273
|
*/
|
|
273
|
-
export function getComponentMetadata(component: SerializableComponent<
|
|
274
|
+
export function getComponentMetadata(component: SerializableComponent<unknown>) {
|
|
274
275
|
return {
|
|
275
276
|
tagName: component.tagName,
|
|
276
277
|
version: component.version,
|
|
@@ -29,17 +29,17 @@ export interface ViewProps extends SchemaProps<ViewSchema>, WithDataBinding {
|
|
|
29
29
|
/**
|
|
30
30
|
* Type for string event handlers in schema
|
|
31
31
|
*/
|
|
32
|
-
type EventHandlerValue = string | React.MouseEventHandler<
|
|
32
|
+
type EventHandlerValue = string | React.MouseEventHandler<unknown> | React.FocusEventHandler<unknown> | undefined;
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* Runtime event handler conversion map
|
|
36
36
|
*/
|
|
37
37
|
interface EventHandlers {
|
|
38
|
-
onClick?: React.MouseEventHandler<
|
|
39
|
-
onMouseEnter?: React.MouseEventHandler<
|
|
40
|
-
onMouseLeave?: React.MouseEventHandler<
|
|
41
|
-
onFocus?: React.FocusEventHandler<
|
|
42
|
-
onBlur?: React.FocusEventHandler<
|
|
38
|
+
onClick?: React.MouseEventHandler<unknown>;
|
|
39
|
+
onMouseEnter?: React.MouseEventHandler<unknown>;
|
|
40
|
+
onMouseLeave?: React.MouseEventHandler<unknown>;
|
|
41
|
+
onFocus?: React.FocusEventHandler<unknown>;
|
|
42
|
+
onBlur?: React.FocusEventHandler<unknown>;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/**
|
|
@@ -49,21 +49,21 @@ interface EventHandlers {
|
|
|
49
49
|
*/
|
|
50
50
|
function parseEventHandlers(eventHandlers: Record<string, EventHandlerValue>): EventHandlers {
|
|
51
51
|
const result: EventHandlers = {};
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
for (const [key, value] of Object.entries(eventHandlers)) {
|
|
54
54
|
if (typeof value === 'string' && value.trim()) {
|
|
55
55
|
try {
|
|
56
56
|
// Convert string to function - safe eval for event handlers
|
|
57
57
|
// This creates a function that executes the string as code
|
|
58
58
|
const func = new Function('event', value);
|
|
59
|
-
result[key as keyof EventHandlers] = func as
|
|
59
|
+
result[key as keyof EventHandlers] = func as React.MouseEventHandler<unknown> | React.FocusEventHandler<unknown>;
|
|
60
60
|
} catch (error) {
|
|
61
61
|
console.warn(`Invalid event handler string for ${key}:`, value, error);
|
|
62
62
|
// Keep as undefined for invalid handlers
|
|
63
63
|
}
|
|
64
64
|
} else if (typeof value === 'function') {
|
|
65
65
|
// Already a function, use as-is
|
|
66
|
-
result[key as keyof EventHandlers] = value as
|
|
66
|
+
result[key as keyof EventHandlers] = value as React.MouseEventHandler<unknown> | React.FocusEventHandler<unknown>;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -187,7 +187,7 @@ export function normalizeViewProps<T extends ViewProps>(props: T): T & BaseCompo
|
|
|
187
187
|
};
|
|
188
188
|
|
|
189
189
|
// Canonicalize background prop (backgroundColor → background)
|
|
190
|
-
const canonicalBackground = (restProps as
|
|
190
|
+
const canonicalBackground = (restProps as { background?: string }).background ?? backgroundColor;
|
|
191
191
|
|
|
192
192
|
// Return normalized props with proper typing
|
|
193
193
|
const normalized = {
|
|
@@ -201,7 +201,7 @@ export function normalizeViewProps<T extends ViewProps>(props: T): T & BaseCompo
|
|
|
201
201
|
} as T & BaseComponentProps;
|
|
202
202
|
|
|
203
203
|
// Remove backgroundColor to avoid duplication
|
|
204
|
-
delete (normalized as
|
|
204
|
+
delete (normalized as T & BaseComponentProps & { backgroundColor?: string }).backgroundColor;
|
|
205
205
|
|
|
206
206
|
return normalized;
|
|
207
207
|
}
|
package/src/config/AppConfig.ts
CHANGED
|
@@ -73,7 +73,7 @@ export class AppConfig implements IAppConfig {
|
|
|
73
73
|
/**
|
|
74
74
|
* Generate PWA manifest
|
|
75
75
|
*/
|
|
76
|
-
get pwaManifest(): Record<string,
|
|
76
|
+
get pwaManifest(): Record<string, unknown> {
|
|
77
77
|
return {
|
|
78
78
|
name: this.app.name,
|
|
79
79
|
short_name: this.app.shortName,
|
|
@@ -102,7 +102,7 @@ export class AppConfig implements IAppConfig {
|
|
|
102
102
|
/**
|
|
103
103
|
* Convert to plain object (for serialization)
|
|
104
104
|
*/
|
|
105
|
-
toJSON(): Record<string,
|
|
105
|
+
toJSON(): Record<string, unknown> {
|
|
106
106
|
return {
|
|
107
107
|
app: this.app,
|
|
108
108
|
build: this.build,
|
|
@@ -79,11 +79,11 @@ describe('AppConfig', () => {
|
|
|
79
79
|
|
|
80
80
|
// Attempt to modify should fail
|
|
81
81
|
expect(() => {
|
|
82
|
-
(config.app as
|
|
82
|
+
(config.app as { name: string }).name = 'Modified Name';
|
|
83
83
|
}).toThrow();
|
|
84
84
|
|
|
85
85
|
expect(() => {
|
|
86
|
-
(config.build as
|
|
86
|
+
(config.build as { port: number }).port = 4000;
|
|
87
87
|
}).toThrow();
|
|
88
88
|
});
|
|
89
89
|
});
|
|
@@ -319,7 +319,7 @@ describe('AppConfig', () => {
|
|
|
319
319
|
});
|
|
320
320
|
|
|
321
321
|
expect(() => {
|
|
322
|
-
(newConfig.app as
|
|
322
|
+
(newConfig.app as { name: string }).name = 'Another Name';
|
|
323
323
|
}).toThrow();
|
|
324
324
|
});
|
|
325
325
|
});
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import * as fs from 'fs';
|
|
10
|
-
import * as path from 'path';
|
|
11
10
|
import { AppConfigBuilder } from '../AppConfigBuilder';
|
|
12
11
|
import { AppConfig } from '../AppConfig';
|
|
13
12
|
|
|
@@ -164,7 +163,7 @@ describe('AppConfigBuilder', () => {
|
|
|
164
163
|
AppConfigBuilder.create()
|
|
165
164
|
.withName('Test App')
|
|
166
165
|
.withId('test-app')
|
|
167
|
-
.withPort(3000.5 as
|
|
166
|
+
.withPort(3000.5 as unknown as number)
|
|
168
167
|
.build();
|
|
169
168
|
}).toThrow('Port must be a valid integer between 1 and 65535');
|
|
170
169
|
});
|
|
@@ -206,9 +205,9 @@ describe('AppConfigBuilder', () => {
|
|
|
206
205
|
});
|
|
207
206
|
|
|
208
207
|
it('should skip validation when skipValidation option is true', () => {
|
|
209
|
-
|
|
208
|
+
jest.spyOn(console, 'warn').mockImplementation();
|
|
210
209
|
|
|
211
|
-
|
|
210
|
+
AppConfigBuilder.create()
|
|
212
211
|
.withOptions({ skipValidation: true })
|
|
213
212
|
.withName('Test App')
|
|
214
213
|
.withId('test-app')
|
|
@@ -241,9 +240,9 @@ describe('AppConfigBuilder', () => {
|
|
|
241
240
|
});
|
|
242
241
|
|
|
243
242
|
it('should accept named colors', () => {
|
|
244
|
-
|
|
243
|
+
jest.spyOn(console, 'warn').mockImplementation();
|
|
245
244
|
|
|
246
|
-
|
|
245
|
+
AppConfigBuilder.create()
|
|
247
246
|
.withName('Test App')
|
|
248
247
|
.withId('test-app')
|
|
249
248
|
.withThemeColor('red')
|
|
@@ -258,7 +257,7 @@ describe('AppConfigBuilder', () => {
|
|
|
258
257
|
it('should warn for potentially invalid colors', () => {
|
|
259
258
|
const consoleWarn = jest.spyOn(console, 'warn').mockImplementation();
|
|
260
259
|
|
|
261
|
-
|
|
260
|
+
AppConfigBuilder.create()
|
|
262
261
|
.withName('Test App')
|
|
263
262
|
.withId('test-app')
|
|
264
263
|
.withThemeColor('invalid-color')
|
|
@@ -330,7 +329,7 @@ describe('AppConfigBuilder', () => {
|
|
|
330
329
|
throw new Error('File not found');
|
|
331
330
|
});
|
|
332
331
|
|
|
333
|
-
|
|
332
|
+
AppConfigBuilder.create()
|
|
334
333
|
.withConfig('./missing.json')
|
|
335
334
|
.withName('Test App')
|
|
336
335
|
.withId('test-app')
|
|
@@ -403,7 +402,7 @@ describe('AppConfigBuilder', () => {
|
|
|
403
402
|
AppConfigBuilder.create()
|
|
404
403
|
.withPort(0)
|
|
405
404
|
.build();
|
|
406
|
-
} catch (error:
|
|
405
|
+
} catch (error: unknown) {
|
|
407
406
|
const message = error.message;
|
|
408
407
|
expect(message).toContain('App name is required');
|
|
409
408
|
expect(message).toContain('App ID is required');
|
|
@@ -421,11 +420,11 @@ describe('AppConfigBuilder', () => {
|
|
|
421
420
|
|
|
422
421
|
// Attempt to modify the configuration should not work
|
|
423
422
|
expect(() => {
|
|
424
|
-
(config.app as
|
|
423
|
+
(config.app as { name: string }).name = 'Modified Name';
|
|
425
424
|
}).toThrow();
|
|
426
425
|
|
|
427
426
|
expect(() => {
|
|
428
|
-
(config as
|
|
427
|
+
(config as { app: unknown }).app = { name: 'New App' };
|
|
429
428
|
}).toThrow();
|
|
430
429
|
});
|
|
431
430
|
});
|
package/src/config/types.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import React, { createContext, useContext, useEffect, useState, ReactNode } from 'react';
|
|
11
|
+
import React, { createContext, useContext, useEffect, useState, useCallback, ReactNode } from 'react';
|
|
12
12
|
import { ITemplateResolver, TemplateResolverConfig } from '../types';
|
|
13
13
|
import { TemplateResolver } from '../templates';
|
|
14
14
|
import { Model } from '@qwickapps/schema';
|
|
@@ -19,7 +19,7 @@ import { Model } from '@qwickapps/schema';
|
|
|
19
19
|
interface DataContextValue {
|
|
20
20
|
provider: ITemplateResolver | null;
|
|
21
21
|
get<T extends Model>(slug: string): Promise<T | undefined>;
|
|
22
|
-
select<T extends Model>(schema: string, options?:
|
|
22
|
+
select<T extends Model>(schema: string, options?: unknown): Promise<T[]>;
|
|
23
23
|
resolveTemplate(template: string): Promise<string>;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -67,7 +67,7 @@ export function DataProvider({ dataSource, children }: DataProviderProps) {
|
|
|
67
67
|
const result = await dataProvider.get(slug);
|
|
68
68
|
return result && result.data ? (result.data as T) : undefined;
|
|
69
69
|
},
|
|
70
|
-
select: async <T extends Model>(schema: string, options?:
|
|
70
|
+
select: async <T extends Model>(schema: string, options?: unknown): Promise<T[]> => {
|
|
71
71
|
const result = await dataProvider.select(schema, options);
|
|
72
72
|
return result && Array.isArray(result.data) ? (result.data as T[]) : [];
|
|
73
73
|
},
|
|
@@ -106,35 +106,45 @@ export function useDataSafe<T extends Model>(slug: string): {
|
|
|
106
106
|
error: Error | null;
|
|
107
107
|
} {
|
|
108
108
|
const context = useContext(DataContext);
|
|
109
|
-
if (!context) {
|
|
110
|
-
return { data: undefined, loading: false, error: null };
|
|
111
|
-
}
|
|
112
109
|
|
|
110
|
+
// Always call hooks before any returns
|
|
113
111
|
const [data, setData] = useState<T | undefined>(undefined);
|
|
114
112
|
const [loading, setLoading] = useState(true);
|
|
115
113
|
const [error, setError] = useState<Error | null>(null);
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
// Always call useEffect unconditionally
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
// Only fetch if context exists
|
|
118
|
+
if (!context) {
|
|
119
119
|
setLoading(false);
|
|
120
120
|
return;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
const fetchData = async () => {
|
|
124
|
+
if (!slug) {
|
|
125
|
+
setLoading(false);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
setLoading(true);
|
|
131
|
+
setError(null);
|
|
132
|
+
const result = await context.get<T>(slug);
|
|
133
|
+
setData(result);
|
|
134
|
+
setLoading(false);
|
|
135
|
+
} catch (err) {
|
|
136
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
137
|
+
setLoading(false);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
134
140
|
|
|
135
|
-
useEffect(() => {
|
|
136
141
|
fetchData();
|
|
137
|
-
}, [slug]);
|
|
142
|
+
}, [context, slug]);
|
|
143
|
+
|
|
144
|
+
// Return early if no context
|
|
145
|
+
if (!context) {
|
|
146
|
+
return { data: undefined, loading: false, error: null };
|
|
147
|
+
}
|
|
138
148
|
|
|
139
149
|
return { data, loading, error };
|
|
140
150
|
}
|
|
@@ -156,7 +166,7 @@ export function useData<T extends Model>(fieldGroupId: string): {
|
|
|
156
166
|
const [loading, setLoading] = useState(true);
|
|
157
167
|
const [error, setError] = useState<Error | null>(null);
|
|
158
168
|
|
|
159
|
-
const fetchData = async () => {
|
|
169
|
+
const fetchData = useCallback(async () => {
|
|
160
170
|
if (!fieldGroupId) {
|
|
161
171
|
setLoading(false);
|
|
162
172
|
return;
|
|
@@ -172,16 +182,16 @@ export function useData<T extends Model>(fieldGroupId: string): {
|
|
|
172
182
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
173
183
|
setLoading(false);
|
|
174
184
|
}
|
|
175
|
-
};
|
|
185
|
+
}, [fieldGroupId, get]);
|
|
176
186
|
|
|
177
187
|
useEffect(() => {
|
|
178
188
|
fetchData();
|
|
179
|
-
}, [
|
|
189
|
+
}, [fetchData]);
|
|
180
190
|
|
|
181
|
-
return {
|
|
182
|
-
data,
|
|
183
|
-
loading,
|
|
184
|
-
error,
|
|
191
|
+
return {
|
|
192
|
+
data,
|
|
193
|
+
loading,
|
|
194
|
+
error,
|
|
185
195
|
refetch: fetchData
|
|
186
196
|
};
|
|
187
197
|
}
|
|
@@ -258,33 +268,29 @@ export function useDataProvider(): ITemplateResolver {
|
|
|
258
268
|
* <T template="Hello {{user.name}}" fallback="Guest" />
|
|
259
269
|
* ```
|
|
260
270
|
*/
|
|
261
|
-
export const T: React.FC<{ template: string; fallback?: ReactNode; wrapper?: React.ComponentType<{ children: ReactNode }> }> = ({
|
|
262
|
-
template,
|
|
271
|
+
export const T: React.FC<{ template: string; fallback?: ReactNode; wrapper?: React.ComponentType<{ children: ReactNode }> }> = ({
|
|
272
|
+
template,
|
|
263
273
|
fallback,
|
|
264
|
-
wrapper: Wrapper
|
|
274
|
+
wrapper: Wrapper
|
|
265
275
|
}) => {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
}
|
|
276
|
+
const context = useContext(DataContext);
|
|
277
|
+
if (!context) {
|
|
278
|
+
throw new Error('T component must be used within a DataProvider. Did you wrap your component with <DataProvider>?');
|
|
279
|
+
}
|
|
271
280
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
} else {
|
|
280
|
-
return fallback ? <>{fallback}</> : null;
|
|
281
|
-
}
|
|
281
|
+
const { resolved, loading, error } = useResolveTemplate(template);
|
|
282
|
+
|
|
283
|
+
if (loading) {
|
|
284
|
+
return fallback ? <>{fallback}</> : null;
|
|
285
|
+
} else if (error) {
|
|
286
|
+
if (process.env.NODE_ENV === 'development') {
|
|
287
|
+
return <>[Template Error: {error.message}]</>;
|
|
282
288
|
} else {
|
|
283
|
-
|
|
284
|
-
return Wrapper ? <Wrapper>{content}</Wrapper> : content;
|
|
289
|
+
return fallback ? <>{fallback}</> : null;
|
|
285
290
|
}
|
|
286
|
-
}
|
|
287
|
-
|
|
291
|
+
} else {
|
|
292
|
+
const content = <>{resolved}</>;
|
|
293
|
+
return Wrapper ? <Wrapper>{content}</Wrapper> : content;
|
|
288
294
|
}
|
|
289
295
|
};
|
|
290
296
|
|
|
@@ -321,7 +327,7 @@ export function useTemplate(template: string): string | null {
|
|
|
321
327
|
* {t.wrap(CustomComponent)`{{company.slogan}}`}
|
|
322
328
|
* ```
|
|
323
329
|
*/
|
|
324
|
-
export function t(strings: TemplateStringsArray, ...values:
|
|
330
|
+
export function t(strings: TemplateStringsArray, ...values: unknown[]): ReactNode {
|
|
325
331
|
// First do regular template literal interpolation
|
|
326
332
|
const template = String.raw(strings, ...values);
|
|
327
333
|
|
|
@@ -343,7 +349,7 @@ export function t(strings: TemplateStringsArray, ...values: any[]): ReactNode {
|
|
|
343
349
|
* ```
|
|
344
350
|
*/
|
|
345
351
|
t.wrap = (WrapperComponent: React.ComponentType<{ children: ReactNode }>) =>
|
|
346
|
-
(strings: TemplateStringsArray, ...values:
|
|
352
|
+
(strings: TemplateStringsArray, ...values: unknown[]): ReactNode => {
|
|
347
353
|
const template = String.raw(strings, ...values);
|
|
348
354
|
|
|
349
355
|
const WrappedTemplate = () => {
|
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';
|
|
8
8
|
import { AllPalettes } from '../palettes';
|
|
9
|
-
import {
|
|
10
|
-
loadUserPalettePreference,
|
|
11
|
-
saveUserPalettePreference,
|
|
12
|
-
clearUserPalettePreference
|
|
9
|
+
import {
|
|
10
|
+
loadUserPalettePreference,
|
|
11
|
+
saveUserPalettePreference,
|
|
12
|
+
clearUserPalettePreference
|
|
13
13
|
} from '../utils/persistenceUtils';
|
|
14
|
+
import { loadPalette } from '../utils/paletteLoader';
|
|
14
15
|
|
|
15
16
|
// Type definitions
|
|
16
17
|
export interface PaletteConfig {
|
|
@@ -136,15 +137,27 @@ export const PaletteProvider: React.FC<PaletteProviderProps> = ({
|
|
|
136
137
|
// Apply palette to document root immediately and on changes
|
|
137
138
|
useEffect(() => {
|
|
138
139
|
if (typeof document !== 'undefined') {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
// Dynamically load the palette CSS if not already loaded
|
|
141
|
+
loadPalette(currentPalette).then(() => {
|
|
142
|
+
// Set the data-palette attribute after CSS is loaded
|
|
143
|
+
document.documentElement.setAttribute('data-palette', currentPalette);
|
|
144
|
+
|
|
145
|
+
// Dispatch custom event to notify theme system (with small delay to ensure CSS is applied)
|
|
146
|
+
setTimeout(() => {
|
|
147
|
+
const event = new CustomEvent('palette-changed', {
|
|
148
|
+
detail: { palette: currentPalette }
|
|
149
|
+
});
|
|
150
|
+
window.dispatchEvent(event);
|
|
151
|
+
}, 50);
|
|
152
|
+
}).catch((error) => {
|
|
153
|
+
console.error(`[PaletteContext] Failed to load palette "${currentPalette}":`, error);
|
|
154
|
+
// Still set the attribute and dispatch event even if loading fails
|
|
155
|
+
document.documentElement.setAttribute('data-palette', currentPalette);
|
|
143
156
|
const event = new CustomEvent('palette-changed', {
|
|
144
157
|
detail: { palette: currentPalette }
|
|
145
158
|
});
|
|
146
159
|
window.dispatchEvent(event);
|
|
147
|
-
}
|
|
160
|
+
});
|
|
148
161
|
}
|
|
149
162
|
}, [currentPalette]);
|
|
150
163
|
|
|
@@ -191,7 +191,7 @@ export const PrintModeProvider: React.FC<PrintModeProviderProps> = ({ children }
|
|
|
191
191
|
|
|
192
192
|
if (state.printConfig.theme) {
|
|
193
193
|
dispatch({ type: 'SET_ORIGINAL_THEME', theme: getCurrentTheme() });
|
|
194
|
-
setCurrentTheme(state.printConfig.theme as
|
|
194
|
+
setCurrentTheme(state.printConfig.theme as 'light' | 'dark');
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
if (state.printConfig.palette) {
|
|
@@ -261,7 +261,7 @@ export const PrintModeProvider: React.FC<PrintModeProviderProps> = ({ children }
|
|
|
261
261
|
|
|
262
262
|
// Restore original theme and palette
|
|
263
263
|
if (state.originalTheme) {
|
|
264
|
-
setCurrentTheme(state.originalTheme as
|
|
264
|
+
setCurrentTheme(state.originalTheme as 'light' | 'dark');
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
if (state.originalPalette) {
|
|
@@ -293,7 +293,7 @@ export const PrintModeProvider: React.FC<PrintModeProviderProps> = ({ children }
|
|
|
293
293
|
}
|
|
294
294
|
}, [state.printModeState]);
|
|
295
295
|
|
|
296
|
-
// Effect to handle browser print events
|
|
296
|
+
// Effect to handle browser print events
|
|
297
297
|
useEffect(() => {
|
|
298
298
|
const handleBeforePrint = () => {
|
|
299
299
|
triggerPrint();
|
|
@@ -312,7 +312,7 @@ export const PrintModeProvider: React.FC<PrintModeProviderProps> = ({ children }
|
|
|
312
312
|
window.removeEventListener('afterprint', handleAfterPrint);
|
|
313
313
|
};
|
|
314
314
|
}
|
|
315
|
-
}, []);
|
|
315
|
+
}, [exitPrintMode, triggerPrint]);
|
|
316
316
|
|
|
317
317
|
const contextValue: PrintModeContextValue = {
|
|
318
318
|
printModeState: state.printModeState,
|
|
@@ -303,7 +303,8 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = ({
|
|
|
303
303
|
},
|
|
304
304
|
},
|
|
305
305
|
});
|
|
306
|
-
|
|
306
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
307
|
+
}, [actualThemeMode, paletteChangeCounter]); // paletteChangeCounter is needed to force theme rebuild
|
|
307
308
|
|
|
308
309
|
// Theme preference management methods
|
|
309
310
|
const setPreferredTheme = (theme: ThemeMode): void => {
|
|
@@ -70,11 +70,11 @@ export interface BaseComponentProps {
|
|
|
70
70
|
'data-testid'?: string;
|
|
71
71
|
|
|
72
72
|
// Common event handlers (generic for compatibility)
|
|
73
|
-
onClick?: React.MouseEventHandler<
|
|
74
|
-
onMouseEnter?: React.MouseEventHandler<
|
|
75
|
-
onMouseLeave?: React.MouseEventHandler<
|
|
76
|
-
onFocus?: React.FocusEventHandler<
|
|
77
|
-
onBlur?: React.FocusEventHandler<
|
|
73
|
+
onClick?: React.MouseEventHandler<unknown>;
|
|
74
|
+
onMouseEnter?: React.MouseEventHandler<unknown>;
|
|
75
|
+
onMouseLeave?: React.MouseEventHandler<unknown>;
|
|
76
|
+
onFocus?: React.FocusEventHandler<unknown>;
|
|
77
|
+
onBlur?: React.FocusEventHandler<unknown>;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/**
|
|
@@ -203,8 +203,8 @@ export function useBaseProps<T extends BaseComponentProps>(props: T) {
|
|
|
203
203
|
|
|
204
204
|
// Memoize background and text styles
|
|
205
205
|
const backgroundAndTextStyles = useMemo(() => {
|
|
206
|
-
const styles:
|
|
207
|
-
|
|
206
|
+
const styles: Record<string, unknown> = {};
|
|
207
|
+
|
|
208
208
|
if (backgroundGradient) {
|
|
209
209
|
styles.background = backgroundGradient;
|
|
210
210
|
} else if (backgroundImage) {
|
|
@@ -216,11 +216,11 @@ export function useBaseProps<T extends BaseComponentProps>(props: T) {
|
|
|
216
216
|
// Could be a color or theme path
|
|
217
217
|
styles.background = background;
|
|
218
218
|
}
|
|
219
|
-
|
|
219
|
+
|
|
220
220
|
if (textAlign) {
|
|
221
221
|
styles.textAlign = textAlign;
|
|
222
222
|
}
|
|
223
|
-
|
|
223
|
+
|
|
224
224
|
return styles;
|
|
225
225
|
}, [background, backgroundImage, backgroundGradient, textAlign]);
|
|
226
226
|
|
|
@@ -264,4 +264,4 @@ export function useBaseProps<T extends BaseComponentProps>(props: T) {
|
|
|
264
264
|
/**
|
|
265
265
|
* Type helper for components using base props
|
|
266
266
|
*/
|
|
267
|
-
export type WithBaseProps<P =
|
|
267
|
+
export type WithBaseProps<P = Record<string, never>> = P & BaseComponentProps;
|