@ecoma-io/loom 0.1.1 → 0.2.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 (495) hide show
  1. package/README.md +54 -57
  2. package/dist/blocks/AppHeader/AppHeader.js.map +1 -1
  3. package/dist/blocks/AppHeader/AppHeader.vue.d.ts +5 -6
  4. package/dist/blocks/AppHeader/AppHeader.vue.d.ts.map +1 -1
  5. package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js +6 -7
  6. package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts +1 -1
  8. package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts.map +1 -1
  9. package/dist/blocks/DesktopAppShell/DesktopAppShell.js +7 -0
  10. package/dist/blocks/DesktopAppShell/DesktopAppShell.js.map +1 -0
  11. package/dist/blocks/DesktopAppShell/DesktopAppShell.vue.d.ts +102 -0
  12. package/dist/blocks/DesktopAppShell/DesktopAppShell.vue.d.ts.map +1 -0
  13. package/dist/blocks/DesktopAppShell/DesktopAppShell.vue_vue_type_script_setup_true_lang.js +74 -0
  14. package/dist/blocks/DesktopAppShell/DesktopAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  15. package/dist/blocks/ErrorState/ErrorState.js +7 -0
  16. package/dist/blocks/ErrorState/ErrorState.js.map +1 -0
  17. package/dist/blocks/ErrorState/ErrorState.vue.d.ts +44 -0
  18. package/dist/blocks/ErrorState/ErrorState.vue.d.ts.map +1 -0
  19. package/dist/blocks/ErrorState/ErrorState.vue_vue_type_script_setup_true_lang.js +60 -0
  20. package/dist/blocks/ErrorState/ErrorState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  21. package/dist/blocks/FormActions/FormActions.js +7 -0
  22. package/dist/blocks/FormActions/FormActions.js.map +1 -0
  23. package/dist/blocks/FormActions/FormActions.vue.d.ts +51 -0
  24. package/dist/blocks/FormActions/FormActions.vue.d.ts.map +1 -0
  25. package/dist/blocks/FormActions/FormActions.vue_vue_type_script_setup_true_lang.js +21 -0
  26. package/dist/blocks/FormActions/FormActions.vue_vue_type_script_setup_true_lang.js.map +1 -0
  27. package/dist/blocks/FormSection/FormSection.js +7 -0
  28. package/dist/blocks/FormSection/FormSection.js.map +1 -0
  29. package/dist/blocks/FormSection/FormSection.vue.d.ts +85 -0
  30. package/dist/blocks/FormSection/FormSection.vue.d.ts.map +1 -0
  31. package/dist/blocks/FormSection/FormSection.vue_vue_type_script_setup_true_lang.js +62 -0
  32. package/dist/blocks/FormSection/FormSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  33. package/dist/blocks/LoadingState/LoadingState.js +7 -0
  34. package/dist/blocks/LoadingState/LoadingState.js.map +1 -0
  35. package/dist/blocks/LoadingState/LoadingState.vue.d.ts +22 -0
  36. package/dist/blocks/LoadingState/LoadingState.vue.d.ts.map +1 -0
  37. package/dist/blocks/LoadingState/LoadingState.vue_vue_type_script_setup_true_lang.js +57 -0
  38. package/dist/blocks/LoadingState/LoadingState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  39. package/dist/blocks/MetricCard/MetricCard.js +7 -0
  40. package/dist/blocks/MetricCard/MetricCard.js.map +1 -0
  41. package/dist/blocks/MetricCard/MetricCard.vue.d.ts +59 -0
  42. package/dist/blocks/MetricCard/MetricCard.vue.d.ts.map +1 -0
  43. package/dist/blocks/MetricCard/MetricCard.vue_vue_type_script_setup_true_lang.js +63 -0
  44. package/dist/blocks/MetricCard/MetricCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  45. package/dist/blocks/SidebarNav/SidebarNav.js.map +1 -1
  46. package/dist/blocks/SidebarNav/SidebarNav.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/blocks/TitleBar/TitleBar.js.map +1 -1
  48. package/dist/blocks/TitleBar/TitleBar.vue.d.ts +37 -3
  49. package/dist/blocks/TitleBar/TitleBar.vue.d.ts.map +1 -1
  50. package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js +14 -14
  51. package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/blocks/ToastStack/ToastStack.js.map +1 -1
  53. package/dist/blocks/ToastStack/ToastStack.vue.d.ts +20 -0
  54. package/dist/blocks/ToastStack/ToastStack.vue.d.ts.map +1 -1
  55. package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js +16 -5
  56. package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/composition/Center/Center.js +7 -0
  58. package/dist/composition/Center/Center.js.map +1 -0
  59. package/dist/composition/Center/Center.vue.d.ts +40 -0
  60. package/dist/composition/Center/Center.vue.d.ts.map +1 -0
  61. package/dist/composition/Center/Center.vue_vue_type_script_setup_true_lang.js +29 -0
  62. package/dist/composition/Center/Center.vue_vue_type_script_setup_true_lang.js.map +1 -0
  63. package/dist/composition/Frame/Frame.js +7 -0
  64. package/dist/composition/Frame/Frame.js.map +1 -0
  65. package/dist/composition/Frame/Frame.vue.d.ts +35 -0
  66. package/dist/composition/Frame/Frame.vue.d.ts.map +1 -0
  67. package/dist/composition/Frame/Frame.vue_vue_type_script_setup_true_lang.js +29 -0
  68. package/dist/composition/Frame/Frame.vue_vue_type_script_setup_true_lang.js.map +1 -0
  69. package/dist/composition/Grid/Grid.js +7 -0
  70. package/dist/composition/Grid/Grid.js.map +1 -0
  71. package/dist/composition/Grid/Grid.vue.d.ts +41 -0
  72. package/dist/composition/Grid/Grid.vue.d.ts.map +1 -0
  73. package/dist/composition/Grid/Grid.vue_vue_type_script_setup_true_lang.js +27 -0
  74. package/dist/composition/Grid/Grid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  75. package/dist/composition/Inline/Inline.js +7 -0
  76. package/dist/composition/Inline/Inline.js.map +1 -0
  77. package/dist/composition/Inline/Inline.vue.d.ts +46 -0
  78. package/dist/composition/Inline/Inline.vue.d.ts.map +1 -0
  79. package/dist/composition/Inline/Inline.vue_vue_type_script_setup_true_lang.js +35 -0
  80. package/dist/composition/Inline/Inline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  81. package/dist/composition/ScrollReel/ScrollReel.js +7 -0
  82. package/dist/composition/ScrollReel/ScrollReel.js.map +1 -0
  83. package/dist/composition/ScrollReel/ScrollReel.vue.d.ts +42 -0
  84. package/dist/composition/ScrollReel/ScrollReel.vue.d.ts.map +1 -0
  85. package/dist/composition/ScrollReel/ScrollReel.vue_vue_type_script_setup_true_lang.js +79 -0
  86. package/dist/composition/ScrollReel/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  87. package/dist/composition/Sidebar/Sidebar.js +7 -0
  88. package/dist/composition/Sidebar/Sidebar.js.map +1 -0
  89. package/dist/composition/Sidebar/Sidebar.vue.d.ts +52 -0
  90. package/dist/composition/Sidebar/Sidebar.vue.d.ts.map +1 -0
  91. package/dist/composition/Sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +36 -0
  92. package/dist/composition/Sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  93. package/dist/composition/Split/Split.js +7 -0
  94. package/dist/composition/Split/Split.js.map +1 -0
  95. package/dist/composition/Split/Split.vue.d.ts +58 -0
  96. package/dist/composition/Split/Split.vue.d.ts.map +1 -0
  97. package/dist/composition/Split/Split.vue_vue_type_script_setup_true_lang.js +40 -0
  98. package/dist/composition/Split/Split.vue_vue_type_script_setup_true_lang.js.map +1 -0
  99. package/dist/composition/Stack/Stack.js +7 -0
  100. package/dist/composition/Stack/Stack.js.map +1 -0
  101. package/dist/composition/Stack/Stack.vue.d.ts +43 -0
  102. package/dist/composition/Stack/Stack.vue.d.ts.map +1 -0
  103. package/dist/composition/Stack/Stack.vue_vue_type_script_setup_true_lang.js +30 -0
  104. package/dist/composition/Stack/Stack.vue_vue_type_script_setup_true_lang.js.map +1 -0
  105. package/dist/index.d.ts +119 -11
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +83 -5
  108. package/dist/layouts/AppShell/AppShell.js +7 -0
  109. package/dist/layouts/AppShell/AppShell.js.map +1 -0
  110. package/dist/layouts/AppShell/AppShell.vue.d.ts +51 -0
  111. package/dist/layouts/AppShell/AppShell.vue.d.ts.map +1 -0
  112. package/dist/layouts/AppShell/AppShell.vue_vue_type_script_setup_true_lang.js +47 -0
  113. package/dist/layouts/AppShell/AppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  114. package/dist/layouts/Centered/Centered.js +7 -0
  115. package/dist/layouts/Centered/Centered.js.map +1 -0
  116. package/dist/layouts/Centered/Centered.vue.d.ts +48 -0
  117. package/dist/layouts/Centered/Centered.vue.d.ts.map +1 -0
  118. package/dist/layouts/Centered/Centered.vue_vue_type_script_setup_true_lang.js +35 -0
  119. package/dist/layouts/Centered/Centered.vue_vue_type_script_setup_true_lang.js.map +1 -0
  120. package/dist/layouts/Dashboard/Dashboard.js +7 -0
  121. package/dist/layouts/Dashboard/Dashboard.js.map +1 -0
  122. package/dist/layouts/Dashboard/Dashboard.vue.d.ts +60 -0
  123. package/dist/layouts/Dashboard/Dashboard.vue.d.ts.map +1 -0
  124. package/dist/layouts/Dashboard/Dashboard.vue_vue_type_script_setup_true_lang.js +64 -0
  125. package/dist/layouts/Dashboard/Dashboard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  126. package/dist/layouts/FormLayout/FormLayout.js +7 -0
  127. package/dist/layouts/FormLayout/FormLayout.js.map +1 -0
  128. package/dist/layouts/FormLayout/FormLayout.vue.d.ts +46 -0
  129. package/dist/layouts/FormLayout/FormLayout.vue.d.ts.map +1 -0
  130. package/dist/layouts/FormLayout/FormLayout.vue_vue_type_script_setup_true_lang.js +28 -0
  131. package/dist/layouts/FormLayout/FormLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  132. package/dist/layouts/MasterDetail/MasterDetail.js +7 -0
  133. package/dist/layouts/MasterDetail/MasterDetail.js.map +1 -0
  134. package/dist/layouts/MasterDetail/MasterDetail.vue.d.ts +49 -0
  135. package/dist/layouts/MasterDetail/MasterDetail.vue.d.ts.map +1 -0
  136. package/dist/layouts/MasterDetail/MasterDetail.vue_vue_type_script_setup_true_lang.js +42 -0
  137. package/dist/layouts/MasterDetail/MasterDetail.vue_vue_type_script_setup_true_lang.js.map +1 -0
  138. package/dist/layouts/Reading/Reading.js +7 -0
  139. package/dist/layouts/Reading/Reading.js.map +1 -0
  140. package/dist/layouts/Reading/Reading.vue.d.ts +24 -0
  141. package/dist/layouts/Reading/Reading.vue.d.ts.map +1 -0
  142. package/dist/layouts/Reading/Reading.vue_vue_type_script_setup_true_lang.js +29 -0
  143. package/dist/layouts/Reading/Reading.vue_vue_type_script_setup_true_lang.js.map +1 -0
  144. package/dist/layouts/Settings/Settings.js +7 -0
  145. package/dist/layouts/Settings/Settings.js.map +1 -0
  146. package/dist/layouts/Settings/Settings.vue.d.ts +39 -0
  147. package/dist/layouts/Settings/Settings.vue.d.ts.map +1 -0
  148. package/dist/layouts/Settings/Settings.vue_vue_type_script_setup_true_lang.js +35 -0
  149. package/dist/layouts/Settings/Settings.vue_vue_type_script_setup_true_lang.js.map +1 -0
  150. package/dist/layouts/SplitLayout/SplitLayout.js +7 -0
  151. package/dist/layouts/SplitLayout/SplitLayout.js.map +1 -0
  152. package/dist/layouts/SplitLayout/SplitLayout.vue.d.ts +63 -0
  153. package/dist/layouts/SplitLayout/SplitLayout.vue.d.ts.map +1 -0
  154. package/dist/layouts/SplitLayout/SplitLayout.vue_vue_type_script_setup_true_lang.js +46 -0
  155. package/dist/layouts/SplitLayout/SplitLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  156. package/dist/lib/ancestor-disabled.d.ts +35 -0
  157. package/dist/lib/ancestor-disabled.d.ts.map +1 -0
  158. package/dist/lib/ancestor-disabled.js +86 -0
  159. package/dist/lib/ancestor-disabled.js.map +1 -0
  160. package/dist/lib/cn.d.ts.map +1 -1
  161. package/dist/lib/cn.js +46 -1
  162. package/dist/lib/cn.js.map +1 -1
  163. package/dist/lib/count-labels.d.ts +78 -0
  164. package/dist/lib/count-labels.d.ts.map +1 -0
  165. package/dist/lib/count-labels.js +29 -0
  166. package/dist/lib/count-labels.js.map +1 -0
  167. package/dist/lib/date-labels.d.ts +278 -0
  168. package/dist/lib/date-labels.d.ts.map +1 -0
  169. package/dist/lib/date-labels.js +157 -0
  170. package/dist/lib/date-labels.js.map +1 -0
  171. package/dist/lib/field-context.d.ts +178 -0
  172. package/dist/lib/field-context.d.ts.map +1 -0
  173. package/dist/lib/field-context.js +106 -0
  174. package/dist/lib/field-context.js.map +1 -0
  175. package/dist/lib/label-registry.d.ts +75 -0
  176. package/dist/lib/label-registry.d.ts.map +1 -0
  177. package/dist/lib/labels.d.ts +116 -0
  178. package/dist/lib/labels.d.ts.map +1 -0
  179. package/dist/lib/labels.js +84 -0
  180. package/dist/lib/labels.js.map +1 -0
  181. package/dist/lib/theme.d.ts +68 -0
  182. package/dist/lib/theme.d.ts.map +1 -0
  183. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +236 -0
  184. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js.map +1 -0
  185. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +117 -0
  186. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js.map +1 -0
  187. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +142 -0
  188. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js.map +1 -0
  189. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +280 -0
  190. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js.map +1 -0
  191. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +40 -0
  192. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js.map +1 -0
  193. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +69 -0
  194. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js.map +1 -0
  195. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +8 -0
  196. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js.map +1 -0
  197. package/dist/primitives/Accordion/Accordion.js +7 -0
  198. package/dist/primitives/Accordion/Accordion.js.map +1 -0
  199. package/dist/primitives/Accordion/Accordion.vue.d.ts +68 -0
  200. package/dist/primitives/Accordion/Accordion.vue.d.ts.map +1 -0
  201. package/dist/primitives/Accordion/Accordion.vue_vue_type_script_setup_true_lang.js +67 -0
  202. package/dist/primitives/Accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  203. package/dist/primitives/AlertDialog/AlertDialog.js +7 -0
  204. package/dist/primitives/AlertDialog/AlertDialog.js.map +1 -0
  205. package/dist/primitives/AlertDialog/AlertDialog.vue.d.ts +94 -0
  206. package/dist/primitives/AlertDialog/AlertDialog.vue.d.ts.map +1 -0
  207. package/dist/primitives/AlertDialog/AlertDialog.vue_vue_type_script_setup_true_lang.js +99 -0
  208. package/dist/primitives/AlertDialog/AlertDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  209. package/dist/primitives/Avatar/Avatar.js +2 -2
  210. package/dist/primitives/Avatar/Avatar.js.map +1 -1
  211. package/dist/primitives/Avatar/Avatar.vue.d.ts +30 -3
  212. package/dist/primitives/Avatar/Avatar.vue.d.ts.map +1 -1
  213. package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js +95 -14
  214. package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/primitives/AvatarGroup/AvatarGroup.js +7 -0
  216. package/dist/primitives/AvatarGroup/AvatarGroup.js.map +1 -0
  217. package/dist/primitives/AvatarGroup/AvatarGroup.vue.d.ts +104 -0
  218. package/dist/primitives/AvatarGroup/AvatarGroup.vue.d.ts.map +1 -0
  219. package/dist/primitives/AvatarGroup/AvatarGroup.vue_vue_type_script_setup_true_lang.js +139 -0
  220. package/dist/primitives/AvatarGroup/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  221. package/dist/primitives/Badge/Badge.js.map +1 -1
  222. package/dist/primitives/Badge/Badge.vue.d.ts +6 -6
  223. package/dist/primitives/Badge/Badge.vue.d.ts.map +1 -1
  224. package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js +1 -1
  225. package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  226. package/dist/primitives/Breadcrumb/Breadcrumb.js +7 -0
  227. package/dist/primitives/Breadcrumb/Breadcrumb.js.map +1 -0
  228. package/dist/primitives/Breadcrumb/Breadcrumb.vue.d.ts +25 -0
  229. package/dist/primitives/Breadcrumb/Breadcrumb.vue.d.ts.map +1 -0
  230. package/dist/primitives/Breadcrumb/Breadcrumb.vue_vue_type_script_setup_true_lang.js +48 -0
  231. package/dist/primitives/Breadcrumb/Breadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
  232. package/dist/primitives/Button/Button.js +2 -2
  233. package/dist/primitives/Button/Button.js.map +1 -1
  234. package/dist/primitives/Button/Button.vue.d.ts +31 -8
  235. package/dist/primitives/Button/Button.vue.d.ts.map +1 -1
  236. package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js +32 -16
  237. package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  238. package/dist/primitives/Checkbox/Checkbox.js.map +1 -1
  239. package/dist/primitives/Checkbox/Checkbox.vue.d.ts +18 -3
  240. package/dist/primitives/Checkbox/Checkbox.vue.d.ts.map +1 -1
  241. package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +46 -7
  242. package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  243. package/dist/primitives/Chip/Chip.js +7 -0
  244. package/dist/primitives/Chip/Chip.js.map +1 -0
  245. package/dist/primitives/Chip/Chip.vue.d.ts +79 -0
  246. package/dist/primitives/Chip/Chip.vue.d.ts.map +1 -0
  247. package/dist/primitives/Chip/Chip.vue_vue_type_script_setup_true_lang.js +139 -0
  248. package/dist/primitives/Chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  249. package/dist/primitives/ColorPicker/ColorPicker.js +7 -0
  250. package/dist/primitives/ColorPicker/ColorPicker.js.map +1 -0
  251. package/dist/primitives/ColorPicker/ColorPicker.vue.d.ts +125 -0
  252. package/dist/primitives/ColorPicker/ColorPicker.vue.d.ts.map +1 -0
  253. package/dist/primitives/ColorPicker/ColorPicker.vue_vue_type_script_setup_true_lang.js +301 -0
  254. package/dist/primitives/ColorPicker/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  255. package/dist/primitives/Combobox/Combobox.js +7 -0
  256. package/dist/primitives/Combobox/Combobox.js.map +1 -0
  257. package/dist/primitives/Combobox/Combobox.vue.d.ts +205 -0
  258. package/dist/primitives/Combobox/Combobox.vue.d.ts.map +1 -0
  259. package/dist/primitives/Combobox/Combobox.vue_vue_type_script_setup_true_lang.js +345 -0
  260. package/dist/primitives/Combobox/Combobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  261. package/dist/primitives/ContextMenu/ContextMenu.js +7 -0
  262. package/dist/primitives/ContextMenu/ContextMenu.js.map +1 -0
  263. package/dist/primitives/ContextMenu/ContextMenu.vue.d.ts +55 -0
  264. package/dist/primitives/ContextMenu/ContextMenu.vue.d.ts.map +1 -0
  265. package/dist/primitives/ContextMenu/ContextMenu.vue_vue_type_script_setup_true_lang.js +82 -0
  266. package/dist/primitives/ContextMenu/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  267. package/dist/primitives/DatePicker/DatePicker.js +7 -0
  268. package/dist/primitives/DatePicker/DatePicker.js.map +1 -0
  269. package/dist/primitives/DatePicker/DatePicker.vue.d.ts +102 -0
  270. package/dist/primitives/DatePicker/DatePicker.vue.d.ts.map +1 -0
  271. package/dist/primitives/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js +292 -0
  272. package/dist/primitives/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  273. package/dist/primitives/DateRangePicker/DateRangePicker.js +7 -0
  274. package/dist/primitives/DateRangePicker/DateRangePicker.js.map +1 -0
  275. package/dist/primitives/DateRangePicker/DateRangePicker.vue.d.ts +173 -0
  276. package/dist/primitives/DateRangePicker/DateRangePicker.vue.d.ts.map +1 -0
  277. package/dist/primitives/DateRangePicker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +412 -0
  278. package/dist/primitives/DateRangePicker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  279. package/dist/primitives/DateTimePicker/DateTimePicker.js +7 -0
  280. package/dist/primitives/DateTimePicker/DateTimePicker.js.map +1 -0
  281. package/dist/primitives/DateTimePicker/DateTimePicker.vue.d.ts +113 -0
  282. package/dist/primitives/DateTimePicker/DateTimePicker.vue.d.ts.map +1 -0
  283. package/dist/primitives/DateTimePicker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +358 -0
  284. package/dist/primitives/DateTimePicker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  285. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.js +7 -0
  286. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -0
  287. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue.d.ts +181 -0
  288. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue.d.ts.map +1 -0
  289. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +562 -0
  290. package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  291. package/dist/primitives/Dialog/Dialog.js +2 -2
  292. package/dist/primitives/Dialog/Dialog.js.map +1 -1
  293. package/dist/primitives/Dialog/Dialog.vue.d.ts +39 -0
  294. package/dist/primitives/Dialog/Dialog.vue.d.ts.map +1 -1
  295. package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js +14 -5
  296. package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  297. package/dist/primitives/Drawer/Drawer.js +7 -0
  298. package/dist/primitives/Drawer/Drawer.js.map +1 -0
  299. package/dist/primitives/Drawer/Drawer.vue.d.ts +110 -0
  300. package/dist/primitives/Drawer/Drawer.vue.d.ts.map +1 -0
  301. package/dist/primitives/Drawer/Drawer.vue_vue_type_script_setup_true_lang.js +223 -0
  302. package/dist/primitives/Drawer/Drawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  303. package/dist/primitives/DropdownMenu/DropdownMenu.js.map +1 -1
  304. package/dist/primitives/DropdownMenu/DropdownMenu.vue.d.ts.map +1 -1
  305. package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js +2 -2
  306. package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  307. package/dist/primitives/Editable/Editable.js +7 -0
  308. package/dist/primitives/Editable/Editable.js.map +1 -0
  309. package/dist/primitives/Editable/Editable.vue.d.ts +200 -0
  310. package/dist/primitives/Editable/Editable.vue.d.ts.map +1 -0
  311. package/dist/primitives/Editable/Editable.vue_vue_type_script_setup_true_lang.js +275 -0
  312. package/dist/primitives/Editable/Editable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  313. package/dist/primitives/Field/Field.js.map +1 -1
  314. package/dist/primitives/Field/Field.vue.d.ts +32 -17
  315. package/dist/primitives/Field/Field.vue.d.ts.map +1 -1
  316. package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js +51 -18
  317. package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/primitives/Fieldset/Fieldset.js +7 -0
  319. package/dist/primitives/Fieldset/Fieldset.js.map +1 -0
  320. package/dist/primitives/Fieldset/Fieldset.vue.d.ts +91 -0
  321. package/dist/primitives/Fieldset/Fieldset.vue.d.ts.map +1 -0
  322. package/dist/primitives/Fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js +138 -0
  323. package/dist/primitives/Fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js.map +1 -0
  324. package/dist/primitives/FileUpload/FileUpload.js +7 -0
  325. package/dist/primitives/FileUpload/FileUpload.js.map +1 -0
  326. package/dist/primitives/FileUpload/FileUpload.vue.d.ts +132 -0
  327. package/dist/primitives/FileUpload/FileUpload.vue.d.ts.map +1 -0
  328. package/dist/primitives/FileUpload/FileUpload.vue_vue_type_script_setup_true_lang.js +359 -0
  329. package/dist/primitives/FileUpload/FileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
  330. package/dist/primitives/HoverCard/HoverCard.js +7 -0
  331. package/dist/primitives/HoverCard/HoverCard.js.map +1 -0
  332. package/dist/primitives/HoverCard/HoverCard.vue.d.ts +68 -0
  333. package/dist/primitives/HoverCard/HoverCard.vue.d.ts.map +1 -0
  334. package/dist/primitives/HoverCard/HoverCard.vue_vue_type_script_setup_true_lang.js +62 -0
  335. package/dist/primitives/HoverCard/HoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  336. package/dist/primitives/IconButton/IconButton.js +7 -0
  337. package/dist/primitives/IconButton/IconButton.js.map +1 -0
  338. package/dist/primitives/IconButton/IconButton.vue.d.ts +45 -0
  339. package/dist/primitives/IconButton/IconButton.vue.d.ts.map +1 -0
  340. package/dist/primitives/IconButton/IconButton.vue_vue_type_script_setup_true_lang.js +58 -0
  341. package/dist/primitives/IconButton/IconButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  342. package/dist/primitives/Indicator/Indicator.js +7 -0
  343. package/dist/primitives/Indicator/Indicator.js.map +1 -0
  344. package/dist/primitives/Indicator/Indicator.vue.d.ts +144 -0
  345. package/dist/primitives/Indicator/Indicator.vue.d.ts.map +1 -0
  346. package/dist/primitives/Indicator/Indicator.vue_vue_type_script_setup_true_lang.js +198 -0
  347. package/dist/primitives/Indicator/Indicator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  348. package/dist/primitives/Link/Link.js +7 -0
  349. package/dist/primitives/Link/Link.js.map +1 -0
  350. package/dist/primitives/Link/Link.vue.d.ts +46 -0
  351. package/dist/primitives/Link/Link.vue.d.ts.map +1 -0
  352. package/dist/primitives/Link/Link.vue_vue_type_script_setup_true_lang.js +85 -0
  353. package/dist/primitives/Link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -0
  354. package/dist/primitives/Menubar/Menubar.js.map +1 -1
  355. package/dist/primitives/Menubar/Menubar.vue.d.ts.map +1 -1
  356. package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js +1 -1
  357. package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  358. package/dist/primitives/NumberField/NumberField.js +2 -2
  359. package/dist/primitives/NumberField/NumberField.js.map +1 -1
  360. package/dist/primitives/NumberField/NumberField.vue.d.ts +86 -25
  361. package/dist/primitives/NumberField/NumberField.vue.d.ts.map +1 -1
  362. package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js +83 -39
  363. package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  364. package/dist/primitives/OtpInput/OtpInput.js +7 -0
  365. package/dist/primitives/OtpInput/OtpInput.js.map +1 -0
  366. package/dist/primitives/OtpInput/OtpInput.vue.d.ts +110 -0
  367. package/dist/primitives/OtpInput/OtpInput.vue.d.ts.map +1 -0
  368. package/dist/primitives/OtpInput/OtpInput.vue_vue_type_script_setup_true_lang.js +130 -0
  369. package/dist/primitives/OtpInput/OtpInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  370. package/dist/primitives/Pagination/Pagination.js +7 -0
  371. package/dist/primitives/Pagination/Pagination.js.map +1 -0
  372. package/dist/primitives/Pagination/Pagination.vue.d.ts +143 -0
  373. package/dist/primitives/Pagination/Pagination.vue.d.ts.map +1 -0
  374. package/dist/primitives/Pagination/Pagination.vue_vue_type_script_setup_true_lang.js +231 -0
  375. package/dist/primitives/Pagination/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
  376. package/dist/primitives/Progress/Progress.js +2 -2
  377. package/dist/primitives/Progress/Progress.js.map +1 -1
  378. package/dist/primitives/Progress/Progress.vue.d.ts +81 -15
  379. package/dist/primitives/Progress/Progress.vue.d.ts.map +1 -1
  380. package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js +88 -22
  381. package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  382. package/dist/primitives/RadialProgress/RadialProgress.js +7 -0
  383. package/dist/primitives/RadialProgress/RadialProgress.js.map +1 -0
  384. package/dist/primitives/RadialProgress/RadialProgress.vue.d.ts +96 -0
  385. package/dist/primitives/RadialProgress/RadialProgress.vue.d.ts.map +1 -0
  386. package/dist/primitives/RadialProgress/RadialProgress.vue_vue_type_script_setup_true_lang.js +189 -0
  387. package/dist/primitives/RadialProgress/RadialProgress.vue_vue_type_script_setup_true_lang.js.map +1 -0
  388. package/dist/primitives/RadioGroup/RadioGroup.js.map +1 -1
  389. package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts +7 -7
  390. package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
  391. package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js +26 -9
  392. package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  393. package/dist/primitives/Rating/Rating.js +7 -0
  394. package/dist/primitives/Rating/Rating.js.map +1 -0
  395. package/dist/primitives/Rating/Rating.vue.d.ts +113 -0
  396. package/dist/primitives/Rating/Rating.vue.d.ts.map +1 -0
  397. package/dist/primitives/Rating/Rating.vue_vue_type_script_setup_true_lang.js +282 -0
  398. package/dist/primitives/Rating/Rating.vue_vue_type_script_setup_true_lang.js.map +1 -0
  399. package/dist/primitives/ScrollArea/ScrollArea.js +7 -0
  400. package/dist/primitives/ScrollArea/ScrollArea.js.map +1 -0
  401. package/dist/primitives/ScrollArea/ScrollArea.vue.d.ts +25 -0
  402. package/dist/primitives/ScrollArea/ScrollArea.vue.d.ts.map +1 -0
  403. package/dist/primitives/ScrollArea/ScrollArea.vue_vue_type_script_setup_true_lang.js +45 -0
  404. package/dist/primitives/ScrollArea/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  405. package/dist/primitives/SegmentedControl/SegmentedControl.js.map +1 -1
  406. package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts +5 -5
  407. package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
  408. package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js +51 -8
  409. package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  410. package/dist/primitives/Select/Select.js.map +1 -1
  411. package/dist/primitives/Select/Select.vue.d.ts +10 -10
  412. package/dist/primitives/Select/Select.vue.d.ts.map +1 -1
  413. package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js +105 -52
  414. package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  415. package/dist/primitives/Skeleton/Skeleton.vue.d.ts +1 -1
  416. package/dist/primitives/Slider/Slider.js.map +1 -1
  417. package/dist/primitives/Slider/Slider.vue.d.ts +24 -4
  418. package/dist/primitives/Slider/Slider.vue.d.ts.map +1 -1
  419. package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js +79 -9
  420. package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  421. package/dist/primitives/SpeedDial/SpeedDial.js +7 -0
  422. package/dist/primitives/SpeedDial/SpeedDial.js.map +1 -0
  423. package/dist/primitives/SpeedDial/SpeedDial.vue.d.ts +58 -0
  424. package/dist/primitives/SpeedDial/SpeedDial.vue.d.ts.map +1 -0
  425. package/dist/primitives/SpeedDial/SpeedDial.vue_vue_type_script_setup_true_lang.js +175 -0
  426. package/dist/primitives/SpeedDial/SpeedDial.vue_vue_type_script_setup_true_lang.js.map +1 -0
  427. package/dist/primitives/Stepper/Stepper.js +7 -0
  428. package/dist/primitives/Stepper/Stepper.js.map +1 -0
  429. package/dist/primitives/Stepper/Stepper.vue.d.ts +119 -0
  430. package/dist/primitives/Stepper/Stepper.vue.d.ts.map +1 -0
  431. package/dist/primitives/Stepper/Stepper.vue_vue_type_script_setup_true_lang.js +202 -0
  432. package/dist/primitives/Stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
  433. package/dist/primitives/Switch/Switch.js.map +1 -1
  434. package/dist/primitives/Switch/Switch.vue.d.ts +13 -3
  435. package/dist/primitives/Switch/Switch.vue.d.ts.map +1 -1
  436. package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js +34 -5
  437. package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  438. package/dist/primitives/Tabs/Tabs.js.map +1 -1
  439. package/dist/primitives/Tabs/Tabs.vue.d.ts.map +1 -1
  440. package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js +1 -1
  441. package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  442. package/dist/primitives/TagsInput/TagsInput.js +7 -0
  443. package/dist/primitives/TagsInput/TagsInput.js.map +1 -0
  444. package/dist/primitives/TagsInput/TagsInput.vue.d.ts +156 -0
  445. package/dist/primitives/TagsInput/TagsInput.vue.d.ts.map +1 -0
  446. package/dist/primitives/TagsInput/TagsInput.vue_vue_type_script_setup_true_lang.js +387 -0
  447. package/dist/primitives/TagsInput/TagsInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  448. package/dist/primitives/TextField/TextField.js +2 -2
  449. package/dist/primitives/TextField/TextField.js.map +1 -1
  450. package/dist/primitives/TextField/TextField.vue.d.ts +119 -10
  451. package/dist/primitives/TextField/TextField.vue.d.ts.map +1 -1
  452. package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js +270 -21
  453. package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  454. package/dist/primitives/Textarea/Textarea.js +2 -2
  455. package/dist/primitives/Textarea/Textarea.js.map +1 -1
  456. package/dist/primitives/Textarea/Textarea.vue.d.ts +114 -14
  457. package/dist/primitives/Textarea/Textarea.vue.d.ts.map +1 -1
  458. package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js +216 -20
  459. package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  460. package/dist/primitives/TimePicker/TimePicker.js +7 -0
  461. package/dist/primitives/TimePicker/TimePicker.js.map +1 -0
  462. package/dist/primitives/TimePicker/TimePicker.vue.d.ts +111 -0
  463. package/dist/primitives/TimePicker/TimePicker.vue.d.ts.map +1 -0
  464. package/dist/primitives/TimePicker/TimePicker.vue_vue_type_script_setup_true_lang.js +185 -0
  465. package/dist/primitives/TimePicker/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  466. package/dist/primitives/Toast/Toast.js +2 -1
  467. package/dist/primitives/Toast/Toast.js.map +1 -1
  468. package/dist/primitives/Toast/Toast.vue.d.ts +29 -3
  469. package/dist/primitives/Toast/Toast.vue.d.ts.map +1 -1
  470. package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js +17 -7
  471. package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js.map +1 -1
  472. package/dist/primitives/Toast/ToastItem.js +2 -2
  473. package/dist/primitives/Toast/ToastItem.js.map +1 -1
  474. package/dist/primitives/Toast/ToastItem.vue.d.ts +69 -12
  475. package/dist/primitives/Toast/ToastItem.vue.d.ts.map +1 -1
  476. package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js +23 -23
  477. package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  478. package/dist/primitives/Tooltip/Tooltip.vue.d.ts +1 -1
  479. package/dist/primitives/Tooltip/Tooltip.vue.d.ts.map +1 -1
  480. package/dist/primitives/WindowControls/WindowControls.js +2 -2
  481. package/dist/primitives/WindowControls/WindowControls.js.map +1 -1
  482. package/dist/primitives/WindowControls/WindowControls.vue.d.ts +66 -10
  483. package/dist/primitives/WindowControls/WindowControls.vue.d.ts.map +1 -1
  484. package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js +23 -13
  485. package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js.map +1 -1
  486. package/dist/styles/global.css +116 -17
  487. package/dist/styles/theme.contrast.test.ts +460 -0
  488. package/dist/styles/theme.css +239 -41
  489. package/dist/theme.js +171 -0
  490. package/dist/theme.js.map +1 -0
  491. package/package.json +14 -4
  492. package/dist/icons/BrandMark.d.ts +0 -18
  493. package/dist/icons/BrandMark.d.ts.map +0 -1
  494. package/dist/icons/BrandMark.js +0 -47
  495. package/dist/icons/BrandMark.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * ErrorState — the shape of "something went wrong": icon → title → optional
