@ecoma-io/loom 0.1.0 → 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 @@
1
+ {"version":3,"file":"AppShell.js","names":[],"sources":["../../../src/layouts/AppShell/AppShell.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * AppShell — the universal application shell.\n *\n * A sidebar, a header, and a content area that reflows from mobile to\n * ultrawide. This is the layout most SaaS-style applications need: a\n * navigation sidebar on the left, a top header bar, and a scrollable content\n * region that fills the remaining space.\n *\n * The sidebar collapses intrinsically — no media query, no JavaScript. The\n * flex-wrap technique from the Sidebar composition primitive makes both panels\n * go full-width the moment the content cannot honour its `min-width`, so the\n * layout derives its own breakpoint from the container's width. The sidebar\n * width prop maps to named steps (sm/md/lg) rather than a pixel value so the\n * host names intent and the shell owns the geometry.\n *\n * The header slot is sticky within the content area so it stays visible while\n * the content scrolls. On ultrawide viewports, the content's horizontal\n * gutters widen so the extra viewport becomes intentional whitespace rather\n * than stretching lines of text.\n */\nexport type AppShellSidebarWidth = \"sm\" | \"md\" | \"lg\";\n\nconst sidebarWidthRem: Record<AppShellSidebarWidth, string> = {\n sm: \"12rem\",\n md: \"16rem\",\n lg: \"20rem\",\n} as const;\n\nexport { sidebarWidthRem };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Sidebar width step: sm (12rem), md (16rem, default), lg (20rem). */\n sidebarWidth?: AppShellSidebarWidth;\n /** Accessible name for the sidebar navigation landmark. */\n sidebarAriaLabel?: string;\n }>(),\n { sidebarWidth: \"md\", sidebarAriaLabel: \"Navigation\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n panel can't fit its `min-width: 50%`, both panels wrap to full-width —\n the sidebar becomes a full-width section above the content. No media\n query; the layout derives its own breakpoint from the container's width.\n -->\n <div :class=\"cn('flex h-full')\" :style=\"{ flexWrap: 'wrap' }\">\n <!--\n The sidebar is a fixed-basis flex child that does not grow. It recedes\n into the sunken elevation layer so work surfaces read as lifted above\n navigation chrome.\n -->\n <aside\n :aria-label=\"sidebarAriaLabel\"\n :style=\"{\n flexBasis: sidebarWidthRem[sidebarWidth],\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('bg-sunken w-full')\"\n >\n <slot name=\"sidebar\" />\n </aside>\n\n <!--\n The content area takes all remaining space (`flex-grow: 999`) when the\n container is wide enough. Its `min-width: 50%` triggers wrapping below\n tablet-like widths. The header is sticky so it stays visible while the\n content scrolls. Gutters widen at wider breakpoints so ultrawide\n viewports add whitespace rails rather than stretching lines.\n -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n :class=\"cn('bg-background flex min-w-0 flex-col')\"\n >\n <header v-if=\"$slots.header\" :class=\"cn('sticky top-0 z-20')\">\n <slot name=\"header\" />\n </header>\n\n <div :class=\"cn('flex-1 overflow-y-auto px-4 sm:px-6 3xl:px-8')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * AppShell — the universal application shell.
3
+ *
4
+ * A sidebar, a header, and a content area that reflows from mobile to
5
+ * ultrawide. This is the layout most SaaS-style applications need: a
6
+ * navigation sidebar on the left, a top header bar, and a scrollable content
7
+ * region that fills the remaining space.
8
+ *
9
+ * The sidebar collapses intrinsically — no media query, no JavaScript. The
10
+ * flex-wrap technique from the Sidebar composition primitive makes both panels
11
+ * go full-width the moment the content cannot honour its `min-width`, so the
12
+ * layout derives its own breakpoint from the container's width. The sidebar
13
+ * width prop maps to named steps (sm/md/lg) rather than a pixel value so the
14
+ * host names intent and the shell owns the geometry.
15
+ *
16
+ * The header slot is sticky within the content area so it stays visible while
17
+ * the content scrolls. On ultrawide viewports, the content's horizontal
18
+ * gutters widen so the extra viewport becomes intentional whitespace rather
19
+ * than stretching lines of text.
20
+ */
21
+ export type AppShellSidebarWidth = "sm" | "md" | "lg";
22
+ declare const sidebarWidthRem: Record<AppShellSidebarWidth, string>;
23
+ export { sidebarWidthRem };
24
+ declare const _default: typeof __VLS_export;
25
+ export default _default;
26
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
27
+ /** Sidebar width step: sm (12rem), md (16rem, default), lg (20rem). */
28
+ sidebarWidth?: AppShellSidebarWidth;
29
+ /** Accessible name for the sidebar navigation landmark. */
30
+ sidebarAriaLabel?: string;
31
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
32
+ /** Sidebar width step: sm (12rem), md (16rem, default), lg (20rem). */
33
+ sidebarWidth?: AppShellSidebarWidth;
34
+ /** Accessible name for the sidebar navigation landmark. */
35
+ sidebarAriaLabel?: string;
36
+ }> & Readonly<{}>, {
37
+ sidebarWidth: AppShellSidebarWidth;
38
+ sidebarAriaLabel: string;
39
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
40
+ sidebar?: (props: {}) => any;
41
+ } & {
42
+ header?: (props: {}) => any;
43
+ } & {
44
+ default?: (props: {}) => any;
45
+ }>;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
51
+ //# sourceMappingURL=AppShell.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.vue.d.ts","sourceRoot":"","sources":["../../../src/layouts/AppShell/AppShell.vue"],"names":[],"mappings":"AAuGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtD,QAAA,MAAM,eAAe,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAIhD,CAAC;AAEX,OAAO,EAAE,eAAe,EAAE,CAAC;wBACN,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,uEAAuE;mBACxD,oBAAoB;IACnC,2DAA2D;uBACxC,MAAM;;IAHzB,uEAAuE;mBACxD,oBAAoB;IACnC,2DAA2D;uBACxC,MAAM;;kBAFV,oBAAoB;sBAEhB,MAAM;;cAiEf,CAAC,KAAK,IAAgB,KAAK,GAAG;;aAC/B,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,47 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
3
+ //#region src/layouts/AppShell/AppShell.vue?vue&type=script&setup=true&lang.ts
4
+ var _hoisted_1 = ["aria-label"];
5
+ var sidebarWidthRem = {
6
+ sm: "12rem",
7
+ md: "16rem",
8
+ lg: "20rem"
9
+ };
10
+ var AppShell_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
+ __name: "AppShell",
12
+ props: {
13
+ sidebarWidth: { default: "md" },
14
+ sidebarAriaLabel: { default: "Navigation" }
15
+ },
16
+ setup(__props) {
17
+ return (_ctx, _cache) => {
18
+ return openBlock(), createElementBlock("div", {
19
+ class: normalizeClass(unref(cn)("flex h-full")),
20
+ style: { flexWrap: "wrap" }
21
+ }, [createElementVNode("aside", {
22
+ "aria-label": __props.sidebarAriaLabel,
23
+ style: normalizeStyle({
24
+ flexBasis: sidebarWidthRem[__props.sidebarWidth],
25
+ flexGrow: 0,
26
+ flexShrink: 1
27
+ }),
28
+ class: normalizeClass(unref(cn)("bg-sunken w-full"))
29
+ }, [renderSlot(_ctx.$slots, "sidebar")], 14, _hoisted_1), createElementVNode("div", {
30
+ style: {
31
+ flexBasis: 0,
32
+ flexGrow: 999,
33
+ flexShrink: 1,
34
+ minWidth: "50%"
35
+ },
36
+ class: normalizeClass(unref(cn)("bg-background flex min-w-0 flex-col"))
37
+ }, [_ctx.$slots.header ? (openBlock(), createElementBlock("header", {
38
+ key: 0,
39
+ class: normalizeClass(unref(cn)("sticky top-0 z-20"))
40
+ }, [renderSlot(_ctx.$slots, "header")], 2)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(cn)("flex-1 overflow-y-auto px-4 sm:px-6 3xl:px-8")) }, [renderSlot(_ctx.$slots, "default")], 2)], 2)], 2);
41
+ };
42
+ }
43
+ });
44
+ //#endregion
45
+ export { AppShell_vue_vue_type_script_setup_true_lang_default as default, sidebarWidthRem };
46
+
47
+ //# sourceMappingURL=AppShell.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/layouts/AppShell/AppShell.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * AppShell — the universal application shell.\n *\n * A sidebar, a header, and a content area that reflows from mobile to\n * ultrawide. This is the layout most SaaS-style applications need: a\n * navigation sidebar on the left, a top header bar, and a scrollable content\n * region that fills the remaining space.\n *\n * The sidebar collapses intrinsically — no media query, no JavaScript. The\n * flex-wrap technique from the Sidebar composition primitive makes both panels\n * go full-width the moment the content cannot honour its `min-width`, so the\n * layout derives its own breakpoint from the container's width. The sidebar\n * width prop maps to named steps (sm/md/lg) rather than a pixel value so the\n * host names intent and the shell owns the geometry.\n *\n * The header slot is sticky within the content area so it stays visible while\n * the content scrolls. On ultrawide viewports, the content's horizontal\n * gutters widen so the extra viewport becomes intentional whitespace rather\n * than stretching lines of text.\n */\nexport type AppShellSidebarWidth = \"sm\" | \"md\" | \"lg\";\n\nconst sidebarWidthRem: Record<AppShellSidebarWidth, string> = {\n sm: \"12rem\",\n md: \"16rem\",\n lg: \"20rem\",\n} as const;\n\nexport { sidebarWidthRem };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Sidebar width step: sm (12rem), md (16rem, default), lg (20rem). */\n sidebarWidth?: AppShellSidebarWidth;\n /** Accessible name for the sidebar navigation landmark. */\n sidebarAriaLabel?: string;\n }>(),\n { sidebarWidth: \"md\", sidebarAriaLabel: \"Navigation\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n panel can't fit its `min-width: 50%`, both panels wrap to full-width —\n the sidebar becomes a full-width section above the content. No media\n query; the layout derives its own breakpoint from the container's width.\n -->\n <div :class=\"cn('flex h-full')\" :style=\"{ flexWrap: 'wrap' }\">\n <!--\n The sidebar is a fixed-basis flex child that does not grow. It recedes\n into the sunken elevation layer so work surfaces read as lifted above\n navigation chrome.\n -->\n <aside\n :aria-label=\"sidebarAriaLabel\"\n :style=\"{\n flexBasis: sidebarWidthRem[sidebarWidth],\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('bg-sunken w-full')\"\n >\n <slot name=\"sidebar\" />\n </aside>\n\n <!--\n The content area takes all remaining space (`flex-grow: 999`) when the\n container is wide enough. Its `min-width: 50%` triggers wrapping below\n tablet-like widths. The header is sticky so it stays visible while the\n content scrolls. Gutters widen at wider breakpoints so ultrawide\n viewports add whitespace rails rather than stretching lines.\n -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n :class=\"cn('bg-background flex min-w-0 flex-col')\"\n >\n <header v-if=\"$slots.header\" :class=\"cn('sticky top-0 z-20')\">\n <slot name=\"header\" />\n </header>\n\n <div :class=\"cn('flex-1 overflow-y-auto px-4 sm:px-6 3xl:px-8')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":";;;;AAuBA,IAAM,kBAAwD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;GA0BE,OAAA,UAAA,GAAA,mBA0CM,OAAA;IA1CA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,aAAA,CAAA;IAAkB,OAAO,EAAA,UAAA,OAAA;GAMtC,GAAA,CAAA,mBAUQ,SAAA;IATL,cAAY,QAAA;IACZ,OAAK,eAAA;KAAuB,WAAA,gBAAgB,QAAA;;;;IAK5C,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,kBAAA,CAAA;GAEV,GAAA,CAAA,WAAuB,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA,GAUzB,mBAgBM,OAAA;IAfH,OAAO;;;;;IAKP;IACA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,qCAAA,CAAA;GAEIA,GAAAA,CAAAA,KAAAA,OAAO,UAArB,UAAA,GAAA,mBAES,UAAA;;IAFqB,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,mBAAA,CAAA;GACrC,GAAA,CAAA,WAAsB,KAAA,QAAA,QAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAGxB,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,8CAAA,CAAA,EAAA,GAAA,CACb,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import Centered_vue_vue_type_script_setup_true_lang_default, { maxWidthClass } from "./Centered.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/layouts/Centered/Centered.vue
3
+ var Centered_default = Centered_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { Centered_default as default, maxWidthClass };
6
+
7
+ //# sourceMappingURL=Centered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Centered.js","names":[],"sources":["../../../src/layouts/Centered/Centered.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Centered — a full-page layout with a centered content column.\n *\n * The simplest application shell: a header, a centered content column with a\n * max-width constraint, and a footer. On ultra-wide monitors the extra viewport\n * goes to intentional whitespace — lines of text stay readable rather than\n * stretching to fill the screen.\n *\n * The header and footer are NOT centered or max-width constrained: they span\n * the full viewport width. Only the default content slot is wrapped in the\n * Center composition primitive's centering logic (mx-auto, max-width, gutters).\n * This design lets navigation bars and status strips go edge-to-edge while the\n * main content stays comfortably readable.\n *\n * For pages that need only centered content without the page-level shell (no\n * header/footer, no min-height), use the Center composition primitive directly.\n */\nexport type CenteredMaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"prose\";\n\nconst maxWidthClass: Record<CenteredMaxWidth, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n prose: \"max-w-prose\",\n} as const;\n\nexport { maxWidthClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Max-width for the centered column. Names readable intent rather than pixel values. */\n maxWidth?: CenteredMaxWidth;\n /** Whether to add horizontal gutters that widen at wider breakpoints. */\n gutter?: boolean;\n }>(),\n { maxWidth: \"lg\", gutter: true },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n Header and footer are full-width — they are NOT inside the centered\n wrapper. Navigation bars, status strips, and similar chrome need to span\n the viewport edge-to-edge.\n -->\n <header v-if=\"$slots.header\">\n <slot name=\"header\" />\n </header>\n\n <!--\n Only the content is centered with a max-width constraint. Gutters step up\n at `sm` and `3xl`: narrow viewports need less margin because the viewport\n itself is margin, and ultra-wide viewports need more so the gap between\n content and screen edge stays proportional.\n -->\n <div\n :class=\"\n cn(\n 'mx-auto w-full flex-1',\n maxWidthClass[maxWidth],\n gutter ? 'px-4 sm:px-6 3xl:px-8' : undefined,\n )\n \"\n >\n <slot />\n </div>\n\n <footer v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Centered — a full-page layout with a centered content column.
3
+ *
4
+ * The simplest application shell: a header, a centered content column with a
5
+ * max-width constraint, and a footer. On ultra-wide monitors the extra viewport
6
+ * goes to intentional whitespace — lines of text stay readable rather than
7
+ * stretching to fill the screen.
8
+ *
9
+ * The header and footer are NOT centered or max-width constrained: they span
10
+ * the full viewport width. Only the default content slot is wrapped in the
11
+ * Center composition primitive's centering logic (mx-auto, max-width, gutters).
12
+ * This design lets navigation bars and status strips go edge-to-edge while the
13
+ * main content stays comfortably readable.
14
+ *
15
+ * For pages that need only centered content without the page-level shell (no
16
+ * header/footer, no min-height), use the Center composition primitive directly.
17
+ */
18
+ export type CenteredMaxWidth = "sm" | "md" | "lg" | "xl" | "prose";
19
+ declare const maxWidthClass: Record<CenteredMaxWidth, string>;
20
+ export { maxWidthClass };
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
24
+ /** Max-width for the centered column. Names readable intent rather than pixel values. */
25
+ maxWidth?: CenteredMaxWidth;
26
+ /** Whether to add horizontal gutters that widen at wider breakpoints. */
27
+ gutter?: boolean;
28
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
29
+ /** Max-width for the centered column. Names readable intent rather than pixel values. */
30
+ maxWidth?: CenteredMaxWidth;
31
+ /** Whether to add horizontal gutters that widen at wider breakpoints. */
32
+ gutter?: boolean;
33
+ }> & Readonly<{}>, {
34
+ maxWidth: CenteredMaxWidth;
35
+ gutter: boolean;
36
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
37
+ header?: (props: {}) => any;
38
+ } & {
39
+ default?: (props: {}) => any;
40
+ } & {
41
+ footer?: (props: {}) => any;
42
+ }>;
43
+ type __VLS_WithSlots<T, S> = T & {
44
+ new (): {
45
+ $slots: S;
46
+ };
47
+ };
48
+ //# sourceMappingURL=Centered.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Centered.vue.d.ts","sourceRoot":"","sources":["../../../src/layouts/Centered/Centered.vue"],"names":[],"mappings":"AAqFA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AAEnE,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM1C,CAAC;AAEX,OAAO,EAAE,aAAa,EAAE,CAAC;wBACJ,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,yFAAyF;eAC9E,gBAAgB;IAC3B,yEAAyE;aAChE,OAAO;;IAHhB,yFAAyF;eAC9E,gBAAgB;IAC3B,yEAAyE;aAChE,OAAO;;cAFL,gBAAgB;YAElB,OAAO;;aAuDP,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAgB,KAAK,GAAG;;aAC/B,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUvC,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,35 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
+ //#region src/layouts/Centered/Centered.vue?vue&type=script&setup=true&lang.ts
4
+ var _hoisted_1 = { key: 0 };
5
+ var _hoisted_2 = { key: 1 };
6
+ var maxWidthClass = {
7
+ sm: "max-w-sm",
8
+ md: "max-w-md",
9
+ lg: "max-w-lg",
10
+ xl: "max-w-xl",
11
+ prose: "max-w-prose"
12
+ };
13
+ var Centered_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
+ __name: "Centered",
15
+ props: {
16
+ maxWidth: { default: "lg" },
17
+ gutter: {
18
+ type: Boolean,
19
+ default: true
20
+ }
21
+ },
22
+ setup(__props) {
23
+ return (_ctx, _cache) => {
24
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("min-h-dvh flex flex-col")) }, [
25
+ _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_1, [renderSlot(_ctx.$slots, "header")])) : createCommentVNode("", true),
26
+ createElementVNode("div", { class: normalizeClass(unref(cn)("mx-auto w-full flex-1", maxWidthClass[__props.maxWidth], __props.gutter ? "px-4 sm:px-6 3xl:px-8" : void 0)) }, [renderSlot(_ctx.$slots, "default")], 2),
27
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_2, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
28
+ ], 2);
29
+ };
30
+ }
31
+ });
32
+ //#endregion
33
+ export { Centered_vue_vue_type_script_setup_true_lang_default as default, maxWidthClass };
34
+
35
+ //# sourceMappingURL=Centered.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Centered.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/layouts/Centered/Centered.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Centered — a full-page layout with a centered content column.\n *\n * The simplest application shell: a header, a centered content column with a\n * max-width constraint, and a footer. On ultra-wide monitors the extra viewport\n * goes to intentional whitespace — lines of text stay readable rather than\n * stretching to fill the screen.\n *\n * The header and footer are NOT centered or max-width constrained: they span\n * the full viewport width. Only the default content slot is wrapped in the\n * Center composition primitive's centering logic (mx-auto, max-width, gutters).\n * This design lets navigation bars and status strips go edge-to-edge while the\n * main content stays comfortably readable.\n *\n * For pages that need only centered content without the page-level shell (no\n * header/footer, no min-height), use the Center composition primitive directly.\n */\nexport type CenteredMaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"prose\";\n\nconst maxWidthClass: Record<CenteredMaxWidth, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n prose: \"max-w-prose\",\n} as const;\n\nexport { maxWidthClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Max-width for the centered column. Names readable intent rather than pixel values. */\n maxWidth?: CenteredMaxWidth;\n /** Whether to add horizontal gutters that widen at wider breakpoints. */\n gutter?: boolean;\n }>(),\n { maxWidth: \"lg\", gutter: true },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n Header and footer are full-width — they are NOT inside the centered\n wrapper. Navigation bars, status strips, and similar chrome need to span\n the viewport edge-to-edge.\n -->\n <header v-if=\"$slots.header\">\n <slot name=\"header\" />\n </header>\n\n <!--\n Only the content is centered with a max-width constraint. Gutters step up\n at `sm` and `3xl`: narrow viewports need less margin because the viewport\n itself is margin, and ultra-wide viewports need more so the gap between\n content and screen edge stays proportional.\n -->\n <div\n :class=\"\n cn(\n 'mx-auto w-full flex-1',\n maxWidthClass[maxWidth],\n gutter ? 'px-4 sm:px-6 3xl:px-8' : undefined,\n )\n \"\n >\n <slot />\n </div>\n\n <footer v-if=\"$slots.footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n</template>\n"],"mappings":";;;;;AAoBA,IAAM,gBAAkD;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;AACT;;;;;;;;;;;;GAoBE,OAAA,UAAA,GAAA,mBA+BM,OAAA,EA/BA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,yBAAA,CAAA,EAAA,GAAA;IAMCA,KAAAA,OAAO,UAArB,UAAA,GAAA,mBAES,UAAA,YAAA,CADP,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IASxB,mBAUM,OAAA,EATH,OAAK,eAAW,MAAA,EAAA,CAAE,CAAA,yBAA+C,cAAc,QAAA,WAAqB,QAAA,SAAM,0BAA6B,KAAA,CAAA,CAAA,EAAA,GAAA,CAQxI,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA;IAGIA,KAAAA,OAAO,UAArB,UAAA,GAAA,mBAES,UAAA,YAAA,CADP,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA"}
@@ -0,0 +1,7 @@
1
+ import Dashboard_vue_vue_type_script_setup_true_lang_default, { gapClass } from "./Dashboard.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/layouts/Dashboard/Dashboard.vue
3
+ var Dashboard_default = Dashboard_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { Dashboard_default as default, gapClass };
6
+
7
+ //# sourceMappingURL=Dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.js","names":[],"sources":["../../../src/layouts/Dashboard/Dashboard.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Dashboard — a dashboard shell: optional sidebar + auto-reflowing tile grid\n * for panels, with an optional aside for supplementary metrics on ultrawide\n * viewports.\n *\n * The layout composes three composition patterns into a single responsive\n * shell. The innermost is the auto-fit grid from DashboardGrid/Grid: the tile\n * column count derives from the container's own width, so the same grid\n * reflows inside a sidebar-narrowed workspace and full-bleed on an ultra-wide\n * monitor, with zero Tailwind breakpoints authored here or at the call site.\n *\n * The sidebar and aside use the Every Layout \"Sidebar\" flex-wrap technique:\n * each panel gets a fixed flex-basis and the grid area gets `flex-grow: 999`,\n * so when the container cannot fit the content's minimum, both panels wrap to\n * full-width and the sidebar or aside stacks above the grid instead of sitting\n * beside it. No media query, no JavaScript — the layout derives its own\n * breakpoints from the container's width.\n *\n * The `#aside` slot is gated behind a `2xl` breakpoint because supplementary\n * metrics are a luxury that only wide desktops can afford: the aside is hidden\n * below that width and the grid takes the full width, preventing a cramped\n * two-panel layout where neither panel has room to breathe.\n *\n * The header slot is full-width, above the sidebar+grid row, so a top\n * navigation bar or title row never competes for horizontal space with the\n * sidebar.\n */\nexport type DashboardMinTileWidth = string;\n\nconst gapClass: Record<string, 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 { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Narrowest a tile may get before the grid drops to fewer columns. */\n minTileWidth?: DashboardMinTileWidth;\n /** Grid gap step. Tightens one notch below sm. */\n gap?: \"sm\" | \"md\" | \"lg\";\n }>(),\n { minTileWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n The header is full-width and above the sidebar+grid row, so a\n navigation bar or title row never competes for horizontal space.\n -->\n <header v-if=\"$slots.header\">\n <slot name=\"header\" />\n </header>\n\n <!--\n The sidebar+grid row uses flex-wrap. The sidebar gets a fixed\n flex-basis (~16rem) and the grid area gets `flex-grow: 999`, so\n when the container is too narrow both panels wrap to full-width —\n the sidebar stacks above the grid. No media query; the layout\n derives its own breakpoint from the container's width.\n -->\n <div\n :style=\"{ flexWrap: 'wrap' }\"\n :class=\"cn('flex flex-1', $slots.sidebar ? 'flex-row' : undefined)\"\n >\n <!--\n The sidebar panel. Fixed-basis, no growth — it recedes into the\n sunken elevation layer when present, matching the AppShell pattern.\n -->\n <aside\n v-if=\"$slots.sidebar\"\n :style=\"{\n flexBasis: '16rem',\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('bg-sunken w-full')\"\n >\n <slot name=\"sidebar\" />\n </aside>\n\n <!--\n The main area: the auto-fit tile grid + an optional aside for\n supplementary metrics on ultrawide viewports.\n\n `flex-grow: 999` ensures this area takes all remaining space\n when the container is wide enough. Its `min-width: 50%` triggers\n wrapping below tablet-like widths, making the sidebar stack above.\n\n Gutters widen at wider breakpoints so ultrawide viewports add\n whitespace rails rather than stretching lines.\n -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n :class=\"cn('flex min-w-0 flex-col')\"\n >\n <div\n :class=\"\n cn(\n 'flex-1 px-4 sm:px-6 3xl:px-8',\n $slots.aside ? 'flex flex-row 2xl:flex-row max-2xl:flex-col' : undefined,\n )\n \"\n :style=\"$slots.aside ? { flexWrap: 'wrap' } : undefined\"\n >\n <!--\n The tile grid. `auto-fit` + `minmax` recomputes the column\n count from the container's own width — it reflows inside a\n sidebar-narrowed workspace and full-bleed on an ultra-wide\n monitor, with zero Tailwind breakpoints authored here. The\n `minmax` lower bound is wrapped in `min(100%, …)` so a tile\n never forces horizontal overflow on a container narrower than\n `minTileWidth` itself.\n -->\n <div\n :class=\"\n cn('grid', gapClass[gap], $slots.aside ? 'flex-grow-[999] flex-shrink-1' : undefined)\n \"\n :style=\"{\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${minTileWidth}), 1fr))`,\n ...($slots.aside ? { flexBasis: 0, minWidth: '60%' } : {}),\n }\"\n >\n <slot />\n </div>\n\n <!--\n The aside slot: supplementary metrics/info panels visible only\n on wide desktops (from `2xl` breakpoint). Uses the same\n flex-wrap Sidebar pattern: the aside gets a fixed basis and\n the grid area grows to fill the remaining space. Below `2xl`,\n the aside is hidden entirely — metrics are a luxury that only\n wide desktops can afford.\n -->\n <aside\n v-if=\"$slots.aside\"\n :style=\"{\n flexBasis: '14rem',\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('hidden w-full 2xl:block')\"\n >\n <slot name=\"aside\" />\n </aside>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Dashboard — a dashboard shell: optional sidebar + auto-reflowing tile grid
3
+ * for panels, with an optional aside for supplementary metrics on ultrawide
4
+ * viewports.
5
+ *
6
+ * The layout composes three composition patterns into a single responsive
7
+ * shell. The innermost is the auto-fit grid from DashboardGrid/Grid: the tile
8
+ * column count derives from the container's own width, so the same grid
9
+ * reflows inside a sidebar-narrowed workspace and full-bleed on an ultra-wide
10
+ * monitor, with zero Tailwind breakpoints authored here or at the call site.
11
+ *
12
+ * The sidebar and aside use the Every Layout "Sidebar" flex-wrap technique:
13
+ * each panel gets a fixed flex-basis and the grid area gets `flex-grow: 999`,
14
+ * so when the container cannot fit the content's minimum, both panels wrap to
15
+ * full-width and the sidebar or aside stacks above the grid instead of sitting
16
+ * beside it. No media query, no JavaScript — the layout derives its own
17
+ * breakpoints from the container's width.
18
+ *
19
+ * The `#aside` slot is gated behind a `2xl` breakpoint because supplementary
20
+ * metrics are a luxury that only wide desktops can afford: the aside is hidden
21
+ * below that width and the grid takes the full width, preventing a cramped
22
+ * two-panel layout where neither panel has room to breathe.
23
+ *
24
+ * The header slot is full-width, above the sidebar+grid row, so a top
25
+ * navigation bar or title row never competes for horizontal space with the
26
+ * sidebar.
27
+ */
28
+ export type DashboardMinTileWidth = string;
29
+ declare const gapClass: Record<string, string>;
30
+ export { gapClass };
31
+ declare const _default: typeof __VLS_export;
32
+ export default _default;
33
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
34
+ /** Narrowest a tile may get before the grid drops to fewer columns. */
35
+ minTileWidth?: DashboardMinTileWidth;
36
+ /** Grid gap step. Tightens one notch below sm. */
37
+ gap?: "sm" | "md" | "lg";
38
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
39
+ /** Narrowest a tile may get before the grid drops to fewer columns. */
40
+ minTileWidth?: DashboardMinTileWidth;
41
+ /** Grid gap step. Tightens one notch below sm. */
42
+ gap?: "sm" | "md" | "lg";
43
+ }> & Readonly<{}>, {
44
+ gap: "sm" | "md" | "lg";
45
+ minTileWidth: DashboardMinTileWidth;
46
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
47
+ header?: (props: {}) => any;
48
+ } & {
49
+ sidebar?: (props: {}) => any;
50
+ } & {
51
+ default?: (props: {}) => any;
52
+ } & {
53
+ aside?: (props: {}) => any;
54
+ }>;
55
+ type __VLS_WithSlots<T, S> = T & {
56
+ new (): {
57
+ $slots: S;
58
+ };
59
+ };
60
+ //# sourceMappingURL=Dashboard.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.vue.d.ts","sourceRoot":"","sources":["../../../src/layouts/Dashboard/Dashboard.vue"],"names":[],"mappings":"AA0KA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI3B,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,uEAAuE;mBACxD,qBAAqB;IACpC,kDAAkD;UAC5C,IAAI,GAAG,IAAI,GAAG,IAAI;;IAHxB,uEAAuE;mBACxD,qBAAqB;IACpC,kDAAkD;UAC5C,IAAI,GAAG,IAAI,GAAG,IAAI;;SAAlB,IAAI,GAAG,IAAI,GAAG,IAAI;kBAFT,qBAAqB;;aAiG3B,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC9B,CAAC,KAAK,IAAgB,KAAK,GAAG;;YAChC,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUtC,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,64 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
3
+ //#region src/layouts/Dashboard/Dashboard.vue?vue&type=script&setup=true&lang.ts
4
+ var _hoisted_1 = { key: 0 };
5
+ var gapClass = {
6
+ sm: "gap-2 sm:gap-3",
7
+ md: "gap-3 sm:gap-4",
8
+ lg: "gap-4 sm:gap-6"
9
+ };
10
+ var Dashboard_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
+ __name: "Dashboard",
12
+ props: {
13
+ minTileWidth: { default: "16rem" },
14
+ gap: { default: "md" }
15
+ },
16
+ setup(__props) {
17
+ return (_ctx, _cache) => {
18
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("min-h-dvh flex flex-col")) }, [_ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_1, [renderSlot(_ctx.$slots, "header")])) : createCommentVNode("", true), createElementVNode("div", {
19
+ style: { flexWrap: "wrap" },
20
+ class: normalizeClass(unref(cn)("flex flex-1", _ctx.$slots.sidebar ? "flex-row" : void 0))
21
+ }, [_ctx.$slots.sidebar ? (openBlock(), createElementBlock("aside", {
22
+ key: 0,
23
+ style: {
24
+ flexBasis: "16rem",
25
+ flexGrow: 0,
26
+ flexShrink: 1
27
+ },
28
+ class: normalizeClass(unref(cn)("bg-sunken w-full"))
29
+ }, [renderSlot(_ctx.$slots, "sidebar")], 2)) : createCommentVNode("", true), createElementVNode("div", {
30
+ style: {
31
+ flexBasis: 0,
32
+ flexGrow: 999,
33
+ flexShrink: 1,
34
+ minWidth: "50%"
35
+ },
36
+ class: normalizeClass(unref(cn)("flex min-w-0 flex-col"))
37
+ }, [createElementVNode("div", {
38
+ class: normalizeClass(unref(cn)("flex-1 px-4 sm:px-6 3xl:px-8", _ctx.$slots.aside ? "flex flex-row 2xl:flex-row max-2xl:flex-col" : void 0)),
39
+ style: normalizeStyle(_ctx.$slots.aside ? { flexWrap: "wrap" } : void 0)
40
+ }, [createElementVNode("div", {
41
+ class: normalizeClass(unref(cn)("grid", gapClass[__props.gap], _ctx.$slots.aside ? "flex-grow-[999] flex-shrink-1" : void 0)),
42
+ style: normalizeStyle({
43
+ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${__props.minTileWidth}), 1fr))`,
44
+ ..._ctx.$slots.aside ? {
45
+ flexBasis: 0,
46
+ minWidth: "60%"
47
+ } : {}
48
+ })
49
+ }, [renderSlot(_ctx.$slots, "default")], 6), _ctx.$slots.aside ? (openBlock(), createElementBlock("aside", {
50
+ key: 0,
51
+ style: {
52
+ flexBasis: "14rem",
53
+ flexGrow: 0,
54
+ flexShrink: 1
55
+ },
56
+ class: normalizeClass(unref(cn)("hidden w-full 2xl:block"))
57
+ }, [renderSlot(_ctx.$slots, "aside")], 2)) : createCommentVNode("", true)], 6)], 2)], 2)], 2);
58
+ };
59
+ }
60
+ });
61
+ //#endregion
62
+ export { Dashboard_vue_vue_type_script_setup_true_lang_default as default, gapClass };
63
+
64
+ //# sourceMappingURL=Dashboard.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/layouts/Dashboard/Dashboard.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Dashboard — a dashboard shell: optional sidebar + auto-reflowing tile grid\n * for panels, with an optional aside for supplementary metrics on ultrawide\n * viewports.\n *\n * The layout composes three composition patterns into a single responsive\n * shell. The innermost is the auto-fit grid from DashboardGrid/Grid: the tile\n * column count derives from the container's own width, so the same grid\n * reflows inside a sidebar-narrowed workspace and full-bleed on an ultra-wide\n * monitor, with zero Tailwind breakpoints authored here or at the call site.\n *\n * The sidebar and aside use the Every Layout \"Sidebar\" flex-wrap technique:\n * each panel gets a fixed flex-basis and the grid area gets `flex-grow: 999`,\n * so when the container cannot fit the content's minimum, both panels wrap to\n * full-width and the sidebar or aside stacks above the grid instead of sitting\n * beside it. No media query, no JavaScript — the layout derives its own\n * breakpoints from the container's width.\n *\n * The `#aside` slot is gated behind a `2xl` breakpoint because supplementary\n * metrics are a luxury that only wide desktops can afford: the aside is hidden\n * below that width and the grid takes the full width, preventing a cramped\n * two-panel layout where neither panel has room to breathe.\n *\n * The header slot is full-width, above the sidebar+grid row, so a top\n * navigation bar or title row never competes for horizontal space with the\n * sidebar.\n */\nexport type DashboardMinTileWidth = string;\n\nconst gapClass: Record<string, 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 { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Narrowest a tile may get before the grid drops to fewer columns. */\n minTileWidth?: DashboardMinTileWidth;\n /** Grid gap step. Tightens one notch below sm. */\n gap?: \"sm\" | \"md\" | \"lg\";\n }>(),\n { minTileWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n The header is full-width and above the sidebar+grid row, so a\n navigation bar or title row never competes for horizontal space.\n -->\n <header v-if=\"$slots.header\">\n <slot name=\"header\" />\n </header>\n\n <!--\n The sidebar+grid row uses flex-wrap. The sidebar gets a fixed\n flex-basis (~16rem) and the grid area gets `flex-grow: 999`, so\n when the container is too narrow both panels wrap to full-width —\n the sidebar stacks above the grid. No media query; the layout\n derives its own breakpoint from the container's width.\n -->\n <div\n :style=\"{ flexWrap: 'wrap' }\"\n :class=\"cn('flex flex-1', $slots.sidebar ? 'flex-row' : undefined)\"\n >\n <!--\n The sidebar panel. Fixed-basis, no growth — it recedes into the\n sunken elevation layer when present, matching the AppShell pattern.\n -->\n <aside\n v-if=\"$slots.sidebar\"\n :style=\"{\n flexBasis: '16rem',\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('bg-sunken w-full')\"\n >\n <slot name=\"sidebar\" />\n </aside>\n\n <!--\n The main area: the auto-fit tile grid + an optional aside for\n supplementary metrics on ultrawide viewports.\n\n `flex-grow: 999` ensures this area takes all remaining space\n when the container is wide enough. Its `min-width: 50%` triggers\n wrapping below tablet-like widths, making the sidebar stack above.\n\n Gutters widen at wider breakpoints so ultrawide viewports add\n whitespace rails rather than stretching lines.\n -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n :class=\"cn('flex min-w-0 flex-col')\"\n >\n <div\n :class=\"\n cn(\n 'flex-1 px-4 sm:px-6 3xl:px-8',\n $slots.aside ? 'flex flex-row 2xl:flex-row max-2xl:flex-col' : undefined,\n )\n \"\n :style=\"$slots.aside ? { flexWrap: 'wrap' } : undefined\"\n >\n <!--\n The tile grid. `auto-fit` + `minmax` recomputes the column\n count from the container's own width — it reflows inside a\n sidebar-narrowed workspace and full-bleed on an ultra-wide\n monitor, with zero Tailwind breakpoints authored here. The\n `minmax` lower bound is wrapped in `min(100%, …)` so a tile\n never forces horizontal overflow on a container narrower than\n `minTileWidth` itself.\n -->\n <div\n :class=\"\n cn('grid', gapClass[gap], $slots.aside ? 'flex-grow-[999] flex-shrink-1' : undefined)\n \"\n :style=\"{\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${minTileWidth}), 1fr))`,\n ...($slots.aside ? { flexBasis: 0, minWidth: '60%' } : {}),\n }\"\n >\n <slot />\n </div>\n\n <!--\n The aside slot: supplementary metrics/info panels visible only\n on wide desktops (from `2xl` breakpoint). Uses the same\n flex-wrap Sidebar pattern: the aside gets a fixed basis and\n the grid area grows to fill the remaining space. Below `2xl`,\n the aside is hidden entirely — metrics are a luxury that only\n wide desktops can afford.\n -->\n <aside\n v-if=\"$slots.aside\"\n :style=\"{\n flexBasis: '14rem',\n flexGrow: 0,\n flexShrink: 1,\n }\"\n :class=\"cn('hidden w-full 2xl:block')\"\n >\n <slot name=\"aside\" />\n </aside>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":";;;;AA8BA,IAAM,WAAmC;CACvC,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;GAoBE,OAAA,UAAA,GAAA,mBA4GM,OAAA,EA5GA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,yBAAA,CAAA,EAAA,GAAA,CAKCA,KAAAA,OAAO,UAArB,UAAA,GAAA,mBAES,UAAA,YAAA,CADP,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAUxB,mBA2FM,OAAA;IA1FH,OAAO,EAAA,UAAA,OAAA;IACP,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,eAAgBA,KAAAA,OAAO,UAAO,aAAgB,KAAA,CAAS,CAAA;GAOzDA,GAAAA,CAAAA,KAAAA,OAAO,WADf,UAAA,GAAA,mBAUQ,SAAA;;IARL,OAAO;;;;IAIP;IACA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,kBAAA,CAAA;GAEV,GAAA,CAAA,WAAuB,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAczB,mBA2DM,OAAA;IA1DH,OAAO;;;;;IAKP;IACA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,uBAAA,CAAA;GAEV,GAAA,CAAA,mBAiDM,OAAA;IAhDH,OAAK,eAAe,MAAA,EAAA,CAAE,CAAA,gCAA8DA,KAAAA,OAAO,QAAK,gDAAmD,KAAA,CAAA,CAAA;IAMnJ,OAAK,eAAEA,KAAAA,OAAO,QAAK,EAAA,UAAA,OAAA,IAA0B,KAAA,CAAS;GAWvD,GAAA,CAAA,mBAUM,OAAA;IATH,OAAK,eAAiB,MAAA,EAAA,CAAE,CAAA,QAAS,SAAS,QAAA,MAAMA,KAAAA,OAAO,QAAK,kCAAqC,KAAA,CAAS,CAAA;IAG1G,OAAK,eAAA;KAA4E,qBAAA,qCAAA,QAAA,aAAY;KAA8BA,GAAAA,KAAAA,OAAO,QAAK;MAAA,WAAA;MAAA,UAAA;KAAA,IAAA,CAAA;;GAKxI,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,GAYFA,KAAAA,OAAO,SADf,UAAA,GAAA,mBAUQ,SAAA;;IARL,OAAO;;;;IAIP;IACA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,yBAAA,CAAA;GAEV,GAAA,CAAA,WAAqB,KAAA,QAAA,OAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import FormLayout_vue_vue_type_script_setup_true_lang_default, { maxWidthClass } from "./FormLayout.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/layouts/FormLayout/FormLayout.vue
3
+ var FormLayout_default = FormLayout_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { FormLayout_default as default, maxWidthClass };
6
+
7
+ //# sourceMappingURL=FormLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLayout.js","names":[],"sources":["../../../src/layouts/FormLayout/FormLayout.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormLayout — a centered form page with constrained width for readability.\n *\n * Forms are narrower than general content: a line length comfortable for reading\n * prose is already wider than the labels and inputs a form needs. FormLayout\n * enforces that cap so the host never ships a form that stretches across an\n * ultrawide monitor. The `maxWidth` prop maps to named steps rather than a pixel\n * value, so the host names intent and the layout owns the geometry.\n *\n * The `#actions` slot flows with the content rather than being sticky, because a\n * submit button that stays pinned while the user scrolls is a button that gets\n * clicked before the form is filled. The gap between content and actions is a\n * fixed `mt-8` — a visual separator is the layout's responsibility, and a wider\n * gap than Stack's `lg` step is warranted to make the boundary unmistakable.\n *\n * The header slot is full-width, above the centered content, so a page title or\n * breadcrumb never competes for horizontal space with the constrained form.\n * Gutters widen at wider breakpoints so ultrawide viewports add whitespace rails\n * rather than stretching the form.\n */\nexport type FormLayoutMaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst maxWidthClass: Record<FormLayoutMaxWidth, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n} as const;\n\nexport { maxWidthClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Max-width for the form column. Forms should be narrower than general content. */\n maxWidth?: FormLayoutMaxWidth;\n }>(),\n { maxWidth: \"md\" },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n The header is full-width, above the centered form content, so a page\n title or breadcrumb never competes for horizontal space.\n -->\n <header v-if=\"$slots.header\" :class=\"cn('px-4 sm:px-6 3xl:px-8')\">\n <slot name=\"header\" />\n </header>\n\n <!--\n The content area fills available vertical space and centres the form\n horizontally. `max-w-md` (default) keeps labels and inputs at a\n comfortable width — wider than that and the eye has to travel too far\n between label and input. Gutters widen at wider breakpoints so\n ultrawide viewports add whitespace rails rather than stretching lines.\n -->\n <div :class=\"cn('mx-auto w-full flex-1 px-4 sm:px-6 3xl:px-8', maxWidthClass[maxWidth])\">\n <slot />\n\n <!--\n The actions slot is separated from the form content by a wider gap\n than Stack's lg step, so the boundary between \"fill in\" and \"submit\"\n is unmistakable. It flows with the content rather than being sticky,\n because a submit button pinned to the viewport is a button clicked\n before the form is filled.\n -->\n <div v-if=\"$slots.actions\" :class=\"cn('mt-8')\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * FormLayout — a centered form page with constrained width for readability.
3
+ *
4
+ * Forms are narrower than general content: a line length comfortable for reading
5
+ * prose is already wider than the labels and inputs a form needs. FormLayout
6
+ * enforces that cap so the host never ships a form that stretches across an
7
+ * ultrawide monitor. The `maxWidth` prop maps to named steps rather than a pixel
8
+ * value, so the host names intent and the layout owns the geometry.
9
+ *
10
+ * The `#actions` slot flows with the content rather than being sticky, because a
11
+ * submit button that stays pinned while the user scrolls is a button that gets
12
+ * clicked before the form is filled. The gap between content and actions is a
13
+ * fixed `mt-8` — a visual separator is the layout's responsibility, and a wider
14
+ * gap than Stack's `lg` step is warranted to make the boundary unmistakable.
15
+ *
16
+ * The header slot is full-width, above the centered content, so a page title or
17
+ * breadcrumb never competes for horizontal space with the constrained form.
18
+ * Gutters widen at wider breakpoints so ultrawide viewports add whitespace rails
19
+ * rather than stretching the form.
20
+ */
21
+ export type FormLayoutMaxWidth = "sm" | "md" | "lg" | "xl";
22
+ declare const maxWidthClass: Record<FormLayoutMaxWidth, string>;
23
+ export { maxWidthClass };
24
+ declare const _default: typeof __VLS_export;
25
+ export default _default;
26
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
27
+ /** Max-width for the form column. Forms should be narrower than general content. */
28
+ maxWidth?: FormLayoutMaxWidth;
29
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
30
+ /** Max-width for the form column. Forms should be narrower than general content. */
31
+ maxWidth?: FormLayoutMaxWidth;
32
+ }> & Readonly<{}>, {
33
+ maxWidth: FormLayoutMaxWidth;
34
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
35
+ header?: (props: {}) => any;
36
+ } & {
37
+ default?: (props: {}) => any;
38
+ } & {
39
+ actions?: (props: {}) => any;
40
+ }>;
41
+ type __VLS_WithSlots<T, S> = T & {
42
+ new (): {
43
+ $slots: S;
44
+ };
45
+ };
46
+ //# sourceMappingURL=FormLayout.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLayout.vue.d.ts","sourceRoot":"","sources":["../../../src/layouts/FormLayout/FormLayout.vue"],"names":[],"mappings":"AAoFA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3D,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAK5C,CAAC;AAEX,OAAO,EAAE,aAAa,EAAE,CAAC;wBACJ,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,oFAAoF;eACzE,kBAAkB;;IAD7B,oFAAoF;eACzE,kBAAkB;;cAAlB,kBAAkB;;aAmDpB,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC9B,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,28 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
+ //#region src/layouts/FormLayout/FormLayout.vue?vue&type=script&setup=true&lang.ts
4
+ var maxWidthClass = {
5
+ sm: "max-w-sm",
6
+ md: "max-w-md",
7
+ lg: "max-w-lg",
8
+ xl: "max-w-xl"
9
+ };
10
+ var FormLayout_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
+ __name: "FormLayout",
12
+ props: { maxWidth: { default: "md" } },
13
+ setup(__props) {
14
+ return (_ctx, _cache) => {
15
+ return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("min-h-dvh flex flex-col")) }, [_ctx.$slots.header ? (openBlock(), createElementBlock("header", {
16
+ key: 0,
17
+ class: normalizeClass(unref(cn)("px-4 sm:px-6 3xl:px-8"))
18
+ }, [renderSlot(_ctx.$slots, "header")], 2)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(cn)("mx-auto w-full flex-1 px-4 sm:px-6 3xl:px-8", maxWidthClass[__props.maxWidth])) }, [renderSlot(_ctx.$slots, "default"), _ctx.$slots.actions ? (openBlock(), createElementBlock("div", {
19
+ key: 0,
20
+ class: normalizeClass(unref(cn)("mt-8"))
21
+ }, [renderSlot(_ctx.$slots, "actions")], 2)) : createCommentVNode("", true)], 2)], 2);
22
+ };
23
+ }
24
+ });
25
+ //#endregion
26
+ export { FormLayout_vue_vue_type_script_setup_true_lang_default as default, maxWidthClass };
27
+
28
+ //# sourceMappingURL=FormLayout.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLayout.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/layouts/FormLayout/FormLayout.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * FormLayout — a centered form page with constrained width for readability.\n *\n * Forms are narrower than general content: a line length comfortable for reading\n * prose is already wider than the labels and inputs a form needs. FormLayout\n * enforces that cap so the host never ships a form that stretches across an\n * ultrawide monitor. The `maxWidth` prop maps to named steps rather than a pixel\n * value, so the host names intent and the layout owns the geometry.\n *\n * The `#actions` slot flows with the content rather than being sticky, because a\n * submit button that stays pinned while the user scrolls is a button that gets\n * clicked before the form is filled. The gap between content and actions is a\n * fixed `mt-8` — a visual separator is the layout's responsibility, and a wider\n * gap than Stack's `lg` step is warranted to make the boundary unmistakable.\n *\n * The header slot is full-width, above the centered content, so a page title or\n * breadcrumb never competes for horizontal space with the constrained form.\n * Gutters widen at wider breakpoints so ultrawide viewports add whitespace rails\n * rather than stretching the form.\n */\nexport type FormLayoutMaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst maxWidthClass: Record<FormLayoutMaxWidth, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n} as const;\n\nexport { maxWidthClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Max-width for the form column. Forms should be narrower than general content. */\n maxWidth?: FormLayoutMaxWidth;\n }>(),\n { maxWidth: \"md\" },\n);\n</script>\n\n<template>\n <div :class=\"cn('min-h-dvh flex flex-col')\">\n <!--\n The header is full-width, above the centered form content, so a page\n title or breadcrumb never competes for horizontal space.\n -->\n <header v-if=\"$slots.header\" :class=\"cn('px-4 sm:px-6 3xl:px-8')\">\n <slot name=\"header\" />\n </header>\n\n <!--\n The content area fills available vertical space and centres the form\n horizontally. `max-w-md` (default) keeps labels and inputs at a\n comfortable width — wider than that and the eye has to travel too far\n between label and input. Gutters widen at wider breakpoints so\n ultrawide viewports add whitespace rails rather than stretching lines.\n -->\n <div :class=\"cn('mx-auto w-full flex-1 px-4 sm:px-6 3xl:px-8', maxWidthClass[maxWidth])\">\n <slot />\n\n <!--\n The actions slot is separated from the form content by a wider gap\n than Stack's lg step, so the boundary between \"fill in\" and \"submit\"\n is unmistakable. It flows with the content rather than being sticky,\n because a submit button pinned to the viewport is a button clicked\n before the form is filled.\n -->\n <div v-if=\"$slots.actions\" :class=\"cn('mt-8')\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":";;;AAuBA,IAAM,gBAAoD;CACxD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;GAkBE,OAAA,UAAA,GAAA,mBA8BM,OAAA,EA9BA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,yBAAA,CAAA,EAAA,GAAA,CAKCA,KAAAA,OAAO,UAArB,UAAA,GAAA,mBAES,UAAA;;IAFqB,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,uBAAA,CAAA;GACrC,GAAA,CAAA,WAAsB,KAAA,QAAA,QAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAUxB,mBAaM,OAAA,EAbA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,+CAAgD,cAAc,QAAA,SAAQ,CAAA,EAAA,GAAA,CACnF,WAAQ,KAAA,QAAA,SAAA,GASGA,KAAAA,OAAO,WAAlB,UAAA,GAAA,mBAEM,OAAA;;IAFsB,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,MAAA,CAAA;GACnC,GAAA,CAAA,WAAuB,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import MasterDetail_vue_vue_type_script_setup_true_lang_default, { gapClass } from "./MasterDetail.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/layouts/MasterDetail/MasterDetail.vue
3
+ var MasterDetail_default = MasterDetail_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { MasterDetail_default as default, gapClass };
6
+
7
+ //# sourceMappingURL=MasterDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasterDetail.js","names":[],"sources":["../../../src/layouts/MasterDetail/MasterDetail.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * MasterDetail — a master list panel and a detail panel side by side.\n *\n * The master/detail pattern is the layout that list-driven applications reach\n * for: a selectable list on one side, its content on the other. Mail clients,\n * file browsers, and settings pages all share this structure.\n *\n * The intrinsic collapse from the Split composition primitive is reused directly\n * — `flex-wrap` plus a `min-width: 50%` guard on the detail panel — so the\n * layout derives its own breakpoint from the container's width rather than a\n * viewport media query. Below the collapse width the panels stack vertically;\n * the master list sits above the detail area.\n *\n * The master panel does not shrink (`flex-shrink: 0`), unlike the AppShell\n * sidebar, because a master list whose column widths change under compression\n * is harder to scan than one that holds its shape and lets the detail panel\n * absorb the squeeze. The detail panel scrolls independently so long lists of\n * content never push the master list off-screen.\n */\nexport type MasterDetailMinMasterWidth = string;\n\nexport type MasterDetailGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<MasterDetailGap, \"none\">, 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 { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Minimum width for the master panel (e.g. \"14rem\"). The detail area takes the rest. */\n minMasterWidth?: MasterDetailMinMasterWidth;\n /** Gap between master and detail panels. Tightens one notch below sm. */\n gap?: MasterDetailGap;\n }>(),\n { minMasterWidth: \"14rem\", gap: \"none\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the detail\n panel cannot honour its `min-width: 50%`, both panels wrap to full-width —\n the master list sits above the detail area. No media query; the layout\n derives its own breakpoint from the container's width.\n -->\n <div\n :class=\"cn('flex h-full', gap !== 'none' ? gapClass[gap] : undefined)\"\n :style=\"{ flexWrap: 'wrap' }\"\n >\n <!--\n The master panel holds a fixed basis and does not grow or shrink. It sits\n on the sunken elevation so the detail area reads as the work surface\n lifted above navigation chrome.\n -->\n <div\n :style=\"{\n flexBasis: minMasterWidth,\n flexGrow: 0,\n flexShrink: 0,\n }\"\n :class=\"cn('bg-sunken w-full')\"\n >\n <slot name=\"master\" />\n </div>\n\n <!--\n The detail panel takes all remaining space (`flex-grow: 999`) when the\n container is wide enough. Its `min-width: 50%` triggers wrapping below\n tablet-like widths. It scrolls independently so long content never pushes\n the master list off-screen. Gutters widen at wider breakpoints so\n ultrawide viewports add whitespace rails rather than stretching lines.\n -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n :class=\"cn('bg-background overflow-y-auto px-4 sm:px-6 3xl:px-8')\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * MasterDetail — a master list panel and a detail panel side by side.
3
+ *
4
+ * The master/detail pattern is the layout that list-driven applications reach
5
+ * for: a selectable list on one side, its content on the other. Mail clients,
6
+ * file browsers, and settings pages all share this structure.
7
+ *
8
+ * The intrinsic collapse from the Split composition primitive is reused directly
9
+ * — `flex-wrap` plus a `min-width: 50%` guard on the detail panel — so the
10
+ * layout derives its own breakpoint from the container's width rather than a
11
+ * viewport media query. Below the collapse width the panels stack vertically;
12
+ * the master list sits above the detail area.
13
+ *
14
+ * The master panel does not shrink (`flex-shrink: 0`), unlike the AppShell
15
+ * sidebar, because a master list whose column widths change under compression
16
+ * is harder to scan than one that holds its shape and lets the detail panel
17
+ * absorb the squeeze. The detail panel scrolls independently so long lists of
18
+ * content never push the master list off-screen.
19
+ */
20
+ export type MasterDetailMinMasterWidth = string;
21
+ export type MasterDetailGap = "sm" | "md" | "lg" | "none";
22
+ declare const gapClass: Record<Exclude<MasterDetailGap, "none">, 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
+ /** Minimum width for the master panel (e.g. "14rem"). The detail area takes the rest. */
28
+ minMasterWidth?: MasterDetailMinMasterWidth;
29
+ /** Gap between master and detail panels. Tightens one notch below sm. */
30
+ gap?: MasterDetailGap;
31
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
32
+ /** Minimum width for the master panel (e.g. "14rem"). The detail area takes the rest. */
33
+ minMasterWidth?: MasterDetailMinMasterWidth;
34
+ /** Gap between master and detail panels. Tightens one notch below sm. */
35
+ gap?: MasterDetailGap;
36
+ }> & Readonly<{}>, {
37
+ gap: MasterDetailGap;
38
+ minMasterWidth: MasterDetailMinMasterWidth;
39
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
40
+ master?: (props: {}) => any;
41
+ } & {
42
+ default?: (props: {}) => any;
43
+ }>;
44
+ type __VLS_WithSlots<T, S> = T & {
45
+ new (): {
46
+ $slots: S;
47
+ };
48
+ };
49
+ //# sourceMappingURL=MasterDetail.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasterDetail.vue.d.ts","sourceRoot":"","sources":["../../../src/layouts/MasterDetail/MasterDetail.vue"],"names":[],"mappings":"AAoGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE1D,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,CAIrD,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,yFAAyF;qBACxE,0BAA0B;IAC3C,yEAAyE;UACnE,eAAe;;IAHrB,yFAAyF;qBACxE,0BAA0B;IAC3C,yEAAyE;UACnE,eAAe;;SAAf,eAAe;oBAFJ,0BAA0B;;aAwDlC,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"}