@widgetic/design-system 0.5.22 → 0.5.23

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 (246) hide show
  1. package/README.md +2 -0
  2. package/dist/components/CopyableHeader.svelte +260 -448
  3. package/dist/components/CopyableHeader.svelte.d.ts +8 -5
  4. package/dist/components/EmptyState.svelte +100 -128
  5. package/dist/components/EmptyState.svelte.d.ts +16 -19
  6. package/dist/components/GenerateLoader.svelte +17 -10
  7. package/dist/components/PasswordInput.svelte +41 -44
  8. package/dist/components/PasswordInput.svelte.d.ts +2 -0
  9. package/dist/components/ThumbHashImage.svelte +117 -119
  10. package/dist/components/WScrollArea.svelte +47 -41
  11. package/dist/components/chat/ActivityRow.svelte +115 -0
  12. package/dist/components/chat/ActivityRow.svelte.d.ts +18 -0
  13. package/dist/components/chat/ChatHeader.svelte +114 -0
  14. package/dist/components/chat/ChatHeader.svelte.d.ts +26 -0
  15. package/dist/components/chat/Composer.svelte +172 -0
  16. package/dist/components/chat/Composer.svelte.d.ts +27 -0
  17. package/dist/components/chat/Message.svelte +158 -0
  18. package/dist/components/chat/Message.svelte.d.ts +28 -0
  19. package/dist/components/chat/OptionRow.svelte +59 -0
  20. package/dist/components/chat/OptionRow.svelte.d.ts +14 -0
  21. package/dist/components/chat/PlanCard.svelte +220 -0
  22. package/dist/components/chat/PlanCard.svelte.d.ts +34 -0
  23. package/dist/components/chat/QuestionCard.svelte +265 -0
  24. package/dist/components/chat/QuestionCard.svelte.d.ts +38 -0
  25. package/dist/components/chat/ScrollToBottom.svelte +51 -0
  26. package/dist/components/chat/ScrollToBottom.svelte.d.ts +11 -0
  27. package/dist/components/chat/SuggestionCard.svelte +79 -0
  28. package/dist/components/chat/SuggestionCard.svelte.d.ts +20 -0
  29. package/dist/components/chat/TaskRow.svelte +59 -0
  30. package/dist/components/chat/TaskRow.svelte.d.ts +11 -0
  31. package/dist/components/chat/composerLogic.d.ts +16 -0
  32. package/dist/components/chat/composerLogic.js +29 -0
  33. package/dist/components/chat/index.d.ts +16 -0
  34. package/dist/components/chat/index.js +16 -0
  35. package/dist/components/chat/questionCardLogic.d.ts +11 -0
  36. package/dist/components/chat/questionCardLogic.js +39 -0
  37. package/dist/components/index.d.ts +10 -1
  38. package/dist/components/index.js +10 -0
  39. package/dist/components/modals/ActionModal.svelte +186 -180
  40. package/dist/components/modals/BaseModal.svelte +402 -399
  41. package/dist/components/modals/BaseModal.svelte.d.ts +1 -0
  42. package/dist/components/modals/NewItemDialog.svelte +200 -243
  43. package/dist/components/modals/Portal.svelte +107 -105
  44. package/dist/components/modals/README.md +16 -2
  45. package/dist/components/modals/RenameDialog.svelte +234 -292
  46. package/dist/components/navigation/Breadcrumbs.svelte +415 -377
  47. package/dist/components/navigation/Breadcrumbs.svelte.d.ts +3 -2
  48. package/dist/components/navigation/types.d.ts +2 -0
  49. package/dist/components/pdf/PDFViewer.svelte +1 -1
  50. package/dist/components/search-input/SearchInput.svelte +51 -104
  51. package/dist/components/search-input/SearchInput.svelte.d.ts +9 -27
  52. package/dist/components/shad-editor/editor.css +1 -1
  53. package/dist/components/shad-editor/i18n/messages.d.ts +1 -1
  54. package/dist/components/shad-editor/i18n/messages.js +1 -1
  55. package/dist/components/shell/AppShell.svelte +52 -0
  56. package/dist/components/shell/AppShell.svelte.d.ts +13 -0
  57. package/dist/components/shell/Banner.svelte +90 -0
  58. package/dist/components/shell/Banner.svelte.d.ts +61 -0
  59. package/dist/components/shell/ErrorState.svelte +60 -0
  60. package/dist/components/shell/ErrorState.svelte.d.ts +13 -0
  61. package/dist/components/shell/Link.svelte +63 -0
  62. package/dist/components/shell/Link.svelte.d.ts +53 -0
  63. package/dist/components/shell/NavDrawer.svelte +117 -0
  64. package/dist/components/shell/NavDrawer.svelte.d.ts +10 -0
  65. package/dist/components/shell/NavRow.svelte +128 -0
  66. package/dist/components/shell/NavRow.svelte.d.ts +65 -0
  67. package/dist/components/shell/NavSectionLabel.svelte +27 -0
  68. package/dist/components/shell/NavSectionLabel.svelte.d.ts +9 -0
  69. package/dist/components/shell/NotificationRow.svelte +76 -0
  70. package/dist/components/shell/NotificationRow.svelte.d.ts +16 -0
  71. package/dist/components/shell/PageHeader.svelte +42 -0
  72. package/dist/components/shell/PageHeader.svelte.d.ts +12 -0
  73. package/dist/components/shell/ProfileRow.svelte +95 -0
  74. package/dist/components/shell/ProfileRow.svelte.d.ts +54 -0
  75. package/dist/components/shell/SettingsDialog.svelte +118 -0
  76. package/dist/components/shell/SettingsDialog.svelte.d.ts +19 -0
  77. package/dist/components/shell/SettingsNav.svelte +46 -0
  78. package/dist/components/shell/SettingsNav.svelte.d.ts +11 -0
  79. package/dist/components/shell/Sidebar.svelte +82 -0
  80. package/dist/components/shell/Sidebar.svelte.d.ts +25 -0
  81. package/dist/components/shell/Stat.svelte +63 -0
  82. package/dist/components/shell/Stat.svelte.d.ts +58 -0
  83. package/dist/components/shell/TopBar.svelte +37 -0
  84. package/dist/components/shell/TopBar.svelte.d.ts +11 -0
  85. package/dist/components/shell/WidgetRow.svelte +126 -0
  86. package/dist/components/shell/WidgetRow.svelte.d.ts +78 -0
  87. package/dist/components/shell/error-state-messages.d.ts +7 -0
  88. package/dist/components/shell/error-state-messages.js +9 -0
  89. package/dist/components/shell/index.d.ts +22 -0
  90. package/dist/components/shell/index.js +25 -0
  91. package/dist/components/shell/link-external.d.ts +2 -0
  92. package/dist/components/shell/link-external.js +7 -0
  93. package/dist/components/shell/messages.d.ts +7 -0
  94. package/dist/components/shell/messages.js +5 -0
  95. package/dist/components/shell/settings-nav-types.d.ts +12 -0
  96. package/dist/components/shell/settings-nav-types.js +3 -0
  97. package/dist/components/shell/shell-utils.d.ts +7 -0
  98. package/dist/components/shell/shell-utils.js +27 -0
  99. package/dist/components/shell/stat-tone.d.ts +3 -0
  100. package/dist/components/shell/stat-tone.js +11 -0
  101. package/dist/components/toast/ToasterModal.svelte +102 -168
  102. package/dist/components/toast/ToasterModal.svelte.d.ts +2 -12
  103. package/dist/components/ui/accordion/accordion-content.svelte +3 -2
  104. package/dist/components/ui/accordion/accordion-item.svelte +10 -1
  105. package/dist/components/ui/accordion/accordion-trigger.svelte +4 -3
  106. package/dist/components/ui/alert/alert-description.svelte +5 -1
  107. package/dist/components/ui/alert/alert-title.svelte +2 -1
  108. package/dist/components/ui/alert/index.d.ts +13 -11
  109. package/dist/components/ui/alert/index.js +4 -4
  110. package/dist/components/ui/avatar/avatar-utils.d.ts +2 -0
  111. package/dist/components/ui/avatar/avatar-utils.js +9 -0
  112. package/dist/components/ui/avatar/avatar.svelte +63 -0
  113. package/dist/components/ui/avatar/avatar.svelte.d.ts +80 -0
  114. package/dist/components/ui/avatar/index.d.ts +4 -0
  115. package/dist/components/ui/avatar/index.js +4 -0
  116. package/dist/components/ui/badge/badge.svelte +22 -10
  117. package/dist/components/ui/badge/badge.svelte.d.ts +14 -15
  118. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +2 -2
  119. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
  120. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
  121. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
  122. package/dist/components/ui/button/button-padding.d.ts +9 -0
  123. package/dist/components/ui/button/button-padding.js +15 -0
  124. package/dist/components/ui/button/button.svelte +81 -31
  125. package/dist/components/ui/button/button.svelte.d.ts +48 -29
  126. package/dist/components/ui/calendar/calendar-cell.svelte +1 -1
  127. package/dist/components/ui/calendar/calendar-head-cell.svelte +1 -1
  128. package/dist/components/ui/calendar/calendar-next-button.svelte +2 -2
  129. package/dist/components/ui/calendar/calendar-prev-button.svelte +2 -2
  130. package/dist/components/ui/card/card-description.svelte +1 -1
  131. package/dist/components/ui/card/card-title.svelte +1 -1
  132. package/dist/components/ui/card/card.svelte +1 -1
  133. package/dist/components/ui/checkbox/checkbox.svelte +9 -5
  134. package/dist/components/ui/chip/chip.svelte +48 -0
  135. package/dist/components/ui/chip/chip.svelte.d.ts +13 -0
  136. package/dist/components/ui/chip/index.d.ts +2 -0
  137. package/dist/components/ui/chip/index.js +2 -0
  138. package/dist/components/ui/command/command-dialog.svelte +1 -1
  139. package/dist/components/ui/command/command-input.svelte +4 -4
  140. package/dist/components/ui/command/command-item.svelte +1 -1
  141. package/dist/components/ui/command/command.svelte +1 -1
  142. package/dist/components/ui/dialog/dialog-content.svelte +4 -4
  143. package/dist/components/ui/dialog/dialog-description.svelte +1 -1
  144. package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
  145. package/dist/components/ui/dialog/dialog-title.svelte +1 -1
  146. package/dist/components/ui/drawer/drawer-content.svelte +1 -1
  147. package/dist/components/ui/drawer/drawer-overlay.svelte +1 -1
  148. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +5 -5
  149. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  150. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  151. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +20 -2
  152. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +4 -0
  153. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +5 -1
  154. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +3 -3
  155. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +2 -1
  156. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  157. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +3 -3
  158. package/dist/components/ui/field/field-ids.d.ts +7 -0
  159. package/dist/components/ui/field/field-ids.js +15 -0
  160. package/dist/components/ui/field/field.svelte +62 -0
  161. package/dist/components/ui/field/field.svelte.d.ts +21 -0
  162. package/dist/components/ui/field/index.d.ts +3 -0
  163. package/dist/components/ui/field/index.js +3 -0
  164. package/dist/components/ui/hover-card/hover-card-content.svelte +1 -1
  165. package/dist/components/ui/icon-button/icon-button.svelte +72 -0
  166. package/dist/components/ui/icon-button/icon-button.svelte.d.ts +90 -0
  167. package/dist/components/ui/icon-button/index.d.ts +2 -0
  168. package/dist/components/ui/icon-button/index.js +4 -0
  169. package/dist/components/ui/input/index.d.ts +1 -0
  170. package/dist/components/ui/input/input.svelte +11 -4
  171. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  172. package/dist/components/ui/input-otp/input-otp-separator.svelte +2 -2
  173. package/dist/components/ui/input-otp/input-otp-slot.svelte +5 -4
  174. package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +1 -1
  175. package/dist/components/ui/input-otp/input-otp.svelte +1 -1
  176. package/dist/components/ui/label/label.svelte +3 -2
  177. package/dist/components/ui/popover/popover-content.svelte +1 -1
  178. package/dist/components/ui/progress/progress.svelte +19 -5
  179. package/dist/components/ui/progress/progress.svelte.d.ts +4 -2
  180. package/dist/components/ui/radio-group/radio-group-item.svelte +4 -4
  181. package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte +1 -1
  182. package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +2 -2
  183. package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +2 -2
  184. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +4 -1
  185. package/dist/components/ui/scroll-area/scroll-area.svelte +1 -1
  186. package/dist/components/ui/select/select-content.svelte +1 -3
  187. package/dist/components/ui/select/select-item.svelte +5 -4
  188. package/dist/components/ui/select/select-scroll-down-button.svelte +2 -2
  189. package/dist/components/ui/select/select-scroll-up-button.svelte +2 -2
  190. package/dist/components/ui/select/select-trigger.svelte +4 -3
  191. package/dist/components/ui/skeleton/index.d.ts +2 -0
  192. package/dist/components/ui/skeleton/index.js +2 -0
  193. package/dist/components/ui/skeleton/skeleton.svelte +24 -0
  194. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
  195. package/dist/components/ui/slider/slider.svelte +5 -10
  196. package/dist/components/ui/sonner/sonner.svelte +19 -13
  197. package/dist/components/ui/stepper-button/index.d.ts +3 -0
  198. package/dist/components/ui/stepper-button/index.js +2 -0
  199. package/dist/components/ui/stepper-button/stepper-button.svelte +37 -0
  200. package/dist/components/ui/stepper-button/stepper-button.svelte.d.ts +9 -0
  201. package/dist/components/ui/switch/switch.svelte +8 -3
  202. package/dist/components/ui/table/table-cell.svelte +1 -1
  203. package/dist/components/ui/table/table-head.svelte +1 -1
  204. package/dist/components/ui/table/table-row.svelte +1 -1
  205. package/dist/components/ui/tabs/tabs-list.svelte +1 -1
  206. package/dist/components/ui/tabs/tabs-trigger.svelte +1 -1
  207. package/dist/components/ui/tag/index.d.ts +2 -0
  208. package/dist/components/ui/tag/index.js +2 -0
  209. package/dist/components/ui/tag/tag.svelte +42 -0
  210. package/dist/components/ui/tag/tag.svelte.d.ts +11 -0
  211. package/dist/components/ui/textarea/textarea.svelte +4 -3
  212. package/dist/components/ui/textarea/textarea.svelte.d.ts +2 -2
  213. package/dist/components/ui/toggle/toggle.svelte +9 -9
  214. package/dist/components/ui/toggle/toggle.svelte.d.ts +14 -21
  215. package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
  216. package/dist/fonts/Inter/Inter-Black.woff2 +0 -0
  217. package/dist/fonts/Inter/Inter-BlackItalic.woff2 +0 -0
  218. package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
  219. package/dist/fonts/Inter/Inter-BoldItalic.woff2 +0 -0
  220. package/dist/fonts/Inter/Inter-ExtraBold.woff2 +0 -0
  221. package/dist/fonts/Inter/Inter-ExtraBoldItalic.woff2 +0 -0
  222. package/dist/fonts/Inter/Inter-ExtraLight-BETA.woff2 +0 -0
  223. package/dist/fonts/Inter/Inter-ExtraLightItalic-BETA.woff2 +0 -0
  224. package/dist/fonts/Inter/Inter-Italic.woff2 +0 -0
  225. package/dist/fonts/Inter/Inter-Light-BETA.woff2 +0 -0
  226. package/dist/fonts/Inter/Inter-LightItalic-BETA.woff2 +0 -0
  227. package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
  228. package/dist/fonts/Inter/Inter-MediumItalic.woff2 +0 -0
  229. package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
  230. package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  231. package/dist/fonts/Inter/Inter-SemiBoldItalic.woff2 +0 -0
  232. package/dist/fonts/Inter/Inter-Thin-BETA.woff2 +0 -0
  233. package/dist/fonts/Inter/Inter-ThinItalic-BETA.woff2 +0 -0
  234. package/dist/fonts/Inter/Inter-italic.var.woff2 +0 -0
  235. package/dist/fonts/Inter/Inter-upright.var.woff2 +0 -0
  236. package/dist/fonts/Inter/Inter.var.woff2 +0 -0
  237. package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  238. package/dist/i18n/audit/designSystemWords.d.ts +1 -1
  239. package/dist/i18n/audit/designSystemWords.js +1 -1
  240. package/dist/styles/fonts.css +18 -14
  241. package/dist/styles/global.css +7 -19
  242. package/dist/styles/tokens.css +332 -0
  243. package/dist/utils.d.ts +27 -0
  244. package/dist/utils.js +33 -2
  245. package/package.json +2 -1
  246. package/tailwind.config.ts +7 -47
