@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,149 +1,171 @@
1
1
  /**
2
- * Composable Templates
3
- * Templates for custom hooks and composables
2
+ * Composable Hook Templates
3
+ * Templates for React custom hooks generation
4
4
  */
5
5
 
6
6
  /**
7
- * Custom hook template for React components
7
+ * Default composable hook template that matches existing patterns
8
8
  */
9
- export const hookTemplate = (name) => `import { useState, useCallback, useRef, useEffect } from 'react';
10
- import type { ${name}Props } from '../../lib/types/components';
9
+ export const composableTemplate = (name) => {
10
+ const componentPrefix = name.toLowerCase().replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');
11
+
12
+ return `import { ${name}Props } from '../types/components';
13
+ import { ${name.toUpperCase()} } from '../constants/components';
11
14
 
12
15
  /**
13
- * Custom hook for ${name.toLowerCase()} component
14
- * Provides controlled/uncontrolled state management and accessibility
16
+ * ${name} state and functionality
17
+ * @param initialProps - Initial ${name.toLowerCase()} properties
18
+ * @returns ${name} state and methods
15
19
  */
16
20
  export function use${name}(initialProps?: Partial<${name}Props>) {
17
- const {
18
- isOpen: controlledIsOpen,
19
- defaultIsOpen = false,
20
- onToggle,
21
- ...props
22
- } = initialProps || {};
23
-
24
- // State management for controlled/uncontrolled pattern
25
- const [internalIsOpen, setInternalIsOpen] = useState(defaultIsOpen);
26
- const isControlled = typeof controlledIsOpen === 'boolean';
27
- const isOpen = isControlled ? controlledIsOpen : internalIsOpen;
28
-
29
- // Refs for DOM elements
30
- const triggerRef = useRef<HTMLButtonElement>(null);
31
- const panelRef = useRef<HTMLDivElement>(null);
21
+ // Default ${name.toLowerCase()} properties
22
+ const defaultProps: Partial<${name}Props> = {
23
+ variant: 'primary',
24
+ size: 'md',
25
+ disabled: false,
26
+ ...initialProps,
27
+ };
32
28
 
33
- // Toggle function with controlled support
34
- const toggle = useCallback(() => {
35
- if (isControlled) {
36
- onToggle?.(!isOpen);
37
- } else {
38
- setInternalIsOpen(!isOpen);
39
- onToggle?.(!isOpen);
40
- }
41
- }, [isOpen, isControlled, onToggle]);
42
-
43
- // Open function
44
- const open = useCallback(() => {
45
- if (isControlled) {
46
- onToggle?.(true);
47
- } else {
48
- setInternalIsOpen(true);
49
- onToggle?.(true);
50
- }
51
- }, [isControlled, onToggle]);
52
-
53
- // Close function
54
- const close = useCallback(() => {
55
- if (isControlled) {
56
- onToggle?.(false);
57
- } else {
58
- setInternalIsOpen(false);
59
- onToggle?.(false);
60
- }
61
- }, [isControlled, onToggle]);
62
-
63
- // Keyboard navigation
64
- const handleKeyDown = useCallback((event: KeyboardEvent) => {
65
- switch (event.key) {
66
- case 'Enter':
67
- case ' ':
68
- event.preventDefault();
69
- toggle();
70
- break;
71
- case 'Escape':
72
- if (isOpen) {
73
- close();
74
- triggerRef.current?.focus();
75
- }
76
- break;
77
- }
78
- }, [isOpen, toggle, close]);
79
-
80
- // Accessibility helpers
81
- const getTriggerProps = useCallback(() => ({
82
- ref: triggerRef,
83
- 'aria-expanded': isOpen,
84
- 'aria-controls': panelRef.current?.id,
85
- onKeyDown: handleKeyDown,
86
- onClick: toggle,
87
- }), [isOpen, handleKeyDown, toggle]);
88
-
89
- const getPanelProps = useCallback(() => ({
90
- ref: panelRef,
91
- 'aria-hidden': !isOpen,
92
- role: 'region',
93
- }), [isOpen]);
94
-
95
- const getHeaderProps = useCallback(() => ({
96
- role: 'heading',
97
- 'aria-level': 3,
98
- }), []);
99
-
100
- const getContentProps = useCallback(() => ({
101
- // Content-specific props
102
- }), []);
103
-
104
- // State object for external access
105
- const state = {
106
- isOpen,
107
- isControlled,
29
+ /**
30
+ * Generate ${name.toLowerCase()} class based on properties
31
+ * @param props - ${name} properties
32
+ * @returns Class string
33
+ */
34
+ const generateClassNames = (props: Partial<${name}Props> = {}): string => {
35
+ const {
36
+ variant = defaultProps.variant,
37
+ size = defaultProps.size,
38
+ disabled = defaultProps.disabled,
39
+ glass = defaultProps.glass,
40
+ className = '',
41
+ } = props;
42
+
43
+ const sizeClass = size === 'md' ? '' : \`c-${componentPrefix}--\${size}\`;
44
+ const disabledClass = disabled ? 'c-${componentPrefix}--disabled' : '';
45
+ const glassClass = glass ? 'c-${componentPrefix}--glass' : '';
46
+
47
+ return [
48
+ ${name.toUpperCase()}.BASE_CLASS,
49
+ \`c-${componentPrefix}--\${variant}\`,
50
+ sizeClass,
51
+ disabledClass,
52
+ glassClass,
53
+ className,
54
+ ]
55
+ .filter(Boolean)
56
+ .join(' ');
108
57
  };
109
58
 
110
- // Set controlled state from external updates
111
- const setIsOpen = useCallback((newIsOpen: boolean) => {
112
- if (!isControlled) {
113
- setInternalIsOpen(newIsOpen);
114
- }
115
- }, [isControlled]);
59
+ /**
60
+ * Handle ${name.toLowerCase()} click with disabled check
61
+ * @param handler - Click handler function
62
+ * @returns Function that respects disabled state
63
+ */
64
+ const handleClick = (handler?: (event: React.MouseEvent<HTMLDivElement>) => void) => {
65
+ return (event: React.MouseEvent<HTMLDivElement>) => {
66
+ if (!defaultProps.disabled && handler) {
67
+ handler(event);
68
+ }
69
+ };
70
+ };
116
71
 
117
72
  return {
118
- // State
119
- state,
120
- isOpen,
121
- isControlled,
122
-
123
- // Actions
124
- toggle,
125
- open,
126
- close,
127
- setIsOpen,
128
-
129
- // Props helpers
130
- getTriggerProps,
131
- getPanelProps,
132
- getHeaderProps,
133
- getContentProps,
134
-
135
- // Refs
136
- triggerRef,
137
- panelRef,
73
+ defaultProps,
74
+ generateClassNames,
75
+ handleClick,
138
76
  };
139
77
  }
78
+ `;
79
+ };
80
+
81
+ /**
82
+ * Simple composable template
83
+ */
84
+ export const simpleComposableTemplate = (name) => `import { useState } from 'react';
85
+ import type { ${name}Props } from '../types/components';
86
+
87
+ export function use${name}(props: ${name}Props) {
88
+ const [isReady, setIsReady] = useState(false);
89
+
90
+ useEffect(() => {
91
+ setIsReady(true);
92
+ }, []);
93
+
94
+ const generateClassNames = (baseClassName = '') => {
95
+ return \`c-${name.toLowerCase()} \${baseClassName}\`.trim();
96
+ };
140
97
 
141
- export default use${name};
98
+ return {
99
+ isReady,
100
+ generateClassNames,
101
+ };
102
+ }
142
103
  `;
143
104
 
144
105
  /**
145
- * Composable templates object
106
+ * Complex composable template
146
107
  */
108
+ export const complexComposableTemplate = (name) => `import { useState, useEffect, useRef } from 'react';
109
+ import { ${name.toUpperCase()} } from '../constants/components';
110
+ import type { ${name}Props, ${name}State, ElementRefs } from '../types/components';
111
+
112
+ interface Use${name}Result {
113
+ state: ${name}State;
114
+ refs: ElementRefs;
115
+ methods: {
116
+ // Define methods for complex interactions
117
+ updateState: (newState: Partial<${name}State>) => void;
118
+ reset: () => void;
119
+ };
120
+ generateClassNames: (baseClassName?: string) => string;
121
+ }
122
+
123
+ export function use${name}(
124
+ initialProps?: Partial<${name}Props>
125
+ ): Use${name}Result {
126
+ const defaultProps: Partial<${name}Props> = {
127
+ disabled: false,
128
+ ...initialProps,
129
+ };
130
+
131
+ const [state, setState] = useState<${name}State>({
132
+ // Complex state definition
133
+ });
134
+
135
+ const panelRef = useRef<HTMLDivElement>(null);
136
+ const contentRef = useRef<HTMLDivElement>(null);
137
+ const buttonRef = useRef<HTMLButtonElement>(null);
138
+
139
+ const updateState = (newState: Partial<${name}State>) => {
140
+ setState(prev => ({ ...prev, ...newState }));
141
+ };
142
+
143
+ const reset = () => {
144
+ // Reset to initial state
145
+ };
146
+
147
+ const generateClassNames = (baseClassName = ''): string => {
148
+ const baseClasses = [
149
+ ${name.toUpperCase()}.SELECTORS.${name.toUpperCase()}.replace('.', ''),
150
+ state.isOpen ? ${name.toUpperCase()}.CLASSES.IS_OPEN : '',
151
+ defaultProps.disabled ? ${name.toUpperCase()}.CLASSES.IS_DISABLED : '',
152
+ baseClassName
153
+ ].filter(Boolean).join(' ');
154
+
155
+ return baseClasses;
156
+ };
157
+
158
+ return {
159
+ state,
160
+ refs: { panelRef, contentRef, buttonRef },
161
+ methods: { updateState, reset },
162
+ generateClassNames,
163
+ };
164
+ }
165
+ `;
166
+
147
167
  export const composableTemplates = {
148
- hook: hookTemplate,
168
+ useHook: composableTemplate,
169
+ simpleHook: simpleComposableTemplate,
170
+ complexHook: complexComposableTemplate,
149
171
  };
@@ -13,6 +13,7 @@ import { composableTemplates } from './composable-templates.js';
13
13
  import * as tokenTemplates from './token-templates.js';
14
14
  import { projectTemplates } from './project-templates.js';
15
15
  import { configTemplates } from './config-templates.js';
16
+ import { commonTemplates } from './common-templates.js';
16
17
 
17
18
  /**
18
19
  * Main templates object that maintains backward compatibility
@@ -20,27 +21,33 @@ import { configTemplates } from './config-templates.js';
20
21
  */
21
22
  export const componentTemplates = {
22
23
  react: {
23
- ...reactTemplates,
24
- ...storybookTemplates,
25
- ...testingTemplates,
26
- ...scssTemplates,
27
- ...typesTemplates,
24
+ component: reactTemplates.component,
25
+ simple: reactTemplates.simple,
26
+ medium: reactTemplates.medium,
27
+ complex: reactTemplates.complex,
28
+ index: reactTemplates.index,
29
+ story: storybookTemplates.story,
30
+ test: testingTemplates.test,
31
+ scss: scssTemplates.full,
32
+ settings: scssTemplates.settings,
33
+ componentStyles: scssTemplates.component,
34
+ types: typesTemplates.types,
35
+ constants: typesTemplates.constants,
28
36
  },
29
37
  composable: composableTemplates,
38
+ storybook: storybookTemplates,
39
+ testing: testingTemplates,
40
+ scss: scssTemplates,
41
+ types: typesTemplates,
30
42
  };
31
43
 
32
- // Re-export token generation functions
44
+ // Export everything for flexibility
33
45
  export {
34
- generateColorTokens,
35
- generateSpacingTokens,
36
- generateTypographyTokens,
37
- generateShadowTokens,
38
- generateRadiusTokens,
39
- generateAnimationTokens,
40
- } from './token-templates.js';
41
-
42
- // Re-export project and config templates
43
- export { projectTemplates, configTemplates };
46
+ tokenTemplates,
47
+ projectTemplates,
48
+ configTemplates,
49
+ commonTemplates
50
+ };
44
51
 
45
52
  /**
46
53
  * Get template by name and type
@@ -3,13 +3,35 @@
3
3
  * Templates for different project types and configurations
4
4
  */
5
5
 
6
+ import { commonTemplates } from './common-templates.js';
7
+
6
8
  /**
7
9
  * React project templates
8
10
  */
9
11
  export const reactProjectTemplates = {
10
12
  dependencies: ['react', 'react-dom'],
11
- devDependencies: ['@vitejs/plugin-react', 'vite', 'typescript'],
13
+ devDependencies: ['@vitejs/plugin-react', 'vite', 'typescript', '@types/react', '@types/react-dom', 'sass'],
12
14
  files: {
15
+ // TypeScript Configuration
16
+ 'tsconfig.json': commonTemplates.typescript.react,
17
+ 'tsconfig.node.json': commonTemplates.typescript.reactNode,
18
+
19
+ // Git Configuration
20
+ '.gitignore': commonTemplates.git.gitignore,
21
+ '.gitattributes': commonTemplates.git.gitattributes,
22
+
23
+ // Code Quality
24
+ '.prettierrc': commonTemplates.prettier.prettierrc,
25
+ '.prettierignore': commonTemplates.prettier.prettierignore,
26
+ '.eslintrc.cjs': commonTemplates.eslint.react,
27
+
28
+ // Environment
29
+ '.env.example': commonTemplates.env,
30
+
31
+ // Vite Environment Types
32
+ 'src/vite-env.d.ts': commonTemplates.viteEnv,
33
+
34
+ // Main Application Files
13
35
  'src/App.tsx': `import React from 'react';
14
36
  import './App.css';
15
37
 
@@ -27,22 +49,19 @@ function App() {
27
49
  }
28
50
 
29
51
  export default App;`,
52
+
30
53
  'src/main.tsx': `import React from 'react';
31
54
  import ReactDOM from 'react-dom/client';
32
55
  import App from './App';
56
+ import './styles/index.scss';
33
57
 
34
58
  ReactDOM.createRoot(document.getElementById('root')!).render(
35
59
  <React.StrictMode>
36
60
  <App />
37
61
  </React.StrictMode>,
38
62
  );`,
39
- 'src/App.css': `/* Import Atomix styles */
40
- @use '@shohojdhara/atomix/scss/settings' with (
41
- // Your custom theme overrides here
42
- );
43
- @use '@shohojdhara/atomix/scss/components';
44
-
45
- .App {
63
+
64
+ 'src/App.css': `.App {
46
65
  text-align: center;
47
66
  }
48
67
 
@@ -57,6 +76,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
57
76
  justify-content: center;
58
77
  font-size: calc(10px + 2vmin);
59
78
  }`,
79
+
60
80
  'index.html': `<!DOCTYPE html>
61
81
  <html lang="en">
62
82
  <head>
@@ -70,11 +90,21 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
70
90
  <script type="module" src="/src/main.tsx"></script>
71
91
  </body>
72
92
  </html>`,
93
+
73
94
  'vite.config.ts': `import { defineConfig } from 'vite';
74
95
  import react from '@vitejs/plugin-react';
96
+ import { resolve } from 'path';
75
97
 
76
98
  export default defineConfig({
77
99
  plugins: [react()],
100
+ resolve: {
101
+ alias: {
102
+ '@': resolve(__dirname, './src'),
103
+ '@components': resolve(__dirname, './src/components'),
104
+ '@lib': resolve(__dirname, './src/lib'),
105
+ '@styles': resolve(__dirname, './src/styles'),
106
+ },
107
+ },
78
108
  css: {
79
109
  preprocessorOptions: {
80
110
  scss: {
@@ -82,7 +112,28 @@ export default defineConfig({
82
112
  }
83
113
  }
84
114
  }
85
- });`
115
+ });`,
116
+
117
+ // ITCSS Structure
118
+ 'src/styles/index.scss': commonTemplates.itcss.main,
119
+ 'src/styles/01-settings/_index.scss': commonTemplates.itcss.settings,
120
+ 'src/styles/02-tools/_index.scss': commonTemplates.itcss.tools,
121
+ 'src/styles/03-generic/_index.scss': commonTemplates.itcss.generic,
122
+ 'src/styles/04-elements/_index.scss': commonTemplates.itcss.elements,
123
+ 'src/styles/05-objects/_index.scss': commonTemplates.itcss.objects,
124
+ 'src/styles/06-components/_index.scss': commonTemplates.itcss.components,
125
+ 'src/styles/99-utilities/_index.scss': commonTemplates.itcss.utilities,
126
+
127
+ // Library Structure
128
+ 'src/lib/types/index.ts': commonTemplates.lib.types,
129
+ 'src/lib/types/components.ts': `// Component type definitions\n`,
130
+ 'src/lib/constants/index.ts': commonTemplates.lib.constants,
131
+ 'src/lib/composables/index.ts': commonTemplates.lib.composables,
132
+ 'src/lib/utils/index.ts': commonTemplates.lib.utils,
133
+
134
+ // Placeholder files
135
+ 'src/components/.gitkeep': '',
136
+ 'src/assets/.gitkeep': '',
86
137
  }
87
138
  };
88
139
 
@@ -91,14 +142,31 @@ export default defineConfig({
91
142
  */
92
143
  export const nextjsProjectTemplates = {
93
144
  dependencies: ['next', 'react', 'react-dom'],
94
- devDependencies: ['typescript', '@types/node', '@types/react', '@types/react-dom', 'sass'],
145
+ devDependencies: ['typescript', '@types/node', '@types/react', '@types/react-dom', 'sass', 'eslint', 'eslint-config-next'],
95
146
  files: {
147
+ // TypeScript Configuration
148
+ 'tsconfig.json': commonTemplates.typescript.nextjs,
149
+
150
+ // Git Configuration
151
+ '.gitignore': commonTemplates.git.gitignore,
152
+ '.gitattributes': commonTemplates.git.gitattributes,
153
+
154
+ // Code Quality
155
+ '.prettierrc': commonTemplates.prettier.prettierrc,
156
+ '.prettierignore': commonTemplates.prettier.prettierignore,
157
+ '.eslintrc.json': commonTemplates.eslint.nextjs,
158
+
159
+ // Environment
160
+ '.env.example': commonTemplates.env,
161
+
162
+ // Next.js Pages
96
163
  'src/pages/_app.tsx': `import '../styles/globals.scss';
97
164
  import type { AppProps } from 'next/app';
98
165
 
99
166
  export default function App({ Component, pageProps }: AppProps) {
100
167
  return <Component {...pageProps} />;
101
168
  }`,
169
+
102
170
  'src/pages/index.tsx': `import Head from 'next/head';
103
171
 
104
172
  export default function Home() {
@@ -116,11 +184,8 @@ export default function Home() {
116
184
  </>
117
185
  );
118
186
  }`,
119
- 'src/styles/globals.scss': `/* Import Atomix styles */
120
- @use '@shohojdhara/atomix/scss/settings' with (
121
- // Your custom theme overrides here
122
- );
123
- @use '@shohojdhara/atomix/scss/components';
187
+
188
+ 'src/styles/globals.scss': `@use './index.scss';
124
189
 
125
190
  html,
126
191
  body {
@@ -134,6 +199,7 @@ main {
134
199
  padding: 2rem;
135
200
  text-align: center;
136
201
  }`,
202
+
137
203
  'next.config.js': `/** @type {import('next').NextConfig} */
138
204
  const nextConfig = {
139
205
  reactStrictMode: true,
@@ -142,7 +208,27 @@ const nextConfig = {
142
208
  },
143
209
  };
144
210
 
145
- module.exports = nextConfig;`
211
+ module.exports = nextConfig;`,
212
+
213
+ // ITCSS Structure
214
+ 'src/styles/index.scss': commonTemplates.itcss.main,
215
+ 'src/styles/01-settings/_index.scss': commonTemplates.itcss.settings,
216
+ 'src/styles/02-tools/_index.scss': commonTemplates.itcss.tools,
217
+ 'src/styles/03-generic/_index.scss': commonTemplates.itcss.generic,
218
+ 'src/styles/04-elements/_index.scss': commonTemplates.itcss.elements,
219
+ 'src/styles/05-objects/_index.scss': commonTemplates.itcss.objects,
220
+ 'src/styles/06-components/_index.scss': commonTemplates.itcss.components,
221
+ 'src/styles/99-utilities/_index.scss': commonTemplates.itcss.utilities,
222
+
223
+ // Library Structure
224
+ 'src/lib/types/index.ts': commonTemplates.lib.types,
225
+ 'src/lib/types/components.ts': `// Component type definitions\n`,
226
+ 'src/lib/constants/index.ts': commonTemplates.lib.constants,
227
+ 'src/lib/utils/index.ts': commonTemplates.lib.utils,
228
+
229
+ // Placeholder files
230
+ 'src/components/.gitkeep': '',
231
+ 'src/public/.gitkeep': '',
146
232
  }
147
233
  };
148
234
 
@@ -151,8 +237,26 @@ module.exports = nextConfig;`
151
237
  */
152
238
  export const vanillaProjectTemplates = {
153
239
  dependencies: [],
154
- devDependencies: ['vite', 'typescript'],
240
+ devDependencies: ['vite', 'typescript', 'sass'],
155
241
  files: {
242
+ // TypeScript Configuration
243
+ 'tsconfig.json': commonTemplates.typescript.vanilla,
244
+
245
+ // Git Configuration
246
+ '.gitignore': commonTemplates.git.gitignore,
247
+ '.gitattributes': commonTemplates.git.gitattributes,
248
+
249
+ // Code Quality
250
+ '.prettierrc': commonTemplates.prettier.prettierrc,
251
+ '.prettierignore': commonTemplates.prettier.prettierignore,
252
+
253
+ // Environment
254
+ '.env.example': commonTemplates.env,
255
+
256
+ // Vite Environment Types
257
+ 'src/vite-env.d.ts': commonTemplates.viteEnv,
258
+
259
+ // Main Application Files
156
260
  'index.html': `<!DOCTYPE html>
157
261
  <html lang="en">
158
262
  <head>
@@ -171,14 +275,12 @@ export const vanillaProjectTemplates = {
171
275
  <script type="module" src="/src/main.ts"></script>
172
276
  </body>
173
277
  </html>`,
278
+
174
279
  'src/main.ts': `import './styles/main.scss';
175
280
 
176
281
  console.log('Atomix Vanilla JavaScript App Initialized');`,
177
- 'src/styles/main.scss': `/* Import Atomix styles */
178
- @use '@shohojdhara/atomix/scss/settings' with (
179
- // Your custom theme overrides here
180
- );
181
- @use '@shohojdhara/atomix/scss/components';
282
+
283
+ 'src/styles/main.scss': `@use './index.scss';
182
284
 
183
285
  #app {
184
286
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
@@ -190,9 +292,18 @@ header {
190
292
  padding: 2rem;
191
293
  border-bottom: 1px solid #dee2e6;
192
294
  }`,
295
+
193
296
  'vite.config.ts': `import { defineConfig } from 'vite';
297
+ import { resolve } from 'path';
194
298
 
195
299
  export default defineConfig({
300
+ resolve: {
301
+ alias: {
302
+ '@': resolve(__dirname, './src'),
303
+ '@lib': resolve(__dirname, './src/lib'),
304
+ '@styles': resolve(__dirname, './src/styles'),
305
+ },
306
+ },
196
307
  css: {
197
308
  preprocessorOptions: {
198
309
  scss: {
@@ -200,7 +311,24 @@ export default defineConfig({
200
311
  }
201
312
  }
202
313
  }
203
- });`
314
+ });`,
315
+
316
+ // ITCSS Structure
317
+ 'src/styles/index.scss': commonTemplates.itcss.main,
318
+ 'src/styles/01-settings/_index.scss': commonTemplates.itcss.settings,
319
+ 'src/styles/02-tools/_index.scss': commonTemplates.itcss.tools,
320
+ 'src/styles/03-generic/_index.scss': commonTemplates.itcss.generic,
321
+ 'src/styles/04-elements/_index.scss': commonTemplates.itcss.elements,
322
+ 'src/styles/05-objects/_index.scss': commonTemplates.itcss.objects,
323
+ 'src/styles/06-components/_index.scss': commonTemplates.itcss.components,
324
+ 'src/styles/99-utilities/_index.scss': commonTemplates.itcss.utilities,
325
+
326
+ // Library Structure
327
+ 'src/lib/types/index.ts': commonTemplates.lib.types,
328
+ 'src/lib/utils/index.ts': commonTemplates.lib.utils,
329
+
330
+ // Placeholder files
331
+ 'src/assets/.gitkeep': '',
204
332
  }
205
333
  };
206
334