@qwickapps/react-framework 1.3.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/LICENSE +44 -0
- package/README.md +794 -0
- package/dist/components/AccessibilityChecker.d.ts +12 -0
- package/dist/components/AccessibilityChecker.d.ts.map +1 -0
- package/dist/components/Html.d.ts +48 -0
- package/dist/components/Html.d.ts.map +1 -0
- package/dist/components/Logo.d.ts +79 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Markdown.d.ts +47 -0
- package/dist/components/Markdown.d.ts.map +1 -0
- package/dist/components/QwickApp.d.ts +56 -0
- package/dist/components/QwickApp.d.ts.map +1 -0
- package/dist/components/QwickAppsLogo.d.ts +25 -0
- package/dist/components/QwickAppsLogo.d.ts.map +1 -0
- package/dist/components/ResponsiveMenu.d.ts +38 -0
- package/dist/components/ResponsiveMenu.d.ts.map +1 -0
- package/dist/components/SafeSpan.d.ts +23 -0
- package/dist/components/SafeSpan.d.ts.map +1 -0
- package/dist/components/Scaffold.d.ts +57 -0
- package/dist/components/Scaffold.d.ts.map +1 -0
- package/dist/components/blocks/Article.d.ts +23 -0
- package/dist/components/blocks/Article.d.ts.map +1 -0
- package/dist/components/blocks/CardListGrid.d.ts +23 -0
- package/dist/components/blocks/CardListGrid.d.ts.map +1 -0
- package/dist/components/blocks/Code.d.ts +21 -0
- package/dist/components/blocks/Code.d.ts.map +1 -0
- package/dist/components/blocks/Content.d.ts +24 -0
- package/dist/components/blocks/Content.d.ts.map +1 -0
- package/dist/components/blocks/CoverImageHeader.d.ts +44 -0
- package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -0
- package/dist/components/blocks/FeatureCard.d.ts +66 -0
- package/dist/components/blocks/FeatureCard.d.ts.map +1 -0
- package/dist/components/blocks/FeatureGrid.d.ts +48 -0
- package/dist/components/blocks/FeatureGrid.d.ts.map +1 -0
- package/dist/components/blocks/Footer.d.ts +56 -0
- package/dist/components/blocks/Footer.d.ts.map +1 -0
- package/dist/components/blocks/HeroBlock.d.ts +33 -0
- package/dist/components/blocks/HeroBlock.d.ts.map +1 -0
- package/dist/components/blocks/PageBannerHeader.d.ts +30 -0
- package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -0
- package/dist/components/blocks/ProductCard.d.ts +57 -0
- package/dist/components/blocks/ProductCard.d.ts.map +1 -0
- package/dist/components/blocks/Section.d.ts +40 -0
- package/dist/components/blocks/Section.d.ts.map +1 -0
- package/dist/components/blocks/index.d.ts +37 -0
- package/dist/components/blocks/index.d.ts.map +1 -0
- package/dist/components/buttons/Button.d.ts +38 -0
- package/dist/components/buttons/Button.d.ts.map +1 -0
- package/dist/components/buttons/PaletteSwitcher.d.ts +24 -0
- package/dist/components/buttons/PaletteSwitcher.d.ts.map +1 -0
- package/dist/components/buttons/ThemeSwitcher.d.ts +24 -0
- package/dist/components/buttons/ThemeSwitcher.d.ts.map +1 -0
- package/dist/components/buttons/index.d.ts +11 -0
- package/dist/components/buttons/index.d.ts.map +1 -0
- package/dist/components/forms/FormBlock.d.ts +45 -0
- package/dist/components/forms/FormBlock.d.ts.map +1 -0
- package/dist/components/forms/index.d.ts +8 -0
- package/dist/components/forms/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/input/ChoiceInputField.d.ts +30 -0
- package/dist/components/input/ChoiceInputField.d.ts.map +1 -0
- package/dist/components/input/HtmlInputField.d.ts +29 -0
- package/dist/components/input/HtmlInputField.d.ts.map +1 -0
- package/dist/components/input/SelectInputField.d.ts +29 -0
- package/dist/components/input/SelectInputField.d.ts.map +1 -0
- package/dist/components/input/TextField.d.ts +18 -0
- package/dist/components/input/TextField.d.ts.map +1 -0
- package/dist/components/input/TextInputField.d.ts +32 -0
- package/dist/components/input/TextInputField.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +17 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/layout/GridCell.d.ts +16 -0
- package/dist/components/layout/GridCell.d.ts.map +1 -0
- package/dist/components/layout/GridCellWrapper.d.ts +46 -0
- package/dist/components/layout/GridCellWrapper.d.ts.map +1 -0
- package/dist/components/layout/GridLayout.d.ts +38 -0
- package/dist/components/layout/GridLayout.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +12 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/menu/Menu.d.ts +1 -0
- package/dist/components/menu/Menu.d.ts.map +1 -0
- package/dist/components/menu/MenuItem.d.ts +31 -0
- package/dist/components/menu/MenuItem.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +7 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/pages/FormPage.d.ts +66 -0
- package/dist/components/pages/FormPage.d.ts.map +1 -0
- package/dist/components/pages/Page.d.ts +124 -0
- package/dist/components/pages/Page.d.ts.map +1 -0
- package/dist/components/pages/index.d.ts +11 -0
- package/dist/components/pages/index.d.ts.map +1 -0
- package/dist/contexts/DataContext.d.ts +139 -0
- package/dist/contexts/DataContext.d.ts.map +1 -0
- package/dist/contexts/DimensionsContext.d.ts +42 -0
- package/dist/contexts/DimensionsContext.d.ts.map +1 -0
- package/dist/contexts/PaletteContext.d.ts +53 -0
- package/dist/contexts/PaletteContext.d.ts.map +1 -0
- package/dist/contexts/QwickAppContext.d.ts +71 -0
- package/dist/contexts/QwickAppContext.d.ts.map +1 -0
- package/dist/contexts/ThemeContext.d.ts +65 -0
- package/dist/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +9 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useBaseProps.d.ts +101 -0
- package/dist/hooks/useBaseProps.d.ts.map +1 -0
- package/dist/hooks/useDataBinding.d.ts +22 -0
- package/dist/hooks/useDataBinding.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.css +1 -0
- package/dist/index.esm.js +24143 -0
- package/dist/index.js +24245 -0
- package/dist/palettes/PaletteAutumn.d.ts +10 -0
- package/dist/palettes/PaletteAutumn.d.ts.map +1 -0
- package/dist/palettes/PaletteCosmic.d.ts +10 -0
- package/dist/palettes/PaletteCosmic.d.ts.map +1 -0
- package/dist/palettes/PaletteDefault.d.ts +10 -0
- package/dist/palettes/PaletteDefault.d.ts.map +1 -0
- package/dist/palettes/PaletteOcean.d.ts +10 -0
- package/dist/palettes/PaletteOcean.d.ts.map +1 -0
- package/dist/palettes/PaletteSpring.d.ts +10 -0
- package/dist/palettes/PaletteSpring.d.ts.map +1 -0
- package/dist/palettes/PaletteWinter.d.ts +10 -0
- package/dist/palettes/PaletteWinter.d.ts.map +1 -0
- package/dist/palettes/index.d.ts +13 -0
- package/dist/palettes/index.d.ts.map +1 -0
- package/dist/schemas/ActionSchema.d.ts +21 -0
- package/dist/schemas/ActionSchema.d.ts.map +1 -0
- package/dist/schemas/ArticleSchema.d.ts +13 -0
- package/dist/schemas/ArticleSchema.d.ts.map +1 -0
- package/dist/schemas/Builders.d.ts +7 -0
- package/dist/schemas/Builders.d.ts.map +1 -0
- package/dist/schemas/ButtonSchema.d.ts +19 -0
- package/dist/schemas/ButtonSchema.d.ts.map +1 -0
- package/dist/schemas/CardListGridSchema.d.ts +17 -0
- package/dist/schemas/CardListGridSchema.d.ts.map +1 -0
- package/dist/schemas/ChoiceInputFieldSchema.d.ts +18 -0
- package/dist/schemas/ChoiceInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/CodeSchema.d.ts +18 -0
- package/dist/schemas/CodeSchema.d.ts.map +1 -0
- package/dist/schemas/ContentSchema.d.ts +20 -0
- package/dist/schemas/ContentSchema.d.ts.map +1 -0
- package/dist/schemas/CoverImageHeaderSchema.d.ts +28 -0
- package/dist/schemas/CoverImageHeaderSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureCardSchema.d.ts +28 -0
- package/dist/schemas/FeatureCardSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureGridSchema.d.ts +17 -0
- package/dist/schemas/FeatureGridSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureItemSchema.d.ts +16 -0
- package/dist/schemas/FeatureItemSchema.d.ts.map +1 -0
- package/dist/schemas/FooterItemSchema.d.ts +15 -0
- package/dist/schemas/FooterItemSchema.d.ts.map +1 -0
- package/dist/schemas/FooterSchema.d.ts +20 -0
- package/dist/schemas/FooterSchema.d.ts.map +1 -0
- package/dist/schemas/FooterSectionSchema.d.ts +15 -0
- package/dist/schemas/FooterSectionSchema.d.ts.map +1 -0
- package/dist/schemas/FormBlockSchema.d.ts +19 -0
- package/dist/schemas/FormBlockSchema.d.ts.map +1 -0
- package/dist/schemas/HeaderActionSchema.d.ts +17 -0
- package/dist/schemas/HeaderActionSchema.d.ts.map +1 -0
- package/dist/schemas/HeroBlockSchema.d.ts +22 -0
- package/dist/schemas/HeroBlockSchema.d.ts.map +1 -0
- package/dist/schemas/HtmlInputFieldSchema.d.ts +18 -0
- package/dist/schemas/HtmlInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/MetadataItemSchema.d.ts +13 -0
- package/dist/schemas/MetadataItemSchema.d.ts.map +1 -0
- package/dist/schemas/PageBannerHeaderSchema.d.ts +28 -0
- package/dist/schemas/PageBannerHeaderSchema.d.ts.map +1 -0
- package/dist/schemas/PaletteSwitcherSchema.d.ts +16 -0
- package/dist/schemas/PaletteSwitcherSchema.d.ts.map +1 -0
- package/dist/schemas/ProductCardSchema.d.ts +39 -0
- package/dist/schemas/ProductCardSchema.d.ts.map +1 -0
- package/dist/schemas/SafeSpanSchema.d.ts +13 -0
- package/dist/schemas/SafeSpanSchema.d.ts.map +1 -0
- package/dist/schemas/SectionSchema.d.ts +17 -0
- package/dist/schemas/SectionSchema.d.ts.map +1 -0
- package/dist/schemas/SelectInputFieldSchema.d.ts +27 -0
- package/dist/schemas/SelectInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/TextInputFieldSchema.d.ts +22 -0
- package/dist/schemas/TextInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/ThemeSwitcherSchema.d.ts +19 -0
- package/dist/schemas/ThemeSwitcherSchema.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +33 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/types.d.ts +7 -0
- package/dist/schemas/types.d.ts.map +1 -0
- package/dist/templates/TemplateResolver.d.ts +52 -0
- package/dist/templates/TemplateResolver.d.ts.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/tests/ConsoleWarningTest.d.ts +5 -0
- package/dist/tests/ConsoleWarningTest.d.ts.map +1 -0
- package/dist/tests/StorageKeyTest.d.ts +6 -0
- package/dist/tests/StorageKeyTest.d.ts.map +1 -0
- package/dist/tests/ThemeStorageKeyTest.d.ts +6 -0
- package/dist/tests/ThemeStorageKeyTest.d.ts.map +1 -0
- package/dist/types/CacheProvider.d.ts +18 -0
- package/dist/types/CacheProvider.d.ts.map +1 -0
- package/dist/types/ContentProxy.d.ts +47 -0
- package/dist/types/ContentProxy.d.ts.map +1 -0
- package/dist/types/DataBinding.d.ts +7 -0
- package/dist/types/DataBinding.d.ts.map +1 -0
- package/dist/types/DataProvider.d.ts +7 -0
- package/dist/types/DataProvider.d.ts.map +1 -0
- package/dist/types/DataTypes.d.ts +185 -0
- package/dist/types/DataTypes.d.ts.map +1 -0
- package/dist/types/TemplateProvider.d.ts +10 -0
- package/dist/types/TemplateProvider.d.ts.map +1 -0
- package/dist/types/TemplateResolver.d.ts +23 -0
- package/dist/types/TemplateResolver.d.ts.map +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/breakpoints.d.ts +35 -0
- package/dist/utils/breakpoints.d.ts.map +1 -0
- package/dist/utils/customPaletteManager.d.ts +8 -0
- package/dist/utils/customPaletteManager.d.ts.map +1 -0
- package/dist/utils/dimensions.d.ts +34 -0
- package/dist/utils/dimensions.d.ts.map +1 -0
- package/dist/utils/htmlTransform.d.ts +44 -0
- package/dist/utils/htmlTransform.d.ts.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/paletteUtils.d.ts +38 -0
- package/dist/utils/paletteUtils.d.ts.map +1 -0
- package/dist/utils/persistenceUtils.d.ts +31 -0
- package/dist/utils/persistenceUtils.d.ts.map +1 -0
- package/dist/utils/reactUtils.d.ts +24 -0
- package/dist/utils/reactUtils.d.ts.map +1 -0
- package/dist/utils/spacing.d.ts +34 -0
- package/dist/utils/spacing.d.ts.map +1 -0
- package/dist/utils/themePerformanceMonitor.d.ts +32 -0
- package/dist/utils/themePerformanceMonitor.d.ts.map +1 -0
- package/dist/utils/themeUtils.d.ts +27 -0
- package/dist/utils/themeUtils.d.ts.map +1 -0
- package/package.json +141 -0
- package/src/__tests__/components/Logo.test.js +172 -0
- package/src/__tests__/contexts/DataContext.test.js +505 -0
- package/src/__tests__/contexts/PaletteContext.test.js +115 -0
- package/src/__tests__/contexts/ThemeContext.test.js +123 -0
- package/src/__tests__/utils/paletteUtils.test.js +142 -0
- package/src/__tests__/utils/themeUtils.test.js +142 -0
- package/src/components/AccessibilityChecker.tsx +264 -0
- package/src/components/Html.tsx +191 -0
- package/src/components/Logo.css +217 -0
- package/src/components/Logo.tsx +370 -0
- package/src/components/Markdown.tsx +191 -0
- package/src/components/QwickApp.css +257 -0
- package/src/components/QwickApp.tsx +157 -0
- package/src/components/QwickAppsLogo.tsx +77 -0
- package/src/components/ResponsiveMenu.css +416 -0
- package/src/components/ResponsiveMenu.tsx +310 -0
- package/src/components/SafeSpan.tsx +128 -0
- package/src/components/Scaffold.css +541 -0
- package/src/components/Scaffold.tsx +463 -0
- package/src/components/__tests__/Article.test.tsx +419 -0
- package/src/components/__tests__/Button.test.tsx +702 -0
- package/src/components/__tests__/CardListGrid.test.tsx +478 -0
- package/src/components/__tests__/ChoiceInputField.test.tsx +864 -0
- package/src/components/__tests__/Code.test.tsx +595 -0
- package/src/components/__tests__/Content.integration.test.tsx +193 -0
- package/src/components/__tests__/Content.test.tsx +504 -0
- package/src/components/__tests__/CoverImageHeader.test.tsx +456 -0
- package/src/components/__tests__/FeatureCard.integration.test.tsx +384 -0
- package/src/components/__tests__/FeatureGrid.integration.test.tsx +364 -0
- package/src/components/__tests__/FeatureGrid.test.tsx +494 -0
- package/src/components/__tests__/Footer.test.tsx +544 -0
- package/src/components/__tests__/FormBlock.test.tsx +857 -0
- package/src/components/__tests__/HeroBlock.integration.test.tsx +272 -0
- package/src/components/__tests__/HeroBlock.test.tsx +463 -0
- package/src/components/__tests__/Html.test.tsx +174 -0
- package/src/components/__tests__/HtmlInputField.test.tsx +856 -0
- package/src/components/__tests__/Markdown.test.tsx +233 -0
- package/src/components/__tests__/PageBannerHeader.test.tsx +614 -0
- package/src/components/__tests__/PaletteSwitcher.test.tsx +864 -0
- package/src/components/__tests__/ProductCard.test.tsx +377 -0
- package/src/components/__tests__/SafeSpan.integration.test.tsx +123 -0
- package/src/components/__tests__/SafeSpan.simple.test.tsx +65 -0
- package/src/components/__tests__/SafeSpan.test.tsx +388 -0
- package/src/components/__tests__/Section.integration.test.tsx +288 -0
- package/src/components/__tests__/Section.test.tsx +494 -0
- package/src/components/__tests__/SelectInputField.test.tsx +886 -0
- package/src/components/__tests__/TextInputField.test.tsx +749 -0
- package/src/components/__tests__/ThemeSwitcher.test.tsx +777 -0
- package/src/components/blocks/Article.tsx +194 -0
- package/src/components/blocks/CardListGrid.tsx +132 -0
- package/src/components/blocks/Code.tsx +313 -0
- package/src/components/blocks/Content.tsx +265 -0
- package/src/components/blocks/CoverImageHeader.css +17 -0
- package/src/components/blocks/CoverImageHeader.tsx +435 -0
- package/src/components/blocks/FeatureCard.tsx +321 -0
- package/src/components/blocks/FeatureGrid.tsx +147 -0
- package/src/components/blocks/Footer.tsx +343 -0
- package/src/components/blocks/HeroBlock.tsx +280 -0
- package/src/components/blocks/PageBannerHeader.tsx +471 -0
- package/src/components/blocks/ProductCard.tsx +472 -0
- package/src/components/blocks/Section.tsx +209 -0
- package/src/components/blocks/index.ts +37 -0
- package/src/components/buttons/Button.tsx +233 -0
- package/src/components/buttons/PaletteSwitcher.tsx +268 -0
- package/src/components/buttons/ThemeSwitcher.tsx +283 -0
- package/src/components/buttons/index.ts +11 -0
- package/src/components/forms/FormBlock.tsx +291 -0
- package/src/components/forms/index.ts +7 -0
- package/src/components/index.ts +37 -0
- package/src/components/input/ChoiceInputField.tsx +188 -0
- package/src/components/input/HtmlInputField.tsx +326 -0
- package/src/components/input/SelectInputField.tsx +197 -0
- package/src/components/input/TextField.tsx +47 -0
- package/src/components/input/TextInputField.tsx +144 -0
- package/src/components/input/index.ts +17 -0
- package/src/components/layout/GridCell.tsx +46 -0
- package/src/components/layout/GridCellWrapper.tsx +87 -0
- package/src/components/layout/GridLayout.tsx +169 -0
- package/src/components/layout/index.ts +13 -0
- package/src/components/menu/Menu.tsx +0 -0
- package/src/components/menu/MenuItem.tsx +32 -0
- package/src/components/menu/index.ts +6 -0
- package/src/components/pages/FormPage.tsx +108 -0
- package/src/components/pages/Page.css +460 -0
- package/src/components/pages/Page.tsx +345 -0
- package/src/components/pages/index.ts +11 -0
- package/src/contexts/DataContext.tsx +355 -0
- package/src/contexts/DimensionsContext.tsx +154 -0
- package/src/contexts/PaletteContext.tsx +217 -0
- package/src/contexts/QwickAppContext.tsx +95 -0
- package/src/contexts/ThemeContext.tsx +376 -0
- package/src/contexts/index.ts +9 -0
- package/src/hooks/__tests__/useDataBinding.test.tsx.disabled +229 -0
- package/src/hooks/index.ts +11 -0
- package/src/hooks/useBaseProps.ts +267 -0
- package/src/hooks/useDataBinding.ts +77 -0
- package/src/index.ts +23 -0
- package/src/palettes/PaletteAutumn.css +172 -0
- package/src/palettes/PaletteAutumn.ts +16 -0
- package/src/palettes/PaletteCosmic.css +172 -0
- package/src/palettes/PaletteCosmic.ts +16 -0
- package/src/palettes/PaletteDefault.css +178 -0
- package/src/palettes/PaletteDefault.ts +17 -0
- package/src/palettes/PaletteOcean.css +172 -0
- package/src/palettes/PaletteOcean.ts +16 -0
- package/src/palettes/PaletteSpring.css +160 -0
- package/src/palettes/PaletteSpring.ts +16 -0
- package/src/palettes/PaletteWinter.css +172 -0
- package/src/palettes/PaletteWinter.ts +16 -0
- package/src/palettes/index.css +12 -0
- package/src/palettes/index.ts +29 -0
- package/src/schemas/ActionSchema.ts +140 -0
- package/src/schemas/ArticleSchema.ts +35 -0
- package/src/schemas/ButtonSchema.ts +99 -0
- package/src/schemas/CardListGridSchema.ts +102 -0
- package/src/schemas/ChoiceInputFieldSchema.ts +89 -0
- package/src/schemas/CodeSchema.ts +88 -0
- package/src/schemas/ContentSchema.ts +128 -0
- package/src/schemas/CoverImageHeaderSchema.ts +208 -0
- package/src/schemas/FeatureCardSchema.ts +161 -0
- package/src/schemas/FeatureGridSchema.ts +87 -0
- package/src/schemas/FeatureItemSchema.ts +68 -0
- package/src/schemas/FooterItemSchema.ts +57 -0
- package/src/schemas/FooterSchema.ts +116 -0
- package/src/schemas/FooterSectionSchema.ts +50 -0
- package/src/schemas/FormBlockSchema.ts +102 -0
- package/src/schemas/HeaderActionSchema.ts +83 -0
- package/src/schemas/HeroBlockSchema.ts +149 -0
- package/src/schemas/HtmlInputFieldSchema.ts +88 -0
- package/src/schemas/MetadataItemSchema.ts +35 -0
- package/src/schemas/PageBannerHeaderSchema.ts +206 -0
- package/src/schemas/PaletteSwitcherSchema.ts +66 -0
- package/src/schemas/ProductCardSchema.ts +264 -0
- package/src/schemas/SafeSpanSchema.ts +36 -0
- package/src/schemas/SectionSchema.ts +106 -0
- package/src/schemas/SelectInputFieldSchema.ts +137 -0
- package/src/schemas/TextInputFieldSchema.ts +129 -0
- package/src/schemas/ThemeSwitcherSchema.ts +97 -0
- package/src/schemas/__tests__/builders.test.ts +313 -0
- package/src/schemas/index.ts +34 -0
- package/src/setupTests.js +60 -0
- package/src/stories/Article.stories.tsx +549 -0
- package/src/stories/Button.stories.tsx +498 -0
- package/src/stories/CardListGrid.stories.tsx +539 -0
- package/src/stories/ChoiceInputField.stories.tsx +591 -0
- package/src/stories/Code.stories.tsx +711 -0
- package/src/stories/Content.stories.tsx +463 -0
- package/src/stories/CoverImageHeader.stories.tsx +794 -0
- package/src/stories/DataBinding.advanced.stories.tsx +548 -0
- package/src/stories/DataBinding.stories.tsx +452 -0
- package/src/stories/DataProvider.stories.tsx +1361 -0
- package/src/stories/FeatureCard.stories.tsx +642 -0
- package/src/stories/FeatureGrid.stories.tsx +669 -0
- package/src/stories/Footer.stories.tsx +724 -0
- package/src/stories/FormBlock.stories.tsx +834 -0
- package/src/stories/HeroBlock.stories.tsx +442 -0
- package/src/stories/Html.stories.tsx +264 -0
- package/src/stories/HtmlInputField.stories.tsx +558 -0
- package/src/stories/Introduction.stories.tsx +721 -0
- package/src/stories/LayoutBlocks.stories.tsx +382 -0
- package/src/stories/LayoutSystem.stories.tsx +253 -0
- package/src/stories/Logo.stories.tsx +400 -0
- package/src/stories/Markdown.stories.tsx +349 -0
- package/src/stories/Page.stories.tsx +762 -0
- package/src/stories/PageBannerHeader.stories.tsx +949 -0
- package/src/stories/PaletteSwitcher.stories.tsx +156 -0
- package/src/stories/ProductCard.stories.tsx +504 -0
- package/src/stories/QwickApp.stories.tsx +461 -0
- package/src/stories/ResponsiveMenu.stories.tsx +299 -0
- package/src/stories/SafeSpan.stories.tsx +612 -0
- package/src/stories/Section.stories.tsx +613 -0
- package/src/stories/SelectInputField.stories.tsx +605 -0
- package/src/stories/TextInputField.stories.tsx +526 -0
- package/src/stories/ThemeSwitcher.stories.tsx +170 -0
- package/src/stories/form/FormComponents.stories.tsx +588 -0
- package/src/templates/TemplateResolver.ts +156 -0
- package/src/templates/index.ts +6 -0
- package/src/tests/ConsoleWarningTest.tsx +30 -0
- package/src/tests/StorageKeyTest.tsx +110 -0
- package/src/tests/ThemeStorageKeyTest.tsx +114 -0
- package/src/types/CacheProvider.ts +14 -0
- package/src/types/ContentProxy.ts +99 -0
- package/src/types/DataTypes.ts +196 -0
- package/src/types/TemplateProvider.ts +9 -0
- package/src/types/TemplateResolver.ts +26 -0
- package/src/types/index.ts +99 -0
- package/src/utils/__tests__/createDataDrivenComponent.test.tsx.disabled +193 -0
- package/src/utils/__tests__/htmlTransform.test.tsx +255 -0
- package/src/utils/breakpoints.ts +87 -0
- package/src/utils/customPaletteManager.js +214 -0
- package/src/utils/dimensions.ts +147 -0
- package/src/utils/htmlTransform.tsx +323 -0
- package/src/utils/index.ts +16 -0
- package/src/utils/logger.ts +28 -0
- package/src/utils/paletteUtils.ts +78 -0
- package/src/utils/persistenceUtils.ts +107 -0
- package/src/utils/reactUtils.tsx +37 -0
- package/src/utils/spacing.ts +155 -0
- package/src/utils/themePerformanceMonitor.js +113 -0
- package/src/utils/themeUtils.ts +67 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Theme Variables - Modular Palette-based Color System
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This file implements a modular two-tier color system:
|
|
7
|
+
* 1. Palette Variables: Define the core color values (--palette-*) in separate files
|
|
8
|
+
* 2. Theme Variables: Semantic colors that reference palette values (--theme-*)
|
|
9
|
+
*
|
|
10
|
+
* Benefits:
|
|
11
|
+
* - Modular palette files for easy organization
|
|
12
|
+
* - Easy theme customization by switching palettes
|
|
13
|
+
* - Consistent color usage across components
|
|
14
|
+
* - Reduced duplication and easier maintenance
|
|
15
|
+
* - Semantic naming for better understanding
|
|
16
|
+
*
|
|
17
|
+
* Available palettes:
|
|
18
|
+
* - default: Classic blue and neutral (original QwickApps palette)
|
|
19
|
+
* - winter: Cool blues, icy whites, and frosty grays
|
|
20
|
+
* - autumn: Warm oranges, golden yellows, and earthy browns
|
|
21
|
+
* - spring: Fresh greens, soft pinks, and bright yellows
|
|
22
|
+
* - ocean: Deep blues, aqua teals, and seafoam greens
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/* Import all available color palettes */
|
|
26
|
+
@import '../palettes/index.css';
|
|
27
|
+
|
|
28
|
+
/* ===== THEME VARIABLES (derived from palette) ===== */
|
|
29
|
+
/* These variables reference palette variables and adapt automatically */
|
|
30
|
+
:root {
|
|
31
|
+
/* Primary brand colors */
|
|
32
|
+
--theme-primary: var(--palette-primary-main);
|
|
33
|
+
--theme-primary-light: var(--palette-primary-light);
|
|
34
|
+
--theme-primary-dark: var(--palette-primary-dark);
|
|
35
|
+
--theme-on-primary: var(--palette-on-primary);
|
|
36
|
+
|
|
37
|
+
/* Secondary brand colors */
|
|
38
|
+
--theme-secondary: var(--palette-secondary-main);
|
|
39
|
+
--theme-secondary-light: var(--palette-secondary-light);
|
|
40
|
+
--theme-secondary-dark: var(--palette-secondary-dark);
|
|
41
|
+
--theme-on-secondary: var(--palette-on-secondary);
|
|
42
|
+
|
|
43
|
+
/* Accent colors */
|
|
44
|
+
--theme-accent: var(--palette-accent-main);
|
|
45
|
+
--theme-accent-light: var(--palette-accent-light);
|
|
46
|
+
--theme-accent-dark: var(--palette-accent-dark);
|
|
47
|
+
--theme-on-accent: var(--palette-on-accent);
|
|
48
|
+
|
|
49
|
+
/* Status colors */
|
|
50
|
+
--theme-success: var(--palette-success-main);
|
|
51
|
+
--theme-success-light: var(--palette-success-light);
|
|
52
|
+
--theme-success-dark: var(--palette-success-dark);
|
|
53
|
+
--theme-on-success: var(--palette-on-success);
|
|
54
|
+
--theme-success-border: var(--palette-success-border);
|
|
55
|
+
|
|
56
|
+
--theme-warning: var(--palette-warning-main);
|
|
57
|
+
--theme-warning-light: var(--palette-warning-light);
|
|
58
|
+
--theme-warning-dark: var(--palette-warning-dark);
|
|
59
|
+
--theme-on-warning: var(--palette-on-warning);
|
|
60
|
+
--theme-warning-border: var(--palette-warning-border);
|
|
61
|
+
|
|
62
|
+
--theme-error: var(--palette-error-main);
|
|
63
|
+
--theme-error-light: var(--palette-error-light);
|
|
64
|
+
--theme-error-dark: var(--palette-error-dark);
|
|
65
|
+
--theme-on-error: var(--palette-on-error);
|
|
66
|
+
--theme-error-border: var(--palette-error-border);
|
|
67
|
+
|
|
68
|
+
--theme-info: var(--palette-info-main);
|
|
69
|
+
--theme-info-light: var(--palette-info-light);
|
|
70
|
+
--theme-info-dark: var(--palette-info-dark);
|
|
71
|
+
--theme-on-info: var(--palette-on-info);
|
|
72
|
+
--theme-info-border: var(--palette-info-border);
|
|
73
|
+
|
|
74
|
+
/* Background colors */
|
|
75
|
+
--theme-background: var(--palette-background-main);
|
|
76
|
+
--theme-background-dark: var(--palette-background-dark);
|
|
77
|
+
--theme-background-overlay: var(--palette-background-overlay);
|
|
78
|
+
--theme-on-background: var(--palette-on-background);
|
|
79
|
+
|
|
80
|
+
/* Surface colors */
|
|
81
|
+
--theme-surface: var(--palette-surface-main);
|
|
82
|
+
--theme-surface-variant: var(--palette-surface-variant);
|
|
83
|
+
--theme-surface-elevated: var(--palette-surface-elevated);
|
|
84
|
+
--theme-on-surface: var(--palette-on-surface);
|
|
85
|
+
|
|
86
|
+
/* Border colors */
|
|
87
|
+
--theme-border-main: var(--palette-border-main);
|
|
88
|
+
--theme-border-light: var(--palette-border-light);
|
|
89
|
+
--theme-border-lighter: var(--palette-border-lighter);
|
|
90
|
+
--theme-border-medium: var(--palette-border-medium);
|
|
91
|
+
--theme-border-dark: var(--palette-border-medium);
|
|
92
|
+
|
|
93
|
+
/* Text colors */
|
|
94
|
+
--theme-text-primary: var(--palette-text-primary);
|
|
95
|
+
--theme-text-secondary: var(--palette-text-secondary);
|
|
96
|
+
--theme-text-disabled: var(--palette-text-disabled);
|
|
97
|
+
--theme-text-inverted: var(--palette-text-inverted);
|
|
98
|
+
|
|
99
|
+
/* Control colors */
|
|
100
|
+
--theme-control-bg: var(--palette-control-main);
|
|
101
|
+
--theme-control-text: var(--palette-control-text);
|
|
102
|
+
--theme-control-border: var(--palette-control-border);
|
|
103
|
+
--theme-control-hover-bg: var(--palette-control-light);
|
|
104
|
+
--theme-control-hover-text: var(--palette-text-inverted);
|
|
105
|
+
--theme-control-hover-border: var(--palette-control-border);
|
|
106
|
+
|
|
107
|
+
/* Panel colors */
|
|
108
|
+
--theme-panel-bg-start: var(--palette-control-main);
|
|
109
|
+
--theme-panel-bg-end: var(--palette-surface-elevated);
|
|
110
|
+
--theme-panel-border: var(--palette-control-border);
|
|
111
|
+
--theme-panel-shadow: rgba(0, 0, 0, 0.6);
|
|
112
|
+
|
|
113
|
+
/* Floating surface colors */
|
|
114
|
+
--theme-floating-bg: var(--palette-background-overlay);
|
|
115
|
+
--theme-floating-border: var(--palette-border-light);
|
|
116
|
+
|
|
117
|
+
/* Option/Choice colors */
|
|
118
|
+
--theme-option-bg: var(--palette-surface-variant);
|
|
119
|
+
--theme-option-text: var(--palette-text-primary);
|
|
120
|
+
--theme-option-border: var(--palette-border-main);
|
|
121
|
+
--theme-option-hover-bg: var(--palette-surface-variant);
|
|
122
|
+
--theme-option-selected-bg: var(--palette-primary-light);
|
|
123
|
+
--theme-option-selected-border: var(--palette-primary-main);
|
|
124
|
+
--theme-option-selected-text: var(--palette-on-primary);
|
|
125
|
+
--theme-option-correct-bg: var(--palette-success-light);
|
|
126
|
+
--theme-option-correct-border: var(--palette-success-border);
|
|
127
|
+
--theme-option-correct-text: var(--palette-success-dark);
|
|
128
|
+
--theme-option-incorrect-bg: var(--palette-error-light);
|
|
129
|
+
--theme-option-incorrect-border: var(--palette-error-border);
|
|
130
|
+
--theme-option-incorrect-text: var(--palette-error-dark);
|
|
131
|
+
|
|
132
|
+
/* Explanation/Info colors */
|
|
133
|
+
--theme-explanation-bg: var(--palette-info-light);
|
|
134
|
+
--theme-explanation-border: var(--palette-info-main);
|
|
135
|
+
|
|
136
|
+
/* Link colors */
|
|
137
|
+
--theme-link-color: var(--palette-info-main);
|
|
138
|
+
--theme-link-hover: var(--palette-info-dark);
|
|
139
|
+
|
|
140
|
+
/* Code colors */
|
|
141
|
+
--theme-code-bg: var(--palette-surface-variant);
|
|
142
|
+
--theme-code-text: var(--palette-text-primary);
|
|
143
|
+
|
|
144
|
+
/* MUI integration */
|
|
145
|
+
--theme-mui-label-bg: var(--palette-surface-main);
|
|
146
|
+
|
|
147
|
+
/* Additional semantic colors for Material Design components */
|
|
148
|
+
--theme-outline: var(--palette-border-main);
|
|
149
|
+
--theme-outline-variant: var(--palette-border-light);
|
|
150
|
+
|
|
151
|
+
/* Design tokens for consistent dimensions */
|
|
152
|
+
--theme-border-radius: 12px;
|
|
153
|
+
--theme-border-radius-small: 8px;
|
|
154
|
+
--theme-border-radius-large: 16px;
|
|
155
|
+
|
|
156
|
+
/* Elevation shadows */
|
|
157
|
+
--theme-elevation-1: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
158
|
+
--theme-elevation-2: 0 4px 8px rgba(0, 0, 0, 0.15);
|
|
159
|
+
--theme-elevation-3: 0 6px 12px rgba(0, 0, 0, 0.2);
|
|
160
|
+
--theme-elevation-4: 0 8px 16px rgba(0, 0, 0, 0.25);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* ===== THEME-SPECIFIC ADAPTATIONS ===== */
|
|
164
|
+
/* Light theme specific adjustments */
|
|
165
|
+
html[data-theme="light"] {
|
|
166
|
+
/* Header/Surface colors with transparency - use palette-specific header colors */
|
|
167
|
+
--theme-header-bg-start: var(--palette-header-bg-start);
|
|
168
|
+
--theme-header-bg-end: var(--palette-header-bg-end);
|
|
169
|
+
--theme-header-collapsed-bg-start: var(--palette-header-collapsed-bg-start);
|
|
170
|
+
--theme-header-collapsed-bg-end: var(--palette-header-collapsed-bg-end);
|
|
171
|
+
|
|
172
|
+
/* Control hover colors */
|
|
173
|
+
--theme-control-hover-text: var(--palette-text-inverted);
|
|
174
|
+
--theme-control-hover-border: #555;
|
|
175
|
+
|
|
176
|
+
/* Panel colors */
|
|
177
|
+
--theme-panel-bg-end: #252525;
|
|
178
|
+
--theme-panel-shadow: rgba(0, 0, 0, 0.6);
|
|
179
|
+
|
|
180
|
+
/* Floating surface colors */
|
|
181
|
+
--theme-floating-border: rgba(255, 255, 255, 0.5);
|
|
182
|
+
|
|
183
|
+
/* Option colors for light theme */
|
|
184
|
+
--theme-option-text: #222;
|
|
185
|
+
--theme-option-hover-bg: #e0e0e0;
|
|
186
|
+
--theme-option-selected-bg: #d0e0ff;
|
|
187
|
+
--theme-option-selected-text: var(--palette-primary-dark);
|
|
188
|
+
|
|
189
|
+
/* Code colors */
|
|
190
|
+
--theme-code-bg: rgba(0, 0, 0, 0.1);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* Dark theme specific adjustments */
|
|
194
|
+
html[data-theme="dark"] {
|
|
195
|
+
/* Header/Surface colors with transparency - use palette-specific header colors */
|
|
196
|
+
--theme-header-bg-start: var(--palette-header-bg-start);
|
|
197
|
+
--theme-header-bg-end: var(--palette-header-bg-end);
|
|
198
|
+
--theme-header-collapsed-bg-start: var(--palette-header-collapsed-bg-start);
|
|
199
|
+
--theme-header-collapsed-bg-end: var(--palette-header-collapsed-bg-end);
|
|
200
|
+
|
|
201
|
+
/* Control hover colors */
|
|
202
|
+
--theme-control-hover-text: var(--palette-text-primary);
|
|
203
|
+
--theme-control-hover-border: #777;
|
|
204
|
+
|
|
205
|
+
/* Panel colors */
|
|
206
|
+
--theme-panel-bg-end: var(--palette-surface-elevated);
|
|
207
|
+
--theme-panel-shadow: rgba(0, 0, 0, 0.8);
|
|
208
|
+
|
|
209
|
+
/* Floating surface colors */
|
|
210
|
+
--theme-floating-border: rgba(255, 255, 255, 0.2);
|
|
211
|
+
|
|
212
|
+
/* Option colors for dark theme */
|
|
213
|
+
--theme-option-text: var(--palette-text-secondary);
|
|
214
|
+
--theme-option-hover-bg: var(--palette-surface-elevated);
|
|
215
|
+
--theme-option-selected-bg: var(--palette-primary-dark);
|
|
216
|
+
--theme-option-selected-text: var(--palette-primary-light);
|
|
217
|
+
|
|
218
|
+
/* Code colors */
|
|
219
|
+
--theme-code-bg: rgba(255, 255, 255, 0.1);
|
|
220
|
+
--theme-code-text: var(--palette-text-secondary);
|
|
221
|
+
|
|
222
|
+
/* MUI integration */
|
|
223
|
+
--theme-mui-label-bg: rgb(41, 41, 41);
|
|
224
|
+
|
|
225
|
+
/* Dark theme elevation shadows */
|
|
226
|
+
--theme-elevation-1: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
227
|
+
--theme-elevation-2: 0 4px 8px rgba(0, 0, 0, 0.3);
|
|
228
|
+
--theme-elevation-3: 0 6px 12px rgba(0, 0, 0, 0.4);
|
|
229
|
+
--theme-elevation-4: 0 8px 16px rgba(0, 0, 0, 0.5);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* ===== SMOOTH TRANSITIONS ===== */
|
|
233
|
+
/* Apply smooth transitions for theme/palette changes */
|
|
234
|
+
* {
|
|
235
|
+
transition:
|
|
236
|
+
background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
237
|
+
border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
238
|
+
color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
239
|
+
box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* Disable transitions for interactive elements to maintain responsiveness */
|
|
243
|
+
*:focus,
|
|
244
|
+
*:hover,
|
|
245
|
+
*:active,
|
|
246
|
+
input:focus,
|
|
247
|
+
textarea:focus,
|
|
248
|
+
select:focus,
|
|
249
|
+
button:focus,
|
|
250
|
+
.MuiButton-root:focus,
|
|
251
|
+
.MuiIconButton-root:focus,
|
|
252
|
+
.MuiMenuItem-root:hover,
|
|
253
|
+
.MuiFab-root:hover {
|
|
254
|
+
transition: none;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QwickApp - Main application wrapper with routing support
|
|
3
|
+
*
|
|
4
|
+
* This component eliminates the need to manually set up provider hierarchy.
|
|
5
|
+
* Provides theme system, app context, optional scaffolding, and routing.
|
|
6
|
+
*
|
|
7
|
+
* Example usage:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
10
|
+
* import { QwickApp, AuthProvider, JsonDataProvider } from '@qwickapps/react-framework';
|
|
11
|
+
*
|
|
12
|
+
* function App() {
|
|
13
|
+
* const dataSource = {
|
|
14
|
+
* dataProvider: new JsonDataProvider({ data: { company: [...] } }),
|
|
15
|
+
* cacheProvider: true, // Use default MemoryCacheProvider
|
|
16
|
+
* enableLogging: false
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* return (
|
|
20
|
+
* <QwickApp appName="My App" appId="my.app" dataSource={dataSource}>
|
|
21
|
+
* <AuthProvider router={<BrowserRouter />} user={user}>
|
|
22
|
+
* <Route path="/" component={HomePage} />
|
|
23
|
+
* <Route path="/admin" component={AdminPage} requiresRole="admin" />
|
|
24
|
+
* </AuthProvider>
|
|
25
|
+
* </QwickApp>
|
|
26
|
+
* );
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
31
|
+
*/
|
|
32
|
+
import React, { cloneElement, useState } from 'react';
|
|
33
|
+
import { DataProvider, ThemeProvider, type ThemeMode } from '../contexts';
|
|
34
|
+
import { QwickAppContext, type QwickAppContextValue, type QwickAppProps } from '../contexts/QwickAppContext';
|
|
35
|
+
import { type TemplateResolverConfig } from '../types';
|
|
36
|
+
import './QwickApp.css';
|
|
37
|
+
import Scaffold from './Scaffold';
|
|
38
|
+
// Auth logic moved to AuthProvider - QwickApp now focuses on app infrastructure
|
|
39
|
+
|
|
40
|
+
// RouteConfig moved to AuthProvider for auth-specific routing
|
|
41
|
+
|
|
42
|
+
interface QwickAppComponentProps extends QwickAppProps {
|
|
43
|
+
/** Child components to render when no routing is used */
|
|
44
|
+
children?: React.ReactNode;
|
|
45
|
+
/** CSS class name to apply to the root element */
|
|
46
|
+
className?: string;
|
|
47
|
+
/** Inline styles to apply to the root element */
|
|
48
|
+
style?: React.CSSProperties;
|
|
49
|
+
/** Additional content to show in footer */
|
|
50
|
+
footerContent?: React.ReactNode;
|
|
51
|
+
/** Theme mode preference (light/dark/auto) */
|
|
52
|
+
defaultTheme?: ThemeMode;
|
|
53
|
+
/** Optional router component to wrap the app (e.g., <BrowserRouter />, <HashRouter />) */
|
|
54
|
+
router?: React.ReactElement;
|
|
55
|
+
/** Data source configuration for content management and template resolution */
|
|
56
|
+
dataSource?: TemplateResolverConfig;
|
|
57
|
+
// Auth-related props moved to AuthProvider for better separation of concerns
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const QwickApp: React.FC<QwickAppComponentProps> = ({
|
|
61
|
+
children,
|
|
62
|
+
className,
|
|
63
|
+
style,
|
|
64
|
+
defaultTheme,
|
|
65
|
+
defaultPalette,
|
|
66
|
+
appName,
|
|
67
|
+
logo,
|
|
68
|
+
appId = true,
|
|
69
|
+
enableScaffolding = false,
|
|
70
|
+
navigationItems = [],
|
|
71
|
+
appBar,
|
|
72
|
+
showAppBar = true,
|
|
73
|
+
appBarHeight = 64,
|
|
74
|
+
showThemeSwitcher = false,
|
|
75
|
+
showPaletteSwitcher = false,
|
|
76
|
+
onLogoClick,
|
|
77
|
+
router,
|
|
78
|
+
dataSource,
|
|
79
|
+
}) => {
|
|
80
|
+
// State for app configuration that can be updated via useQwickApp
|
|
81
|
+
const [appConfig, setAppConfig] = useState({
|
|
82
|
+
logo,
|
|
83
|
+
enableScaffolding,
|
|
84
|
+
navigationItems,
|
|
85
|
+
appBar,
|
|
86
|
+
showAppBar,
|
|
87
|
+
appBarHeight,
|
|
88
|
+
showThemeSwitcher,
|
|
89
|
+
showPaletteSwitcher,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const updateConfig = (updates: Partial<typeof appConfig>) => {
|
|
93
|
+
setAppConfig(prev => ({ ...prev, ...updates }));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const contextValue: QwickAppContextValue = {
|
|
97
|
+
appName,
|
|
98
|
+
appId,
|
|
99
|
+
...appConfig,
|
|
100
|
+
onLogoClick,
|
|
101
|
+
updateConfig,
|
|
102
|
+
// Navigation removed - now handled by AuthProvider when routing needed
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const content = appConfig.enableScaffolding ? (
|
|
106
|
+
<Scaffold
|
|
107
|
+
appName={appName}
|
|
108
|
+
navigationItems={appConfig.navigationItems}
|
|
109
|
+
appBar={appConfig.appBar}
|
|
110
|
+
showAppBar={appConfig.showAppBar}
|
|
111
|
+
appBarHeight={appConfig.appBarHeight}
|
|
112
|
+
showThemeSwitcher={appConfig.showThemeSwitcher}
|
|
113
|
+
showPaletteSwitcher={appConfig.showPaletteSwitcher}
|
|
114
|
+
onLogoClick={onLogoClick}
|
|
115
|
+
>
|
|
116
|
+
{children}
|
|
117
|
+
</Scaffold>
|
|
118
|
+
) : children;
|
|
119
|
+
|
|
120
|
+
// Wrap with DataProvider if dataSource is provided (FIRST wrapper)
|
|
121
|
+
const wrappedContent = dataSource ? (
|
|
122
|
+
<DataProvider dataSource={dataSource}>
|
|
123
|
+
{content}
|
|
124
|
+
</DataProvider>
|
|
125
|
+
) : content;
|
|
126
|
+
|
|
127
|
+
const appContent = (
|
|
128
|
+
<div className={`qwick-app ${className || ''}`} style={style}>
|
|
129
|
+
<ThemeProvider
|
|
130
|
+
appId={appId}
|
|
131
|
+
defaultTheme={defaultTheme}
|
|
132
|
+
defaultPalette={defaultPalette}
|
|
133
|
+
>
|
|
134
|
+
<QwickAppContext.Provider value={contextValue}>
|
|
135
|
+
{wrappedContent}
|
|
136
|
+
</QwickAppContext.Provider>
|
|
137
|
+
</ThemeProvider>
|
|
138
|
+
</div>
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
// If router is provided, wrap the entire app with it
|
|
142
|
+
if (router) {
|
|
143
|
+
return cloneElement(router, {}, appContent);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return appContent;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export const useQwickApp = (): QwickAppContextValue => {
|
|
150
|
+
const context = React.useContext(QwickAppContext);
|
|
151
|
+
if (!context) {
|
|
152
|
+
throw new Error('useQwickApp must be used within a QwickApp provider');
|
|
153
|
+
}
|
|
154
|
+
return context;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export default QwickApp;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QwickAppsLogo - Official QwickApps brand logo
|
|
3
|
+
*
|
|
4
|
+
* Features the official QwickApps logo SVG with proper brand colors
|
|
5
|
+
* and consistent sizing. This component should be used instead of the
|
|
6
|
+
* generic Logo component when displaying the QwickApps brand.
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { WithBaseProps, useBaseProps } from '../hooks/useBaseProps';
|
|
13
|
+
|
|
14
|
+
export type QwickAppsLogoSize = 'small' | 'medium' | 'large';
|
|
15
|
+
|
|
16
|
+
export interface QwickAppsLogoProps extends WithBaseProps, Omit<React.SVGProps<SVGSVGElement>, 'width' | 'height' | 'className' | 'style' | 'onClick' | 'onBlur' | 'onFocus' | 'onMouseEnter' | 'onMouseLeave' | 'role'> {
|
|
17
|
+
/** Size variant of the logo */
|
|
18
|
+
size?: QwickAppsLogoSize;
|
|
19
|
+
/** Click handler for the logo */
|
|
20
|
+
onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;
|
|
21
|
+
/** Additional inline styles */
|
|
22
|
+
style?: React.CSSProperties;
|
|
23
|
+
/** Additional CSS class names */
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const QwickAppsLogo: React.FC<QwickAppsLogoProps> = (props) => {
|
|
28
|
+
const { styleProps, htmlProps, restProps } = useBaseProps(props);
|
|
29
|
+
const {
|
|
30
|
+
size = 'medium',
|
|
31
|
+
...svgProps
|
|
32
|
+
} = restProps;
|
|
33
|
+
|
|
34
|
+
// Get size dimensions
|
|
35
|
+
const getSizeConfig = (size: QwickAppsLogoSize) => {
|
|
36
|
+
switch (size) {
|
|
37
|
+
case 'small': return { width: 32, height: 32 };
|
|
38
|
+
case 'large': return { width: 80, height: 80 };
|
|
39
|
+
default: return { width: 48, height: 48 }; // medium
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const { width, height } = getSizeConfig(size);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<svg
|
|
47
|
+
width={width}
|
|
48
|
+
height={height}
|
|
49
|
+
viewBox="0 0 225 225"
|
|
50
|
+
{...htmlProps}
|
|
51
|
+
{...styleProps}
|
|
52
|
+
className={`qwickapps-logo qwickapps-logo-${size} ${styleProps.className || ''}`.trim()}
|
|
53
|
+
style={{
|
|
54
|
+
cursor: htmlProps.onClick ? 'pointer' : 'default',
|
|
55
|
+
...styleProps.style
|
|
56
|
+
}}
|
|
57
|
+
role="img"
|
|
58
|
+
aria-label="QwickApps Logo"
|
|
59
|
+
{...svgProps}
|
|
60
|
+
>
|
|
61
|
+
<g transform="translate(-128,-60)">
|
|
62
|
+
<path
|
|
63
|
+
d="M0 0 C1.3480925 -0.00788544 1.3480925 -0.00788544 2.72341919 -0.01593018 C5.67419172 -0.02905871 8.62441792 -0.02041442 11.57519531 -0.01025391 C13.64251813 -0.0122774 15.70984025 -0.01519113 17.77716064 -0.01895142 C22.10443943 -0.02336572 26.43153199 -0.01697508 30.75878906 -0.00292969 C36.2773468 0.01411856 41.79546534 0.00434284 47.31400681 -0.01364708 C51.5831018 -0.02454577 55.85209467 -0.02101006 60.12119293 -0.0132637 C62.15435082 -0.01127624 64.18751828 -0.01366927 66.22066498 -0.02070236 C76.73689794 -0.04908929 86.57929633 -0.04924466 96.65332031 3.38818359 C97.54098083 3.67795074 98.42864136 3.9677179 99.34320068 4.26626587 C114.15399949 9.31896076 126.4675764 21.76744512 133.65332031 35.38818359 C137.44514211 43.9738112 139.81630642 51.43992278 139.7668457 60.84057617 C139.76699173 61.5728241 139.76713776 62.30507202 139.76728821 63.05950928 C139.76659444 65.46727515 139.75882723 67.87496257 139.75097656 70.28271484 C139.74911048 71.95708677 139.74768747 73.63145924 139.74668884 75.30583191 C139.74287867 79.7034558 139.73306121 84.10104644 139.72198486 88.49865723 C139.71173847 92.9898229 139.70718431 97.48099397 139.70214844 101.97216797 C139.69143757 110.77752174 139.6743792 119.58284852 139.65332031 128.38818359 C138.53702723 127.43704375 137.42154262 126.48495501 136.30639648 125.5324707 C135.68512375 125.002379 135.06385101 124.47228729 134.42375183 123.9261322 C132.20679827 122.00029626 130.09344729 119.97434276 127.96582031 117.95068359 C121.3544337 111.96606452 113.93765643 107.63396094 105.65332031 104.38818359 C105.64397461 103.07736816 105.63462891 101.76655273 105.625 100.41601562 C105.58487807 95.51415049 105.51905854 90.61289839 105.44580078 85.71142578 C105.41771934 83.59724858 105.39644155 81.4829689 105.38232422 79.36865234 C105.36071633 76.31473808 105.31397548 73.26203954 105.26269531 70.20849609 C105.26085236 68.80943527 105.26085236 68.80943527 105.25897217 67.3821106 C105.05613797 58.12249123 102.35361677 49.9326592 95.65332031 43.38818359 C93.37687152 41.83978825 91.12212389 40.64502905 88.65332031 39.38818359 C88.0702562 39.02808197 87.48719208 38.66798035 86.88645935 38.29696655 C83.71010797 37.00434036 80.90937194 37.11787995 77.4855957 37.09765625 C76.41412041 37.08758041 76.41412041 37.08758041 75.32099915 37.07730103 C72.96425383 37.05833326 70.60779341 37.05439768 68.25097656 37.05224609 C66.60957218 37.04581795 64.96816895 37.03908958 63.32676697 37.03207397 C59.88782087 37.02010475 56.44897522 37.01639285 53.01000977 37.01757812 C48.60705215 37.01778144 44.20473906 36.99046492 39.80193424 36.95603371 C36.41239981 36.93377976 33.02302096 36.92974009 29.63342094 36.93079758 C28.01032729 36.9284399 26.38722945 36.91960691 24.76420784 36.90413284 C22.49249412 36.88449971 20.22217644 36.89029871 17.95043945 36.90234375 C16.65900528 36.89949371 15.36757111 36.89664368 14.03700256 36.89370728 C10.0894619 37.47058336 8.4533178 38.60386481 5.65332031 41.38818359 C4.36488826 43.96504769 4.49328598 45.87037118 4.44799805 48.75585938 C4.42805283 49.87687042 4.4081076 50.99788147 4.38755798 52.15286255 C4.36248924 53.97477615 4.36248924 53.97477615 4.33691406 55.83349609 C4.31613297 57.07364471 4.29535187 58.31379333 4.27394104 59.59152222 C4.21954326 62.88930182 4.16931936 66.18711079 4.12109375 69.48498535 C4.07086797 72.84991002 4.01524033 76.21474503 3.95996094 79.57958984 C3.85188552 86.18238589 3.75285167 92.78523103 3.65332031 99.38818359 C-7.89667969 99.38818359 -19.44667969 99.38818359 -31.34667969 99.38818359 C-31.54722373 80.32312956 -31.54722373 80.32312956 -31.59082031 72.14990234 C-31.6206242 66.58894779 -31.65574998 61.02840778 -31.72387695 55.46777344 C-31.77850048 50.98085383 -31.80816368 46.4943792 -31.8210659 42.00715256 C-31.83025168 40.30161924 -31.84818881 38.59610823 -31.87532997 36.89076614 C-32.04228479 25.95844515 -31.41983501 17.49965078 -24.17089844 8.76708984 C-23.46578125 8.16767578 -22.76066406 7.56826172 -22.03417969 6.95068359 C-21.33679688 6.33322266 -20.63941406 5.71576172 -19.92089844 5.07958984 C-13.46479327 0.83756627 -7.52553047 -0.0549708 0 0 Z "
|
|
64
|
+
fill="#FE6D0F"
|
|
65
|
+
transform="translate(185.3466796875,71.61181640625)"
|
|
66
|
+
/>
|
|
67
|
+
<path
|
|
68
|
+
d="M0 0 C11.55 0 23.1 0 35 0 C35.04125 3.25875 35.0825 6.5175 35.125 9.875 C35.47125788 19.41754586 36.68077925 25.86440869 43.74900818 32.68862915 C50.89908532 38.23277376 58.35470598 37.77209826 66.97265625 37.5859375 C68.50677317 37.57472707 70.04091178 37.56619562 71.57505798 37.56021118 C75.58524366 37.53745715 79.59409585 37.47865487 83.60375977 37.4119873 C87.70635953 37.3502711 91.80917779 37.32313407 95.91210938 37.29296875 C103.94201372 37.2288942 111.97084033 37.12668322 120 37 C117.59324168 34.57863654 115.18359847 32.1601637 112.7734375 29.7421875 C111.75527954 28.71774536 111.75527954 28.71774536 110.71655273 27.67260742 C106.8829741 23.82970702 102.99745284 20.13165615 98.8515625 16.625 C95.05012274 13.28871531 91.43825451 9.70885787 88 6 C88 5.67 88 5.34 88 5 C110.75508023 4.37644173 110.75508023 4.37644173 121 8 C122.051875 8.35191406 123.10375 8.70382813 124.1875 9.06640625 C147.22737862 17.29881571 164.80240124 33.21278198 175.41943359 55.15429688 C179.68328916 64.37125249 183.15018908 73.71312925 183.09765625 83.95703125 C183.09443359 85.06884766 183.09121094 86.18066406 183.08789062 87.32617188 C183.07951172 88.47666016 183.07113281 89.62714844 183.0625 90.8125 C183.05798828 91.98232422 183.05347656 93.15214844 183.04882812 94.35742188 C183.0370693 97.23833358 183.02063426 100.11914044 183 103 C180.55229893 100.57810948 178.13689836 98.15012289 175.81640625 95.60546875 C164.49520711 83.46019619 148.63443632 75.12990963 131.85790539 74.44966316 C128.34721591 74.38623286 124.84006559 74.37663155 121.32896042 74.40841484 C118.45052331 74.43424814 115.57348925 74.42890466 112.69497681 74.41651917 C106.58815705 74.39596309 100.48178961 74.41534647 94.375 74.4375 C87.28101821 74.45873236 80.18749777 74.46298673 73.09352493 74.43699837 C70.28119532 74.43367673 67.46978403 74.45471435 64.65756226 74.47740173 C46.51926055 74.50804771 31.73862671 70.07462761 18.28125 57.27734375 C17.5284375 56.52582031 16.775625 55.77429688 16 55 C15.02546875 54.04287109 15.02546875 54.04287109 14.03125 53.06640625 C3.06105089 41.49477078 -0.55499727 26.82435381 -0.1875 11.3125 C-0.125625 7.579375 -0.06375 3.84625 0 0 Z "
|
|
69
|
+
fill="#03BBCA"
|
|
70
|
+
transform="translate(154,171)"
|
|
71
|
+
/>
|
|
72
|
+
</g>
|
|
73
|
+
</svg>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export default QwickAppsLogo;
|