Binary file
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Some components of the design system carry English of their own (the close button of a window, "Back" in the path above
3
- * the files, "Loading PDF..."). The design system lets a page replace each of those words with a prop, but a component that
3
+ * the files, "Loading PDF…"). The design system lets a page replace each of those words with a prop, but a component that
4
4
  * is used without the prop quietly shows English. This reads the syntax tree of each file of a package and reports a
5
5
  * component that shows words and is used without all of them.
6
6
  */
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { lineOf, listSourceFiles, parseFile, walkTree } from "./syntaxTree.js";
4
4
  /**
5
5
  * Some components of the design system carry English of their own (the close button of a window, "Back" in the path above
6
- * the files, "Loading PDF..."). The design system lets a page replace each of those words with a prop, but a component that
6
+ * the files, "Loading PDF…"). The design system lets a page replace each of those words with a prop, but a component that
7
7
  * is used without the prop quietly shows English. This reads the syntax tree of each file of a package and reports a
8
8
  * component that shows words and is used without all of them.
9
9
  */
@@ -2,19 +2,15 @@
2
2
  * Paths are relative so Vite resolves them when consumers import fonts.css.
3
3
  * Site also mirrors these under static/fonts for /fonts/* URLs in app.html.
4
4
  *
5
- * ## OTS / Chromium validation (Sep 2026)
6
- * Several Inter / Cousine / JetBrains Mono WOFF2 files under src/lib/fonts fail
7
- * Chromium OpenType Sanitizer (console: "OTS parsing error", "Failed to convert
8
- * WOFF 2.0 font to SFNT") when served via Vite `@fs` in local monorepo links.
9
- * That does NOT mean CSS @font-face is wrong — the binary files themselves are
10
- * incomplete/corrupt for OTS. Google Fonts CDN faces (site app.html) still work
11
- * for the same family names, so UI typography stays correct even when local
12
- * @font-face errors appear in the console.
13
- *
14
- * Keep these @font-face rules for packaging / offline / consumers that ship
15
- * clean binaries. Prefer replacing the WOFF2 files with official releases
16
- * (rsms/inter, google/fonts) when cleaning the console is required — do not
17
- * delete @font-face solely to silence OTS.
5
+ * ## Font binaries (5 Nov 2026)
6
+ * The Inter files were corrupt (UTF-8 mangled: Chromium logged "OTS parsing
7
+ * error" and silently fell back to system-ui). They are now the official
8
+ * releases: Inter 4.1.1 (rsms/inter, `web/*.woff2` and `InterVariable*.woff2`
9
+ * from the npm package inter-ui) and JetBrains Mono Regular (latin subset,
10
+ * @fontsource/jetbrains-mono 5.3.0). The file names did not change.
11
+ * Check a file with: node -e "const b=require('fs').readFileSync(P);
12
+ * console.log(b.readUInt32BE(8)===b.length)" (the WOFF2 header stores the
13
+ * length of the file; a mismatch means the file was damaged).
18
14
  */
