@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,4 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
+ import { fn } from '@storybook/test';
2
3
  import { generateUUID } from '../../lib/utils';
3
4
  import { Todo } from './Todo';
4
5
  import { SIZES } from '../../lib/constants/components';
@@ -10,8 +11,71 @@ const meta = {
10
11
  layout: 'centered',
11
12
  docs: {
12
13
  description: {
13
- component:
14
- 'The Todo component provides a complete todo list interface with the ability to add, complete, and manage tasks. It supports multiple sizes, can show or hide completed items, and provides a clean interface for task management. Ideal for task tracking, project management, or any scenario requiring a simple todo list.',
14
+ component: `
15
+ # Todo
16
+
17
+ ## Overview
18
+
19
+ Todo component provides a complete todo list interface with the ability to add, complete, and manage tasks. It supports multiple sizes, can show or hide completed items, and provides a clean interface for task management. Ideal for task tracking, project management, or any scenario requiring a simple todo list.
20
+
21
+ ## Features
22
+
23
+ - Add, complete, and manage tasks
24
+ - Multiple size options
25
+ - Show/hide completed items
26
+ - Clean and intuitive interface
27
+ - Responsive design
28
+ - Task persistence
29
+ - Accessible markup
30
+
31
+ ## Accessibility
32
+
33
+ - Keyboard support: Navigate and interact with todos using keyboard
34
+ - Screen reader: Task status and content announced properly
35
+ - ARIA support: Proper roles and properties for todo components
36
+ - Focus management: Maintains focus on interactive elements
37
+
38
+ ## Usage Examples
39
+
40
+ ### Basic Usage
41
+
42
+ \`\`\`tsx
43
+ <Todo
44
+ items={[
45
+ { id: '1', text: 'Task 1', completed: false },
46
+ { id: '2', text: 'Task 2', completed: true },
47
+ ]}
48
+ title="My Tasks"
49
+ placeholder="Add a new task"
50
+ />
51
+ \`\`\`
52
+
53
+ ### With Configuration
54
+
55
+ \`\`\`tsx
56
+ <Todo
57
+ items={tasks}
58
+ title="Project Tasks"
59
+ placeholder="Add a new task"
60
+ size="lg"
61
+ showCompleted={false}
62
+ />
63
+ \`\`\`
64
+
65
+ ## API Reference
66
+
67
+ ### Props
68
+
69
+ | Prop | Type | Default | Description |
70
+ | ---- | ---- | ------- | ----------- |
71
+ | items | TodoItem[] | [] | Array of todo items |
72
+ | title | string | - | Title of the todo list |
73
+ | size | 'sm' \\| 'md' \\| 'lg' | 'md' | Size of the todo component |
74
+ | placeholder | string | - | Placeholder text for the input field |
75
+ | showCompleted | boolean | true | Whether to show completed items |
76
+ | className | string | - | Additional CSS class names |
77
+ | disabled | boolean | false | Whether the todo list is disabled |
78
+ `,
15
79
  },
16
80
  },
17
81
  },
@@ -20,31 +84,59 @@ const meta = {
20
84
  items: {
21
85
  control: 'object',
22
86
  description: 'Array of todo items',
87
+ table: {
88
+ type: { summary: 'TodoItem[]' },
89
+ defaultValue: { summary: '[]' },
90
+ },
23
91
  },
24
92
  title: {
25
93
  control: 'text',
26
94
  description: 'Title of the todo list',
95
+ table: {
96
+ type: { summary: 'string' },
97
+ defaultValue: { summary: '-' },
98
+ },
27
99
  },
28
100
  size: {
29
101
  control: { type: 'select' },
30
102
  options: SIZES,
31
103
  description: 'Size of the todo component',
104
+ table: {
105
+ type: { summary: '"sm" | "md" | "lg"' },
106
+ defaultValue: { summary: 'md' },
107
+ },
32
108
  },
33
109
  placeholder: {
34
110
  control: 'text',
35
111
  description: 'Placeholder text for the input field',
112
+ table: {
113
+ type: { summary: 'string' },
114
+ defaultValue: { summary: '-' },
115
+ },
36
116
  },
37
117
  showCompleted: {
38
118
  control: 'boolean',
39
119
  description: 'Whether to show completed items',
120
+ table: {
121
+ type: { summary: 'boolean' },
122
+ defaultValue: { summary: true },
123
+ },
40
124
  },
41
125
  className: {
42
126
  control: 'text',
43
127
  description: 'Additional CSS class names',
128
+ table: {
129
+ type: { summary: 'string' },
130
+ defaultValue: { summary: '-' },
131
+ },
44
132
  },
45
133
  disabled: {
46
134
  control: 'boolean',
47
135
  description: 'Whether the todo list is disabled',
136
+ table: {
137
+ type: { summary: 'boolean' },
138
+ defaultValue: { summary: false },
139
+ },
48
140
  },
49
141
  },
