@shohojdhara/atomix 0.3.3 → 0.3.4
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 +46 -28
- package/dist/atomix.css +13 -6
- package/dist/atomix.min.css +1 -1
- package/dist/index.d.ts +912 -505
- package/dist/index.esm.js +2924 -2133
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2719 -1916
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +11 -62
- package/scripts/atomix-cli.js +338 -2
- package/scripts/cli/interactive-init.js +36 -44
- package/scripts/cli/theme-bridge.js +129 -0
- package/scripts/sync-theme-config.js +22 -22
- package/src/components/Button/Button.tsx +36 -1
- package/src/lib/config/index.ts +275 -0
- package/src/lib/config/loader.ts +105 -0
- package/src/lib/index.ts +1 -0
- package/src/lib/theme/composeTheme.ts +0 -5
- package/src/lib/theme/config/index.ts +1 -1
- package/src/lib/theme/config/loader.ts +75 -41
- package/src/lib/theme/config/types.ts +21 -7
- package/src/lib/theme/config/validator.ts +1 -1
- package/src/lib/theme/constants.ts +12 -2
- package/src/lib/theme/createTheme.ts +0 -1
- package/src/lib/theme/createThemeFromConfig.ts +132 -0
- package/src/lib/theme/devtools/CLI.ts +161 -76
- package/src/lib/theme/devtools/Comparator.tsx +343 -0
- package/src/lib/theme/devtools/IMPROVEMENTS.md +429 -0
- package/src/lib/theme/devtools/Inspector.tsx +21 -6
- package/src/lib/theme/devtools/LiveEditor.tsx +393 -0
- package/src/lib/theme/devtools/README.md +433 -0
- package/src/lib/theme/devtools/index.ts +12 -11
- package/src/lib/theme/generateCSSVariables.ts +79 -38
- package/src/lib/theme/index.ts +18 -2
- package/src/lib/theme/runtime/ThemeManager.test.ts +17 -1
- package/src/lib/theme/runtime/ThemeManager.ts +7 -7
- package/src/lib/theme/types.ts +42 -43
- package/src/lib/theme-tools.ts +7 -67
- package/src/lib/types/components.ts +69 -75
- package/src/styles/01-settings/_settings.navbar.scss +1 -1
- package/src/styles/03-generic/_generated-root.css +5 -0
- package/src/styles/06-components/_components.navbar.scss +12 -5
- package/src/themes/README.md +1 -2
- package/src/themes/themes.config.js +10 -194
- package/dist/themes/applemix.css +0 -16576
- package/dist/themes/applemix.css.map +0 -1
- package/dist/themes/applemix.min.css +0 -73
- package/dist/themes/boomdevs.css +0 -16007
- package/dist/themes/boomdevs.css.map +0 -1
- package/dist/themes/boomdevs.min.css +0 -406
- package/dist/themes/esrar.css +0 -18424
- package/dist/themes/esrar.css.map +0 -1
- package/dist/themes/esrar.min.css +0 -221
- package/dist/themes/flashtrade.css +0 -17596
- package/dist/themes/flashtrade.css.map +0 -1
- package/dist/themes/flashtrade.min.css +0 -196
- package/dist/themes/mashroom.css +0 -31082
- package/dist/themes/mashroom.css.map +0 -1
- package/dist/themes/mashroom.min.css +0 -450
- package/dist/themes/shaj-default.css +0 -17200
- package/dist/themes/shaj-default.css.map +0 -1
- package/dist/themes/shaj-default.min.css +0 -502
- package/src/lib/theme/__tests__/ThemeBuilder.test.ts +0 -223
- package/src/lib/theme/builders/ThemeBuilder.ts +0 -372
- package/src/lib/theme/errors.test.ts +0 -207
- package/src/lib/theme/generators/CSSGenerator.ts +0 -311
- package/src/lib/theme/generators/ConfigGenerator.ts +0 -287
- package/src/lib/theme/generators/TypeGenerator.ts +0 -228
- package/src/lib/theme/generators/index.ts +0 -21
- package/src/lib/theme/monitoring/ThemeAnalytics.ts +0 -409
- package/src/lib/theme/monitoring/index.ts +0 -17
- package/src/lib/theme/overrides/ComponentOverrides.ts +0 -243
- package/src/lib/theme/overrides/index.ts +0 -15
- package/src/lib/theme/whitelabel/WhiteLabelManager.ts +0 -364
- package/src/lib/theme/whitelabel/index.ts +0 -13
- package/src/themes/THEME_CHECKLIST.md +0 -74
- package/src/themes/applemix/01-settings/_index.scss +0 -24
- package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
- package/src/themes/applemix/01-settings/_settings.background.scss +0 -6
- package/src/themes/applemix/01-settings/_settings.colors.scss +0 -75
- package/src/themes/applemix/01-settings/_settings.config.scss +0 -15
- package/src/themes/applemix/01-settings/_settings.typography.scss +0 -30
- package/src/themes/applemix/02-tools/_index.scss +0 -4
- package/src/themes/applemix/03-generic/_index.scss +0 -7
- package/src/themes/applemix/04-elements/_index.scss +0 -7
- package/src/themes/applemix/05-objects/_index.scss +0 -7
- package/src/themes/applemix/06-components/_index.scss +0 -15
- package/src/themes/applemix/99-utilities/_index.scss +0 -7
- package/src/themes/applemix/README.md +0 -378
- package/src/themes/applemix/index.scss +0 -33
- package/src/themes/boomdevs/01-settings/_index.scss +0 -38
- package/src/themes/boomdevs/01-settings/_settings.accordion.scss +0 -12
- package/src/themes/boomdevs/01-settings/_settings.animations.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.avatar.scss +0 -9
- package/src/themes/boomdevs/01-settings/_settings.badge.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +0 -16
- package/src/themes/boomdevs/01-settings/_settings.border.scss +0 -10
- package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +0 -14
- package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +0 -13
- package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +0 -15
- package/src/themes/boomdevs/01-settings/_settings.button.scss +0 -9
- package/src/themes/boomdevs/01-settings/_settings.callout.scss +0 -9
- package/src/themes/boomdevs/01-settings/_settings.card.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +0 -9
- package/src/themes/boomdevs/01-settings/_settings.colors.scss +0 -145
- package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.grid.scss +0 -16
- package/src/themes/boomdevs/01-settings/_settings.input.scss +0 -14
- package/src/themes/boomdevs/01-settings/_settings.link.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.list.scss +0 -10
- package/src/themes/boomdevs/01-settings/_settings.modal.scss +0 -16
- package/src/themes/boomdevs/01-settings/_settings.navbar.scss +0 -16
- package/src/themes/boomdevs/01-settings/_settings.pagination.scss +0 -13
- package/src/themes/boomdevs/01-settings/_settings.progress.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.rating.scss +0 -10
- package/src/themes/boomdevs/01-settings/_settings.spacing.scss +0 -33
- package/src/themes/boomdevs/01-settings/_settings.spinner.scss +0 -11
- package/src/themes/boomdevs/01-settings/_settings.steps.scss +0 -12
- package/src/themes/boomdevs/01-settings/_settings.tabs.scss +0 -12
- package/src/themes/boomdevs/01-settings/_settings.todo.scss +0 -15
- package/src/themes/boomdevs/01-settings/_settings.toggle.scss +0 -14
- package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +0 -13
- package/src/themes/boomdevs/01-settings/_settings.typography.scss +0 -58
- package/src/themes/boomdevs/01-settings/_settings.video-player.scss +0 -12
- package/src/themes/boomdevs/02-tools/_index.scss +0 -7
- package/src/themes/boomdevs/03-generic/_index.scss +0 -7
- package/src/themes/boomdevs/04-elements/_index.scss +0 -7
- package/src/themes/boomdevs/05-objects/_index.scss +0 -7
- package/src/themes/boomdevs/06-components/_components.button.scss +0 -11
- package/src/themes/boomdevs/06-components/_index.scss +0 -11
- package/src/themes/boomdevs/99-utilities/_index.scss +0 -7
- package/src/themes/boomdevs/index.scss +0 -26
- package/src/themes/esrar/01-settings/_index.scss +0 -15
- package/src/themes/esrar/01-settings/_settings.colors.scss +0 -91
- package/src/themes/esrar/02-tools/_index.scss +0 -8
- package/src/themes/esrar/02-tools/_tools.animations.scss +0 -342
- package/src/themes/esrar/06-components/_components.accordion.scss +0 -49
- package/src/themes/esrar/06-components/_components.avatar-group.scss +0 -14
- package/src/themes/esrar/06-components/_components.avatar.scss +0 -61
- package/src/themes/esrar/06-components/_components.badge.scss +0 -117
- package/src/themes/esrar/06-components/_components.breadcrumb.scss +0 -65
- package/src/themes/esrar/06-components/_components.btn-group.scss +0 -19
- package/src/themes/esrar/06-components/_components.button.scss +0 -224
- package/src/themes/esrar/06-components/_components.callout.scss +0 -51
- package/src/themes/esrar/06-components/_components.card.scss +0 -134
- package/src/themes/esrar/06-components/_components.chart.scss +0 -24
- package/src/themes/esrar/06-components/_components.checkbox-group.scss +0 -26
- package/src/themes/esrar/06-components/_components.checkbox.scss +0 -71
- package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +0 -29
- package/src/themes/esrar/06-components/_components.countdown.scss +0 -67
- package/src/themes/esrar/06-components/_components.data-table.scss +0 -22
- package/src/themes/esrar/06-components/_components.datepicker.scss +0 -20
- package/src/themes/esrar/06-components/_components.dropdown.scss +0 -272
- package/src/themes/esrar/06-components/_components.edge-panel.scss +0 -10
- package/src/themes/esrar/06-components/_components.form-group.scss +0 -15
- package/src/themes/esrar/06-components/_components.form.scss +0 -66
- package/src/themes/esrar/06-components/_components.hero.scss +0 -251
- package/src/themes/esrar/06-components/_components.icon.scss +0 -33
- package/src/themes/esrar/06-components/_components.image-gallery.scss +0 -29
- package/src/themes/esrar/06-components/_components.input.scss +0 -91
- package/src/themes/esrar/06-components/_components.list-group.scss +0 -26
- package/src/themes/esrar/06-components/_components.modal.scss +0 -148
- package/src/themes/esrar/06-components/_components.notification.scss +0 -80
- package/src/themes/esrar/06-components/_components.pagination.scss +0 -84
- package/src/themes/esrar/06-components/_components.popover.scss +0 -10
- package/src/themes/esrar/06-components/_components.progress.scss +0 -64
- package/src/themes/esrar/06-components/_components.rating.scss +0 -26
- package/src/themes/esrar/06-components/_components.skeleton.scss +0 -15
- package/src/themes/esrar/06-components/_components.slider.scss +0 -90
- package/src/themes/esrar/06-components/_components.spinner.scss +0 -71
- package/src/themes/esrar/06-components/_components.steps.scss +0 -76
- package/src/themes/esrar/06-components/_components.tab.scss +0 -58
- package/src/themes/esrar/06-components/_components.tag.scss +0 -21
- package/src/themes/esrar/06-components/_components.timeline.scss +0 -19
- package/src/themes/esrar/06-components/_components.toast.scss +0 -91
- package/src/themes/esrar/06-components/_components.toggle.scss +0 -74
- package/src/themes/esrar/06-components/_components.tooltip.scss +0 -45
- package/src/themes/esrar/06-components/_components.upload.scss +0 -102
- package/src/themes/esrar/06-components/_index.scss +0 -42
- package/src/themes/esrar/index.scss +0 -30
- package/src/themes/flashtrade/01-settings/_index.scss +0 -19
- package/src/themes/flashtrade/01-settings/_settings.animations.scss +0 -11
- package/src/themes/flashtrade/01-settings/_settings.background.scss +0 -9
- package/src/themes/flashtrade/01-settings/_settings.colors.scss +0 -79
- package/src/themes/flashtrade/01-settings/_settings.config.scss +0 -16
- package/src/themes/flashtrade/01-settings/_settings.typography.scss +0 -35
- package/src/themes/flashtrade/02-tools/_index.scss +0 -8
- package/src/themes/flashtrade/03-generic/_index.scss +0 -8
- package/src/themes/flashtrade/04-elements/_index.scss +0 -12
- package/src/themes/flashtrade/05-objects/_index.scss +0 -8
- package/src/themes/flashtrade/06-components/_components.badge.scss +0 -156
- package/src/themes/flashtrade/06-components/_components.button.scss +0 -135
- package/src/themes/flashtrade/06-components/_components.card.scss +0 -214
- package/src/themes/flashtrade/06-components/_components.navbar.scss +0 -227
- package/src/themes/flashtrade/06-components/_index.scss +0 -13
- package/src/themes/flashtrade/99-utilities/_index.scss +0 -9
- package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +0 -187
- package/src/themes/flashtrade/README.md +0 -386
- package/src/themes/flashtrade/demo.html +0 -272
- package/src/themes/flashtrade/index.scss +0 -36
- package/src/themes/mashroom/01-settings/_index.scss +0 -69
- package/src/themes/mashroom/01-settings/_settings.accordion.scss +0 -32
- package/src/themes/mashroom/01-settings/_settings.animations.scss +0 -26
- package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +0 -22
- package/src/themes/mashroom/01-settings/_settings.avatar.scss +0 -57
- package/src/themes/mashroom/01-settings/_settings.badge.scss +0 -19
- package/src/themes/mashroom/01-settings/_settings.border-radius.scss +0 -24
- package/src/themes/mashroom/01-settings/_settings.border.scss +0 -14
- package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +0 -40
- package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
- package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +0 -17
- package/src/themes/mashroom/01-settings/_settings.btn-group.scss +0 -5
- package/src/themes/mashroom/01-settings/_settings.button.scss +0 -50
- package/src/themes/mashroom/01-settings/_settings.callout.scss +0 -81
- package/src/themes/mashroom/01-settings/_settings.card.scss +0 -52
- package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +0 -5
- package/src/themes/mashroom/01-settings/_settings.checkbox.scss +0 -23
- package/src/themes/mashroom/01-settings/_settings.color-mode.scss +0 -7
- package/src/themes/mashroom/01-settings/_settings.colors.scss +0 -180
- package/src/themes/mashroom/01-settings/_settings.config.scss +0 -4
- package/src/themes/mashroom/01-settings/_settings.countdown.scss +0 -20
- package/src/themes/mashroom/01-settings/_settings.data-table.scss +0 -56
- package/src/themes/mashroom/01-settings/_settings.datepicker.scss +0 -45
- package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +0 -3
- package/src/themes/mashroom/01-settings/_settings.dropdown.scss +0 -45
- package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +0 -24
- package/src/themes/mashroom/01-settings/_settings.fonts.scss +0 -8
- package/src/themes/mashroom/01-settings/_settings.form-group.scss +0 -14
- package/src/themes/mashroom/01-settings/_settings.form.scss +0 -6
- package/src/themes/mashroom/01-settings/_settings.grid.scss +0 -23
- package/src/themes/mashroom/01-settings/_settings.hero.scss +0 -41
- package/src/themes/mashroom/01-settings/_settings.input.scss +0 -51
- package/src/themes/mashroom/01-settings/_settings.link.scss +0 -13
- package/src/themes/mashroom/01-settings/_settings.list-group.scss +0 -16
- package/src/themes/mashroom/01-settings/_settings.list.scss +0 -13
- package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +0 -23
- package/src/themes/mashroom/01-settings/_settings.menu.scss +0 -50
- package/src/themes/mashroom/01-settings/_settings.messages.scss +0 -98
- package/src/themes/mashroom/01-settings/_settings.modal.scss +0 -41
- package/src/themes/mashroom/01-settings/_settings.nav.scss +0 -20
- package/src/themes/mashroom/01-settings/_settings.navbar.scss +0 -54
- package/src/themes/mashroom/01-settings/_settings.pagination.scss +0 -30
- package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +0 -45
- package/src/themes/mashroom/01-settings/_settings.popover.scss +0 -20
- package/src/themes/mashroom/01-settings/_settings.position.scss +0 -9
- package/src/themes/mashroom/01-settings/_settings.progress.scss +0 -17
- package/src/themes/mashroom/01-settings/_settings.rating.scss +0 -11
- package/src/themes/mashroom/01-settings/_settings.river.scss +0 -50
- package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +0 -31
- package/src/themes/mashroom/01-settings/_settings.select.scss +0 -47
- package/src/themes/mashroom/01-settings/_settings.side-menu.scss +0 -79
- package/src/themes/mashroom/01-settings/_settings.skeleton.scss +0 -24
- package/src/themes/mashroom/01-settings/_settings.spacing.scss +0 -66
- package/src/themes/mashroom/01-settings/_settings.spinner.scss +0 -34
- package/src/themes/mashroom/01-settings/_settings.steps.scss +0 -33
- package/src/themes/mashroom/01-settings/_settings.tabs.scss +0 -33
- package/src/themes/mashroom/01-settings/_settings.testimonials.scss +0 -24
- package/src/themes/mashroom/01-settings/_settings.todo.scss +0 -52
- package/src/themes/mashroom/01-settings/_settings.toggle.scss +0 -49
- package/src/themes/mashroom/01-settings/_settings.tooltip.scss +0 -20
- package/src/themes/mashroom/01-settings/_settings.typography.scss +0 -95
- package/src/themes/mashroom/01-settings/_settings.upload.scss +0 -96
- package/src/themes/mashroom/01-settings/_settings.z-layers.scss +0 -19
- package/src/themes/mashroom/02-tools/_index.scss +0 -8
- package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +0 -78
- package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +0 -114
- package/src/themes/mashroom/03-generic/_index.scss +0 -6
- package/src/themes/mashroom/04-elements/_index.scss +0 -6
- package/src/themes/mashroom/05-objects/_index.scss +0 -6
- package/src/themes/mashroom/06-components/_components.accordion.scss +0 -187
- package/src/themes/mashroom/06-components/_components.avatar-group.scss +0 -276
- package/src/themes/mashroom/06-components/_components.avatar.scss +0 -114
- package/src/themes/mashroom/06-components/_components.badge.scss +0 -152
- package/src/themes/mashroom/06-components/_components.breadcrumb.scss +0 -162
- package/src/themes/mashroom/06-components/_components.btn-group.scss +0 -404
- package/src/themes/mashroom/06-components/_components.button.scss +0 -160
- package/src/themes/mashroom/06-components/_components.callout.scss +0 -140
- package/src/themes/mashroom/06-components/_components.card.scss +0 -225
- package/src/themes/mashroom/06-components/_components.checkbox.scss +0 -186
- package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +0 -308
- package/src/themes/mashroom/06-components/_components.countdown.scss +0 -402
- package/src/themes/mashroom/06-components/_components.data-table.scss +0 -354
- package/src/themes/mashroom/06-components/_components.datepicker.scss +0 -349
- package/src/themes/mashroom/06-components/_components.dropdown.scss +0 -334
- package/src/themes/mashroom/06-components/_components.edge-panel.scss +0 -413
- package/src/themes/mashroom/06-components/_components.form-group.scss +0 -433
- package/src/themes/mashroom/06-components/_components.form.scss +0 -358
- package/src/themes/mashroom/06-components/_components.hero.scss +0 -151
- package/src/themes/mashroom/06-components/_components.input.scss +0 -147
- package/src/themes/mashroom/06-components/_components.list-group.scss +0 -456
- package/src/themes/mashroom/06-components/_components.list.scss +0 -145
- package/src/themes/mashroom/06-components/_components.menu.scss +0 -497
- package/src/themes/mashroom/06-components/_components.messages.scss +0 -277
- package/src/themes/mashroom/06-components/_components.modal.scss +0 -264
- package/src/themes/mashroom/06-components/_components.nav.scss +0 -181
- package/src/themes/mashroom/06-components/_components.navbar.scss +0 -538
- package/src/themes/mashroom/06-components/_components.pagination.scss +0 -400
- package/src/themes/mashroom/06-components/_components.photoviewer.scss +0 -498
- package/src/themes/mashroom/06-components/_components.popover.scss +0 -383
- package/src/themes/mashroom/06-components/_components.product-review.scss +0 -408
- package/src/themes/mashroom/06-components/_components.progress.scss +0 -249
- package/src/themes/mashroom/06-components/_components.rating.scss +0 -300
- package/src/themes/mashroom/06-components/_components.river.scss +0 -570
- package/src/themes/mashroom/06-components/_components.sectionintro.scss +0 -546
- package/src/themes/mashroom/06-components/_components.select.scss +0 -455
- package/src/themes/mashroom/06-components/_components.side-menu.scss +0 -635
- package/src/themes/mashroom/06-components/_components.skeleton.scss +0 -447
- package/src/themes/mashroom/06-components/_components.slider.scss +0 -414
- package/src/themes/mashroom/06-components/_components.spinner.scss +0 -198
- package/src/themes/mashroom/06-components/_components.steps.scss +0 -350
- package/src/themes/mashroom/06-components/_components.tabs.scss +0 -269
- package/src/themes/mashroom/06-components/_components.testimonials.scss +0 -561
- package/src/themes/mashroom/06-components/_components.toggle.scss +0 -231
- package/src/themes/mashroom/06-components/_components.tooltip.scss +0 -167
- package/src/themes/mashroom/06-components/_components.upload.scss +0 -537
- package/src/themes/mashroom/06-components/_components.video-player.scss +0 -560
- package/src/themes/mashroom/06-components/_index.scss +0 -55
- package/src/themes/mashroom/99-utilities/_index.scss +0 -6
- package/src/themes/mashroom/index.scss +0 -26
- package/src/themes/shaj-default/01-settings/_index.scss +0 -69
- package/src/themes/shaj-default/01-settings/_settings.accordion.scss +0 -38
- package/src/themes/shaj-default/01-settings/_settings.animations.scss +0 -32
- package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +0 -28
- package/src/themes/shaj-default/01-settings/_settings.avatar.scss +0 -63
- package/src/themes/shaj-default/01-settings/_settings.badge.scss +0 -25
- package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +0 -24
- package/src/themes/shaj-default/01-settings/_settings.border.scss +0 -20
- package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +0 -46
- package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
- package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +0 -23
- package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +0 -11
- package/src/themes/shaj-default/01-settings/_settings.button.scss +0 -56
- package/src/themes/shaj-default/01-settings/_settings.callout.scss +0 -87
- package/src/themes/shaj-default/01-settings/_settings.card.scss +0 -52
- package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +0 -11
- package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +0 -29
- package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +0 -13
- package/src/themes/shaj-default/01-settings/_settings.colors.scss +0 -91
- package/src/themes/shaj-default/01-settings/_settings.config.scss +0 -4
- package/src/themes/shaj-default/01-settings/_settings.countdown.scss +0 -26
- package/src/themes/shaj-default/01-settings/_settings.data-table.scss +0 -62
- package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +0 -51
- package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +0 -9
- package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +0 -51
- package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +0 -30
- package/src/themes/shaj-default/01-settings/_settings.fonts.scss +0 -13
- package/src/themes/shaj-default/01-settings/_settings.form-group.scss +0 -20
- package/src/themes/shaj-default/01-settings/_settings.form.scss +0 -12
- package/src/themes/shaj-default/01-settings/_settings.grid.scss +0 -29
- package/src/themes/shaj-default/01-settings/_settings.hero.scss +0 -47
- package/src/themes/shaj-default/01-settings/_settings.input.scss +0 -57
- package/src/themes/shaj-default/01-settings/_settings.link.scss +0 -19
- package/src/themes/shaj-default/01-settings/_settings.list-group.scss +0 -22
- package/src/themes/shaj-default/01-settings/_settings.list.scss +0 -19
- package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +0 -29
- package/src/themes/shaj-default/01-settings/_settings.menu.scss +0 -56
- package/src/themes/shaj-default/01-settings/_settings.messages.scss +0 -104
- package/src/themes/shaj-default/01-settings/_settings.modal.scss +0 -47
- package/src/themes/shaj-default/01-settings/_settings.nav.scss +0 -26
- package/src/themes/shaj-default/01-settings/_settings.navbar.scss +0 -60
- package/src/themes/shaj-default/01-settings/_settings.pagination.scss +0 -36
- package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +0 -51
- package/src/themes/shaj-default/01-settings/_settings.popover.scss +0 -26
- package/src/themes/shaj-default/01-settings/_settings.position.scss +0 -15
- package/src/themes/shaj-default/01-settings/_settings.progress.scss +0 -23
- package/src/themes/shaj-default/01-settings/_settings.rating.scss +0 -17
- package/src/themes/shaj-default/01-settings/_settings.river.scss +0 -56
- package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +0 -37
- package/src/themes/shaj-default/01-settings/_settings.select.scss +0 -53
- package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +0 -85
- package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +0 -30
- package/src/themes/shaj-default/01-settings/_settings.spacing.scss +0 -72
- package/src/themes/shaj-default/01-settings/_settings.spinner.scss +0 -24
- package/src/themes/shaj-default/01-settings/_settings.steps.scss +0 -39
- package/src/themes/shaj-default/01-settings/_settings.tabs.scss +0 -39
- package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +0 -30
- package/src/themes/shaj-default/01-settings/_settings.todo.scss +0 -58
- package/src/themes/shaj-default/01-settings/_settings.toggle.scss +0 -55
- package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +0 -26
- package/src/themes/shaj-default/01-settings/_settings.typography.scss +0 -101
- package/src/themes/shaj-default/01-settings/_settings.upload.scss +0 -102
- package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +0 -25
- package/src/themes/shaj-default/02-tools/_index.scss +0 -0
- package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
- package/src/themes/shaj-default/03-generic/_index.scss +0 -2
- package/src/themes/shaj-default/04-elements/_index.scss +0 -0
- package/src/themes/shaj-default/05-objects/_index.scss +0 -0
- package/src/themes/shaj-default/06-components/_components.button.scss +0 -55
- package/src/themes/shaj-default/06-components/_components.card.scss +0 -57
- package/src/themes/shaj-default/06-components/_components.input.scss +0 -58
- package/src/themes/shaj-default/06-components/_components.navbar.scss +0 -99
- package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
- package/src/themes/shaj-default/06-components/_index.scss +0 -13
- package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
- package/src/themes/shaj-default/index.scss +0 -25
- package/theme.config.ts +0 -360
|
@@ -2,7 +2,18 @@
|
|
|
2
2
|
* CSS Variable Generator
|
|
3
3
|
*
|
|
4
4
|
* Generates CSS custom properties from theme objects and injects them into the DOM.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* **Token Naming Alignment:**
|
|
7
|
+
* This generator produces CSS variables that match the SCSS token naming pattern exactly:
|
|
8
|
+
* - Colors: --atomix-primary, --atomix-primary-1 through --atomix-primary-10
|
|
9
|
+
* - Spacing: --atomix-spacing-1, --atomix-spacing-4, etc.
|
|
10
|
+
* - Typography: --atomix-font-size-base, --atomix-font-weight-normal, etc.
|
|
11
|
+
* - Shadows: --atomix-box-shadow, --atomix-box-shadow-sm, etc.
|
|
12
|
+
*
|
|
13
|
+
* All tokens follow the flat structure pattern used in SCSS (not nested like --atomix-palette-primary-main).
|
|
14
|
+
* This ensures compatibility between SCSS themes and JavaScript themes.
|
|
15
|
+
*
|
|
16
|
+
* @see src/styles/03-generic/_generic.root.scss for SCSS token definitions
|
|
6
17
|
*/
|
|
7
18
|
|
|
8
19
|
import type { Theme } from './types';
|
|
@@ -92,6 +103,13 @@ function generateColorScale(baseColor: string, prefix: string, colorName: string
|
|
|
92
103
|
|
|
93
104
|
/**
|
|
94
105
|
* Generate CSS variables from theme palette
|
|
106
|
+
*
|
|
107
|
+
* Matches SCSS token naming pattern:
|
|
108
|
+
* - --atomix-primary (main color)
|
|
109
|
+
* - --atomix-primary-1 through --atomix-primary-10 (color scale)
|
|
110
|
+
* - --atomix-primary-main (alias for primary-6)
|
|
111
|
+
* - --atomix-primary-light (alias for primary-3)
|
|
112
|
+
* - --atomix-primary-dark (alias for primary-9)
|
|
95
113
|
*/
|
|
96
114
|
function generatePaletteVariables(palette: Theme['palette'], prefix: string): Record<string, string> {
|
|
97
115
|
const vars: Record<string, string> = {};
|
|
@@ -101,46 +119,60 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
101
119
|
colorKeys.forEach((key) => {
|
|
102
120
|
const color = palette[key];
|
|
103
121
|
if (color && typeof color === 'object') {
|
|
104
|
-
// Main color
|
|
122
|
+
// Main color (flat structure, matches SCSS: --atomix-primary)
|
|
105
123
|
vars[`${prefix}-${key}`] = color.main;
|
|
106
124
|
|
|
107
|
-
// Generate RGB for transparency support
|
|
125
|
+
// Generate RGB for transparency support (matches SCSS: --atomix-primary-rgb)
|
|
108
126
|
const rgb = hexToRgb(color.main);
|
|
109
127
|
if (rgb) {
|
|
110
128
|
vars[`${prefix}-${key}-rgb`] = `${rgb.r}, ${rgb.g}, ${rgb.b}`;
|
|
111
129
|
}
|
|
112
130
|
|
|
113
|
-
//
|
|
131
|
+
// Generate full color scale (1-10) - matches SCSS: --atomix-primary-1 through --atomix-primary-10
|
|
132
|
+
// Only for primary, secondary, error, warning, info, success (not for light/dark)
|
|
133
|
+
if (key !== 'light' && key !== 'dark') {
|
|
134
|
+
const colorScale = generateColorScale(color.main, prefix, key);
|
|
135
|
+
Object.assign(vars, colorScale);
|
|
136
|
+
|
|
137
|
+
// Add semantic aliases that map to scale steps (for backward compatibility)
|
|
138
|
+
// primary-main → primary-6 (main color)
|
|
139
|
+
vars[`${prefix}-${key}-main`] = colorScale[`${prefix}-${key}-6`] || color.main;
|
|
140
|
+
// primary-light → primary-3 (light variant)
|
|
141
|
+
vars[`${prefix}-${key}-light`] = colorScale[`${prefix}-${key}-3`] || color.light || color.main;
|
|
142
|
+
// primary-dark → primary-9 (dark variant)
|
|
143
|
+
vars[`${prefix}-${key}-dark`] = colorScale[`${prefix}-${key}-9`] || color.dark || color.main;
|
|
144
|
+
} else {
|
|
145
|
+
// For light/dark, use the provided values directly
|
|
146
|
+
vars[`${prefix}-${key}-main`] = color.main;
|
|
147
|
+
if (color.light) vars[`${prefix}-${key}-light`] = color.light;
|
|
148
|
+
if (color.dark) vars[`${prefix}-${key}-dark`] = color.dark;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Map dark variant to hover (matches SCSS: --atomix-primary-hover)
|
|
114
152
|
if (color.dark) {
|
|
115
153
|
vars[`${prefix}-${key}-hover`] = color.dark;
|
|
116
154
|
}
|
|
117
155
|
|
|
118
|
-
// Generate semantic color variants
|
|
119
|
-
// Text emphasis: emphasized version of the color for text
|
|
156
|
+
// Generate semantic color variants (matches SCSS patterns)
|
|
157
|
+
// Text emphasis: emphasized version of the color for text (--atomix-primary-text-emphasis)
|
|
120
158
|
vars[`${prefix}-${key}-text-emphasis`] = emphasize(color.main, 0.15);
|
|
121
159
|
|
|
122
|
-
// Background subtle: very light version for backgrounds
|
|
160
|
+
// Background subtle: very light version for backgrounds (--atomix-primary-bg-subtle)
|
|
123
161
|
vars[`${prefix}-${key}-bg-subtle`] = alpha(color.main, 0.1);
|
|
124
162
|
|
|
125
|
-
// Border subtle: light version for borders
|
|
163
|
+
// Border subtle: light version for borders (--atomix-primary-border-subtle)
|
|
126
164
|
vars[`${prefix}-${key}-border-subtle`] = alpha(color.main, 0.2);
|
|
127
|
-
|
|
128
|
-
// Generate full color scale (1-10) - only for primary, not for light/dark
|
|
129
|
-
if (key !== 'light' && key !== 'dark') {
|
|
130
|
-
const colorScale = generateColorScale(color.main, prefix, key);
|
|
131
|
-
Object.assign(vars, colorScale);
|
|
132
|
-
}
|
|
133
165
|
}
|
|
134
166
|
});
|
|
135
167
|
|
|
136
|
-
// Generate gray scale from text colors
|
|
168
|
+
// Generate gray scale from text colors (matches SCSS: --atomix-gray-1 through --atomix-gray-10)
|
|
137
169
|
// Use text.primary as base for gray scale
|
|
138
170
|
if (palette.text?.primary) {
|
|
139
171
|
const grayScale = generateColorScale(palette.text.primary, prefix, 'gray');
|
|
140
172
|
Object.assign(vars, grayScale);
|
|
141
173
|
}
|
|
142
174
|
|
|
143
|
-
// Generate red, green, blue, yellow scales
|
|
175
|
+
// Generate red, green, blue, yellow scales (matches SCSS: --atomix-red-1 through --atomix-red-10, etc.)
|
|
144
176
|
// These are typically used for semantic colors but can be extended
|
|
145
177
|
if (palette.error && typeof palette.error === 'object' && palette.error.main) {
|
|
146
178
|
const redScale = generateColorScale(palette.error.main, prefix, 'red');
|
|
@@ -159,11 +191,11 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
159
191
|
Object.assign(vars, yellowScale);
|
|
160
192
|
}
|
|
161
193
|
|
|
162
|
-
// Background mappings to SCSS body variables
|
|
194
|
+
// Background mappings to SCSS body variables (matches SCSS: --atomix-body-bg)
|
|
163
195
|
if (palette.background) {
|
|
164
196
|
vars[`${prefix}-body-bg`] = palette.background.default;
|
|
165
197
|
|
|
166
|
-
// Generate background subtle variants
|
|
198
|
+
// Generate background subtle variants (matches SCSS: --atomix-primary-bg-subtle, etc.)
|
|
167
199
|
if (palette.background.default) {
|
|
168
200
|
vars[`${prefix}-primary-bg-subtle`] = palette.background.default;
|
|
169
201
|
}
|
|
@@ -181,11 +213,11 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
181
213
|
}
|
|
182
214
|
}
|
|
183
215
|
|
|
184
|
-
// Text mappings to SCSS body variables
|
|
216
|
+
// Text mappings to SCSS body variables (matches SCSS: --atomix-body-color, --atomix-primary-text-emphasis, etc.)
|
|
185
217
|
if (palette.text) {
|
|
186
218
|
vars[`${prefix}-body-color`] = palette.text.primary;
|
|
187
219
|
|
|
188
|
-
// Generate text emphasis variants
|
|
220
|
+
// Generate text emphasis variants (matches SCSS pattern)
|
|
189
221
|
if (palette.text.primary) {
|
|
190
222
|
vars[`${prefix}-primary-text-emphasis`] = palette.text.primary;
|
|
191
223
|
}
|
|
@@ -205,14 +237,14 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
205
237
|
}
|
|
206
238
|
}
|
|
207
239
|
|
|
208
|
-
// Brand text emphasis (uses primary color)
|
|
240
|
+
// Brand text emphasis (uses primary color) - matches SCSS: --atomix-brand-text-emphasis
|
|
209
241
|
if (palette.primary) {
|
|
210
242
|
vars[`${prefix}-brand-text-emphasis`] = palette.primary.main;
|
|
211
|
-
// Brand border subtle
|
|
243
|
+
// Brand border subtle - matches SCSS: --atomix-brand-border-subtle
|
|
212
244
|
vars[`${prefix}-brand-border-subtle`] = alpha(palette.primary.main, 0.2);
|
|
213
245
|
}
|
|
214
246
|
|
|
215
|
-
// Light and dark border subtle (if light/dark colors exist)
|
|
247
|
+
// Light and dark border subtle (if light/dark colors exist) - matches SCSS pattern
|
|
216
248
|
if (palette.light && typeof palette.light === 'object') {
|
|
217
249
|
vars[`${prefix}-light-border-subtle`] = alpha(palette.light.main, 0.2);
|
|
218
250
|
}
|
|
@@ -220,7 +252,7 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
220
252
|
vars[`${prefix}-dark-border-subtle`] = alpha(palette.dark.main, 0.2);
|
|
221
253
|
}
|
|
222
254
|
|
|
223
|
-
// Heading color (defaults to text primary)
|
|
255
|
+
// Heading color (defaults to text primary) - matches SCSS: --atomix-heading-color
|
|
224
256
|
if (palette.text) {
|
|
225
257
|
vars[`${prefix}-heading-color`] = palette.text.primary;
|
|
226
258
|
}
|
|
@@ -304,6 +336,12 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
|
|
|
304
336
|
|
|
305
337
|
/**
|
|
306
338
|
* Generate CSS variables from theme typography
|
|
339
|
+
*
|
|
340
|
+
* Matches SCSS token naming pattern:
|
|
341
|
+
* - --atomix-body-font-family
|
|
342
|
+
* - --atomix-body-font-size
|
|
343
|
+
* - --atomix-font-weight-normal
|
|
344
|
+
* - --atomix-line-height-base
|
|
307
345
|
*/
|
|
308
346
|
function generateTypographyVariables(
|
|
309
347
|
typography: Theme['typography'],
|
|
@@ -311,25 +349,24 @@ function generateTypographyVariables(
|
|
|
311
349
|
): Record<string, string> {
|
|
312
350
|
const vars: Record<string, string> = {};
|
|
313
351
|
|
|
314
|
-
// Font family (SCSS: --atomix-body-font-family)
|
|
352
|
+
// Font family (matches SCSS: --atomix-body-font-family, --atomix-font-sans-serif, --atomix-font-monospace)
|
|
315
353
|
vars[`${prefix}-body-font-family`] = typography.fontFamily;
|
|
316
|
-
// Additional font family tokens
|
|
317
354
|
vars[`${prefix}-font-sans-serif`] = typography.fontFamily;
|
|
318
355
|
vars[`${prefix}-font-monospace`] = 'SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace';
|
|
319
356
|
|
|
320
|
-
// Root font size (SCSS: --atomix-root-font-size)
|
|
357
|
+
// Root font size (matches SCSS: --atomix-root-font-size)
|
|
321
358
|
// Typically 16px, but can be customized
|
|
322
359
|
const rootFontSize = typography.fontSize || 16;
|
|
323
360
|
vars[`${prefix}-root-font-size`] = `${rootFontSize}px`;
|
|
324
361
|
|
|
325
|
-
// Base font size (SCSS: --atomix-body-font-size)
|
|
362
|
+
// Base font size (matches SCSS: --atomix-body-font-size)
|
|
326
363
|
const baseFontSize = typography.fontSize;
|
|
327
364
|
vars[`${prefix}-body-font-size`] = `${baseFontSize}px`;
|
|
328
365
|
|
|
329
|
-
// Base font weight (SCSS: --atomix-body-font-weight)
|
|
366
|
+
// Base font weight (matches SCSS: --atomix-body-font-weight)
|
|
330
367
|
vars[`${prefix}-body-font-weight`] = String(typography.fontWeightRegular);
|
|
331
368
|
|
|
332
|
-
// Font weight scale
|
|
369
|
+
// Font weight scale (matches SCSS: --atomix-font-weight-light, --atomix-font-weight-normal, etc.)
|
|
333
370
|
vars[`${prefix}-font-weight-light`] = String(typography.fontWeightLight ?? 300);
|
|
334
371
|
vars[`${prefix}-font-weight-normal`] = String(typography.fontWeightRegular ?? 400);
|
|
335
372
|
vars[`${prefix}-font-weight-medium`] = String(typography.fontWeightMedium ?? 500);
|
|
@@ -343,18 +380,18 @@ function generateTypographyVariables(
|
|
|
343
380
|
vars[`${prefix}-font-weight-black`] = String((typography as any).fontWeightBlack || 900);
|
|
344
381
|
}
|
|
345
382
|
|
|
346
|
-
// Base line height (SCSS: --atomix-body-line-height)
|
|
383
|
+
// Base line height (matches SCSS: --atomix-body-line-height)
|
|
347
384
|
const baseLineHeight = typeof typography.body1?.lineHeight === 'number'
|
|
348
385
|
? typography.body1.lineHeight
|
|
349
386
|
: parseFloat(String(typography.body1?.lineHeight || 1.2));
|
|
350
387
|
vars[`${prefix}-body-line-height`] = String(baseLineHeight);
|
|
351
388
|
|
|
352
|
-
// Line height scale (
|
|
389
|
+
// Line height scale (matches SCSS: --atomix-line-height-base, --atomix-line-height-sm, --atomix-line-height-lg)
|
|
353
390
|
vars[`${prefix}-line-height-base`] = String(baseLineHeight);
|
|
354
391
|
vars[`${prefix}-line-height-sm`] = String(1.43);
|
|
355
392
|
vars[`${prefix}-line-height-lg`] = String(1.56);
|
|
356
393
|
|
|
357
|
-
// Extended font size scale (
|
|
394
|
+
// Extended font size scale (matches SCSS: --atomix-font-size-xs, --atomix-font-size-sm, etc.)
|
|
358
395
|
const fontSizeXs = baseFontSize * 0.75; // 12px if base is 16px
|
|
359
396
|
const fontSizeSm = baseFontSize * 0.875; // 14px if base is 16px
|
|
360
397
|
const fontSizeMd = baseFontSize * 1; // 16px if base is 16px (same as base)
|
|
@@ -369,13 +406,13 @@ function generateTypographyVariables(
|
|
|
369
406
|
vars[`${prefix}-font-size-xl`] = `${fontSizeXl}px`;
|
|
370
407
|
vars[`${prefix}-font-size-2xl`] = `${fontSize2xl}px`;
|
|
371
408
|
|
|
372
|
-
// Display font size (
|
|
409
|
+
// Display font size (matches SCSS: --atomix-display-1)
|
|
373
410
|
if ('display1' in typography) {
|
|
374
411
|
const display1 = (typography as any).display1;
|
|
375
412
|
vars[`${prefix}-display-1`] = typeof display1 === 'string' ? display1 : `${display1}px`;
|
|
376
413
|
}
|
|
377
414
|
|
|
378
|
-
// Letter spacing for headings (
|
|
415
|
+
// Letter spacing for headings (matches SCSS: --atomix-letter-spacing-h1, etc.)
|
|
379
416
|
const headings = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;
|
|
380
417
|
headings.forEach((heading) => {
|
|
381
418
|
const headingConfig = typography[heading];
|
|
@@ -389,19 +426,23 @@ function generateTypographyVariables(
|
|
|
389
426
|
|
|
390
427
|
/**
|
|
391
428
|
* Generate CSS variables from theme shadows
|
|
429
|
+
*
|
|
430
|
+
* Matches SCSS token naming pattern:
|
|
431
|
+
* - --atomix-box-shadow (base, mapped from md)
|
|
432
|
+
* - --atomix-box-shadow-xs, --atomix-box-shadow-sm, --atomix-box-shadow-lg, --atomix-box-shadow-xl
|
|
433
|
+
* - --atomix-box-shadow-inset
|
|
392
434
|
*/
|
|
393
435
|
function generateShadowVariables(shadows: Theme['shadows'], prefix: string): Record<string, string> {
|
|
394
436
|
const vars: Record<string, string> = {};
|
|
395
437
|
|
|
396
|
-
// Map JS shadow keys to SCSS variables
|
|
397
|
-
// SCSS uses --atomix-box-shadow (base) and --atomix-box-shadow-{size}
|
|
438
|
+
// Map JS shadow keys to SCSS variables (matches SCSS pattern exactly)
|
|
398
439
|
if (shadows.md) vars[`${prefix}-box-shadow`] = shadows.md; // Map md to base
|
|
399
440
|
if (shadows.xs) vars[`${prefix}-box-shadow-xs`] = shadows.xs;
|
|
400
441
|
if (shadows.sm) vars[`${prefix}-box-shadow-sm`] = shadows.sm;
|
|
401
442
|
if (shadows.lg) vars[`${prefix}-box-shadow-lg`] = shadows.lg;
|
|
402
443
|
if (shadows.xl) vars[`${prefix}-box-shadow-xl`] = shadows.xl;
|
|
403
444
|
|
|
404
|
-
// Inset shadow (
|
|
445
|
+
// Inset shadow (matches SCSS: --atomix-box-shadow-inset)
|
|
405
446
|
if (shadows.inset) {
|
|
406
447
|
vars[`${prefix}-box-shadow-inset`] = shadows.inset;
|
|
407
448
|
} else if (shadows.sm) {
|
package/src/lib/theme/index.ts
CHANGED
|
@@ -8,9 +8,18 @@
|
|
|
8
8
|
export { ThemeProvider } from './runtime/ThemeProvider';
|
|
9
9
|
export { useTheme } from './runtime/useTheme';
|
|
10
10
|
export { ThemeContext } from './ThemeContext';
|
|
11
|
+
export { ThemeManager } from './runtime/ThemeManager';
|
|
12
|
+
export { ThemeErrorBoundary } from './runtime/ThemeErrorBoundary';
|
|
11
13
|
|
|
12
|
-
// Theme
|
|
13
|
-
export {
|
|
14
|
+
// Theme creation
|
|
15
|
+
export { createTheme } from './createTheme';
|
|
16
|
+
export { createThemeFromConfig } from './createThemeFromConfig';
|
|
17
|
+
|
|
18
|
+
// Theme utilities
|
|
19
|
+
export { quickTheme, createDarkVariant, validateTheme, themeToCSS, exportTheme, importTheme } from '../theme-tools';
|
|
20
|
+
|
|
21
|
+
// DevTools (for development and debugging)
|
|
22
|
+
export * from './devtools';
|
|
14
23
|
|
|
15
24
|
// Theme application
|
|
16
25
|
export { ThemeApplicator, getThemeApplicator, applyTheme, removeTheme } from './runtime/ThemeApplicator';
|
|
@@ -29,6 +38,9 @@ export {
|
|
|
29
38
|
extractComponentName,
|
|
30
39
|
} from './cssVariableMapper';
|
|
31
40
|
|
|
41
|
+
// RTL Support
|
|
42
|
+
export { RTLManager } from './i18n/rtl';
|
|
43
|
+
|
|
32
44
|
// Types
|
|
33
45
|
export type {
|
|
34
46
|
Theme,
|
|
@@ -44,7 +56,11 @@ export type {
|
|
|
44
56
|
ThemeComponentOverrides,
|
|
45
57
|
} from './types';
|
|
46
58
|
|
|
59
|
+
export type { ThemeErrorBoundaryProps } from './runtime/ThemeErrorBoundary';
|
|
60
|
+
|
|
47
61
|
export type {
|
|
48
62
|
CSSVariableConfig,
|
|
49
63
|
CSSVariableNamingOptions,
|
|
50
64
|
} from './cssVariableMapper';
|
|
65
|
+
|
|
66
|
+
export type { RTLConfig } from './i18n/rtl';
|
|
@@ -10,7 +10,23 @@ import { ThemeError, ThemeErrorCode } from '../errors';
|
|
|
10
10
|
import type { ThemeMetadata } from '../types';
|
|
11
11
|
|
|
12
12
|
// Mock dependencies
|
|
13
|
-
vi.mock('../core/ThemeEngine')
|
|
13
|
+
vi.mock('../core/ThemeEngine', () => {
|
|
14
|
+
return {
|
|
15
|
+
ThemeEngine: class {
|
|
16
|
+
initialize = vi.fn().mockResolvedValue(undefined);
|
|
17
|
+
on = vi.fn();
|
|
18
|
+
getRegistry = vi.fn().mockReturnValue({
|
|
19
|
+
has: vi.fn().mockReturnValue(false),
|
|
20
|
+
register: vi.fn(),
|
|
21
|
+
getAllMetadata: vi.fn().mockReturnValue([]),
|
|
22
|
+
});
|
|
23
|
+
setTheme = vi.fn().mockResolvedValue(undefined);
|
|
24
|
+
getActiveTheme = vi.fn().mockReturnValue(null);
|
|
25
|
+
isThemeLoaded = vi.fn().mockReturnValue(false);
|
|
26
|
+
preloadTheme = vi.fn().mockResolvedValue(undefined);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
});
|
|
14
30
|
vi.mock('../config/loader');
|
|
15
31
|
vi.mock('../utils', () => ({
|
|
16
32
|
isBrowser: () => true,
|
|
@@ -63,7 +63,7 @@ const DEFAULT_CONFIG: Partial<ThemeManagerConfig> = {
|
|
|
63
63
|
* // No defaultTheme - uses built-in styles
|
|
64
64
|
* });
|
|
65
65
|
*
|
|
66
|
-
* await themeManager.setTheme('
|
|
66
|
+
* await themeManager.setTheme('my-custom-theme');
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
69
|
export class ThemeManager {
|
|
@@ -356,13 +356,13 @@ export class ThemeManager {
|
|
|
356
356
|
* Emit theme error event
|
|
357
357
|
*/
|
|
358
358
|
private emitThemeError(error: Error, themeName: string): void {
|
|
359
|
-
const themeError = error instanceof ThemeError
|
|
360
|
-
? error
|
|
359
|
+
const themeError = error instanceof ThemeError
|
|
360
|
+
? error
|
|
361
361
|
: new ThemeError(
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
362
|
+
error.message,
|
|
363
|
+
ThemeErrorCode.THEME_LOAD_FAILED,
|
|
364
|
+
{ themeName, originalError: error.message }
|
|
365
|
+
);
|
|
366
366
|
|
|
367
367
|
if (this.config.onError) {
|
|
368
368
|
try {
|
package/src/lib/theme/types.ts
CHANGED
|
@@ -189,56 +189,56 @@ export interface UseThemeReturn {
|
|
|
189
189
|
* Component-level theme override configuration
|
|
190
190
|
*/
|
|
191
191
|
export interface ComponentThemeOverride {
|
|
192
|
-
|
|
193
|
-
cssVars?: Record<string, string | number>;
|
|
194
|
-
|
|
195
|
-
/** Default prop overrides */
|
|
196
|
-
defaultProps?: Record<string, any>;
|
|
197
|
-
|
|
198
|
-
/** Part-specific overrides */
|
|
199
|
-
parts?: Record<string, {
|
|
200
|
-
cssVars?: Record<string, string | number>;
|
|
201
|
-
className?: string;
|
|
202
|
-
}>;
|
|
203
|
-
|
|
204
|
-
/** Variant overrides */
|
|
205
|
-
variants?: Record<string, {
|
|
192
|
+
/** CSS variable overrides for the component */
|
|
206
193
|
cssVars?: Record<string, string | number>;
|
|
194
|
+
|
|
195
|
+
/** Default prop overrides */
|
|
196
|
+
defaultProps?: Record<string, any>;
|
|
197
|
+
|
|
198
|
+
/** Part-specific overrides */
|
|
199
|
+
parts?: Record<string, {
|
|
200
|
+
cssVars?: Record<string, string | number>;
|
|
201
|
+
className?: string;
|
|
202
|
+
}>;
|
|
203
|
+
|
|
204
|
+
/** Variant overrides */
|
|
205
|
+
variants?: Record<string, {
|
|
206
|
+
cssVars?: Record<string, string | number>;
|
|
207
|
+
className?: string;
|
|
208
|
+
}>;
|
|
209
|
+
|
|
210
|
+
/** Additional className for the component */
|
|
207
211
|
className?: string;
|
|
208
|
-
}>;
|
|
209
|
-
|
|
210
|
-
/** Additional className for the component */
|
|
211
|
-
className?: string;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
/**
|
|
215
215
|
* Theme component overrides for all components
|
|
216
216
|
*/
|
|
217
217
|
export interface ThemeComponentOverrides {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
218
|
+
Button?: ComponentThemeOverride;
|
|
219
|
+
Card?: ComponentThemeOverride;
|
|
220
|
+
Input?: ComponentThemeOverride;
|
|
221
|
+
Modal?: ComponentThemeOverride;
|
|
222
|
+
Dropdown?: ComponentThemeOverride;
|
|
223
|
+
Badge?: ComponentThemeOverride;
|
|
224
|
+
Tabs?: ComponentThemeOverride;
|
|
225
|
+
Progress?: ComponentThemeOverride;
|
|
226
|
+
Tooltip?: ComponentThemeOverride;
|
|
227
|
+
Select?: ComponentThemeOverride;
|
|
228
|
+
Checkbox?: ComponentThemeOverride;
|
|
229
|
+
Radio?: ComponentThemeOverride;
|
|
230
|
+
Textarea?: ComponentThemeOverride;
|
|
231
|
+
FormGroup?: ComponentThemeOverride;
|
|
232
|
+
Navbar?: ComponentThemeOverride;
|
|
233
|
+
Accordion?: ComponentThemeOverride;
|
|
234
|
+
DataTable?: ComponentThemeOverride;
|
|
235
|
+
Avatar?: ComponentThemeOverride;
|
|
236
|
+
List?: ComponentThemeOverride;
|
|
237
|
+
Popover?: ComponentThemeOverride;
|
|
238
|
+
Messages?: ComponentThemeOverride;
|
|
239
|
+
Callout?: ComponentThemeOverride;
|
|
240
|
+
Spinner?: ComponentThemeOverride;
|
|
241
|
+
[key: string]: ComponentThemeOverride | undefined;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
/**
|
|
@@ -334,7 +334,6 @@ export interface PaletteOptions {
|
|
|
334
334
|
/** Background colors */
|
|
335
335
|
background?: {
|
|
336
336
|
default?: string;
|
|
337
|
-
paper?: string;
|
|
338
337
|
subtle?: string;
|
|
339
338
|
};
|
|
340
339
|
/** Text colors */
|
package/src/lib/theme-tools.ts
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
import { Theme, ThemeMetadata } from './theme/types';
|
|
8
8
|
import { createTheme } from './theme/createTheme';
|
|
9
9
|
import { extendTheme, mergeTheme } from './theme/composeTheme';
|
|
10
|
-
import { ComponentOverrideManager } from './theme/overrides/ComponentOverrides';
|
|
11
|
-
import { WhiteLabelManager } from './theme/whitelabel/WhiteLabelManager';
|
|
12
10
|
import { generateCSSVariables } from './theme/generateCSSVariables';
|
|
13
11
|
|
|
14
12
|
/**
|
|
@@ -49,19 +47,19 @@ export function createDarkVariant(lightTheme: Theme): Theme {
|
|
|
49
47
|
*/
|
|
50
48
|
export function validateTheme(theme: Theme): { valid: boolean; errors: string[] } {
|
|
51
49
|
const errors: string[] = [];
|
|
52
|
-
|
|
50
|
+
|
|
53
51
|
if (!theme.name) {
|
|
54
52
|
errors.push('Theme must have a name');
|
|
55
53
|
}
|
|
56
|
-
|
|
54
|
+
|
|
57
55
|
if (!theme.palette) {
|
|
58
56
|
errors.push('Theme must have a palette');
|
|
59
57
|
}
|
|
60
|
-
|
|
58
|
+
|
|
61
59
|
if (theme.palette && !theme.palette.primary) {
|
|
62
60
|
errors.push('Theme palette must have a primary color');
|
|
63
61
|
}
|
|
64
|
-
|
|
62
|
+
|
|
65
63
|
return {
|
|
66
64
|
valid: errors.length === 0,
|
|
67
65
|
errors,
|
|
@@ -78,61 +76,6 @@ export function themeToCSS(theme: Theme, selector = ':root'): string {
|
|
|
78
76
|
});
|
|
79
77
|
}
|
|
80
78
|
|
|
81
|
-
/**
|
|
82
|
-
* Apply overrides to theme easily
|
|
83
|
-
*/
|
|
84
|
-
export function applyOverrides(
|
|
85
|
-
theme: Theme,
|
|
86
|
-
overrides: Record<string, any>
|
|
87
|
-
): Theme {
|
|
88
|
-
const manager = new ComponentOverrideManager(theme);
|
|
89
|
-
|
|
90
|
-
Object.entries(overrides).forEach(([component, override]) => {
|
|
91
|
-
manager.addOverride(component, override);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const overriddenTheme = manager.getThemeWithOverrides();
|
|
95
|
-
if (!overriddenTheme) {
|
|
96
|
-
throw new Error('Failed to get theme with overrides: theme was not set');
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return overriddenTheme;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Apply white label configuration
|
|
104
|
-
*/
|
|
105
|
-
export function applyWhiteLabel(
|
|
106
|
-
theme: Theme,
|
|
107
|
-
brand: {
|
|
108
|
-
name: string;
|
|
109
|
-
primaryColor: string;
|
|
110
|
-
logo?: string;
|
|
111
|
-
}
|
|
112
|
-
): Theme {
|
|
113
|
-
const manager = new WhiteLabelManager(theme);
|
|
114
|
-
|
|
115
|
-
manager.configure({
|
|
116
|
-
brand: {
|
|
117
|
-
name: brand.name,
|
|
118
|
-
primaryColor: brand.primaryColor,
|
|
119
|
-
logo: brand.logo,
|
|
120
|
-
},
|
|
121
|
-
themeOverrides: {
|
|
122
|
-
palette: {
|
|
123
|
-
primary: { main: brand.primaryColor },
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const whiteLabeledTheme = manager.getWhiteLabeledTheme();
|
|
129
|
-
if (!whiteLabeledTheme) {
|
|
130
|
-
throw new Error('Failed to get white labeled theme: theme was not set');
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return whiteLabeledTheme;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
79
|
/**
|
|
137
80
|
* Get theme metadata
|
|
138
81
|
*/
|
|
@@ -153,9 +96,9 @@ export function getThemeMetadata(theme: Theme): ThemeMetadata {
|
|
|
153
96
|
* Check if theme supports dark mode
|
|
154
97
|
*/
|
|
155
98
|
export function supportsDarkMode(theme: Theme): boolean {
|
|
156
|
-
return theme.palette?.mode === 'dark' ||
|
|
157
|
-
|
|
158
|
-
|
|
99
|
+
return theme.palette?.mode === 'dark' ||
|
|
100
|
+
theme.supportsDarkMode === true ||
|
|
101
|
+
Boolean(theme.a11y?.modes?.includes('dark'));
|
|
159
102
|
}
|
|
160
103
|
|
|
161
104
|
/**
|
|
@@ -179,7 +122,4 @@ export function importTheme(json: string): Theme {
|
|
|
179
122
|
// Re-export commonly used functions
|
|
180
123
|
export { createTheme, extendTheme, mergeTheme };
|
|
181
124
|
export { generateCSSVariables };
|
|
182
|
-
export { ComponentOverrideManager } from './theme/overrides/ComponentOverrides';
|
|
183
|
-
export { WhiteLabelManager } from './theme/whitelabel/WhiteLabelManager';
|
|
184
125
|
export { RTLManager } from './theme/i18n/rtl';
|
|
185
|
-
export { ThemeAnalytics } from './theme/monitoring/ThemeAnalytics';
|