19
15
 
20
16
  /* Tailwind config */
@@ -111,7 +107,15 @@
111
107
  font-display: swap;
112
108
  }
113
109
 
114
- /* JETBRAINS MONO: Monospace Display (Developer API) */
110
+ /* JETBRAINS MONO: code / text-code (Figma style Code/Default is Regular) */
111
+ @font-face {
112
+ font-family: 'JetBrains Mono';
113
+ src: url('../fonts/JetBrainsMono/JetBrainsMono-Regular.woff2') format('woff2');
114
+ font-weight: 400;
115
+ font-style: normal;
116
+ font-display: swap;
117
+ }
118
+
115
119
  @font-face {
116
120
  font-family: 'JetBrains Mono';
117
121
  src: url('../fonts/JetBrainsMono/JetBrainsMono-ExtraBold.woff2') format('woff2');
@@ -4,6 +4,7 @@
4
4
  /* Import fonts css */
5
5
  /* @import './fonts.css' layer(utilities); */
6
6
  @import './fonts.css';
7
+ @import './tokens.css';
7
8
 
8
9
  /* Tailwind config load *after* main imports - needed for tailwind 4
9
10
  go 3 levels up in development mode, 2 levels up in production mode*/
@@ -13,14 +14,10 @@ go 3 levels up in development mode, 2 levels up in production mode*/
13
14
  @theme {
14
15
  --font-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
15
16
 
16
- --color-dark: hsl(var(--dark));
17
- --color-deep-forest-green: hsl(var(--deep-forest-green));
18
- --color-sage-green: hsl(var(--sage-green));
17
+ /* Brand primitives: hex values live in tokens.css (@theme); legacy HSL triplets below for hsl(var(--*)) consumers */
19
18
  --color-sunny-yellow: hsl(var(--sunny-yellow));
20
- --color-light-green: hsl(var(--light-green));
21
19
  --color-forest-green: hsl(var(--forest-green));
22
20
  --color-forest-green-dark: hsl(var(--forest-green-dark));
23
- --color-error: hsl(var(--error));
24
21
  --color-error-dark: hsl(var(--error-dark));
25
22
  --color-light-error: hsl(var(--light-error));
26
23
  --color-grey1: hsl(var(--grey1));
@@ -149,10 +146,10 @@ go 3 levels up in development mode, 2 levels up in production mode*/
149
146
  --deep-forest-green: 116.3 25.4% 24.7%; /* #314F2F */
150
147
  --sage-green: 101.6 25.8% 52.9%; /* #7BA668 */
151
148
  --sunny-yellow: 45 89% 65.7%;
152
- --light-green: 88.2 20% 83.3%; /* #D5DDCC */
153
- --forest-green: 88.2 20% 83.3%; /* #D5DDCC */
149
+ --light-green: 95.3 38.9% 90.2%; /* #E3F0DB */
150
+ --forest-green: 95.3 38.9% 90.2%; /* legacy alias of light-green tint */
154
151
  --forest-green-dark: 116.3 25.4% 24.7%; /* #314F2F */
155
- --error: 0 88.6% 65.7%; /* #F55A5A */
152
+ --error: 357.5 100% 43.1%; /* #DC0009 */
156
153
  --error-dark: 0 89% 55%;
157
154
  --light-error: 0 45.5% 93.7%;
158
155
  /* Greys */
@@ -195,7 +192,7 @@ go 3 levels up in development mode, 2 levels up in production mode*/
195
192
 
196
193
  /*** GLOBAL STYLE CLASSES ***/
197
194
  * {
198
- border-color: hsl(var(--border));
195
+ border-color: var(--border);
199
196
  }
200
197
 
201
198
  button,
@@ -210,8 +207,7 @@ go 3 levels up in development mode, 2 levels up in production mode*/
210
207
  overflow: hidden; /* prevent scroll */
211
208
  margin: 0;
212
209
  font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
213
- background-color: hsl(var(--background));
214
- color: hsl(var(--foreground));
210
+ @apply bg-background text-foreground;
215
211
  }
216
212
 
217
213
  /* This is the root container of the website(app.html) */
@@ -990,11 +986,3 @@ go 3 levels up in development mode, 2 levels up in production mode*/
990
986
  background-color: color-mix(in srgb, hsl(var(--deep-forest-green)) 90%, black) !important;
991
987
  color: white !important;
992
988
  }
