@shohojdhara/atomix 0.3.14 → 0.4.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.
Files changed (343) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build-tools/EXAMPLES.md +372 -0
  3. package/build-tools/README.md +242 -0
  4. package/build-tools/__tests__/error-handler.test.js +230 -0
  5. package/build-tools/__tests__/index.test.js +141 -0
  6. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  7. package/build-tools/__tests__/utils.test.js +161 -0
  8. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  9. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  10. package/build-tools/error-handler.js +308 -0
  11. package/build-tools/index.d.ts +44 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +50 -0
  14. package/build-tools/rollup-plugin.js +236 -0
  15. package/build-tools/types.d.ts +163 -0
  16. package/build-tools/utils.js +203 -0
  17. package/build-tools/vite-plugin.js +161 -0
  18. package/build-tools/webpack-loader.js +123 -0
  19. package/dist/atomix.css +21044 -2618
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +77 -3
  22. package/dist/atomix.min.css.map +1 -1
  23. package/dist/build-tools/EXAMPLES.md +372 -0
  24. package/dist/build-tools/README.md +242 -0
  25. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  26. package/dist/build-tools/__tests__/index.test.js +141 -0
  27. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  28. package/dist/build-tools/__tests__/utils.test.js +161 -0
  29. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  30. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  31. package/dist/build-tools/error-handler.js +308 -0
  32. package/dist/build-tools/index.d.ts +44 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +50 -0
  35. package/dist/build-tools/rollup-plugin.js +236 -0
  36. package/dist/build-tools/types.d.ts +163 -0
  37. package/dist/build-tools/utils.js +203 -0
  38. package/dist/build-tools/vite-plugin.js +161 -0
  39. package/dist/build-tools/webpack-loader.js +123 -0
  40. package/dist/charts.d.ts +1 -1
  41. package/dist/charts.js +86 -57
  42. package/dist/charts.js.map +1 -1
  43. package/dist/core.d.ts +1 -1
  44. package/dist/core.js +136 -112
  45. package/dist/core.js.map +1 -1
  46. package/dist/forms.d.ts +2 -5
  47. package/dist/forms.js +140 -128
  48. package/dist/forms.js.map +1 -1
  49. package/dist/heavy.d.ts +1 -1
  50. package/dist/heavy.js +136 -112
  51. package/dist/heavy.js.map +1 -1
  52. package/dist/index.d.ts +152 -78
  53. package/dist/index.esm.js +346 -340
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +359 -353
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.min.js +1 -1
  58. package/dist/index.min.js.map +1 -1
  59. package/dist/layout.js.map +1 -1
  60. package/dist/theme.d.ts +9 -9
  61. package/dist/theme.js.map +1 -1
  62. package/package.json +23 -8
  63. package/scripts/atomix-cli.js +170 -73
  64. package/scripts/cli/__tests__/README.md +81 -0
  65. package/scripts/cli/__tests__/basic.test.js +115 -0
  66. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  67. package/scripts/cli/__tests__/integration.test.js +327 -0
  68. package/scripts/cli/__tests__/test-setup.js +133 -0
  69. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  70. package/scripts/cli/__tests__/utils.test.js +161 -0
  71. package/scripts/cli/component-generator.js +253 -299
  72. package/scripts/cli/dependency-checker.js +355 -0
  73. package/scripts/cli/interactive-init.js +46 -5
  74. package/scripts/cli/template-manager.js +0 -2
  75. package/scripts/cli/templates/common-templates.js +636 -0
  76. package/scripts/cli/templates/composable-templates.js +148 -126
  77. package/scripts/cli/templates/index.js +23 -16
  78. package/scripts/cli/templates/project-templates.js +151 -23
  79. package/scripts/cli/templates/react-templates.js +280 -210
  80. package/scripts/cli/templates/scss-templates.js +90 -91
  81. package/scripts/cli/templates/testing-templates.js +206 -27
  82. package/scripts/cli/templates/testing-utils.js +278 -0
  83. package/scripts/cli/templates/types-templates.js +70 -56
  84. package/scripts/cli/theme-bridge.js +8 -2
  85. package/scripts/cli/token-manager.js +318 -206
  86. package/scripts/cli/utils.js +0 -1
  87. package/src/components/Accordion/Accordion.stories.tsx +358 -850
  88. package/src/components/Accordion/Accordion.test.tsx +70 -50
  89. package/src/components/Accordion/Accordion.tsx +99 -94
  90. package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
  91. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  92. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  93. package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
  94. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  95. package/src/components/AtomixGlass/glass-utils.ts +6 -5
  96. package/src/components/AtomixGlass/shader-utils.ts +133 -52
  97. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  98. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  99. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  100. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  101. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  102. package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -36
  103. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
  104. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  105. package/src/components/Avatar/Avatar.stories.tsx +195 -0
  106. package/src/components/Avatar/Avatar.tsx +58 -56
  107. package/src/components/Badge/Badge.stories.tsx +122 -352
  108. package/src/components/Badge/Badge.test.tsx +41 -41
  109. package/src/components/Badge/Badge.tsx +64 -62
  110. package/src/components/Block/Block.stories.tsx +30 -11
  111. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
  112. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
  113. package/src/components/Button/Button.stories.tsx +454 -1126
  114. package/src/components/Button/Button.test.tsx +123 -0
  115. package/src/components/Button/Button.tsx +88 -60
  116. package/src/components/Button/ButtonGroup.stories.tsx +376 -215
  117. package/src/components/Button/ButtonGroup.tsx +4 -15
  118. package/src/components/Callout/Callout.stories.tsx +316 -568
  119. package/src/components/Card/Card.stories.tsx +292 -81
  120. package/src/components/Card/Card.tsx +30 -14
  121. package/src/components/Chart/AreaChart.tsx +1 -1
  122. package/src/components/Chart/CandlestickChart.tsx +23 -16
  123. package/src/components/Chart/Chart.stories.tsx +153 -16
  124. package/src/components/Chart/Chart.tsx +40 -44
  125. package/src/components/Chart/ChartRenderer.tsx +39 -12
  126. package/src/components/Chart/ChartToolbar.tsx +21 -5
  127. package/src/components/Chart/DonutChart.tsx +1 -1
  128. package/src/components/Chart/FunnelChart.tsx +4 -1
  129. package/src/components/Chart/GaugeChart.tsx +3 -1
  130. package/src/components/Chart/HeatmapChart.tsx +50 -37
  131. package/src/components/Chart/LineChart.tsx +3 -2
  132. package/src/components/Chart/MultiAxisChart.tsx +24 -16
  133. package/src/components/Chart/RadarChart.tsx +19 -17
  134. package/src/components/Chart/ScatterChart.tsx +29 -21
  135. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
  136. package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
  137. package/src/components/Countdown/Countdown.stories.tsx +114 -7
  138. package/src/components/DataTable/DataTable.stories.tsx +349 -144
  139. package/src/components/DataTable/DataTable.test.tsx +26 -148
  140. package/src/components/DataTable/DataTable.tsx +485 -456
  141. package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
  142. package/src/components/DatePicker/DatePicker.tsx +31 -26
  143. package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
  144. package/src/components/Dropdown/Dropdown.tsx +313 -299
  145. package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
  146. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  147. package/src/components/Footer/Footer.stories.tsx +396 -327
  148. package/src/components/Footer/Footer.tsx +130 -128
  149. package/src/components/Footer/FooterLink.tsx +2 -2
  150. package/src/components/Form/Checkbox.stories.tsx +140 -6
  151. package/src/components/Form/Checkbox.test.tsx +63 -0
  152. package/src/components/Form/Checkbox.tsx +122 -78
  153. package/src/components/Form/Form.stories.tsx +110 -19
  154. package/src/components/Form/FormGroup.stories.tsx +127 -4
  155. package/src/components/Form/Input.stories.tsx +22 -39
  156. package/src/components/Form/Input.test.tsx +38 -44
  157. package/src/components/Form/Radio.stories.tsx +146 -17
  158. package/src/components/Form/Radio.tsx +68 -66
  159. package/src/components/Form/Select.stories.tsx +140 -8
  160. package/src/components/Form/Select.tsx +184 -182
  161. package/src/components/Form/Textarea.stories.tsx +149 -6
  162. package/src/components/Form/Textarea.test.tsx +27 -32
  163. package/src/components/Hero/Hero.stories.tsx +372 -38
  164. package/src/components/Hero/Hero.tsx +201 -55
  165. package/src/components/Icon/index.ts +7 -1
  166. package/src/components/List/List.stories.tsx +141 -3
  167. package/src/components/List/List.tsx +19 -23
  168. package/src/components/Modal/Modal.stories.tsx +183 -43
  169. package/src/components/Modal/Modal.tsx +130 -127
  170. package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
  171. package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
  172. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
  173. package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
  174. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
  175. package/src/components/Pagination/Pagination.stories.tsx +7 -4
  176. package/src/components/Pagination/Pagination.tsx +199 -202
  177. package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
  178. package/src/components/Popover/Popover.stories.tsx +354 -97
  179. package/src/components/Popover/Popover.tsx +41 -37
  180. package/src/components/Progress/Progress.stories.tsx +160 -7
  181. package/src/components/River/River.stories.tsx +3 -2
  182. package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
  183. package/src/components/Slider/Slider.stories.tsx +12 -4
  184. package/src/components/Spinner/Spinner.stories.tsx +104 -8
  185. package/src/components/Spinner/Spinner.test.tsx +23 -23
  186. package/src/components/Spinner/Spinner.tsx +43 -46
  187. package/src/components/Steps/Steps.stories.tsx +173 -42
  188. package/src/components/Tabs/Tabs.stories.tsx +141 -12
  189. package/src/components/Tabs/Tabs.tsx +74 -72
  190. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  191. package/src/components/Todo/Todo.stories.tsx +198 -9
  192. package/src/components/Toggle/Toggle.stories.tsx +137 -36
  193. package/src/components/Toggle/Toggle.test.tsx +65 -70
  194. package/src/components/Toggle/Toggle.tsx +4 -1
  195. package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
  196. package/src/components/Tooltip/Tooltip.tsx +104 -106
  197. package/src/components/Upload/Upload.stories.tsx +241 -150
  198. package/src/components/Upload/Upload.tsx +287 -283
  199. package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
  200. package/src/components/index.ts +13 -2
  201. package/src/layouts/Grid/Grid.stories.tsx +9 -3
  202. package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
  203. package/src/lib/README.md +2 -2
  204. package/src/lib/__tests__/theme-tools.test.ts +219 -0
  205. package/src/lib/composables/index.ts +2 -2
  206. package/src/lib/composables/shared-mouse-tracker.ts +13 -14
  207. package/src/lib/composables/useAtomixGlass.ts +126 -97
  208. package/src/lib/composables/useChartExport.ts +3 -8
  209. package/src/lib/composables/useDataTable.ts +72 -43
  210. package/src/lib/composables/useHero.ts +58 -14
  211. package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
  212. package/src/lib/composables/useInput.ts +10 -8
  213. package/src/lib/composables/useSideMenu.ts +6 -5
  214. package/src/lib/composables/useTooltip.ts +1 -2
  215. package/src/lib/composables/useVideoPlayer.ts +44 -35
  216. package/src/lib/config/index.ts +154 -154
  217. package/src/lib/constants/components.ts +9 -32
  218. package/src/lib/constants/cssVariables.ts +29 -29
  219. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
  220. package/src/lib/hooks/index.ts +1 -1
  221. package/src/lib/hooks/useComponentCustomization.ts +11 -17
  222. package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
  223. package/src/lib/patterns/__tests__/slots.test.ts +1 -1
  224. package/src/lib/patterns/index.ts +1 -1
  225. package/src/lib/patterns/slots.tsx +8 -13
  226. package/src/lib/storybook/InteractiveDemo.tsx +13 -18
  227. package/src/lib/storybook/PreviewContainer.tsx +1 -1
  228. package/src/lib/storybook/VariantsGrid.tsx +3 -7
  229. package/src/lib/storybook/index.ts +1 -1
  230. package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
  231. package/src/lib/theme/adapters/index.ts +3 -9
  232. package/src/lib/theme/adapters/themeAdapter.ts +41 -26
  233. package/src/lib/theme/config/index.ts +1 -1
  234. package/src/lib/theme/config/types.ts +2 -2
  235. package/src/lib/theme/config/validator.ts +10 -5
  236. package/src/lib/theme/constants/constants.ts +2 -2
  237. package/src/lib/theme/constants/index.ts +1 -2
  238. package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
  239. package/src/lib/theme/core/composeTheme.ts +32 -26
  240. package/src/lib/theme/core/createTheme.ts +1 -1
  241. package/src/lib/theme/core/createThemeObject.ts +308 -301
  242. package/src/lib/theme/core/index.ts +3 -3
  243. package/src/lib/theme/devtools/CLI.ts +107 -105
  244. package/src/lib/theme/devtools/Comparator.tsx +50 -32
  245. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
  246. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
  247. package/src/lib/theme/devtools/Inspector.tsx +75 -60
  248. package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
  249. package/src/lib/theme/devtools/Preview.tsx +150 -106
  250. package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
  251. package/src/lib/theme/devtools/index.ts +3 -9
  252. package/src/lib/theme/devtools/useHistory.ts +23 -21
  253. package/src/lib/theme/errors/errors.ts +12 -11
  254. package/src/lib/theme/errors/index.ts +2 -7
  255. package/src/lib/theme/generators/generateCSS.ts +9 -13
  256. package/src/lib/theme/generators/generateCSSNested.ts +1 -6
  257. package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
  258. package/src/lib/theme/generators/index.ts +1 -4
  259. package/src/lib/theme/i18n/index.ts +1 -1
  260. package/src/lib/theme/i18n/rtl.ts +13 -13
  261. package/src/lib/theme/index.ts +7 -16
  262. package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
  263. package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
  264. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
  265. package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
  266. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
  267. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
  268. package/src/lib/theme/runtime/index.ts +2 -5
  269. package/src/lib/theme/runtime/useTheme.ts +18 -18
  270. package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
  271. package/src/lib/theme/test/testTheme.ts +15 -16
  272. package/src/lib/theme/tokens/index.ts +2 -7
  273. package/src/lib/theme/tokens/tokens.ts +25 -24
  274. package/src/lib/theme/types.ts +428 -411
  275. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
  276. package/src/lib/theme/utils/componentTheming.ts +18 -18
  277. package/src/lib/theme/utils/domUtils.ts +277 -289
  278. package/src/lib/theme/utils/index.ts +1 -2
  279. package/src/lib/theme/utils/injectCSS.ts +10 -14
  280. package/src/lib/theme/utils/naming.ts +20 -16
  281. package/src/lib/theme/utils/themeHelpers.ts +10 -12
  282. package/src/lib/theme/utils/themeUtils.ts +85 -86
  283. package/src/lib/theme/utils/themeValidation.ts +82 -33
  284. package/src/lib/theme-tools.ts +8 -6
  285. package/src/lib/types/components.ts +172 -71
  286. package/src/lib/types/partProps.ts +1 -1
  287. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  288. package/src/lib/utils/componentUtils.ts +8 -12
  289. package/src/lib/utils/csv.ts +19 -0
  290. package/src/lib/utils/dataTableExport.ts +2 -15
  291. package/src/lib/utils/fontPreloader.ts +10 -19
  292. package/src/lib/utils/icons.ts +4 -1
  293. package/src/lib/utils/index.ts +2 -6
  294. package/src/lib/utils/memoryMonitor.ts +10 -8
  295. package/src/lib/utils/themeNaming.ts +2 -2
  296. package/src/styles/01-settings/_index.scss +1 -1
  297. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  298. package/src/styles/01-settings/_settings.colors.scss +11 -11
  299. package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
  300. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  301. package/src/styles/01-settings/_settings.spacing.scss +3 -4
  302. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  303. package/src/styles/01-settings/_settings.typography.scss +4 -4
  304. package/src/styles/02-tools/_tools.button.scss +51 -21
  305. package/src/styles/02-tools/_tools.utility-api.scss +38 -12
  306. package/src/styles/03-generic/_generic.root.scss +4 -3
  307. package/src/styles/06-components/_components.accordion.scss +56 -14
  308. package/src/styles/06-components/_components.atomix-glass.scss +13 -9
  309. package/src/styles/06-components/_components.button.scss +16 -4
  310. package/src/styles/06-components/_components.callout.scss +27 -21
  311. package/src/styles/06-components/_components.card.scss +5 -14
  312. package/src/styles/06-components/_components.chart.scss +22 -19
  313. package/src/styles/06-components/_components.checkbox.scss +25 -17
  314. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
  315. package/src/styles/06-components/_components.edge-panel.scss +9 -2
  316. package/src/styles/06-components/_components.footer.scss +1 -1
  317. package/src/styles/06-components/_components.side-menu.scss +5 -5
  318. package/src/styles/06-components/_components.toggle.scss +18 -0
  319. package/src/styles/06-components/_index.scss +1 -1
  320. package/src/styles/06-components/old.chart.styles.scss +0 -2
  321. package/src/styles/99-utilities/_index.scss +2 -0
  322. package/src/styles/99-utilities/_utilities.border.scss +69 -27
  323. package/src/styles/99-utilities/_utilities.display.scss +1 -1
  324. package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
  325. package/src/styles/99-utilities/_utilities.position.scss +16 -9
  326. package/src/styles/99-utilities/_utilities.scss +2 -0
  327. package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
  328. package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
  329. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  330. package/src/styles/99-utilities/_utilities.text.scss +67 -46
  331. package/themes/dark-complementary/README.md +98 -0
  332. package/themes/dark-complementary/index.scss +158 -0
  333. package/themes/default-light/README.md +81 -0
  334. package/themes/default-light/index.scss +154 -0
  335. package/themes/high-contrast/README.md +105 -0
  336. package/themes/high-contrast/index.scss +172 -0
  337. package/themes/test-theme/README.md +38 -0
  338. package/themes/test-theme/index.scss +47 -0
  339. package/scripts/cli/templates-original-backup.js +0 -1655
  340. package/scripts/cli/templates_backup.js +0 -684
  341. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  342. package/src/lib/composables/useButton.ts +0 -93
  343. package/src/lib/composables/useCheckbox.ts +0 -70
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Theme Tools for Library Users
3
- *
3
+ *
4
4
  * Developer-friendly utilities for working with Atomix themes