50
142
  } satisfies Meta<typeof Todo>;
@@ -52,7 +144,7 @@ const meta = {
52
144
  export default meta;
53
145
  type Story = StoryObj<typeof meta>;
54
146
 
55
- export const Default: Story = {
147
+ export const BasicUsage: Story = {
56
148
  args: {
57
149
  items: [
58
150
  { id: '1', text: 'Learn React', completed: true },
@@ -65,6 +157,13 @@ export const Default: Story = {
65
157
  showCompleted: true,
66
158
  disabled: false,
67
159
  },
160
+ parameters: {
161
+ docs: {
162
+ description: {
163
+ story: 'Basic todo list with sample tasks.',
164
+ },
165
+ },
166
+ },
68
167
  };
69
168
 
70
169
  export const WithManyItems: Story = {
@@ -79,19 +178,56 @@ export const WithManyItems: Story = {
79
178
  title: 'Project Tasks',
80
179
  showCompleted: true,
81
180
  },
181
+ parameters: {
182
+ docs: {
183
+ description: {
184
+ story: 'Todo list with multiple tasks.',
185
+ },
186
+ },
187
+ },
82
188
  };
83
189
 
84
190
  export const Small: Story = {
85
191
  args: {
86
- ...Default.args,
192
+ items: [
193
+ { id: '1', text: 'Learn React', completed: true },
194
+ { id: '2', text: 'Build a todo app', completed: false },
195
+ { id: '3', text: 'Deploy to production', completed: false },
196
+ ],
197
+ title: 'Todo List',
198
+ placeholder: 'Add a new task',
87
199
  size: 'sm',
200
+ showCompleted: true,
201
+ disabled: false,
202
+ },
203
+ parameters: {
204
+ docs: {
205
+ description: {
206
+ story: 'Small-sized todo list.',
207
+ },
208
+ },
88
209
  },
89
210
  };
90
211
 
91
212
  export const Large: Story = {
92
213
  args: {
93
- ...Default.args,
214
+ items: [
215
+ { id: '1', text: 'Learn React', completed: true },
216
+ { id: '2', text: 'Build a todo app', completed: false },
217
+ { id: '3', text: 'Deploy to production', completed: false },
218
+ ],
219
+ title: 'Todo List',
220
+ placeholder: 'Add a new task',
94
221
  size: 'lg',
222
+ showCompleted: true,
223
+ disabled: false,
224
+ },
225
+ parameters: {
226
+ docs: {
227
+ description: {
228
+ story: 'Large-sized todo list.',
229
+ },
230
+ },
95
231
  },
96
232
  };
97
233
 
@@ -102,28 +238,81 @@ export const HideCompleted: Story = {
102
238
  { id: generateUUID(), text: 'Build a todo app', completed: false },
103
239
  { id: generateUUID(), text: 'Deploy to production', completed: false },
104
240
  ],
241
+ title: 'Todo List',
242
+ placeholder: 'Add a new task',
105
243
  showCompleted: false,
106
- title: 'Active Tasks',
244
+ },
245
+ parameters: {
246
+ docs: {
247
+ description: {
248
+ story: 'Todo list that hides completed items.',
249
+ },
250
+ },
107
251
  },
108
252
  };
109
253
 
110
254
  export const Disabled: Story = {
111
255
  args: {
112
- ...Default.args,
256
+ items: [
257
+ { id: '1', text: 'Learn React', completed: true },
258
+ { id: '2', text: 'Build a todo app', completed: false },
259
+ { id: '3', text: 'Deploy to production', completed: false },
260
+ ],
261
+ title: 'Todo List',
262
+ placeholder: 'Add a new task',
263
+ size: 'md',
264
+ showCompleted: true,
113
265
  disabled: true,
114
266
  },
267
+ parameters: {
268
+ docs: {
269
+ description: {
270
+ story: 'Disabled todo list.',
271
+ },
272
+ },
273
+ },
115
274
  };
116
275
 
117
276
  export const CustomTitle: Story = {
118
277
  args: {
119
- ...Default.args,
278
+ items: [
279
+ { id: '1', text: 'Learn React', completed: true },
280
+ { id: '2', text: 'Build a todo app', completed: false },
281
+ { id: '3', text: 'Deploy to production', completed: false },
282
+ ],
120
283
  title: 'My Custom Todo List',
284
+ placeholder: 'Add a new task',
285
+ size: 'md',
286
+ showCompleted: true,
287
+ disabled: false,
288
+ },
289
+ parameters: {
290
+ docs: {
291
+ description: {
292
+ story: 'Todo list with a custom title.',
293
+ },
294
+ },
121
295
  },
122
296
  };
123
297
 
124
298
  export const NoTitle: Story = {
125
299
  args: {
126
- ...Default.args,
300
+ items: [
301
+ { id: '1', text: 'Learn React', completed: true },
302
+ { id: '2', text: 'Build a todo app', completed: false },
303
+ { id: '3', text: 'Deploy to production', completed: false },
304
+ ],
127
305
  title: '',
306
+ placeholder: 'Add a new task',
307
+ size: 'md',
308
+ showCompleted: true,
309
+ disabled: false,
310
+ },
311
+ parameters: {
312
+ docs: {
313
+ description: {
314
+ story: 'Todo list without a title.',
315
+ },
316
+ },
128
317
  },
129
318
  };
@@ -1,16 +1,70 @@
1
1
  import React from 'react';
2
2
  import type { Meta, StoryObj } from '@storybook/react';
3
+ import { fn } from '@storybook/test';
3
4
  import { Toggle } from './Toggle';
4
5
 
5
- const meta = {
6
+ const meta: Meta<typeof Toggle> = {
6
7
  title: 'Components/Toggle',
7
8
  component: Toggle,
8
9
  parameters: {
9
10
  layout: 'centered',
10
11
  docs: {
11
12
  description: {
12
- component:
13
- 'The Toggle component provides an on/off switch control for binary choices. It offers a more visually distinct alternative to checkboxes for settings, preferences, or feature toggles. Toggles support disabled states and can include glass morphism effects.',
13
+ component: `
14
+ # Toggle
15
+
16
+ ## Overview
17
+
18
+ Toggle provides an on/off switch control for binary choices. It offers a more visually distinct alternative to checkboxes for settings, preferences, or feature toggles. Toggles support disabled states and can include glass morphism effects.
19
+
20
+ ## Features
21
+
22
+ - On/off state control
23
+ - Uncontrolled and controlled usage
24
+ - Disabled state
25
+ - Glass morphism effect
26
+ - Accessible design
27
+ - Responsive behavior
28
+
29
+ ## Accessibility
30
+
31
+ - Keyboard support: Toggle with Space or Enter key
32
+ - Screen reader: State changes announced appropriately
33
+ - ARIA support: Proper roles and properties for toggle components
34
+ - Focus management: Visible focus indicators maintained
35
+
36
+ ## Usage Examples
37
+
38
+ ### Basic Usage
39
+
40
+ \`\`\`tsx
41
+ <Toggle
42
+ defaultChecked={false}
43
+ onChange={(checked) => console.log(checked)}
44
+ />
45
+ \`\`\`
46
+
47
+ ### Controlled Usage
48
+
49
+ \`\`\`tsx
50
+ <Toggle
51
+ checked={isEnabled}
52
+ onChange={setEnabled}
53
+ />
54
+ \`\`\`
55
+
56
+ ## API Reference
57
+
58
+ ### Props
59
+
60
+ | Prop | Type | Default | Description |
61
+ | ---- | ---- | ------- | ----------- |
62
+ | defaultChecked | boolean | false | Whether the toggle is initially on (uncontrolled) |
63
+ | checked | boolean | - | Whether the toggle is on (controlled) |
64
+ | onChange | (checked: boolean) => void | - | Callback when the toggle state changes |
65
+ | disabled | boolean | false | Whether the toggle is disabled |
66
+ | glass | boolean | false | Enable glass morphism effect |
67
+ `,
14
68
  },
15
69
  },
16
70
  },
@@ -19,11 +73,18 @@ const meta = {
19
73
  defaultChecked: {
20
74
  control: { type: 'boolean' },
21
75
  description: 'Whether the toggle is initially on (uncontrolled)',
22
- defaultValue: false,
76
+ table: {
77
+ type: { summary: 'boolean' },
78
+ defaultValue: { summary: 'false' },
79
+ },
23
80
  },
24
81
  checked: {
25
82
  control: { type: 'boolean' },
26
83
  description: 'Whether the toggle is on (controlled)',
84
+ table: {
85
+ type: { summary: 'boolean' },
86
+ defaultValue: { summary: '-' },
87
+ },
27
88
  },
28
89
  onChange: {
29
90
  action: 'changed',
@@ -32,19 +93,26 @@ const meta = {
32
93
  disabled: {
33
94
  control: { type: 'boolean' },
34
95
  description: 'Whether the toggle is disabled',
35
- defaultValue: false,
96
+ table: {
97
+ type: { summary: 'boolean' },
98
+ defaultValue: { summary: 'false' },
99
+ },
36
100
  },
37
101
  glass: {
38
102
  control: 'boolean',
39
103
  description: 'Enable glass morphism effect',
104
+ table: {
105
+ type: { summary: 'boolean' },
106
+ defaultValue: { summary: 'false' },
107
+ },
40
108
  },
41
109
  },
42
- } satisfies Meta<typeof Toggle>;
110
+ };
43
111
 
44
112
  export default meta;
45
113
  type Story = StoryObj<typeof meta>;
46
114
 
47
- export const Default: Story = {
115
+ export const BasicUsage: Story = {
48
116
  render: args => (
49
117
  <div style={{ display: 'flex', justifyContent: 'center', padding: '30px' }}>
50
118
  <Toggle {...args} />
@@ -54,11 +122,15 @@ export const Default: Story = {
54
122
  defaultChecked: false,
55
123
  disabled: false,
56
124
  },
125
+ parameters: {
126
+ docs: {
127
+ description: {
128
+ story: 'Basic toggle with default settings.',
129
+ },
130
+ },
131
+ },
57
132
  };
58
133
 
59
- /**
60
- * Controlled Toggle using checked and onChange.
61
- */
62
134
  export const Controlled: Story = {
63
135
  render: () => {
64
136
  const [isChecked, setIsChecked] = React.useState(false);
@@ -69,6 +141,13 @@ export const Controlled: Story = {
69
141
  </div>
70
142
  );
71
143
  },
144
+ parameters: {
145
+ docs: {
146
+ description: {
147
+ story: 'Controlled toggle using checked and onChange.',
148
+ },
149
+ },
150
+ },
72
151
  };
73
152
 
74
153
  export const InitiallyOn: Story = {
@@ -81,42 +160,52 @@ export const InitiallyOn: Story = {
81
160
  defaultChecked: true,
82
161
  disabled: false,
83
162
  },
84
- };
85
-
86
- export const Disabled: Story = {
87
- render: args => (
88
- <div style={{ display: 'flex', justifyContent: 'center', padding: '30px' }}>
89
- <Toggle {...args} />
90
- </div>
91
- ),
92
- args: {
93
- defaultChecked: false,
94
- disabled: true,
163
+ parameters: {
164
+ docs: {
165
+ description: {
166
+ story: 'Toggle that starts in the "on" position.',
167
+ },
168
+ },
95
169
  },
96
170
  };
97
171
 
98
- export const DisabledOn: Story = {
99
- render: args => (
100
- <div style={{ display: 'flex', justifyContent: 'center', padding: '30px' }}>
101
- <Toggle {...args} />
172
+ export const DisabledStates: Story = {
173
+ render: () => (
174
+ <div
175
+ style={{
176
+ display: 'flex',
177
+ flexDirection: 'column',
178
+ alignItems: 'center',
179
+ gap: '2rem',
180
+ padding: '30px',
181
+ }}
182
+ >
183
+ <div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>
184
+ <Toggle disabled={true} checked={false} />
185
+ <span>Disabled Off</span>
186
+ </div>
187
+ <div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>
188
+ <Toggle disabled={true} checked={true} />
189
+ <span>Disabled On</span>
190
+ </div>
102
191
  </div>
103
192
  ),
104
- args: {
105
- defaultChecked: true,
106
- disabled: true,
193
+ parameters: {
194
+ docs: {
195
+ description: {
196
+ story: 'Toggle in both disabled states (off and on).',
197
+ },
198
+ },
107
199
  },
108
200
  };
109
201
 
110
- export const Glass: Story = {
111
- args: {
112
- defaultChecked: false,
113
- disabled: false,
114
- glass: true,
115
- },
116
- render: (args: any) => (
202
+ export const WithGlassEffect: Story = {
203
+ render: args => (
117
204
  <div
118
205
  style={{
119
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
206
+ background: 'url(https://images.unsplash.com/photo-1579546929518-9e396f3cc809)',
207
+ backgroundSize: 'cover',
208
+ backgroundPosition: 'center',
120
209
  padding: '3rem',
121
210
  borderRadius: '12px',
122
211
  minHeight: '200px',
@@ -128,6 +217,18 @@ export const Glass: Story = {
128
217
  <Toggle {...args} />
129
218
  </div>
130
219
  ),
220
+ args: {
221
+ defaultChecked: false,
222
+ disabled: false,
223
+ glass: true,
224
+ },
225
+ parameters: {
226
+ docs: {
227
+ description: {
228
+ story: 'Toggle with glass morphism effect applied.',
229
+ },
230
+ },
231
+ },
131
232
  };
132
233
 
133
234
  export const GlassOn: Story = {