993
-
994
- .accordion-trigger {
995
- height: 52px;
996
- }
997
-
998
- [data-radix-collapsible-trigger] {
999
- min-height: 52px !important;
1000
- }
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Widgetic design tokens (Figma Dashboard file GCC2aXrh3PEHlMWFaAOisR).
3
+ * Primitives + semantic Color, Spacing, Radius, Layout, Motion, typography utilities.
4
+ */
5
+
6
+ @theme {
7
+ --color-white: #ffffff;
8
+ --color-neutral-100: #f5f5f5;
9
+ --color-neutral-200: #e5e5e5;
10
+ --color-neutral-550: #676767;
11
+ --color-dark: #0f2010;
12
+ --color-deep-forest-green: #314f2f;
13
+ /* One red, 5.2:1 on white and 4.8:1 on a hover row (it was #e7000b, 4.4:1 on a hover row). */
14
+ --color-error: #dc0009;
15
+ /* Figma status/warning. Named by its hue because --color-warning is the Tailwind key of the semantic token below. */
16
+ --color-amber: #b45309;
17
+ --color-sage-green: #7ba668;
18
+ --color-light-green: #e3f0db;
19
+
20
+ --color-alpha-dark-04: color-mix(in oklab, var(--color-dark) 4%, transparent);
21
+ --color-alpha-dark-08: color-mix(in oklab, var(--color-dark) 8%, transparent);
22
+ --color-alpha-dark-30: color-mix(in oklab, var(--color-dark) 30%, transparent);
23
+ --color-alpha-light-10: color-mix(in oklab, var(--color-white) 10%, transparent);
24
+ }
25
+
26
+ :root {
27
+ /* Semantic colors (light mode). Add `.dark { ... }` when dark theme ships. */
28
+ --background: var(--color-white);
29
+ --foreground: var(--color-dark);
30
+ --card: var(--color-white);
31
+ --card-foreground: var(--color-dark);
32
+ --popover: var(--color-white);
33
+ --popover-foreground: var(--color-dark);
34
+ --primary: var(--color-deep-forest-green);
35
+ --primary-foreground: var(--color-white);
36
+ --secondary: var(--color-neutral-100);
37
+ --secondary-foreground: var(--color-dark);
38
+ --muted: var(--color-neutral-100);
39
+ --muted-foreground: var(--color-neutral-550);
40
+ --accent: var(--color-alpha-dark-04);
41
+ --accent-foreground: var(--color-dark);
42
+ /* Hover of a surface that is already accent (soft controls, the search field, the rows of the editor).
43
+ The Figma Hover variants stack a second accent fill on the first (4% over 4%); the nearest alpha primitive is 8%.
44
+ Derived from the primitives, not a Figma variable. */
45
+ --accent-hover: var(--color-alpha-dark-08);
46
+ --destructive: var(--color-error);
47
+ --destructive-foreground: var(--color-white);
48
+ /* Warning icon and text, 5.0:1 on white. For the Warning tone of a toast or a note, never a button or a surface. */
49
+ --warning: var(--color-amber);
50
+ --brand: var(--color-sage-green);
51
+ --brand-foreground: var(--color-dark);
52
+ --brand-subtle: var(--color-light-green);
53
+ --border: var(--color-neutral-200);
54
+ --border-strong: var(--color-alpha-dark-30);
55
+ --input: var(--color-neutral-200);
56
+ --ring: var(--color-deep-forest-green);
57
+ --sidebar: var(--color-neutral-100);
58
+ --sidebar-foreground: var(--color-dark);
59
+ --sidebar-primary: var(--color-deep-forest-green);
60
+ --sidebar-primary-foreground: var(--color-white);
61
+ --sidebar-accent: var(--color-alpha-dark-04);
62
+ --sidebar-accent-foreground: var(--color-dark);
63
+ --sidebar-border: var(--color-neutral-200);
64
+ --sidebar-ring: var(--color-deep-forest-green);
65
+ --shadow-soft: var(--color-alpha-dark-08);
66
+ --inverse: var(--color-dark);
67
+ --inverse-foreground: var(--color-white);
68
+ --inverse-muted: var(--color-alpha-light-10);
69
+
70
+ /* Spacing (Figma space/* → Tailwind spacing scale via --spacing = 0.25rem) */
71
+ --space-0-5: calc(var(--spacing) * 0.5);
72
+ --space-1: calc(var(--spacing) * 1);
73
+ --space-1-5: calc(var(--spacing) * 1.5);
74
+ --space-2: calc(var(--spacing) * 2);
75
+ --space-3: calc(var(--spacing) * 3);
76
+ --space-4: calc(var(--spacing) * 4);
77
+ --space-6: calc(var(--spacing) * 6);
78
+ --space-8: calc(var(--spacing) * 8);
79
+ --space-12: calc(var(--spacing) * 12);
80
+
81
+ /* Radius */
82
+ --radius-sm: 4px;
83
+ --radius-lg: 8px;
84
+ --radius-xl: 12px;
85
+ --radius-card: 18px;
86
+ --radius-panel: 24px;
87
+ --radius-full: 9999px;
88
+
89
+ /* Layout widths / heights */
90
+ --layout-sidebar-width: 280px;
91
+ --layout-chat-panel-width: 440px;
92
+ --layout-content-max-width: 728px;
93
+ --layout-settings-modal-width: 1024px;
94
+ --layout-settings-modal-height: 700px;
95
+ --layout-editor-panel-width: 450px;
96
+ --layout-editor-control-width: 185px;
97
+ --layout-picker-width: 374px;
98
+ --layout-auth-form-width: 360px;
99
+ --layout-auth-panel-width: 600px;
100
+ --layout-email-width: 440px;
101
+ --layout-dialog-width: 400px;
102
+ --layout-file-picker-width: 520px;
103
+ --layout-file-dialog-width: 566px;
104
+
105
+ /* Motion */
106
+ --duration-fast: 120ms;
107
+ --duration-base: 160ms;
108
+ --duration-slow: 250ms;
109
+ --duration-enter: 500ms;
110
+ --stagger-item: 50ms;
111
+ --ease-standard: ease;
112
+ --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
113
+ --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
114
+ --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
115
+ --scale-press: 0.97;
116
+ --scale-enter: 0.95;
117
+
118
+ /* Shadow */
119
+ --shadow-floating: 0 4px 12px 0 var(--shadow-soft);
120
+ }
121
+
122
+ @theme inline {
123
+ --color-background: var(--background);
124
+ --color-foreground: var(--foreground);
125
+ --color-card: var(--card);
126
+ --color-card-foreground: var(--card-foreground);
127
+ --color-popover: var(--popover);
128
+ --color-popover-foreground: var(--popover-foreground);
129
+ --color-primary: var(--primary);
130
+ --color-primary-foreground: var(--primary-foreground);
131
+ --color-secondary: var(--secondary);
132
+ --color-secondary-foreground: var(--secondary-foreground);
133
+ --color-muted: var(--muted);
134
+ --color-muted-foreground: var(--muted-foreground);
135
+ --color-accent: var(--accent);
136
+ --color-accent-foreground: var(--accent-foreground);
137
+ --color-accent-hover: var(--accent-hover);
138
+ --color-destructive: var(--destructive);
139
+ --color-destructive-foreground: var(--destructive-foreground);
140
+ --color-warning: var(--warning);
141
+ --color-brand: var(--brand);
142
+ --color-brand-foreground: var(--brand-foreground);
143
+ --color-brand-subtle: var(--brand-subtle);
144
+ --color-border: var(--border);
145
+ --color-border-strong: var(--border-strong);
146
+ --color-input: var(--input);
147
+ --color-ring: var(--ring);
148
+ --color-sidebar: var(--sidebar);
149
+ --color-sidebar-foreground: var(--sidebar-foreground);
150
+ --color-sidebar-primary: var(--sidebar-primary);
151
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
152
+ --color-sidebar-accent: var(--sidebar-accent);
153
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
154
+ --color-sidebar-border: var(--sidebar-border);
155
+ --color-sidebar-ring: var(--sidebar-ring);
156
+ --color-inverse: var(--inverse);
157
+ --color-inverse-foreground: var(--inverse-foreground);
158
+ --color-inverse-muted: var(--inverse-muted);
159
+ --color-shadow-soft: var(--shadow-soft);
160
+
161
+ --radius-sm: var(--radius-sm);
162
+ --radius-lg: var(--radius-lg);
163
+ --radius-xl: var(--radius-xl);
164
+ --radius-card: var(--radius-card);
165
+ --radius-panel: var(--radius-panel);
166
+ --radius-full: var(--radius-full);
167
+
168
+ --shadow-floating: 0 4px 12px 0 var(--shadow-soft);
169
+ }
170
+
171
+ /* Layout utilities */
172
+ @utility w-sidebar {
173
+ width: var(--layout-sidebar-width);
174
+ }
175
+ @utility w-chat-panel {
176
+ width: var(--layout-chat-panel-width);
177
+ }
178
+ @utility max-w-content {
179
+ max-width: var(--layout-content-max-width);
180
+ }
181
+ @utility w-editor-panel {
182
+ width: var(--layout-editor-panel-width);
183
+ }
184
+ @utility w-editor-control {
185
+ width: var(--layout-editor-control-width);
186
+ }
187
+ @utility w-picker {
188
+ width: var(--layout-picker-width);
189
+ }
190
+ @utility w-auth-form {
191
+ width: var(--layout-auth-form-width);
192
+ }
193
+ @utility w-auth-panel {
194
+ width: var(--layout-auth-panel-width);
195
+ }
196
+ @utility w-email {
197
+ width: var(--layout-email-width);
198
+ }
199
+ @utility w-dialog {
200
+ width: var(--layout-dialog-width);
201
+ }
202
+ @utility w-file-picker {
203
+ width: var(--layout-file-picker-width);
204
+ }
205
+ @utility w-file-dialog {
206
+ width: var(--layout-file-dialog-width);
207
+ }
208
+ @utility w-settings-modal {
209
+ width: var(--layout-settings-modal-width);
210
+ }
211
+ @utility h-settings-modal {
212
+ height: var(--layout-settings-modal-height);
213
+ }
214
+
215
+ /* Motion utilities */
216
+ @utility duration-fast {
217
+ transition-duration: var(--duration-fast);
218
+ }
219
+ @utility duration-base {
220
+ transition-duration: var(--duration-base);
221
+ }
222
+ @utility duration-slow {
223
+ transition-duration: var(--duration-slow);
224
+ }
225
+ @utility duration-enter {
226
+ transition-duration: var(--duration-enter);
227
+ }
228
+ @utility ease-standard {
229
+ transition-timing-function: var(--ease-standard);
230
+ }
231
+ @utility ease-out {
232
+ transition-timing-function: var(--ease-out);
233
+ }
234
+ @utility ease-in-out {
235
+ transition-timing-function: var(--ease-in-out);
236
+ }
237
+ @utility ease-drawer {
238
+ transition-timing-function: var(--ease-drawer);
239
+ }
240
+
241
+ @utility press-feedback {
242
+ transition: transform var(--duration-base) var(--ease-out);
243
+
244
+ &:active:not(:disabled):not([aria-disabled='true']) {
245
+ transform: scale(var(--scale-press));
246
+ }
247
+
248
+ @media (prefers-reduced-motion: reduce) {
249
+ &:active:not(:disabled):not([aria-disabled='true']) {
250
+ transform: none;
251
+ }
252
+ }
253
+ }
254
+
255
+ /* Figma text styles (prefixed with text- to avoid legacy typography utilities in fonts.css) */
256
+ @utility text-display-hero {
257
+ font-family: 'Inter', system-ui, sans-serif;
258
+ font-size: 40px;
259
+ line-height: 1.3;
260
+ font-weight: 400;
261
+ letter-spacing: -0.02em;
262
+ }
263
+ @utility text-heading-page {
264
+ font-family: 'Inter', system-ui, sans-serif;
265
+ font-size: 24px;
266
+ line-height: 32px;
267
+ font-weight: 600;
268
+ letter-spacing: -0.01em;
269
+ }
270
+ @utility text-heading-section {
271
+ font-family: 'Inter', system-ui, sans-serif;
272
+ font-size: 14px;
273
+ line-height: 20px;
274
+ font-weight: 600;
275
+ letter-spacing: 0;
276
+ }
277
+ @utility text-body {
278
+ font-family: 'Inter', system-ui, sans-serif;
279
+ font-size: 14px;
280
+ line-height: 20px;
281
+ font-weight: 400;
282
+ letter-spacing: 0;
283
+ }
284
+ @utility text-body-medium {
285
+ font-family: 'Inter', system-ui, sans-serif;
286
+ font-size: 14px;
287
+ line-height: 20px;
288
+ font-weight: 500;
289
+ letter-spacing: 0;
290
+ }
291
+ @utility text-body-large {
292
+ font-family: 'Inter', system-ui, sans-serif;
293
+ font-size: 20px;
294
+ line-height: 30px;
295
+ font-weight: 400;
296
+ letter-spacing: 0;
297
+ }
298
+ @utility text-caption {
299
+ font-family: 'Inter', system-ui, sans-serif;
300
+ font-size: 12px;
301
+ line-height: 16px;
302
+ font-weight: 400;
303
+ letter-spacing: 0;
304
+ }
305
+ @utility text-caption-medium {
306
+ font-family: 'Inter', system-ui, sans-serif;
307
+ font-size: 12px;
308
+ line-height: 16px;
309
+ font-weight: 500;
310
+ letter-spacing: 0;
311
+ }
312
+ @utility text-label {
313
+ font-family: 'Inter', system-ui, sans-serif;
314
+ font-size: 14px;
315
+ line-height: 20px;
316
+ font-weight: 500;
317
+ letter-spacing: 0;
318
+ }
319
+ @utility text-label-small {
320
+ font-family: 'Inter', system-ui, sans-serif;
321
+ font-size: 12px;
322
+ line-height: 16px;
323
+ font-weight: 500;
324
+ letter-spacing: 0;
325
+ }
326
+ @utility text-code {
327
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
328
+ font-size: 12px;
329
+ line-height: 16px;
330
+ font-weight: 400;
331
+ letter-spacing: 0;
332
+ }
package/dist/utils.d.ts CHANGED
@@ -1,2 +1,29 @@
1
1
  import { type ClassValue } from "clsx";