5
5
  */
6
6
 
@@ -49,7 +49,7 @@ export function createDarkVariant(lightTheme: Theme): Theme {
49
49
  },
50
50
  },
51
51
  };
52
-
52
+
53
53
  // Create a new theme by extending the light theme with the dark variant
54
54
  const extendedTheme: Theme = {
55
55
  ...lightTheme,
@@ -67,7 +67,7 @@ export function createDarkVariant(lightTheme: Theme): Theme {
67
67
  },
68
68
  },
69
69
  };
70
-
70
+
71
71
  return extendedTheme;
72
72
  }
73
73
 
@@ -125,9 +125,11 @@ export function getThemeMetadata(theme: Theme): ThemeMetadata {
125
125
  * Check if theme supports dark mode
126
126
  */
127
127
  export function supportsDarkMode(theme: Theme): boolean {
128
- return theme.palette?.mode === 'dark' ||
128
+ return (
129
+ theme.palette?.mode === 'dark' ||
129
130
  theme.supportsDarkMode === true ||
130
- Boolean(theme.a11y?.modes?.includes('dark'));
131
+ Boolean(theme.a11y?.modes?.includes('dark'))
132
+ );
131
133
  }
132
134
 
133
135
  /**
@@ -150,4 +152,4 @@ export function importTheme(json: string): Theme {
150
152
 
151
153
  // Note: createTheme, extendTheme, mergeTheme, and generateCSSVariables
152
154
  // are already exported from './theme' module. Import them directly from there.
153
- // This file only exports theme-tools specific utilities.
155
+ // This file only exports theme-tools specific utilities.
@@ -1,7 +1,44 @@
1
1
  import { ReactNode } from 'react';
2
- import type { ButtonParts, CardParts, InputParts, ModalParts, DropdownParts, BadgeParts, ProgressParts, CheckboxParts, RadioParts } from './partProps';
3
- import type { SlotProps, ButtonRootSlotProps, ButtonIconSlotProps, ButtonLabelSlotProps, ButtonSpinnerSlotProps, BadgeRootSlotProps, BadgeIconSlotProps, BadgeLabelSlotProps, ProgressRootSlotProps, ProgressBarSlotProps, CheckboxRootSlotProps, CheckboxInputSlotProps, CheckboxLabelSlotProps, RadioRootSlotProps, RadioInputSlotProps, RadioLabelSlotProps } from '../patterns/slots';
4
- import type { ButtonCSSVariable, CardCSSVariable, InputCSSVariable, ModalCSSVariable, DropdownCSSVariable, BadgeCSSVariable, ProgressCSSVariable, CheckboxCSSVariable, RadioCSSVariable } from '../constants/cssVariables';
2
+ import type {
3
+ ButtonParts,
4
+ CardParts,
5
+ InputParts,
6
+ ModalParts,
7
+ DropdownParts,
8
+ BadgeParts,
9
+ ProgressParts,
10
+ CheckboxParts,
11
+ RadioParts,
12
+ } from './partProps';
13
+ import type {
14
+ SlotProps,
15
+ ButtonRootSlotProps,
16
+ ButtonIconSlotProps,
17
+ ButtonLabelSlotProps,
18
+ ButtonSpinnerSlotProps,
19
+ BadgeRootSlotProps,
20
+ BadgeIconSlotProps,
21
+ BadgeLabelSlotProps,
22
+ ProgressRootSlotProps,
23
+ ProgressBarSlotProps,
24
+ CheckboxRootSlotProps,
25
+ CheckboxInputSlotProps,
26
+ CheckboxLabelSlotProps,
27
+ RadioRootSlotProps,
28
+ RadioInputSlotProps,
29
+ RadioLabelSlotProps,
30
+ } from '../patterns/slots';
31
+ import type {
32
+ ButtonCSSVariable,
33
+ CardCSSVariable,
34
+ InputCSSVariable,
35
+ ModalCSSVariable,
36
+ DropdownCSSVariable,
37
+ BadgeCSSVariable,
38
+ ProgressCSSVariable,
39
+ CheckboxCSSVariable,
40
+ RadioCSSVariable,
41
+ } from '../constants/cssVariables';
5
42
 
6
43
  // ============================================================================
7
44
  // AtomixGlass Types
@@ -199,7 +236,14 @@ export interface AtomixGlassProps {
199
236
  /**
200
237
  * Shader variant for shader mode
201
238
  */
202
- shaderVariant?: 'liquidGlass' | 'premiumGlass';
239
+ shaderVariant?:
240
+ | 'liquidGlass'
241
+ | 'premiumGlass'
242
+ | 'appleFluid'
243
+ | 'liquidMetal'
244
+ | 'plasma'
245
+ | 'waves'
246
+ | 'noise';
203
247
 
204
248
  /**
205
249
  * Accessibility props
@@ -914,14 +958,40 @@ export interface HeroBackgroundSliderConfig {
914
958
  customTransition?: (currentIndex: number, nextIndex: number) => string | React.CSSProperties;
915
959
  }
916
960
 
961
+ /**
962
+ * Hero component parts for granular styling
963
+ */
964
+ export interface HeroParts {
965
+ root?: { className?: string; style?: React.CSSProperties };
966
+ container?: { className?: string; style?: React.CSSProperties };
967
+ grid?: { className?: string; style?: React.CSSProperties };
968
+ content?: { className?: string; style?: React.CSSProperties };
969
+ title?: { className?: string; style?: React.CSSProperties };
970
+ subtitle?: { className?: string; style?: React.CSSProperties };
971
+ text?: { className?: string; style?: React.CSSProperties };
972
+ actions?: { className?: string; style?: React.CSSProperties };
973
+ imageWrapper?: { className?: string; style?: React.CSSProperties };
974
+ image?: { className?: string; style?: React.CSSProperties };
975
+ background?: { className?: string; style?: React.CSSProperties };
976
+ overlay?: { className?: string; style?: React.CSSProperties };
977
+ }
978
+
917
979
  /**
918
980
  * Hero component properties
919
981
  */
920
- export interface HeroProps extends BaseComponentProps {
982
+ export interface HeroProps
983
+ extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'content'>,
984
+ BaseComponentProps {
921
985
  /**
922
986
  * Hero title
923
987
  */
924
- title: string;
988
+ title: ReactNode;
989
+
990
+ /**
991
+ * HTML Heading level for the title
992
+ * @default 'h1'
993
+ */
994
+ headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div';
925
995
 
926
996
  /**
927
997
  * Hero subtitle
@@ -973,11 +1043,31 @@ export interface HeroProps extends BaseComponentProps {
973
1043
  */
974
1044
  imageColSize?: number;
975
1045
 
1046
+ /**
1047
+ * Custom grid column class name for image
1048
+ */
1049
+ imageColClassName?: string;
1050
+
1051
+ /**
1052
+ * Custom inline style for image column
1053
+ */
1054
+ imageColStyle?: React.CSSProperties;
1055
+
976
1056
  /**
977
1057
  * Custom grid column size for content (default is 5)
978
1058
  */
979
1059
  contentColSize?: number;
980
1060
 
1061
+ /**
1062
+ * Custom grid column class name for content
1063
+ */
1064
+ contentColClassName?: string;
1065
+
1066
+ /**
1067
+ * Custom inline style for content column
1068
+ */
1069
+ contentColStyle?: React.CSSProperties;
1070
+
981
1071
  /**
982
1072
  * Custom width for the hero content (overrides the default CSS variable)
983
1073
  */
@@ -1039,6 +1129,17 @@ export interface HeroProps extends BaseComponentProps {
1039
1129
  * Takes precedence over backgroundImageSrc and videoBackground props
1040
1130
  */
1041
1131
  backgroundSlider?: HeroBackgroundSliderConfig;
1132
+
1133
+ /**
1134
+ * Reverse the stacking order of content and image on mobile devices
1135
+ * @default false
1136
+ */
1137
+ reverseOnMobile?: boolean;
1138
+
1139
+ /**
1140
+ * Granular part-based styling
1141
+ */
1142
+ parts?: HeroParts;
1042
1143
  }
1043
1144
 
1044
1145
  /**
@@ -1468,16 +1569,16 @@ export interface SideMenuProps extends BaseComponentProps {
1468
1569
  active?: boolean | undefined;
1469
1570
  disabled?: boolean | undefined;
1470
1571
  as?:
1471
- | React.ComponentType<{
1472
- href?: string;
1473
- to?: string;
1474
- children: React.ReactNode;
1475
- className?: string;
1476
- onClick?: (event: React.MouseEvent) => void;
1477
- target?: string;
1478
- rel?: string;
1479
- }>
1480
- | undefined;
1572
+ | React.ComponentType<{
1573
+ href?: string;
1574
+ to?: string;
1575
+ children: React.ReactNode;
1576
+ className?: string;
1577
+ onClick?: (event: React.MouseEvent) => void;
1578
+ target?: string;
1579
+ rel?: string;
1580
+ }>
1581
+ | undefined;
1481
1582
  }>;
1482
1583
  }>;
1483
1584
  }
@@ -3677,17 +3778,17 @@ export interface VideoPlayerProps extends BaseComponentProps {
3677
3778
  * - object: Custom glass configuration
3678
3779
  */
3679
3780
  glass?:
3680
- | boolean
3681
- | {
3682
- displacementScale?: number;
3683
- blurAmount?: number;
3684
- saturation?: number;
3685
- aberrationIntensity?: number;
3686
- elasticity?: number;
3687
- cornerRadius?: number;
3688
- mode?: 'standard' | 'polar' | 'prominent' | 'shader';
3689
- overLight?: boolean;
3690
- };
3781
+ | boolean
3782
+ | {
3783
+ displacementScale?: number;
3784
+ blurAmount?: number;
3785
+ saturation?: number;
3786
+ aberrationIntensity?: number;
3787
+ elasticity?: number;
3788
+ cornerRadius?: number;
3789
+ mode?: 'standard' | 'polar' | 'prominent' | 'shader';
3790
+ overLight?: boolean;
3791
+ };
3691
3792
 
3692
3793
  /**
3693
3794
  * Glass overlay opacity (0-1) when glass variant is enabled
@@ -5075,23 +5176,23 @@ export interface SliderProps extends BaseComponentProps {
5075
5176
  * Whether to enable mouse wheel control
5076
5177
  */
5077
5178
  mousewheel?:
5078
- | boolean
5079
- | {
5080
- forceToAxis?: boolean;
5081
- sensitivity?: number;
5082
- releaseOnEdges?: boolean;
5083
- };
5179
+ | boolean
5180
+ | {
5181
+ forceToAxis?: boolean;
5182
+ sensitivity?: number;
5183
+ releaseOnEdges?: boolean;
5184
+ };
5084
5185
 
5085
5186
  /**
5086
5187
  * Whether to enable keyboard control
5087
5188
  */
5088
5189
  keyboard?:
5089
- | boolean
5090
- | {
5091
- enabled?: boolean;
5092
- onlyInViewport?: boolean;
5093
- pageUpDown?: boolean;
5094
- };
5190
+ | boolean
5191
+ | {
5192
+ enabled?: boolean;
5193
+ onlyInViewport?: boolean;
5194
+ pageUpDown?: boolean;
5195
+ };
5095
5196
 
5096
5197
  /**
5097
5198
  * Whether to grab cursor on hover (default: true)
@@ -5154,16 +5255,16 @@ export interface SliderProps extends BaseComponentProps {
5154
5255
  * Whether to free mode (no snap to slides)
5155
5256
  */
5156
5257
  freeMode?:
5157
- | boolean
5158
- | {
5159
- enabled?: boolean;
5160
- sticky?: boolean;
5161
- momentumRatio?: number;
5162
- momentumVelocityRatio?: number;
5163
- momentumBounce?: boolean;
5164
- momentumBounceRatio?: number;
5165
- minimumVelocity?: number;
5166
- };
5258
+ | boolean
5259
+ | {
5260
+ enabled?: boolean;
5261
+ sticky?: boolean;
5262
+ momentumRatio?: number;
5263
+ momentumVelocityRatio?: number;
5264
+ momentumBounce?: boolean;
5265
+ momentumBounceRatio?: number;
5266
+ minimumVelocity?: number;
5267
+ };
5167
5268
 
5168
5269
  /**
5169
5270
  * Whether to watch for slides and wrapper size changes
@@ -5199,23 +5300,23 @@ export interface SliderProps extends BaseComponentProps {
5199
5300
  * Hash navigation
5200
5301
  */
5201
5302
  hashNavigation?:
5202
- | boolean
5203
- | {
5204
- watchState?: boolean;
5205
- replaceState?: boolean;
5206
- };
5303
+ | boolean
5304
+ | {
5305
+ watchState?: boolean;
5306
+ replaceState?: boolean;
5307
+ };
5207
5308
 
5208
5309
  /**
5209
5310
  * History navigation
5210
5311
  */
5211
5312
  history?:
5212
- | boolean
5213
- | {
5214
- enabled?: boolean;
5215
- root?: string;
5216
- replaceState?: boolean;
5217
- key?: string;
5218
- };
5313
+ | boolean
5314
+ | {
5315
+ enabled?: boolean;
5316
+ root?: string;
5317
+ replaceState?: boolean;
5318
+ key?: string;
5319
+ };
5219
5320
 
5220
5321
  /**
5221
5322
  * Controller configuration
@@ -5230,16 +5331,16 @@ export interface SliderProps extends BaseComponentProps {
5230
5331
  * A11y configuration
5231
5332
  */
5232
5333
  a11y?:
5233
- | boolean
5234
- | {
5235
- enabled?: boolean;
5236
- prevSlideMessage?: string;
5237
- nextSlideMessage?: string;
5238
- firstSlideMessage?: string;
5239
- lastSlideMessage?: string;
5240
- paginationBulletMessage?: string;
5241
- notificationClass?: string;
5242
- };
5334
+ | boolean
5335
+ | {
5336
+ enabled?: boolean;
5337
+ prevSlideMessage?: string;
5338
+ nextSlideMessage?: string;
5339
+ firstSlideMessage?: string;
5340
+ lastSlideMessage?: string;
5341
+ paginationBulletMessage?: string;
5342
+ notificationClass?: string;
5343
+ };
5243
5344
 
5244
5345
  /**
5245
5346
  * Slide change callback
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Part-Based Styling Props
3
- *
3
+ *
4
4
  * Type definitions for styling individual component parts with className and style props.
5
5
  * This enables granular customization of component internals.
6
6
  */
@@ -0,0 +1,45 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { sanitizeCSVCell } from '../csv';
3
+
4
+ describe('sanitizeCSVCell', () => {
5
+ it('should handle normal strings', () => {
6
+ expect(sanitizeCSVCell('Hello World')).toBe('Hello World');
7
+ expect(sanitizeCSVCell('123')).toBe('123');
8
+ });
9
+
10
+ it('should handle numbers', () => {
11
+ expect(sanitizeCSVCell(123)).toBe('123');
12
+ expect(sanitizeCSVCell(0)).toBe('0');
13
+ // Negative numbers are prefixed with ' to prevent potential formula injection
14
+ expect(sanitizeCSVCell(-1)).toBe("'-1");
15
+ });
16
+
17
+ it('should handle null and undefined', () => {
18
+ expect(sanitizeCSVCell(null)).toBe('');
19
+ expect(sanitizeCSVCell(undefined)).toBe('');
20
+ });
21
+
22
+ it('should replace newlines and tabs with spaces', () => {
23
+ expect(sanitizeCSVCell('Hello\nWorld')).toBe('Hello World');
24
+ expect(sanitizeCSVCell('Hello\rWorld')).toBe('Hello World');
25
+ expect(sanitizeCSVCell('Hello\tWorld')).toBe('Hello World');
26
+ expect(sanitizeCSVCell('Hello\r\nWorld')).toBe('Hello World');
27
+ });
28
+
29
+ it('should escape double quotes', () => {
30
+ expect(sanitizeCSVCell('Hello "World"')).toBe('Hello ""World""');
31
+ expect(sanitizeCSVCell('"')).toBe('""');
32
+ });
33
+
34
+ it('should prevent formula injection', () => {
35
+ expect(sanitizeCSVCell('=SUM(A1:B1)')).toBe("'=SUM(A1:B1)");
36
+ expect(sanitizeCSVCell('+SUM(A1:B1)')).toBe("'+SUM(A1:B1)");
37
+ expect(sanitizeCSVCell('-SUM(A1:B1)')).toBe("'-SUM(A1:B1)");
38
+ expect(sanitizeCSVCell('@SUM(A1:B1)')).toBe("'@SUM(A1:B1)");
39
+ });
40
+
41
+ it('should handle mixed cases', () => {
42
+ // Dangerous character + quotes + newlines
43
+ expect(sanitizeCSVCell("=cmd|' /C calc'!A0\n")).toBe("'=cmd|' /C calc'!A0 ");
44
+ });
45
+ });
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Component Utilities
3
- *
3
+ *
4
4
  * Helper functions for component development with the new customization system
5
5
  */
6
6
 
@@ -39,7 +39,7 @@ export function createCSSVarStyle(
39
39
  baseStyle?: React.CSSProperties
40
40
  ): React.CSSProperties {
41
41
  if (!cssVars) return baseStyle || {};
42
-
42
+
43
43
  const varStyle = cssVarsToStyle(cssVars);
44
44
  return { ...varStyle, ...baseStyle };
45
45
  }
@@ -102,11 +102,7 @@ export function createPartProps<T extends { className?: string; style?: React.CS
102
102
  /**
103
103
  * Check if component has customization
104
104
  */
105
- export function hasCustomization(props: {
106
- parts?: any;
107
- cssVars?: any;
108
- slots?: any;
109
- }): boolean {
105
+ export function hasCustomization(props: { parts?: any; cssVars?: any; slots?: any }): boolean {
110
106
  return Boolean(props.parts || props.cssVars || props.slots);
111
107
  }
112
108
 
@@ -115,7 +111,7 @@ export function hasCustomization(props: {
115
111
  */
116
112
  export function createDebugAttrs(componentName: string, variant?: string): Record<string, string> {
117
113
  if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'development') return {};
118
-
114
+
119
115
  return {
120
116
  'data-component': componentName,
121
117
  ...(variant && { 'data-variant': variant }),
@@ -126,7 +122,7 @@ export function createDebugAttrs(componentName: string, variant?: string): Recor
126
122
  * Generate a UUID v4
127
123
  */
128
124
  export function generateUUID(): string {
129
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
125
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
130
126
  const r = (Math.random() * 16) | 0;
131
127
  const v = c === 'x' ? r : (r & 0x3) | 0x8;
132
128
  return v.toString(16);
@@ -146,18 +142,18 @@ export function isYouTubeUrl(url: string): boolean {
146
142
  */
147
143
  export function extractYouTubeId(url: string): string | null {
148
144
  if (!isYouTubeUrl(url)) return null;
149
-
145
+
150
146
  const patterns = [
151
147
  /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/,
152
148
  /youtube\.com\/.*[?&]v=([^&\n?#]+)/,
153
149
  ];
154
-
150
+
155
151
  for (const pattern of patterns) {
156
152
  const match = url.match(pattern);
157
153
  if (match && match[1]) {
158
154
  return match[1];
159
155
  }
160
156
  }
161
-
157
+
162
158
  return null;
163
159
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * CSV Utility Functions
3
+ */
4
+
5
+ /**
6
+ * Sanitize cell content to prevent CSV injection
7
+ *
8
+ * Replaces newlines and tabs with spaces, escapes double quotes,
9
+ * and prefixes dangerous characters (=, +, -, @) with a single quote
10
+ * to prevent formula injection.
11
+ */
12
+ export function sanitizeCSVCell(cell: any): string {
13
+ const sanitized = String(cell ?? '')
14
+ .replace(/[\r\n\t]/g, ' ')
15
+ .replace(/"/g, '""');
16
+ // Prevent formula injection by prefixing dangerous characters
17
+ const dangerous = /^[=+\-@]/;
18
+ return dangerous.test(sanitized) ? `'${sanitized}` : sanitized;
19
+ }
@@ -1,14 +1,5 @@
1
1
  import { DataTableColumn, ExportFormat } from '../types/components';
2
-
3
- /**
4
- * Sanitize cell content to prevent CSV injection
5
- */
6
- function sanitizeCSVCell(cell: any): string {
7
- const sanitized = String(cell ?? '').replace(/[\r\n\t]/g, ' ').replace(/"/g, '""');
8
- // Prevent formula injection by prefixing dangerous characters
9
- const dangerous = /^[=+\-@]/;
10
- return dangerous.test(sanitized) ? `'${sanitized}` : sanitized;
11
- }
2
+ import { sanitizeCSVCell } from './csv';
12
3
 
13
4
  /**
14
5
  * Export data as CSV
@@ -55,10 +46,7 @@ export function exportToCSV(
55
46
  /**
56
47
  * Export data as JSON
57
48
  */
58
- export function exportToJSON(
59
- data: any[],
60
- filename: string = 'data-table.json'
61
- ): void {
49
+ export function exportToJSON(data: any[], filename: string = 'data-table.json'): void {
62
50
  if (!data.length) return;
63
51
 
64
52
  const jsonContent = JSON.stringify(data, null, 2);
@@ -140,4 +128,3 @@ export function exportData(
140
128
  console.warn(`Unsupported export format: ${format}`);
141
129
  }
142
130
  }
143
-
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Font Preloading Utilities
3
- *
3
+ *
4
4
  * Provides utilities for preloading fonts to improve performance
5
5
  * and prevent Flash of Invisible Text (FOIT).
6
6
  */
@@ -34,10 +34,10 @@ export interface FontPreloadConfig {
34
34
 
35
35
  /**
36
36
  * Creates a preload link element for a font
37
- *
37
+ *
38
38
  * @param config - Font preload configuration
39
39
  * @returns HTML link element for preloading
40
- *
40
+ *
41
41
  * @example
42
42
  * ```tsx
43
43
  * const preloadLink = createFontPreloadLink({
@@ -49,11 +49,7 @@ export interface FontPreloadConfig {
49
49
  * ```
50
50
  */
51
51
  export function createFontPreloadLink(config: FontPreloadConfig): HTMLLinkElement {
52
- const {
53
- path,
54
- format = 'woff2',
55
- crossorigin = 'anonymous',
56
- } = config;
52
+ const { path, format = 'woff2', crossorigin = 'anonymous' } = config;
57
53
 
58
54
  const link = document.createElement('link');
59
55
  link.rel = 'preload';
@@ -67,10 +63,10 @@ export function createFontPreloadLink(config: FontPreloadConfig): HTMLLinkElemen
67
63
 
68
64
  /**
69
65
  * Preloads multiple fonts
70
- *
66
+ *
71
67
  * @param fonts - Array of font configurations to preload
72
68
  * @returns Array of created link elements
73
- *
69
+ *
74
70
  * @example
75
71
  * ```tsx
76
72
  * const links = preloadFonts([
@@ -87,10 +83,10 @@ export function preloadFonts(fonts: FontPreloadConfig[]): HTMLLinkElement[] {
87
83
  /**
88
84
  * Generates preload link HTML tags as strings
89
85
  * Useful for server-side rendering or static HTML generation
90
- *
86
+ *
91
87
  * @param fonts - Array of font configurations
92
88
  * @returns Array of HTML string representations
93
- *
89
+ *
94
90
  * @example
95
91
  * ```tsx
96
92
  * const htmlTags = generateFontPreloadTags([
@@ -100,12 +96,8 @@ export function preloadFonts(fonts: FontPreloadConfig[]): HTMLLinkElement[] {
100
96
  * ```
101
97
  */
102
98
  export function generateFontPreloadTags(fonts: FontPreloadConfig[]): string[] {
103
- return fonts.map((config) => {
104
- const {
105
- path,
106
- format = 'woff2',
107
- crossorigin = 'anonymous',
108
- } = config;
99
+ return fonts.map(config => {
100
+ const { path, format = 'woff2', crossorigin = 'anonymous' } = config;
109
101
 
110
102
  return `<link rel="preload" as="font" href="${path}" type="font/${format}" crossorigin="${crossorigin}">`;
111
103
  });
@@ -145,4 +137,3 @@ export const DEFAULT_ATOMIX_FONTS: FontPreloadConfig[] = [
145
137
  format: 'woff2',
146
138
  },
147
139
  ];
148
-
@@ -35,7 +35,10 @@ export function createPhosphorIcon(name: string, size: number = 16): string {
35
35
  const path = ICON_PATHS[name] || '';
36
36
 
37
37
  if (!path) {
38
- console.warn('Icon not found in icon library:', typeof name === 'string' ? name.replace(/[^a-zA-Z0-9_-]/g, '_') : 'invalid_name');
38
+ console.warn(
39
+ 'Icon not found in icon library:',
40
+ typeof name === 'string' ? name.replace(/[^a-zA-Z0-9_-]/g, '_') : 'invalid_name'
41
+ );
39
42
  }
40
43
 
41
44
  return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" fill="currentColor" viewBox="0 0 256 256">
@@ -16,9 +16,7 @@ export {
16
16
  extractYouTubeId,
17
17
  } from './componentUtils';
18
18
 
19
- export type {
20
- MergePropsOptions,
21
- } from './componentUtils';
19
+ export type { MergePropsOptions } from './componentUtils';
22
20
 
23
21
  export {
24
22
  createFontPreloadLink,
@@ -27,6 +25,4 @@ export {
27
25
  DEFAULT_ATOMIX_FONTS,
28
26
  } from './fontPreloader';
29
27
 
30
- export type {
31
- FontPreloadConfig,
32
- } from './fontPreloader';
28
+ export type { FontPreloadConfig } from './fontPreloader';