3
+ * description → optional retry action, centered in the error region. This is
4
+ * EmptyState's mirror: where that block says "nothing here yet" and invites
5
+ * the next step, this one says "something broke" and offers a retry.
6
+ *
7
+ * No staggered entrance. EmptyState is content appearing — a welcome, budgeted
8
+ * like a panel reveal. An error is not content; it is a problem that needs
9
+ * attention now, and a fade-rise film that delays the message reads as
10
+ * indifference. Everything renders at once.
11
+ *
12
+ * The icon sits in a hairline medallion — the same shape as EmptyState's, but
13
+ * tinted `bg-destructive/10` with a `border-destructive/30` ring — because a
14
+ * bare glyph in a region that already signals alarm has no anchor and the
15
+ * colour alone does the work that EmptyState's neutral medallion needed
16
+ * `bg-subtle` for. The icon is decorative and `aria-hidden`; the title already
17
+ * carries the meaning.
18
+ *
19
+ * The action slot is semantically a retry affordance but remains a generic
20
+ * slot — the host owns the wording and behaviour, and no fallback copy ships
21
+ * with the component.
22
+ */
23
+ type __VLS_Props = {
24
+ /** What went wrong, stated plainly — always shown. */
25
+ title: string;
26
+ /** More context about the error. Omit rather than pad the region with filler copy. */
27
+ description?: string;
28
+ };
29
+ declare var __VLS_1: {}, __VLS_3: {};
30
+ type __VLS_Slots = {} & {
31
+ icon?: (props: typeof __VLS_1) => any;
32
+ } & {
33
+ action?: (props: typeof __VLS_3) => any;
34
+ };
35
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
+ declare const _default: typeof __VLS_export;
38
+ export default _default;
39
+ type __VLS_WithSlots<T, S> = T & {
40
+ new (): {
41
+ $slots: S;
42
+ };
43
+ };
44
+ //# sourceMappingURL=ErrorState.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorState.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/ErrorState/ErrorState.vue"],"names":[],"mappings":"AAsDA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,KAAK,WAAW,GAAG;IACjB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAwEF,QAAA,IAAI,OAAO,IAAU,EAAE,OAAO,IAAW,CAAE;AAC3C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GACzC;IAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK9C,QAAA,MAAM,UAAU,kSAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderSlot, toDisplayString } from "vue";
2
+ //#region src/blocks/ErrorState/ErrorState.vue?vue&type=script&setup=true&lang.ts
3
+ var _hoisted_1 = { class: "flex flex-col items-center justify-center gap-1.5 px-6 py-10 text-center sm:py-14" };
4
+ var _hoisted_2 = {
5
+ key: 0,
6
+ "aria-hidden": "true",
7
+ class: "grid h-12 w-12 place-items-center rounded-full border border-destructive/30 bg-destructive/10 text-destructive [&_svg]:h-5 [&_svg]:w-5"
8
+ };
9
+ var _hoisted_3 = { class: "text-title text-foreground" };
10
+ var _hoisted_4 = {
11
+ key: 1,
12
+ class: "max-w-sm text-balance text-small text-muted-foreground"
13
+ };
14
+ var _hoisted_5 = {
15
+ key: 2,
16
+ class: "mt-4"
17
+ };
18
+ var ErrorState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
19
+ __name: "ErrorState",
20
+ props: {
21
+ title: {},
22
+ description: {}
23
+ },
24
+ setup(__props) {
25
+ /**
26
+ * ErrorState — the shape of "something went wrong": icon → title → optional
27
+ * description → optional retry action, centered in the error region. This is
28
+ * EmptyState's mirror: where that block says "nothing here yet" and invites
29
+ * the next step, this one says "something broke" and offers a retry.
30
+ *
31
+ * No staggered entrance. EmptyState is content appearing — a welcome, budgeted
32
+ * like a panel reveal. An error is not content; it is a problem that needs
33
+ * attention now, and a fade-rise film that delays the message reads as
34
+ * indifference. Everything renders at once.
35
+ *
36
+ * The icon sits in a hairline medallion — the same shape as EmptyState's, but
37
+ * tinted `bg-destructive/10` with a `border-destructive/30` ring — because a
38
+ * bare glyph in a region that already signals alarm has no anchor and the
39
+ * colour alone does the work that EmptyState's neutral medallion needed
40
+ * `bg-subtle` for. The icon is decorative and `aria-hidden`; the title already
41
+ * carries the meaning.
42
+ *
43
+ * The action slot is semantically a retry affordance but remains a generic
44
+ * slot — the host owns the wording and behaviour, and no fallback copy ships
45
+ * with the component.
46
+ */
47
+ return (_ctx, _cache) => {
48
+ return openBlock(), createElementBlock("div", _hoisted_1, [
49
+ _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
50
+ createElementVNode("p", _hoisted_3, toDisplayString(__props.title), 1),
51
+ __props.description ? (openBlock(), createElementBlock("p", _hoisted_4, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
52
+ _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
53
+ ]);
54
+ };
55
+ }
56
+ });
57
+ //#endregion
58
+ export { ErrorState_vue_vue_type_script_setup_true_lang_default as default };
59
+
60
+ //# sourceMappingURL=ErrorState.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorState.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/blocks/ErrorState/ErrorState.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * ErrorState — the shape of \"something went wrong\": icon → title → optional\n * description → optional retry action, centered in the error region. This is\n * EmptyState's mirror: where that block says \"nothing here yet\" and invites\n * the next step, this one says \"something broke\" and offers a retry.\n *\n * No staggered entrance. EmptyState is content appearing — a welcome, budgeted\n * like a panel reveal. An error is not content; it is a problem that needs\n * attention now, and a fade-rise film that delays the message reads as\n * indifference. Everything renders at once.\n *\n * The icon sits in a hairline medallion — the same shape as EmptyState's, but\n * tinted `bg-destructive/10` with a `border-destructive/30` ring — because a\n * bare glyph in a region that already signals alarm has no anchor and the\n * colour alone does the work that EmptyState's neutral medallion needed\n * `bg-subtle` for. The icon is decorative and `aria-hidden`; the title already\n * carries the meaning.\n *\n * The action slot is semantically a retry affordance but remains a generic\n * slot — the host owns the wording and behaviour, and no fallback copy ships\n * with the component.\n */\ndefineProps<{\n /** What went wrong, stated plainly — always shown. */\n title: string;\n /** More context about the error. Omit rather than pad the region with filler copy. */\n description?: string;\n}>();\n</script>\n\n<template>\n <div class=\"flex flex-col items-center justify-center gap-1.5 px-6 py-10 text-center sm:py-14\">\n <div\n v-if=\"$slots.icon\"\n aria-hidden=\"true\"\n class=\"grid h-12 w-12 place-items-center rounded-full border border-destructive/30 bg-destructive/10 text-destructive [&_svg]:h-5 [&_svg]:w-5\"\n >\n <slot name=\"icon\" />\n </div>\n <p class=\"text-title text-foreground\">\n {{ title }}\n </p>\n <p v-if=\"description\" class=\"max-w-sm text-balance text-small text-muted-foreground\">\n {{ description }}\n </p>\n <div v-if=\"$slots.action\" class=\"mt-4\">\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCE,OAAA,UAAA,GAAA,mBAiBM,OAjBN,YAiBM;IAfIA,KAAAA,OAAO,QADf,UAAA,GAAA,mBAMM,OANN,YAMM,CADJ,WAAoB,KAAA,QAAA,MAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAEtB,mBAEI,KAFJ,YAEI,gBADC,QAAA,KAAK,GAAA,CAAA;IAED,QAAA,eAAT,UAAA,GAAA,mBAEI,KAFJ,YAEI,gBADC,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAELA,KAAAA,OAAO,UAAlB,UAAA,GAAA,mBAEM,OAFN,YAEM,CADJ,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA"}
@@ -0,0 +1,7 @@
1
+ import FormActions_vue_vue_type_script_setup_true_lang_default from "./FormActions.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/blocks/FormActions/FormActions.vue
3
+ var FormActions_default = FormActions_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { FormActions_default as default };
6
+
7
+ //# sourceMappingURL=FormActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.js","names":[],"sources":["../../../src/blocks/FormActions/FormActions.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormActions — the submit/cancel button row at the bottom of a form. A block\n * that owns the layout of form actions so every form in the product has the\n * same action alignment: primary action right, cancel left, separated from the\n * form content by a top border.\n *\n * The block exists because \"submit right, cancel left\" is a layout decision\n * repeated in every form, and getting the spacing and alignment wrong is easy.\n * It owns the geometry; the host owns the button text and behavior.\n *\n * The default slot carries the primary actions (submit, save) and the `cancel`\n * slot carries the secondary action. In \"between\" mode the two slots sit at\n * opposite ends; in \"right\" or \"left\" mode everything goes through the default\n * slot, shifted to one side.\n */\nexport type FormActionsAlign = \"right\" | \"left\" | \"between\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /**\n * How the action row distributes its content.\n * - \"between\": cancel slot left, primary actions right (default — the\n * arrangement most forms need)\n * - \"right\": all actions pushed right (short forms, single CTA)\n * - \"left\": all actions pushed left (right-to-left locales, or a design\n * that calls for it)\n */\n align?: FormActionsAlign;\n }>(),\n { align: \"between\" },\n);\n\nconst justify: Record<FormActionsAlign, string> = {\n between: \"justify-between\",\n right: \"justify-end\",\n left: \"justify-start\",\n};\n</script>\n\n<template>\n <!-- border-t separates the actions from the form content above without\n needing a wrapping section or extra spacing rules -->\n <div :class=\"cn('flex items-center gap-3 border-t border-border pt-6', justify[align])\">\n <!-- @slot The secondary/cancel action — placed on the left in \"between\" mode. -->\n <slot name=\"cancel\" />\n <!-- @slot The primary actions (submit, save) — placed on the right in \"between\" mode. -->\n <slot />\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * FormActions — the submit/cancel button row at the bottom of a form. A block
3
+ * that owns the layout of form actions so every form in the product has the
4
+ * same action alignment: primary action right, cancel left, separated from the
5
+ * form content by a top border.
6
+ *
7
+ * The block exists because "submit right, cancel left" is a layout decision
8
+ * repeated in every form, and getting the spacing and alignment wrong is easy.
9
+ * It owns the geometry; the host owns the button text and behavior.
10
+ *
11
+ * The default slot carries the primary actions (submit, save) and the `cancel`
12
+ * slot carries the secondary action. In "between" mode the two slots sit at
13
+ * opposite ends; in "right" or "left" mode everything goes through the default
14
+ * slot, shifted to one side.
15
+ */
16
+ export type FormActionsAlign = "right" | "left" | "between";
17
+ declare const _default: typeof __VLS_export;
18
+ export default _default;
19
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
20
+ /**
21
+ * How the action row distributes its content.
22
+ * - "between": cancel slot left, primary actions right (default — the
23
+ * arrangement most forms need)
24
+ * - "right": all actions pushed right (short forms, single CTA)
25
+ * - "left": all actions pushed left (right-to-left locales, or a design
26
+ * that calls for it)
27
+ */
28
+ align?: FormActionsAlign;
29
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
30
+ /**
31
+ * How the action row distributes its content.
32
+ * - "between": cancel slot left, primary actions right (default — the
33
+ * arrangement most forms need)
34
+ * - "right": all actions pushed right (short forms, single CTA)
35
+ * - "left": all actions pushed left (right-to-left locales, or a design
36
+ * that calls for it)
37
+ */
38
+ align?: FormActionsAlign;
39
+ }> & Readonly<{}>, {
40
+ align: FormActionsAlign;
41
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
42
+ cancel?: (props: {}) => any;
43
+ } & {
44
+ default?: (props: {}) => any;
45
+ }>;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
51
+ //# sourceMappingURL=FormActions.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/FormActions/FormActions.vue"],"names":[],"mappings":"AA4DA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;wBACvC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd;;;;;;;OAOG;YACK,gBAAgB;;IARxB;;;;;;;OAOG;YACK,gBAAgB;;WAAhB,gBAAgB;;aA0Cf,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
+ //#region src/blocks/FormActions/FormActions.vue?vue&type=script&setup=true&lang.ts
4
+ var FormActions_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
+ __name: "FormActions",
6
+ props: { align: { default: "between" } },
7
+ setup(__props) {
8
+ const justify = {
9
+ between: "justify-between",
10
+ right: "justify-end",
11
+ left: "justify-start"
12
+ };
13
+ return (_ctx, _cache) => {
14
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("flex items-center gap-3 border-t border-border pt-6", justify[__props.align])) }, [renderSlot(_ctx.$slots, "cancel"), renderSlot(_ctx.$slots, "default")], 2);
15
+ };
16
+ }
17
+ });
18
+ //#endregion
19
+ export { FormActions_vue_vue_type_script_setup_true_lang_default as default };
20
+
21
+ //# sourceMappingURL=FormActions.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/blocks/FormActions/FormActions.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormActions — the submit/cancel button row at the bottom of a form. A block\n * that owns the layout of form actions so every form in the product has the\n * same action alignment: primary action right, cancel left, separated from the\n * form content by a top border.\n *\n * The block exists because \"submit right, cancel left\" is a layout decision\n * repeated in every form, and getting the spacing and alignment wrong is easy.\n * It owns the geometry; the host owns the button text and behavior.\n *\n * The default slot carries the primary actions (submit, save) and the `cancel`\n * slot carries the secondary action. In \"between\" mode the two slots sit at\n * opposite ends; in \"right\" or \"left\" mode everything goes through the default\n * slot, shifted to one side.\n */\nexport type FormActionsAlign = \"right\" | \"left\" | \"between\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /**\n * How the action row distributes its content.\n * - \"between\": cancel slot left, primary actions right (default — the\n * arrangement most forms need)\n * - \"right\": all actions pushed right (short forms, single CTA)\n * - \"left\": all actions pushed left (right-to-left locales, or a design\n * that calls for it)\n */\n align?: FormActionsAlign;\n }>(),\n { align: \"between\" },\n);\n\nconst justify: Record<FormActionsAlign, string> = {\n between: \"justify-between\",\n right: \"justify-end\",\n left: \"justify-start\",\n};\n</script>\n\n<template>\n <!-- border-t separates the actions from the form content above without\n needing a wrapping section or extra spacing rules -->\n <div :class=\"cn('flex items-center gap-3 border-t border-border pt-6', justify[align])\">\n <!-- @slot The secondary/cancel action — placed on the left in \"between\" mode. -->\n <slot name=\"cancel\" />\n <!-- @slot The primary actions (submit, save) — placed on the right in \"between\" mode. -->\n <slot />\n </div>\n</template>\n"],"mappings":";;;;;;;EAqCA,MAAM,UAA4C;GAChD,SAAS;GACT,OAAO;GACP,MAAM;EACR;;GAME,OAAA,UAAA,GAAA,mBAKM,OAAA,EALA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,uDAAwD,QAAQ,QAAA,MAAK,CAAA,EAAA,GAAA,CAElF,WAAsB,KAAA,QAAA,QAAA,GAEtB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import FormSection_vue_vue_type_script_setup_true_lang_default, { gapClass } from "./FormSection.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/blocks/FormSection/FormSection.vue
3
+ var FormSection_default = FormSection_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { FormSection_default as default, gapClass };
6
+
7
+ //# sourceMappingURL=FormSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.js","names":[],"sources":["../../../src/blocks/FormSection/FormSection.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormSection — a labeled group of form fields with an optional\n * description, the arrangement every form page reaches for repeatedly: a\n * Fieldset (for the accessible `<fieldset>/<legend>` semantics, disabled/\n * readonly propagation, and hint/error line) with vertical Stack spacing\n * between the fields.\n *\n * The block exists because that composition is written at every form page\n * and the spacing between sections is a layout decision it can own once.\n * It is a thin convenience over Fieldset, not a replacement: when a group\n * needs a shape FormSection does not offer, Fieldset is still the right\n * primitive.\n *\n * `description` is NOT Fieldset's `hint`. The description sits between the\n * legend and the fields — it orients the person filling the form (\"Where\n * should we ship your order?\"). The hint sits below the fields and\n * supplements the controls themselves (\"Street address, P.O. box, or\n * military address\"). They serve different readers at different points in\n * the form and both can be present at once.\n */\nexport type FormSectionGap = \"sm\" | \"md\" | \"lg\";\n\nconst gapClass: Record<FormSectionGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport Fieldset from \"../../primitives/Fieldset/Fieldset.vue\";\nimport { cn } from \"../../lib/cn\";\nimport { optional } from \"../../lib/props\";\n\nwithDefaults(\n defineProps<{\n /** The section title — rendered as a real `<legend>` by Fieldset. */\n legend?: string;\n /**\n * Supporting text shown below the legend, above the fields.\n * NOT the same as `hint`, which sits below the fields — this orients the\n * person filling the form, while `hint` supplements the controls.\n */\n description?: string;\n /** Forwarded to Fieldset: supporting text shown below the group. Hidden while `error` is set. */\n hint?: string;\n /** Forwarded to Fieldset: the group's error message. Replaces `hint`. */\n error?: string;\n /** Forwarded to Fieldset: marks the group mandatory and appends a destructive asterisk. */\n required?: boolean;\n /** Forwarded to Fieldset: disables every control inside, slotted ones included. */\n disabled?: boolean;\n /** Forwarded to Fieldset: renders every Loom control inside read-only. */\n readonly?: boolean | undefined;\n /** Forwarded to Fieldset: set on the `<fieldset>`, used to derive the hint/error id. */\n id?: string;\n /** Gap between fields — mirrors Stack's gap scale. */\n gap?: FormSectionGap;\n }>(),\n {\n required: false,\n disabled: false,\n // Explicitly `undefined`, not `false`: matches Fieldset's own default so\n // an absent prop does not overrule a Field or control that set it.\n readonly: undefined,\n gap: \"md\",\n },\n);\n</script>\n\n<template>\n <Fieldset\n v-bind=\"optional({ legend, hint, error, id })\"\n :required=\"required\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n >\n <p v-if=\"description\" class=\"max-w-prose text-small text-muted-foreground\">\n {{ description }}\n </p>\n <div :class=\"cn('flex flex-col', gapClass[gap])\">\n <!-- @slot The form fields in the section. -->\n <slot />\n </div>\n </Fieldset>\n</template>\n"],"mappings":""}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * FormSection — a labeled group of form fields with an optional
3
+ * description, the arrangement every form page reaches for repeatedly: a
4
+ * Fieldset (for the accessible `<fieldset>/<legend>` semantics, disabled/
5
+ * readonly propagation, and hint/error line) with vertical Stack spacing
6
+ * between the fields.
7
+ *
8
+ * The block exists because that composition is written at every form page
9
+ * and the spacing between sections is a layout decision it can own once.
10
+ * It is a thin convenience over Fieldset, not a replacement: when a group
11
+ * needs a shape FormSection does not offer, Fieldset is still the right
12
+ * primitive.
13
+ *
14
+ * `description` is NOT Fieldset's `hint`. The description sits between the
15
+ * legend and the fields — it orients the person filling the form ("Where
16
+ * should we ship your order?"). The hint sits below the fields and
17
+ * supplements the controls themselves ("Street address, P.O. box, or
18
+ * military address"). They serve different readers at different points in
19
+ * the form and both can be present at once.
20
+ */
21
+ export type FormSectionGap = "sm" | "md" | "lg";
22
+ declare const gapClass: Record<FormSectionGap, string>;
23
+ export { gapClass };
24
+ declare const _default: typeof __VLS_export;
25
+ export default _default;
26
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
27
+ /** The section title — rendered as a real `<legend>` by Fieldset. */
28
+ legend?: string;
29
+ /**
30
+ * Supporting text shown below the legend, above the fields.
31
+ * NOT the same as `hint`, which sits below the fields — this orients the
32
+ * person filling the form, while `hint` supplements the controls.
33
+ */
34
+ description?: string;
35
+ /** Forwarded to Fieldset: supporting text shown below the group. Hidden while `error` is set. */
36
+ hint?: string;
37
+ /** Forwarded to Fieldset: the group's error message. Replaces `hint`. */
38
+ error?: string;
39
+ /** Forwarded to Fieldset: marks the group mandatory and appends a destructive asterisk. */
40
+ required?: boolean;
41
+ /** Forwarded to Fieldset: disables every control inside, slotted ones included. */
42
+ disabled?: boolean;
43
+ /** Forwarded to Fieldset: renders every Loom control inside read-only. */
44
+ readonly?: boolean | undefined;
45
+ /** Forwarded to Fieldset: set on the `<fieldset>`, used to derive the hint/error id. */
46
+ id?: string;
47
+ /** Gap between fields — mirrors Stack's gap scale. */
48
+ gap?: FormSectionGap;
49
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
50
+ /** The section title — rendered as a real `<legend>` by Fieldset. */
51
+ legend?: string;
52
+ /**
53
+ * Supporting text shown below the legend, above the fields.
54
+ * NOT the same as `hint`, which sits below the fields — this orients the
55
+ * person filling the form, while `hint` supplements the controls.
56
+ */
57
+ description?: string;
58
+ /** Forwarded to Fieldset: supporting text shown below the group. Hidden while `error` is set. */
59
+ hint?: string;
60
+ /** Forwarded to Fieldset: the group's error message. Replaces `hint`. */
61
+ error?: string;
62
+ /** Forwarded to Fieldset: marks the group mandatory and appends a destructive asterisk. */
63
+ required?: boolean;
64
+ /** Forwarded to Fieldset: disables every control inside, slotted ones included. */
65
+ disabled?: boolean;
66
+ /** Forwarded to Fieldset: renders every Loom control inside read-only. */
67
+ readonly?: boolean | undefined;
68
+ /** Forwarded to Fieldset: set on the `<fieldset>`, used to derive the hint/error id. */
69
+ id?: string;
70
+ /** Gap between fields — mirrors Stack's gap scale. */
71
+ gap?: FormSectionGap;
72
+ }> & Readonly<{}>, {
73
+ gap: FormSectionGap;
74
+ disabled: boolean;
75
+ readonly: boolean | undefined;
76
+ required: boolean;
77
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
78
+ default?: (props: {}) => any;
79
+ }>;
80
+ type __VLS_WithSlots<T, S> = T & {
81
+ new (): {
82
+ $slots: S;
83
+ };
84
+ };
85
+ //# sourceMappingURL=FormSection.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/FormSection/FormSection.vue"],"names":[],"mappings":"AAiGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAInC,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,qEAAqE;aAC5D,MAAM;IACf;;;;OAIG;kBACW,MAAM;IACpB,iGAAiG;WAC1F,MAAM;IACb,yEAAyE;YACjE,MAAM;IACd,2FAA2F;eAChF,OAAO;IAClB,mFAAmF;eACxE,OAAO;IAClB,0EAA0E;eAC/D,OAAO,GAAG,SAAS;IAC9B,wFAAwF;SACnF,MAAM;IACX,sDAAsD;UAChD,cAAc;;IArBpB,qEAAqE;aAC5D,MAAM;IACf;;;;OAIG;kBACW,MAAM;IACpB,iGAAiG;WAC1F,MAAM;IACb,yEAAyE;YACjE,MAAM;IACd,2FAA2F;eAChF,OAAO;IAClB,mFAAmF;eACxE,OAAO;IAClB,0EAA0E;eAC/D,OAAO,GAAG,SAAS;IAC9B,wFAAwF;SACnF,MAAM;IACX,sDAAsD;UAChD,cAAc;;SAAd,cAAc;cANT,OAAO;cAEP,OAAO,GAAG,SAAS;cAJnB,OAAO;;cAqFR,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { optional } from "../../lib/props.js";
3
+ import Fieldset_default from "../../primitives/Fieldset/Fieldset.js";
4
+ import { createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
5
+ //#region src/blocks/FormSection/FormSection.vue?vue&type=script&setup=true&lang.ts
6
+ var _hoisted_1 = {
7
+ key: 0,
8
+ class: "max-w-prose text-small text-muted-foreground"
9
+ };
10
+ var gapClass = {
11
+ sm: "gap-2 sm:gap-3",
12
+ md: "gap-3 sm:gap-4",
13
+ lg: "gap-4 sm:gap-6"
14
+ };
15
+ var FormSection_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
16
+ __name: "FormSection",
17
+ props: {
18
+ legend: {},
19
+ description: {},
20
+ hint: {},
21
+ error: {},
22
+ required: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ disabled: {
27
+ type: Boolean,
28
+ default: false
29
+ },
30
+ readonly: {
31
+ type: Boolean,
32
+ default: void 0
33
+ },
34
+ id: {},
35
+ gap: { default: "md" }
36
+ },
37
+ setup(__props) {
38
+ return (_ctx, _cache) => {
39
+ return openBlock(), createBlock(Fieldset_default, mergeProps(unref(optional)({
40
+ legend: __props.legend,
41
+ hint: __props.hint,
42
+ error: __props.error,
43
+ id: __props.id
44
+ }), {
45
+ required: __props.required,
46
+ disabled: __props.disabled,
47
+ readonly: __props.readonly
48
+ }), {
49
+ default: withCtx(() => [__props.description ? (openBlock(), createElementBlock("p", _hoisted_1, toDisplayString(__props.description), 1)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(cn)("flex flex-col", gapClass[__props.gap])) }, [renderSlot(_ctx.$slots, "default")], 2)]),
50
+ _: 3
51
+ }, 16, [
52
+ "required",
53
+ "disabled",
54
+ "readonly"
55
+ ]);
56
+ };
57
+ }
58
+ });
59
+ //#endregion
60
+ export { FormSection_vue_vue_type_script_setup_true_lang_default as default, gapClass };
61
+
62
+ //# sourceMappingURL=FormSection.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/blocks/FormSection/FormSection.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormSection — a labeled group of form fields with an optional\n * description, the arrangement every form page reaches for repeatedly: a\n * Fieldset (for the accessible `<fieldset>/<legend>` semantics, disabled/\n * readonly propagation, and hint/error line) with vertical Stack spacing\n * between the fields.\n *\n * The block exists because that composition is written at every form page\n * and the spacing between sections is a layout decision it can own once.\n * It is a thin convenience over Fieldset, not a replacement: when a group\n * needs a shape FormSection does not offer, Fieldset is still the right\n * primitive.\n *\n * `description` is NOT Fieldset's `hint`. The description sits between the\n * legend and the fields — it orients the person filling the form (\"Where\n * should we ship your order?\"). The hint sits below the fields and\n * supplements the controls themselves (\"Street address, P.O. box, or\n * military address\"). They serve different readers at different points in\n * the form and both can be present at once.\n */\nexport type FormSectionGap = \"sm\" | \"md\" | \"lg\";\n\nconst gapClass: Record<FormSectionGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport Fieldset from \"../../primitives/Fieldset/Fieldset.vue\";\nimport { cn } from \"../../lib/cn\";\nimport { optional } from \"../../lib/props\";\n\nwithDefaults(\n defineProps<{\n /** The section title — rendered as a real `<legend>` by Fieldset. */\n legend?: string;\n /**\n * Supporting text shown below the legend, above the fields.\n * NOT the same as `hint`, which sits below the fields — this orients the\n * person filling the form, while `hint` supplements the controls.\n */\n description?: string;\n /** Forwarded to Fieldset: supporting text shown below the group. Hidden while `error` is set. */\n hint?: string;\n /** Forwarded to Fieldset: the group's error message. Replaces `hint`. */\n error?: string;\n /** Forwarded to Fieldset: marks the group mandatory and appends a destructive asterisk. */\n required?: boolean;\n /** Forwarded to Fieldset: disables every control inside, slotted ones included. */\n disabled?: boolean;\n /** Forwarded to Fieldset: renders every Loom control inside read-only. */\n readonly?: boolean | undefined;\n /** Forwarded to Fieldset: set on the `<fieldset>`, used to derive the hint/error id. */\n id?: string;\n /** Gap between fields — mirrors Stack's gap scale. */\n gap?: FormSectionGap;\n }>(),\n {\n required: false,\n disabled: false,\n // Explicitly `undefined`, not `false`: matches Fieldset's own default so\n // an absent prop does not overrule a Field or control that set it.\n readonly: undefined,\n gap: \"md\",\n },\n);\n</script>\n\n<template>\n <Fieldset\n v-bind=\"optional({ legend, hint, error, id })\"\n :required=\"required\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n >\n <p v-if=\"description\" class=\"max-w-prose text-small text-muted-foreground\">\n {{ description }}\n </p>\n <div :class=\"cn('flex flex-col', gapClass[gap])\">\n <!-- @slot The form fields in the section. -->\n <slot />\n </div>\n </Fieldset>\n</template>\n"],"mappings":";;;;;;;;;AAuBA,IAAM,WAA2C;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;;;;;;;;;;;;;;;;;GA+CE,OAAA,UAAA,GAAA,YAaW,kBAbX,WACU,MAYC,QAAA,CAZO,CAAA;IAAA,QAAG,QAAA;IAAM,MAAE,QAAA;IAAI,OAAE,QAAA;IAAK,IAAE,QAAA;GAAE,CAAA,GAAA;IACzC,UAAU,QAAA;IACV,UAAU,QAAA;IACV,UAAU,QAAA;;IAEX,SAAA,cAEI,CAFK,QAAA,eAAT,UAAA,GAAA,mBAEI,KAFJ,YAEI,gBADC,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAEhB,mBAGM,OAAA,EAHA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,iBAAkB,SAAS,QAAA,IAAG,CAAA,EAAA,GAAA,CAE3C,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import LoadingState_vue_vue_type_script_setup_true_lang_default from "./LoadingState.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/blocks/LoadingState/LoadingState.vue
3
+ var LoadingState_default = LoadingState_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { LoadingState_default as default };
6
+
7
+ //# sourceMappingURL=LoadingState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingState.js","names":[],"sources":["../../../src/blocks/LoadingState/LoadingState.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * LoadingState — the shape of \"not yet known\": a Spinner for short waits or a\n * column of skeleton lines for content-shaped waits. This replaces the \"flash\n * of EmptyState\" antipattern — never show EmptyState before the real result is\n * known, because an empty state that flickers and disappears is a short-lived\n * lie.\n *\n * Two modes controlled by `mode`:\n * - `spinner` (default): centred Spinner with an optional label. Good for\n * indeterminate waits where the host does not know the content shape.\n * - `skeleton`: a column of skeleton lines that approximate the content the\n * host is loading. The default lines are three bars of varying width — enough\n * to suggest paragraph-shaped content without the host having to compose\n * anything. Hosts that know their own shape provide a default slot and render\n * whatever Skeleton arrangement matches their real layout.\n *\n * The Spinner carries its own accessible label (`aria-label` on the primitive)\n * so this block does not add a redundant one. The skeleton lines are purely\n * decorative (`aria-hidden` on each Skeleton) — the host's real content will\n * replace them.\n */\nimport Spinner from \"../../primitives/Spinner/Spinner.vue\";\nimport Skeleton from \"../../primitives/Skeleton/Skeleton.vue\";\n\nwithDefaults(\n defineProps<{\n /** Shown below the spinner in spinner mode. Omit for a spinner-only wait. */\n label?: string;\n /** `spinner` for short indeterminate waits; `skeleton` for content-shaped waits. */\n mode?: \"spinner\" | \"skeleton\";\n }>(),\n { mode: \"spinner\" },\n);\n</script>\n\n<template>\n <div\n v-if=\"mode === 'spinner'\"\n class=\"flex flex-col items-center justify-center gap-3 px-6 py-10 sm:py-14\"\n >\n <Spinner size=\"lg\" />\n <p v-if=\"label\" class=\"text-small text-muted-foreground\">{{ label }}</p>\n </div>\n <div v-else class=\"flex flex-col gap-3 px-6 py-10 sm:py-14\">\n <slot>\n <!-- Default skeleton lines approximate paragraph-shaped content without\n requiring the host to compose anything. Hosts that know their own\n shape slot their own Skeleton arrangement instead. -->\n <Skeleton class=\"h-4 w-full\" />\n <Skeleton class=\"h-4 w-3/4\" />\n <Skeleton class=\"h-4 w-5/6\" />\n </slot>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,22 @@
1
+ type __VLS_Props = {
2
+ /** Shown below the spinner in spinner mode. Omit for a spinner-only wait. */
3
+ label?: string;
4
+ /** `spinner` for short indeterminate waits; `skeleton` for content-shaped waits. */
5
+ mode?: "spinner" | "skeleton";
6
+ };
7
+ declare var __VLS_6: {};
8
+ type __VLS_Slots = {} & {
9
+ default?: (props: typeof __VLS_6) => any;
10
+ };
11
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
+ mode: "spinner" | "skeleton";
13
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
17
+ type __VLS_WithSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };
22
+ //# sourceMappingURL=LoadingState.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingState.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/LoadingState/LoadingState.vue"],"names":[],"mappings":"AAkFA,KAAK,WAAW,GAAG;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CAC/B,CAAC;AA6FJ,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU;UArGL,SAAS,GAAG,UAAU;6EAwG/B,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,57 @@
1
+ import Skeleton_default from "../../primitives/Skeleton/Skeleton.js";
2
+ import Spinner_default from "../../primitives/Spinner/Spinner.js";
3
+ import { createCommentVNode, createElementBlock, createVNode, defineComponent, openBlock, renderSlot, toDisplayString } from "vue";
4
+ //#region src/blocks/LoadingState/LoadingState.vue?vue&type=script&setup=true&lang.ts
5
+ var _hoisted_1 = {
6
+ key: 0,
7
+ class: "flex flex-col items-center justify-center gap-3 px-6 py-10 sm:py-14"
8
+ };
9
+ var _hoisted_2 = {
10
+ key: 0,
11
+ class: "text-small text-muted-foreground"
12
+ };
13
+ var _hoisted_3 = {
14
+ key: 1,
15
+ class: "flex flex-col gap-3 px-6 py-10 sm:py-14"
16
+ };
17
+ var LoadingState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
18
+ __name: "LoadingState",
19
+ props: {
20
+ label: {},
21
+ mode: { default: "spinner" }
22
+ },
23
+ setup(__props) {
24
+ /**
25
+ * LoadingState — the shape of "not yet known": a Spinner for short waits or a
26
+ * column of skeleton lines for content-shaped waits. This replaces the "flash
27
+ * of EmptyState" antipattern — never show EmptyState before the real result is
28
+ * known, because an empty state that flickers and disappears is a short-lived
29
+ * lie.
30
+ *
31
+ * Two modes controlled by `mode`:
32
+ * - `spinner` (default): centred Spinner with an optional label. Good for
33
+ * indeterminate waits where the host does not know the content shape.
34
+ * - `skeleton`: a column of skeleton lines that approximate the content the
35
+ * host is loading. The default lines are three bars of varying width — enough
36
+ * to suggest paragraph-shaped content without the host having to compose
37
+ * anything. Hosts that know their own shape provide a default slot and render
38
+ * whatever Skeleton arrangement matches their real layout.
39
+ *
40
+ * The Spinner carries its own accessible label (`aria-label` on the primitive)
41
+ * so this block does not add a redundant one. The skeleton lines are purely
42
+ * decorative (`aria-hidden` on each Skeleton) — the host's real content will
43
+ * replace them.
44
+ */
45
+ return (_ctx, _cache) => {
46
+ return __props.mode === "spinner" ? (openBlock(), createElementBlock("div", _hoisted_1, [createVNode(Spinner_default, { size: "lg" }), __props.label ? (openBlock(), createElementBlock("p", _hoisted_2, toDisplayString(__props.label), 1)) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("div", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, () => [
47
+ createVNode(Skeleton_default, { class: "h-4 w-full" }),
48
+ createVNode(Skeleton_default, { class: "h-4 w-3/4" }),
49
+ createVNode(Skeleton_default, { class: "h-4 w-5/6" })
50
+ ])]));
51
+ };
52
+ }
53
+ });
54
+ //#endregion
55
+ export { LoadingState_vue_vue_type_script_setup_true_lang_default as default };
56
+
57
+ //# sourceMappingURL=LoadingState.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingState.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/blocks/LoadingState/LoadingState.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * LoadingState — the shape of \"not yet known\": a Spinner for short waits or a\n * column of skeleton lines for content-shaped waits. This replaces the \"flash\n * of EmptyState\" antipattern — never show EmptyState before the real result is\n * known, because an empty state that flickers and disappears is a short-lived\n * lie.\n *\n * Two modes controlled by `mode`:\n * - `spinner` (default): centred Spinner with an optional label. Good for\n * indeterminate waits where the host does not know the content shape.\n * - `skeleton`: a column of skeleton lines that approximate the content the\n * host is loading. The default lines are three bars of varying width — enough\n * to suggest paragraph-shaped content without the host having to compose\n * anything. Hosts that know their own shape provide a default slot and render\n * whatever Skeleton arrangement matches their real layout.\n *\n * The Spinner carries its own accessible label (`aria-label` on the primitive)\n * so this block does not add a redundant one. The skeleton lines are purely\n * decorative (`aria-hidden` on each Skeleton) — the host's real content will\n * replace them.\n */\nimport Spinner from \"../../primitives/Spinner/Spinner.vue\";\nimport Skeleton from \"../../primitives/Skeleton/Skeleton.vue\";\n\nwithDefaults(\n defineProps<{\n /** Shown below the spinner in spinner mode. Omit for a spinner-only wait. */\n label?: string;\n /** `spinner` for short indeterminate waits; `skeleton` for content-shaped waits. */\n mode?: \"spinner\" | \"skeleton\";\n }>(),\n { mode: \"spinner\" },\n);\n</script>\n\n<template>\n <div\n v-if=\"mode === 'spinner'\"\n class=\"flex flex-col items-center justify-center gap-3 px-6 py-10 sm:py-14\"\n >\n <Spinner size=\"lg\" />\n <p v-if=\"label\" class=\"text-small text-muted-foreground\">{{ label }}</p>\n </div>\n <div v-else class=\"flex flex-col gap-3 px-6 py-10 sm:py-14\">\n <slot>\n <!-- Default skeleton lines approximate paragraph-shaped content without\n requiring the host to compose anything. Hosts that know their own\n shape slot their own Skeleton arrangement instead. -->\n <Skeleton class=\"h-4 w-full\" />\n <Skeleton class=\"h-4 w-3/4\" />\n <Skeleton class=\"h-4 w-5/6\" />\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCU,OAAA,QAAA,SAAI,aADZ,UAAA,GAAA,mBAMM,OANN,YAMM,CAFJ,YAAqB,iBAAA,EAAZ,MAAK,KAAI,CAAA,GACT,QAAA,SAAT,UAAA,GAAA,mBAAwE,KAAxE,YAAwE,gBAAZ,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,MAEnE,UAAA,GAAA,mBASM,OATN,YASM,CARJ,WAOO,KAAA,QAAA,WAAA,CAAA,SAAA;IAHL,YAA+B,kBAAA,EAArB,OAAM,aAAY,CAAA;IAC5B,YAA8B,kBAAA,EAApB,OAAM,YAAW,CAAA;IAC3B,YAA8B,kBAAA,EAApB,OAAM,YAAW,CAAA"}
@@ -0,0 +1,7 @@
1
+ import MetricCard_vue_vue_type_script_setup_true_lang_default from "./MetricCard.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/blocks/MetricCard/MetricCard.vue
3
+ var MetricCard_default = MetricCard_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { MetricCard_default as default };
6
+
7
+ //# sourceMappingURL=MetricCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricCard.js","names":[],"sources":["../../../src/blocks/MetricCard/MetricCard.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * MetricCard — one KPI on a dashboard: a compact surface carrying a metric\n * value, its label, and an optional trend arrow. The shape is fixed (icon →\n * label → value + trend) because a hand-rolled metric row drifts from call\n * site to call site — the icon above the label here, the trend on a second\n * line there — and this block pins one layout so the row scans left-to-right.\n *\n * The trend is always inline with the value, never a separate line. A trend\n * on its own row reads as a second metric; sharing the value line reads as\n * context for that metric, which is what it is. The arrows are inline SVGs\n * (12px) rather than an icon-library dependency: a trend indicator is a\n * single directional glyph, and pulling in an icon package for three paths\n * is weight the host did not ask for.\n *\n * Colour encodes direction but is never the only signal: the arrow shape\n * distinguishes up from down even without hue, and \"flat\" is an em dash\n * rather than a horizontal arrow that could be mistaken for a minus sign or\n * a separator. `text-success` / `text-destructive` / `text-muted-foreground`\n * are the semantic tokens rather than fixed greens and reds, so the card\n * adapts to whatever the theme maps those to.\n */\nexport type MetricCardTrend = \"up\" | \"down\" | \"flat\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\ndefineProps<{\n /** The metric value — a formatted string or number the host has already\n * localised (e.g. \"1,234\", \"98.5%\", \"$42k\"). Raw numbers are not\n * formatted by the card; the host owns formatting so the same value\n * can be \"$42k\" in one place and \"42,000\" in another. */\n value: string | number;\n /** What the metric measures — always shown. */\n label: string;\n /** Direction of change. When absent, no trend indicator is rendered. */\n trend?: MetricCardTrend;\n /** The trend magnitude (e.g. \"+12.5%\", \"-3.2%\"). Shown only when `trend`\n * is also provided; a magnitude with no direction has no meaning. */\n trendValue?: string;\n}>();\n</script>\n\n<template>\n <div :class=\"cn('rounded-lg border border-border bg-card p-4')\">\n <!-- Decorative icon — hidden from assistive tech because the label and\n value already carry the metric's meaning. -->\n <div\n v-if=\"$slots.icon\"\n aria-hidden=\"true\"\n class=\"mb-2 text-muted-foreground [&_svg]:h-4 [&_svg]:w-4\"\n >\n <slot name=\"icon\" />\n </div>\n <p class=\"text-small text-muted-foreground\">{{ label }}</p>\n <div class=\"flex items-baseline gap-1.5\">\n <span class=\"text-2xl font-semibold tracking-tight text-foreground\">\n {{ value }}\n </span>\n <span\n v-if=\"trend\"\n :class=\"\n cn('inline-flex items-center gap-0.5 text-small font-medium', {\n 'text-success': trend === 'up',\n 'text-destructive': trend === 'down',\n 'text-muted-foreground': trend === 'flat',\n })\n \"\n >\n <!-- Up arrow: a single upward stroke with a chevron head. -->\n <svg\n v-if=\"trend === 'up'\"\n class=\"inline h-3 w-3\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 2v8M3 5l3-3 3 3\" />\n </svg>\n <!-- Down arrow: a single downward stroke with a chevron head. -->\n <svg\n v-else-if=\"trend === 'down'\"\n class=\"inline h-3 w-3\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 10V2M3 7l3 3 3-3\" />\n </svg>\n <!-- Flat: an em dash rather than a horizontal arrow — a horizontal\n arrow at this size reads as a minus sign or a separator. -->\n <span v-else aria-hidden=\"true\">&mdash;</span>\n <span v-if=\"trendValue\">{{ trendValue }}</span>\n </span>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * MetricCard — one KPI on a dashboard: a compact surface carrying a metric
3
+ * value, its label, and an optional trend arrow. The shape is fixed (icon →
4
+ * label → value + trend) because a hand-rolled metric row drifts from call
5
+ * site to call site — the icon above the label here, the trend on a second
6
+ * line there — and this block pins one layout so the row scans left-to-right.
7
+ *
8
+ * The trend is always inline with the value, never a separate line. A trend
9
+ * on its own row reads as a second metric; sharing the value line reads as
10
+ * context for that metric, which is what it is. The arrows are inline SVGs
11
+ * (12px) rather than an icon-library dependency: a trend indicator is a
12
+ * single directional glyph, and pulling in an icon package for three paths
13
+ * is weight the host did not ask for.
14
+ *
15
+ * Colour encodes direction but is never the only signal: the arrow shape
16
+ * distinguishes up from down even without hue, and "flat" is an em dash
17
+ * rather than a horizontal arrow that could be mistaken for a minus sign or
18
+ * a separator. `text-success` / `text-destructive` / `text-muted-foreground`
19
+ * are the semantic tokens rather than fixed greens and reds, so the card
20
+ * adapts to whatever the theme maps those to.
21
+ */
22
+ export type MetricCardTrend = "up" | "down" | "flat";
23
+ declare const _default: typeof __VLS_export;
24
+ export default _default;
25
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
26
+ /** The metric value — a formatted string or number the host has already
27
+ * localised (e.g. "1,234", "98.5%", "$42k"). Raw numbers are not
28
+ * formatted by the card; the host owns formatting so the same value
29
+ * can be "$42k" in one place and "42,000" in another. */
30
+ value: string | number;
31
+ /** What the metric measures — always shown. */
32
+ label: string;
33
+ /** Direction of change. When absent, no trend indicator is rendered. */
34
+ trend?: MetricCardTrend;
35
+ /** The trend magnitude (e.g. "+12.5%", "-3.2%"). Shown only when `trend`
36
+ * is also provided; a magnitude with no direction has no meaning. */
37
+ trendValue?: string;
38
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
39
+ /** The metric value — a formatted string or number the host has already
40
+ * localised (e.g. "1,234", "98.5%", "$42k"). Raw numbers are not
41
+ * formatted by the card; the host owns formatting so the same value
42
+ * can be "$42k" in one place and "42,000" in another. */
43
+ value: string | number;
44
+ /** What the metric measures — always shown. */
45
+ label: string;
46
+ /** Direction of change. When absent, no trend indicator is rendered. */
47
+ trend?: MetricCardTrend;
48
+ /** The trend magnitude (e.g. "+12.5%", "-3.2%"). Shown only when `trend`
49
+ * is also provided; a magnitude with no direction has no meaning. */
50
+ trendValue?: string;
51
+ }> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
52
+ icon?: (props: {}) => any;
53
+ }>;
54
+ type __VLS_WithSlots<T, S> = T & {
55
+ new (): {
56
+ $slots: S;
57
+ };
58
+ };
59
+ //# sourceMappingURL=MetricCard.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricCard.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/MetricCard/MetricCard.vue"],"names":[],"mappings":"AA4GA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;wBAChC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEhB;;;8DAG0D;WACnD,MAAM,GAAG,MAAM;IACtB,+CAA+C;WACxC,MAAM;IACb,wEAAwE;YAChE,eAAe;IACvB;0EACsE;iBACzD,MAAM;;IAXnB;;;8DAG0D;WACnD,MAAM,GAAG,MAAM;IACtB,+CAA+C;WACxC,MAAM;IACb,wEAAwE;YAChE,eAAe;IACvB;0EACsE;iBACzD,MAAM;;WAgHV,CAAC,KAAK,IAAgB,KAAK,GAAG;EASrC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}