2
+ /**
3
+ * The typography utilities of the design system (`@utility text-*` in `styles/tokens.css`).
4
+ * Each one sets the size, line height, weight and letter spacing together, like a Figma text style.
5
+ * Keep this list in step with tokens.css (the design check fails when a utility is missing here).
6
+ */
7
+ export declare const typographyUtilityNames: readonly ["display-hero", "heading-page", "heading-section", "body", "body-medium", "body-large", "caption", "caption-medium", "label", "label-small", "code"];
8
+ /**
9
+ * Why this exists: tailwind-merge reads every `text-*` class it does not know as a text COLOR, so
10
+ * `cn('text-body', 'text-muted-foreground')` kept only the color and the typography was lost.
11
+ * Declared here as font sizes, a typography utility only replaces another font size, never a color.
12
+ */
13
+ export declare const typographyClassGroups: {
14
+ "font-size": {
15
+ text: ("display-hero" | "heading-page" | "heading-section" | "body" | "body-medium" | "body-large" | "caption" | "caption-medium" | "label" | "label-small" | "code")[];
16
+ }[];
17
+ };
18
+ /** Joins class names and resolves conflicts (the last Tailwind utility of a group wins). Use this, never `twMerge` alone. */
2
19
  export declare function cn(...inputs: ClassValue[]): string;
20
+ /** `tv` with the same merge rules as `cn`: components that use tailwind-variants import this, not `tailwind-variants`. */
21
+ export declare const tv: import("tailwind-variants").CreateTV<{
22
+ twMergeConfig: {
23
+ classGroups: {
24
+ "font-size": {
25
+ text: ("display-hero" | "heading-page" | "heading-section" | "body" | "body-medium" | "body-large" | "caption" | "caption-medium" | "label" | "label-small" | "code")[];
26
+ }[];
27
+ };
28
+ };
29
+ }>;
package/dist/utils.js CHANGED
@@ -1,5 +1,36 @@
1
1
  import { clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+ import { createTV } from "tailwind-variants";
4
+ /**
5
+ * The typography utilities of the design system (`@utility text-*` in `styles/tokens.css`).
6
+ * Each one sets the size, line height, weight and letter spacing together, like a Figma text style.
7
+ * Keep this list in step with tokens.css (the design check fails when a utility is missing here).
8
+ */
9
+ export const typographyUtilityNames = [
10
+ "display-hero",
11
+ "heading-page",
12
+ "heading-section",
13
+ "body",
14
+ "body-medium",
15
+ "body-large",
16
+ "caption",
17
+ "caption-medium",
18
+ "label",
19
+ "label-small",
20
+ "code"
21
+ ];
22
+ /**
23
+ * Why this exists: tailwind-merge reads every `text-*` class it does not know as a text COLOR, so
24
+ * `cn('text-body', 'text-muted-foreground')` kept only the color and the typography was lost.
25
+ * Declared here as font sizes, a typography utility only replaces another font size, never a color.
26
+ */
27
+ export const typographyClassGroups = {
28
+ "font-size": [{ text: [...typographyUtilityNames] }]
29
+ };
30
+ const mergeClasses = extendTailwindMerge({ extend: { classGroups: typographyClassGroups } });
31
+ /** Joins class names and resolves conflicts (the last Tailwind utility of a group wins). Use this, never `twMerge` alone. */
3
32
  export function cn(...inputs) {
4
- return twMerge(clsx(inputs));
33
+ return mergeClasses(clsx(inputs));
5
34
  }
35
+ /** `tv` with the same merge rules as `cn`: components that use tailwind-variants import this, not `tailwind-variants`. */
36
+ export const tv = createTV({ twMergeConfig: { classGroups: typographyClassGroups } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widgetic/design-system",
3
- "version": "0.5.22",
3
+ "version": "0.5.23",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "type": "module",
6
6
  "svelte": "./dist/index.js",
@@ -41,6 +41,7 @@
41
41
  "check:strict": "tsc --noEmit && npm run check",
42
42
  "check:deps": "check-runtime-deps",
43
43
  "test": "node --test \"tests/**/*.test.ts\"",
44
+ "check:design": "node scripts/check-design-rules.mjs",
44
45
  "test:deps": "check-runtime-deps-fixtures",
45
46
  "pnpm-link": "zsh -c 'mkdir -p ~/.pnpm-global/bin && export PATH=\"$PATH:$HOME/.pnpm-global/bin\" && pnpm install -g pnpm && pnpm config set global-bin-dir ~/.pnpm-global/bin && echo \"export PATH=\\\"$PATH:$HOME/.pnpm-global/bin\\\"\" >> ~/.zshrc && source ~/.zshrc && pnpm link --global'",
46
47
  "link-packs": "zsh -c 'mkdir -p ~/.pnpm-global/bin && export PATH=\"$PATH:$HOME/.pnpm-global/bin\" && pnpm install -g pnpm && pnpm config set global-bin-dir ~/.pnpm-global/bin && echo \"export PATH=\\\"$PATH:$HOME/.pnpm-global/bin\\\"\" >> ~/.zshrc && source ~/.zshrc && pnpm link --global @widgetic/api-sdk @widgetic/design-system'",
@@ -15,50 +15,7 @@ const config: Config = {
15
15
  },
16
16
  extend: {
17
17
  colors: {
18
- border: "hsl(var(--border) / <alpha-value>)",
19
- input: "hsl(var(--input) / <alpha-value>)",
20
- ring: "hsl(var(--ring) / <alpha-value>)",
21
- background: "hsl(var(--background) / <alpha-value>)",
22
- foreground: "hsl(var(--foreground) / <alpha-value>)",
23
- primary: {
24
- DEFAULT: "hsl(var(--primary) / <alpha-value>)",
25
- foreground: "hsl(var(--primary-foreground) / <alpha-value>)"
26
- },
27
- secondary: {
28
- DEFAULT: "hsl(var(--secondary) / <alpha-value>)",
29
- foreground: "hsl(var(--secondary-foreground) / <alpha-value>)"
30
- },
31
- destructive: {
32
- DEFAULT: "hsl(var(--destructive) / <alpha-value>)",
33
- foreground: "hsl(var(--destructive-foreground) / <alpha-value>)"
34
- },
35
- muted: {
36
- DEFAULT: "hsl(var(--muted) / <alpha-value>)",
37
- foreground: "hsl(var(--muted-foreground) / <alpha-value>)"
38
- },
39
- accent: {
40
- DEFAULT: "hsl(var(--accent) / <alpha-value>)",
41
- foreground: "hsl(var(--accent-foreground) / <alpha-value>)"
42
- },
43
- popover: {
44
- DEFAULT: "hsl(var(--popover) / <alpha-value>)",
45
- foreground: "hsl(var(--popover-foreground) / <alpha-value>)"
46
- },
47
- card: {
48
- DEFAULT: "hsl(var(--card) / <alpha-value>)",
49
- foreground: "hsl(var(--card-foreground) / <alpha-value>)"
50
- },
51
- sidebar: {
52
- DEFAULT: "hsl(var(--sidebar-background))",
53
- foreground: "hsl(var(--sidebar-foreground))",
54
- primary: "hsl(var(--sidebar-primary))",
55
- "primary-foreground": "hsl(var(--sidebar-primary-foreground))",
56
- accent: "hsl(var(--sidebar-accent))",
57
- "accent-foreground": "hsl(var(--sidebar-accent-foreground))",
58
- border: "hsl(var(--sidebar-border))",
59
- ring: "hsl(var(--sidebar-ring))",
60
- },
61
- // Widgetic DS palette (CSS vars defined in global.css)
18
+ // Widgetic DS palette (CSS vars defined in global.css / tokens.css)
62
19
  dark: "hsl(var(--dark) / <alpha-value>)",
63
20
  "deep-forest-green": "hsl(var(--deep-forest-green) / <alpha-value>)",
64
21
  "sage-green": "hsl(var(--sage-green) / <alpha-value>)",
@@ -94,10 +51,13 @@ const config: Config = {
94
51
  cousine: ["Cousine", "monospace"],
95
52
  },
96
53
  borderRadius: {
97
- xl: "calc(var(--radius) + 4px)",
98
- lg: "var(--radius)",
54
+ sm: "var(--radius-sm)",
55
+ lg: "var(--radius-lg)",
56
+ xl: "var(--radius-xl)",
57
+ card: "var(--radius-card)",
58
+ panel: "var(--radius-panel)",
59
+ full: "var(--radius-full)",
99
60
  md: "calc(var(--radius) - 2px)",
100
- sm: "calc(var(--radius) - 4px)"
101
61
  },
102
62
  keyframes: {
103
63
  "accordion-down": {