@andyagent/ainorix-ui 0.1.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 (283) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +219 -0
  3. package/dist/ainorix-ui.cjs +2 -0
  4. package/dist/ainorix-ui.cjs.map +1 -0
  5. package/dist/ainorix-ui.js +2065 -0
  6. package/dist/ainorix-ui.js.map +1 -0
  7. package/dist/components/AAccordion/AAccordion.types.d.ts +13 -0
  8. package/dist/components/AAccordion/AAccordion.types.d.ts.map +1 -0
  9. package/dist/components/AAccordion/AAccordion.vue.d.ts +20 -0
  10. package/dist/components/AAccordion/AAccordion.vue.d.ts.map +1 -0
  11. package/dist/components/AAccordion/index.d.ts +3 -0
  12. package/dist/components/AAccordion/index.d.ts.map +1 -0
  13. package/dist/components/AAlert/AAlert.types.d.ts +14 -0
  14. package/dist/components/AAlert/AAlert.types.d.ts.map +1 -0
  15. package/dist/components/AAlert/AAlert.vue.d.ts +27 -0
  16. package/dist/components/AAlert/AAlert.vue.d.ts.map +1 -0
  17. package/dist/components/AAlert/index.d.ts +3 -0
  18. package/dist/components/AAlert/index.d.ts.map +1 -0
  19. package/dist/components/AAvatar/AAvatar.types.d.ts +12 -0
  20. package/dist/components/AAvatar/AAvatar.types.d.ts.map +1 -0
  21. package/dist/components/AAvatar/AAvatar.vue.d.ts +9 -0
  22. package/dist/components/AAvatar/AAvatar.vue.d.ts.map +1 -0
  23. package/dist/components/AAvatar/index.d.ts +3 -0
  24. package/dist/components/AAvatar/index.d.ts.map +1 -0
  25. package/dist/components/AAvatarGroup/AAvatarGroup.types.d.ts +10 -0
  26. package/dist/components/AAvatarGroup/AAvatarGroup.types.d.ts.map +1 -0
  27. package/dist/components/AAvatarGroup/AAvatarGroup.vue.d.ts +7 -0
  28. package/dist/components/AAvatarGroup/AAvatarGroup.vue.d.ts.map +1 -0
  29. package/dist/components/AAvatarGroup/index.d.ts +3 -0
  30. package/dist/components/AAvatarGroup/index.d.ts.map +1 -0
  31. package/dist/components/ABadge/ABadge.types.d.ts +14 -0
  32. package/dist/components/ABadge/ABadge.types.d.ts.map +1 -0
  33. package/dist/components/ABadge/ABadge.vue.d.ts +23 -0
  34. package/dist/components/ABadge/ABadge.vue.d.ts.map +1 -0
  35. package/dist/components/ABadge/index.d.ts +3 -0
  36. package/dist/components/ABadge/index.d.ts.map +1 -0
  37. package/dist/components/ABanner/ABanner.types.d.ts +14 -0
  38. package/dist/components/ABanner/ABanner.types.d.ts.map +1 -0
  39. package/dist/components/ABanner/ABanner.vue.d.ts +28 -0
  40. package/dist/components/ABanner/ABanner.vue.d.ts.map +1 -0
  41. package/dist/components/ABanner/index.d.ts +3 -0
  42. package/dist/components/ABanner/index.d.ts.map +1 -0
  43. package/dist/components/ABreadcrumbs/ABreadcrumbs.types.d.ts +12 -0
  44. package/dist/components/ABreadcrumbs/ABreadcrumbs.types.d.ts.map +1 -0
  45. package/dist/components/ABreadcrumbs/ABreadcrumbs.vue.d.ts +6 -0
  46. package/dist/components/ABreadcrumbs/ABreadcrumbs.vue.d.ts.map +1 -0
  47. package/dist/components/ABreadcrumbs/index.d.ts +3 -0
  48. package/dist/components/ABreadcrumbs/index.d.ts.map +1 -0
  49. package/dist/components/AButton/AButton.types.d.ts +22 -0
  50. package/dist/components/AButton/AButton.types.d.ts.map +1 -0
  51. package/dist/components/AButton/AButton.vue.d.ts +32 -0
  52. package/dist/components/AButton/AButton.vue.d.ts.map +1 -0
  53. package/dist/components/AButton/index.d.ts +3 -0
  54. package/dist/components/AButton/index.d.ts.map +1 -0
  55. package/dist/components/ACard/ACard.types.d.ts +16 -0
  56. package/dist/components/ACard/ACard.types.d.ts.map +1 -0
  57. package/dist/components/ACard/ACard.vue.d.ts +23 -0
  58. package/dist/components/ACard/ACard.vue.d.ts.map +1 -0
  59. package/dist/components/ACard/index.d.ts +3 -0
  60. package/dist/components/ACard/index.d.ts.map +1 -0
  61. package/dist/components/AChartFrame/AChartFrame.types.d.ts +11 -0
  62. package/dist/components/AChartFrame/AChartFrame.types.d.ts.map +1 -0
  63. package/dist/components/AChartFrame/AChartFrame.vue.d.ts +19 -0
  64. package/dist/components/AChartFrame/AChartFrame.vue.d.ts.map +1 -0
  65. package/dist/components/AChartFrame/index.d.ts +3 -0
  66. package/dist/components/AChartFrame/index.d.ts.map +1 -0
  67. package/dist/components/ACheckbox/ACheckbox.types.d.ts +18 -0
  68. package/dist/components/ACheckbox/ACheckbox.types.d.ts.map +1 -0
  69. package/dist/components/ACheckbox/ACheckbox.vue.d.ts +33 -0
  70. package/dist/components/ACheckbox/ACheckbox.vue.d.ts.map +1 -0
  71. package/dist/components/ACheckbox/index.d.ts +3 -0
  72. package/dist/components/ACheckbox/index.d.ts.map +1 -0
  73. package/dist/components/ADrawer/ADrawer.types.d.ts +18 -0
  74. package/dist/components/ADrawer/ADrawer.types.d.ts.map +1 -0
  75. package/dist/components/ADrawer/ADrawer.vue.d.ts +31 -0
  76. package/dist/components/ADrawer/ADrawer.vue.d.ts.map +1 -0
  77. package/dist/components/ADrawer/index.d.ts +3 -0
  78. package/dist/components/ADrawer/index.d.ts.map +1 -0
  79. package/dist/components/AEmptyState/AEmptyState.types.d.ts +13 -0
  80. package/dist/components/AEmptyState/AEmptyState.types.d.ts.map +1 -0
  81. package/dist/components/AEmptyState/AEmptyState.vue.d.ts +23 -0
  82. package/dist/components/AEmptyState/AEmptyState.vue.d.ts.map +1 -0
  83. package/dist/components/AEmptyState/index.d.ts +3 -0
  84. package/dist/components/AEmptyState/index.d.ts.map +1 -0
  85. package/dist/components/AFileUpload/AFileUpload.types.d.ts +14 -0
  86. package/dist/components/AFileUpload/AFileUpload.types.d.ts.map +1 -0
  87. package/dist/components/AFileUpload/AFileUpload.vue.d.ts +12 -0
  88. package/dist/components/AFileUpload/AFileUpload.vue.d.ts.map +1 -0
  89. package/dist/components/AFileUpload/index.d.ts +3 -0
  90. package/dist/components/AFileUpload/index.d.ts.map +1 -0
  91. package/dist/components/AFormField/AFormField.types.d.ts +14 -0
  92. package/dist/components/AFormField/AFormField.types.d.ts.map +1 -0
  93. package/dist/components/AFormField/AFormField.vue.d.ts +21 -0
  94. package/dist/components/AFormField/AFormField.vue.d.ts.map +1 -0
  95. package/dist/components/AFormField/index.d.ts +3 -0
  96. package/dist/components/AFormField/index.d.ts.map +1 -0
  97. package/dist/components/AIcon/AIcon.types.d.ts +10 -0
  98. package/dist/components/AIcon/AIcon.types.d.ts.map +1 -0
  99. package/dist/components/AIcon/AIcon.vue.d.ts +6 -0
  100. package/dist/components/AIcon/AIcon.vue.d.ts.map +1 -0
  101. package/dist/components/AIcon/index.d.ts +3 -0
  102. package/dist/components/AIcon/index.d.ts.map +1 -0
  103. package/dist/components/AInput/AInput.types.d.ts +29 -0
  104. package/dist/components/AInput/AInput.types.d.ts.map +1 -0
  105. package/dist/components/AInput/AInput.vue.d.ts +32 -0
  106. package/dist/components/AInput/AInput.vue.d.ts.map +1 -0
  107. package/dist/components/AInput/index.d.ts +3 -0
  108. package/dist/components/AInput/index.d.ts.map +1 -0
  109. package/dist/components/AKpiCard/AKpiCard.types.d.ts +13 -0
  110. package/dist/components/AKpiCard/AKpiCard.types.d.ts.map +1 -0
  111. package/dist/components/AKpiCard/AKpiCard.vue.d.ts +21 -0
  112. package/dist/components/AKpiCard/AKpiCard.vue.d.ts.map +1 -0
  113. package/dist/components/AKpiCard/index.d.ts +3 -0
  114. package/dist/components/AKpiCard/index.d.ts.map +1 -0
  115. package/dist/components/AModal/AModal.types.d.ts +23 -0
  116. package/dist/components/AModal/AModal.types.d.ts.map +1 -0
  117. package/dist/components/AModal/AModal.vue.d.ts +38 -0
  118. package/dist/components/AModal/AModal.vue.d.ts.map +1 -0
  119. package/dist/components/AModal/index.d.ts +3 -0
  120. package/dist/components/AModal/index.d.ts.map +1 -0
  121. package/dist/components/ANumberInput/ANumberInput.types.d.ts +14 -0
  122. package/dist/components/ANumberInput/ANumberInput.types.d.ts.map +1 -0
  123. package/dist/components/ANumberInput/ANumberInput.vue.d.ts +12 -0
  124. package/dist/components/ANumberInput/ANumberInput.vue.d.ts.map +1 -0
  125. package/dist/components/ANumberInput/index.d.ts +3 -0
  126. package/dist/components/ANumberInput/index.d.ts.map +1 -0
  127. package/dist/components/APagination/APagination.types.d.ts +15 -0
  128. package/dist/components/APagination/APagination.types.d.ts.map +1 -0
  129. package/dist/components/APagination/APagination.vue.d.ts +16 -0
  130. package/dist/components/APagination/APagination.vue.d.ts.map +1 -0
  131. package/dist/components/APagination/index.d.ts +3 -0
  132. package/dist/components/APagination/index.d.ts.map +1 -0
  133. package/dist/components/APopover/APopover.types.d.ts +13 -0
  134. package/dist/components/APopover/APopover.types.d.ts.map +1 -0
  135. package/dist/components/APopover/APopover.vue.d.ts +26 -0
  136. package/dist/components/APopover/APopover.vue.d.ts.map +1 -0
  137. package/dist/components/APopover/index.d.ts +3 -0
  138. package/dist/components/APopover/index.d.ts.map +1 -0
  139. package/dist/components/AProgress/AProgress.types.d.ts +9 -0
  140. package/dist/components/AProgress/AProgress.types.d.ts.map +1 -0
  141. package/dist/components/AProgress/AProgress.vue.d.ts +6 -0
  142. package/dist/components/AProgress/AProgress.vue.d.ts.map +1 -0
  143. package/dist/components/AProgress/index.d.ts +3 -0
  144. package/dist/components/AProgress/index.d.ts.map +1 -0
  145. package/dist/components/ARadio/ARadio.types.d.ts +17 -0
  146. package/dist/components/ARadio/ARadio.types.d.ts.map +1 -0
  147. package/dist/components/ARadio/ARadio.vue.d.ts +11 -0
  148. package/dist/components/ARadio/ARadio.vue.d.ts.map +1 -0
  149. package/dist/components/ARadio/index.d.ts +3 -0
  150. package/dist/components/ARadio/index.d.ts.map +1 -0
  151. package/dist/components/ASegmented/ASegmented.types.d.ts +14 -0
  152. package/dist/components/ASegmented/ASegmented.types.d.ts.map +1 -0
  153. package/dist/components/ASegmented/ASegmented.vue.d.ts +10 -0
  154. package/dist/components/ASegmented/ASegmented.vue.d.ts.map +1 -0
  155. package/dist/components/ASegmented/index.d.ts +3 -0
  156. package/dist/components/ASegmented/index.d.ts.map +1 -0
  157. package/dist/components/ASelect/ASelect.types.d.ts +29 -0
  158. package/dist/components/ASelect/ASelect.types.d.ts.map +1 -0
  159. package/dist/components/ASelect/ASelect.vue.d.ts +24 -0
  160. package/dist/components/ASelect/ASelect.vue.d.ts.map +1 -0
  161. package/dist/components/ASelect/index.d.ts +3 -0
  162. package/dist/components/ASelect/index.d.ts.map +1 -0
  163. package/dist/components/ASidebarNav/ASidebarNav.types.d.ts +21 -0
  164. package/dist/components/ASidebarNav/ASidebarNav.types.d.ts.map +1 -0
  165. package/dist/components/ASidebarNav/ASidebarNav.vue.d.ts +10 -0
  166. package/dist/components/ASidebarNav/ASidebarNav.vue.d.ts.map +1 -0
  167. package/dist/components/ASidebarNav/index.d.ts +3 -0
  168. package/dist/components/ASidebarNav/index.d.ts.map +1 -0
  169. package/dist/components/ASkeleton/ASkeleton.types.d.ts +10 -0
  170. package/dist/components/ASkeleton/ASkeleton.types.d.ts.map +1 -0
  171. package/dist/components/ASkeleton/ASkeleton.vue.d.ts +8 -0
  172. package/dist/components/ASkeleton/ASkeleton.vue.d.ts.map +1 -0
  173. package/dist/components/ASkeleton/index.d.ts +3 -0
  174. package/dist/components/ASkeleton/index.d.ts.map +1 -0
  175. package/dist/components/ASlider/ASlider.types.d.ts +13 -0
  176. package/dist/components/ASlider/ASlider.types.d.ts.map +1 -0
  177. package/dist/components/ASlider/ASlider.vue.d.ts +14 -0
  178. package/dist/components/ASlider/ASlider.vue.d.ts.map +1 -0
  179. package/dist/components/ASlider/index.d.ts +3 -0
  180. package/dist/components/ASlider/index.d.ts.map +1 -0
  181. package/dist/components/ASpinner/ASpinner.types.d.ts +11 -0
  182. package/dist/components/ASpinner/ASpinner.types.d.ts.map +1 -0
  183. package/dist/components/ASpinner/ASpinner.vue.d.ts +8 -0
  184. package/dist/components/ASpinner/ASpinner.vue.d.ts.map +1 -0
  185. package/dist/components/ASpinner/index.d.ts +3 -0
  186. package/dist/components/ASpinner/index.d.ts.map +1 -0
  187. package/dist/components/AStatusPill/AStatusPill.types.d.ts +10 -0
  188. package/dist/components/AStatusPill/AStatusPill.types.d.ts.map +1 -0
  189. package/dist/components/AStatusPill/AStatusPill.vue.d.ts +21 -0
  190. package/dist/components/AStatusPill/AStatusPill.vue.d.ts.map +1 -0
  191. package/dist/components/AStatusPill/index.d.ts +3 -0
  192. package/dist/components/AStatusPill/index.d.ts.map +1 -0
  193. package/dist/components/AStepper/AStepper.types.d.ts +14 -0
  194. package/dist/components/AStepper/AStepper.types.d.ts.map +1 -0
  195. package/dist/components/AStepper/AStepper.vue.d.ts +8 -0
  196. package/dist/components/AStepper/AStepper.vue.d.ts.map +1 -0
  197. package/dist/components/AStepper/index.d.ts +3 -0
  198. package/dist/components/AStepper/index.d.ts.map +1 -0
  199. package/dist/components/ASwitch/ASwitch.types.d.ts +13 -0
  200. package/dist/components/ASwitch/ASwitch.types.d.ts.map +1 -0
  201. package/dist/components/ASwitch/ASwitch.vue.d.ts +26 -0
  202. package/dist/components/ASwitch/ASwitch.vue.d.ts.map +1 -0
  203. package/dist/components/ASwitch/index.d.ts +3 -0
  204. package/dist/components/ASwitch/index.d.ts.map +1 -0
  205. package/dist/components/ATable/ATable.types.d.ts +52 -0
  206. package/dist/components/ATable/ATable.types.d.ts.map +1 -0
  207. package/dist/components/ATable/ATable.vue.d.ts +59 -0
  208. package/dist/components/ATable/ATable.vue.d.ts.map +1 -0
  209. package/dist/components/ATable/index.d.ts +3 -0
  210. package/dist/components/ATable/index.d.ts.map +1 -0
  211. package/dist/components/ATabs/ATabs.types.d.ts +16 -0
  212. package/dist/components/ATabs/ATabs.types.d.ts.map +1 -0
  213. package/dist/components/ATabs/ATabs.vue.d.ts +11 -0
  214. package/dist/components/ATabs/ATabs.vue.d.ts.map +1 -0
  215. package/dist/components/ATabs/index.d.ts +3 -0
  216. package/dist/components/ATabs/index.d.ts.map +1 -0
  217. package/dist/components/ATag/ATag.types.d.ts +12 -0
  218. package/dist/components/ATag/ATag.types.d.ts.map +1 -0
  219. package/dist/components/ATag/ATag.vue.d.ts +26 -0
  220. package/dist/components/ATag/ATag.vue.d.ts.map +1 -0
  221. package/dist/components/ATag/index.d.ts +3 -0
  222. package/dist/components/ATag/index.d.ts.map +1 -0
  223. package/dist/components/ATimeline/ATimeline.types.d.ts +14 -0
  224. package/dist/components/ATimeline/ATimeline.types.d.ts.map +1 -0
  225. package/dist/components/ATimeline/ATimeline.vue.d.ts +6 -0
  226. package/dist/components/ATimeline/ATimeline.vue.d.ts.map +1 -0
  227. package/dist/components/ATimeline/index.d.ts +3 -0
  228. package/dist/components/ATimeline/index.d.ts.map +1 -0
  229. package/dist/components/AToast/AToast.types.d.ts +20 -0
  230. package/dist/components/AToast/AToast.types.d.ts.map +1 -0
  231. package/dist/components/AToast/AToast.vue.d.ts +13 -0
  232. package/dist/components/AToast/AToast.vue.d.ts.map +1 -0
  233. package/dist/components/AToast/AToastHost.vue.d.ts +10 -0
  234. package/dist/components/AToast/AToastHost.vue.d.ts.map +1 -0
  235. package/dist/components/AToast/index.d.ts +4 -0
  236. package/dist/components/AToast/index.d.ts.map +1 -0
  237. package/dist/components/ATooltip/ATooltip.types.d.ts +11 -0
  238. package/dist/components/ATooltip/ATooltip.types.d.ts.map +1 -0
  239. package/dist/components/ATooltip/ATooltip.vue.d.ts +21 -0
  240. package/dist/components/ATooltip/ATooltip.vue.d.ts.map +1 -0
  241. package/dist/components/ATooltip/index.d.ts +3 -0
  242. package/dist/components/ATooltip/index.d.ts.map +1 -0
  243. package/dist/components/index.d.ts +40 -0
  244. package/dist/components/index.d.ts.map +1 -0
  245. package/dist/composables/index.d.ts +5 -0
  246. package/dist/composables/index.d.ts.map +1 -0
  247. package/dist/composables/useDensity.d.ts +6 -0
  248. package/dist/composables/useDensity.d.ts.map +1 -0
  249. package/dist/composables/useDisclosure.d.ts +7 -0
  250. package/dist/composables/useDisclosure.d.ts.map +1 -0
  251. package/dist/composables/useTheme.d.ts +8 -0
  252. package/dist/composables/useTheme.d.ts.map +1 -0
  253. package/dist/composables/useToast.d.ts +34 -0
  254. package/dist/composables/useToast.d.ts.map +1 -0
  255. package/dist/directives/focus.d.ts +3 -0
  256. package/dist/directives/focus.d.ts.map +1 -0
  257. package/dist/directives/index.d.ts +2 -0
  258. package/dist/directives/index.d.ts.map +1 -0
  259. package/dist/icons/CheckIcon.d.ts +7 -0
  260. package/dist/icons/CheckIcon.d.ts.map +1 -0
  261. package/dist/icons/index.d.ts +2 -0
  262. package/dist/icons/index.d.ts.map +1 -0
  263. package/dist/index.d.ts +11 -0
  264. package/dist/index.d.ts.map +1 -0
  265. package/dist/plugin.d.ts +877 -0
  266. package/dist/plugin.d.ts.map +1 -0
  267. package/dist/styles/entry.d.ts +1 -0
  268. package/dist/styles/entry.d.ts.map +1 -0
  269. package/dist/styles.cjs +2 -0
  270. package/dist/styles.cjs.map +1 -0
  271. package/dist/styles.css +1 -0
  272. package/dist/styles.d.ts +1 -0
  273. package/dist/styles.js +2 -0
  274. package/dist/styles.js.map +1 -0
  275. package/dist/tokens/index.d.ts +3 -0
  276. package/dist/tokens/index.d.ts.map +1 -0
  277. package/dist/types/index.d.ts +3 -0
  278. package/dist/types/index.d.ts.map +1 -0
  279. package/dist/utils/chartTheme.d.ts +9 -0
  280. package/dist/utils/chartTheme.d.ts.map +1 -0
  281. package/dist/utils/id.d.ts +2 -0
  282. package/dist/utils/id.d.ts.map +1 -0
  283. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ainorix-ui.cjs","sources":["../src/directives/focus.ts","../src/components/ASpinner/ASpinner.vue","../src/components/AButton/AButton.vue","../src/components/AInput/AInput.vue","../src/components/AFormField/AFormField.vue","../src/components/ASelect/ASelect.vue","../src/components/ACheckbox/ACheckbox.vue","../src/components/ARadio/ARadio.vue","../src/components/ASwitch/ASwitch.vue","../src/components/ASegmented/ASegmented.vue","../src/components/ASlider/ASlider.vue","../src/components/AModal/AModal.vue","../src/components/AToast/AToast.vue","../src/composables/useToast.ts","../src/components/AToast/AToastHost.vue","../src/components/APagination/APagination.vue","../src/components/ASkeleton/ASkeleton.vue","../src/components/ATable/ATable.vue","../src/components/ABadge/ABadge.vue","../src/components/ATag/ATag.vue","../src/components/AStatusPill/AStatusPill.vue","../src/components/ACard/ACard.vue","../src/components/AIcon/AIcon.vue","../src/components/AAlert/AAlert.vue","../src/components/AProgress/AProgress.vue","../src/components/ATabs/ATabs.vue","../src/components/ABreadcrumbs/ABreadcrumbs.vue","../src/components/AAvatar/AAvatar.vue","../src/components/AAvatarGroup/AAvatarGroup.vue","../src/components/AEmptyState/AEmptyState.vue","../src/components/AKpiCard/AKpiCard.vue","../src/components/ATooltip/ATooltip.vue","../src/components/ASidebarNav/ASidebarNav.vue","../src/components/ANumberInput/ANumberInput.vue","../src/components/ADrawer/ADrawer.vue","../src/components/AAccordion/AAccordion.vue","../src/components/APopover/APopover.vue","../src/components/ABanner/ABanner.vue","../src/components/AFileUpload/AFileUpload.vue","../src/components/AStepper/AStepper.vue","../src/components/ATimeline/ATimeline.vue","../src/components/AChartFrame/AChartFrame.vue","../src/plugin.ts","../src/composables/useDisclosure.ts","../src/composables/useDensity.ts","../src/composables/useTheme.ts","../src/icons/CheckIcon.ts","../src/utils/chartTheme.ts","../src/utils/id.ts"],"sourcesContent":["import type { Directive } from 'vue';\n\nexport const vAFocus: Directive<HTMLElement, boolean | undefined> = {\n mounted(el, binding) {\n if (binding.value === false) return;\n el.focus();\n }\n};\n","<template>\n <span class=\"spinner\" :data-size=\"size\" :data-tone=\"tone\" role=\"status\" :aria-label=\"label\">\n <span class=\"spinner__track\" aria-hidden=\"true\" />\n <span v-if=\"label\" class=\"spinner__label\">{{ label }}</span>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ASpinnerProps } from './ASpinner.types';\n\ndefineOptions({ name: 'ASpinner' });\n\nwithDefaults(defineProps<ASpinnerProps>(), {\n size: 'md',\n tone: 'accent',\n label: 'Loading'\n});\n</script>\n\n<style scoped>\n.spinner {\n display: inline-flex;\n color: var(--accent);\n}\n\n.spinner[data-tone=\"onaccent\"] {\n color: #fff;\n}\n\n.spinner[data-tone=\"muted\"] {\n color: var(--text-tertiary);\n}\n\n.spinner[data-size=\"sm\"] {\n width: 16px;\n height: 16px;\n}\n\n.spinner[data-size=\"md\"] {\n width: 20px;\n height: 20px;\n}\n\n.spinner[data-size=\"lg\"] {\n width: 24px;\n height: 24px;\n}\n\n.spinner__track {\n width: 100%;\n height: 100%;\n border: var(--bw-thick) solid var(--bg-muted);\n border-top-color: currentColor;\n border-radius: var(--r-full);\n animation: ain-spin var(--dur-slower) linear infinite;\n}\n\n.spinner__label {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <button\n class=\"btn\"\n :type=\"type\"\n :data-variant=\"variant\"\n :data-size=\"size\"\n :data-block=\"block || null\"\n :data-icon-only=\"iconOnly || null\"\n :aria-label=\"ariaLabel\"\n :disabled=\"disabled || loading\"\n @click=\"emit('click', $event)\"\n >\n <ASpinner v-if=\"loading\" :size=\"size === 'sm' ? 'sm' : 'md'\" tone=\"onaccent\" />\n <slot name=\"icon-left\" />\n <slot />\n <slot name=\"icon-right\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport ASpinner from '../ASpinner/ASpinner.vue';\nimport type { AButtonProps } from './AButton.types';\n\ndefineOptions({ name: 'AButton' });\n\nconst props = withDefaults(defineProps<AButtonProps>(), {\n variant: 'primary',\n size: 'md',\n type: 'button',\n disabled: false,\n loading: false,\n block: false\n});\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst slots = useSlots();\nconst iconOnly = computed(() => Boolean(props.ariaLabel && !slots.default && (slots['icon-left'] || slots['icon-right'])));\n</script>\n\n<style scoped>\n.btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--s-2);\n font-family: var(--font-sans);\n font-weight: var(--fw-medium);\n white-space: nowrap;\n cursor: pointer;\n user-select: none;\n border: var(--bw-thin) solid transparent;\n transition: background var(--dur-fast) var(--ease-standard),\n border-color var(--dur-fast) var(--ease-standard),\n color var(--dur-fast) var(--ease-standard),\n filter var(--dur-fast) var(--ease-standard);\n}\n\n.btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.btn:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n box-shadow: none;\n background: var(--bg-muted);\n color: var(--text-tertiary);\n border-color: transparent;\n}\n\n.btn[data-block] {\n width: 100%;\n}\n\n.btn[data-size=\"sm\"] {\n height: var(--ctrl-sm);\n padding-inline: var(--s-3);\n font-size: 13px;\n border-radius: var(--r-sm);\n}\n\n.btn[data-size=\"md\"] {\n height: var(--ctrl-md);\n padding-inline: var(--s-4);\n font-size: 14px;\n border-radius: var(--r-md);\n}\n\n.btn[data-size=\"lg\"] {\n height: var(--ctrl-lg);\n padding-inline: var(--s-5);\n font-size: 15px;\n border-radius: var(--r-md);\n}\n\n.btn[data-icon-only] {\n width: var(--ctrl-md);\n padding-inline: 0;\n}\n\n.btn[data-variant=\"primary\"] {\n background: var(--btn-primary-bg);\n color: var(--btn-primary-fg);\n border-color: var(--btn-primary-bg);\n box-shadow: var(--shadow-xs);\n}\n\n.btn[data-variant=\"primary\"]:not(:disabled):hover {\n background: var(--btn-primary-bg-hover);\n border-color: var(--btn-primary-bg-hover);\n}\n\n.btn[data-variant=\"primary\"]:not(:disabled):active {\n background: var(--accent-active);\n border-color: var(--accent-active);\n}\n\n.btn[data-variant=\"secondary\"] {\n background: var(--bg-surface);\n color: var(--text-primary);\n border-color: var(--border-strong);\n box-shadow: var(--shadow-xs);\n}\n\n.btn[data-variant=\"secondary\"]:not(:disabled):hover {\n background: var(--bg-subtle);\n border-color: var(--text-tertiary);\n}\n\n.btn[data-variant=\"outline\"] {\n background: transparent;\n color: var(--accent);\n border-color: var(--accent-border);\n}\n\n.btn[data-variant=\"outline\"]:not(:disabled):hover {\n background: var(--accent-subtle);\n}\n\n.btn[data-variant=\"ghost\"] {\n background: transparent;\n color: var(--text-secondary);\n border-color: transparent;\n}\n\n.btn[data-variant=\"ghost\"]:not(:disabled):hover {\n background: var(--bg-hover);\n color: var(--text-primary);\n}\n\n.btn[data-variant=\"danger\"] {\n background: var(--danger);\n color: #fff;\n border-color: var(--danger);\n box-shadow: var(--shadow-xs);\n}\n\n.btn[data-variant=\"danger\"]:not(:disabled):hover {\n filter: brightness(0.95);\n}\n\n.btn[data-variant=\"link\"] {\n background: transparent;\n color: var(--accent);\n border-color: transparent;\n padding-inline: var(--s-2);\n text-decoration: underline;\n text-underline-offset: 3px;\n text-decoration-color: var(--accent-border);\n}\n\n.btn[data-variant=\"link\"]:not(:disabled):hover {\n text-decoration-color: var(--accent);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n</style>\n","<template>\n <div class=\"field\" :data-size=\"size\" :data-disabled=\"disabled || null\" :data-error=\"hasError || null\">\n <label v-if=\"label\" class=\"field__label\" :for=\"id\">{{ label }}</label>\n <div class=\"field__control\">\n <span v-if=\"slots['icon-left']\" class=\"field__icon\"><slot name=\"icon-left\" /></span>\n <slot name=\"addon-before\" />\n <input\n :id=\"id\"\n class=\"field__input\"\n :value=\"modelValue\"\n :type=\"type\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :aria-invalid=\"hasError || undefined\"\n @input=\"emit('update:modelValue', ($event.target as HTMLInputElement).value)\"\n />\n <slot name=\"addon-after\" />\n </div>\n <p v-if=\"errorMessage\" class=\"field__msg field__msg--error\">{{ errorMessage }}</p>\n <p v-else-if=\"helper\" class=\"field__msg\">{{ helper }}</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport type { AInputProps } from './AInput.types';\n\ndefineOptions({ name: 'AInput' });\n\nconst props = withDefaults(defineProps<AInputProps>(), {\n modelValue: '',\n type: 'text',\n size: 'md',\n disabled: false,\n readonly: false,\n error: false\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst slots = useSlots();\nconst hasError = computed(() => props.error !== false && props.error != null && props.error !== '');\nconst errorMessage = computed(() => (typeof props.error === 'string' ? props.error : ''));\n</script>\n\n<style scoped>\n.field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.field__label {\n color: var(--text-primary);\n font-size: 13px;\n font-weight: var(--fw-medium);\n}\n\n.field__control {\n display: flex;\n align-items: center;\n gap: var(--s-2);\n background: var(--field-bg);\n border: var(--bw-thin) solid var(--field-border);\n border-radius: var(--field-radius);\n padding-inline: var(--pad-x);\n transition: border-color var(--dur-fast) var(--ease-standard),\n box-shadow var(--dur-fast) var(--ease-standard);\n}\n\n.field[data-size=\"sm\"] .field__control {\n height: var(--ctrl-sm);\n}\n\n.field[data-size=\"md\"] .field__control {\n height: var(--ctrl-md);\n}\n\n.field[data-size=\"lg\"] .field__control {\n height: var(--ctrl-lg);\n}\n\n.field__control:focus-within {\n border-color: var(--accent);\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.field[data-error] .field__control {\n border-color: var(--danger);\n}\n\n.field[data-error] .field__control:focus-within {\n box-shadow: 0 0 0 var(--bw-focus) var(--danger-subtle);\n}\n\n.field[data-disabled] .field__control {\n background: var(--bg-subtle);\n border-color: var(--border);\n}\n\n.field[data-disabled] .field__input {\n color: var(--text-tertiary);\n cursor: not-allowed;\n}\n\n.field__input {\n flex: 1 1 auto;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--text-primary);\n font-family: var(--font-sans);\n font-size: 14px;\n padding: 0;\n}\n\n.field__input::placeholder {\n color: var(--text-tertiary);\n}\n\n.field__icon {\n display: inline-flex;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n\n.field__msg {\n margin: 0;\n color: var(--text-tertiary);\n font-size: 12px;\n}\n\n.field__msg--error {\n color: var(--danger);\n}\n</style>\n","<template>\n <div class=\"a-form-field\">\n <label v-if=\"label\" class=\"a-form-field__label\" :for=\"id\">\n {{ label }}\n <span v-if=\"required\" aria-hidden=\"true\">*</span>\n </label>\n <slot />\n <p v-if=\"error\" class=\"a-form-field__message a-form-field__message--error\">{{ error }}</p>\n <p v-else-if=\"hint\" class=\"a-form-field__message\">{{ hint }}</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { AFormFieldProps } from './AFormField.types';\n\ndefineOptions({ name: 'AFormField' });\n\nwithDefaults(defineProps<AFormFieldProps>(), {\n required: false\n});\n</script>\n","<template>\n <div ref=\"rootRef\" class=\"select-field\" :data-size=\"size\" :data-disabled=\"disabled || null\" :data-error=\"hasError || null\">\n <label v-if=\"label\" class=\"select-field__label\" :id=\"labelId\" :for=\"triggerId\">{{ label }}</label>\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n class=\"select-field__trigger\"\n type=\"button\"\n role=\"combobox\"\n :aria-labelledby=\"label ? labelId : undefined\"\n :aria-controls=\"listboxId\"\n :aria-expanded=\"open\"\n :aria-haspopup=\"'listbox'\"\n :aria-invalid=\"hasError || undefined\"\n :disabled=\"disabled\"\n @click=\"toggle\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"select-field__value\" :data-placeholder=\"!selectedOption || null\">\n {{ selectedOption?.label || placeholder || defaultLabel }}\n </span>\n <span class=\"select-field__chevron\" aria-hidden=\"true\">v</span>\n </button>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n ref=\"panelRef\"\n class=\"select-menu\"\n :style=\"panelStyle\"\n @keydown=\"onMenuKeydown\"\n >\n <input\n v-if=\"isSearchable\"\n ref=\"searchRef\"\n v-model=\"query\"\n class=\"select-menu__search\"\n type=\"search\"\n :placeholder=\"searchPlaceholder\"\n @keydown.stop=\"onSearchKeydown\"\n />\n <ul :id=\"listboxId\" class=\"select-menu__list\" role=\"listbox\" :aria-activedescendant=\"activeOptionId\">\n <li\n v-for=\"(option, index) in filteredOptions\"\n :id=\"optionId(index)\"\n :key=\"option.value\"\n class=\"select-menu__item\"\n :data-active=\"index === activeIndex || null\"\n :data-selected=\"option.value === modelValue || null\"\n :data-disabled=\"option.disabled || null\"\n role=\"option\"\n :aria-selected=\"option.value === modelValue\"\n @mouseenter=\"activeIndex = index\"\n @mousedown.prevent=\"selectOption(option)\"\n >\n <span>{{ option.label }}</span>\n <span v-if=\"option.value === modelValue\" aria-hidden=\"true\">&#10003;</span>\n </li>\n <li v-if=\"filteredOptions.length === 0\" class=\"select-menu__empty\">{{ emptyText }}</li>\n </ul>\n </div>\n </Teleport>\n\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"modelValue\" />\n <p v-if=\"errorMessage\" class=\"select-field__msg select-field__msg--error\">{{ errorMessage }}</p>\n <p v-else-if=\"helper\" class=\"select-field__msg\">{{ helper }}</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport type { ASelectOption, ASelectProps } from './ASelect.types';\n\ndefineOptions({ name: 'ASelect' });\n\nconst props = withDefaults(defineProps<ASelectProps>(), {\n options: () => [],\n size: 'md',\n disabled: false,\n error: false,\n searchable: undefined,\n searchPlaceholder: 'Search',\n emptyText: 'No options',\n defaultLabel: 'Select option'\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n change: [value: string | number];\n}>();\n\nconst uid = Math.random().toString(36).slice(2);\nconst triggerId = computed(() => props.id || `a-select-${uid}`);\nconst labelId = `a-select-label-${uid}`;\nconst listboxId = `a-select-listbox-${uid}`;\n\nconst rootRef = ref<HTMLElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLElement>();\nconst searchRef = ref<HTMLInputElement>();\nconst open = ref(false);\nconst query = ref('');\nconst activeIndex = ref(0);\nconst panelStyle = ref<Record<string, string>>({});\n\nconst hasError = computed(() => props.error !== false && props.error != null && props.error !== '');\nconst errorMessage = computed(() => (typeof props.error === 'string' ? props.error : ''));\nconst isSearchable = computed(() => props.searchable ?? props.options.length > 7);\nconst selectedOption = computed(() => props.options.find((option) => option.value === props.modelValue));\nconst filteredOptions = computed(() => {\n const value = query.value.trim().toLowerCase();\n if (!value) return props.options;\n return props.options.filter((option) => option.label.toLowerCase().includes(value));\n});\nconst activeOptionId = computed(() => (open.value && filteredOptions.value[activeIndex.value] ? optionId(activeIndex.value) : undefined));\n\nfunction optionId(index: number) {\n return `a-select-option-${uid}-${index}`;\n}\n\nfunction syncPanelPosition() {\n const rect = triggerRef.value?.getBoundingClientRect();\n if (!rect) return;\n panelStyle.value = {\n position: 'fixed',\n top: `${rect.bottom + 6}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`\n };\n}\n\nasync function show() {\n if (props.disabled) return;\n open.value = true;\n query.value = '';\n activeIndex.value = Math.max(0, props.options.findIndex((option) => option.value === props.modelValue));\n await nextTick();\n syncPanelPosition();\n if (isSearchable.value) searchRef.value?.focus();\n}\n\nfunction close({ focusTrigger = false } = {}) {\n open.value = false;\n if (focusTrigger) triggerRef.value?.focus();\n}\n\nfunction toggle() {\n if (open.value) close();\n else void show();\n}\n\nfunction selectOption(option: ASelectOption) {\n if (option.disabled) return;\n emit('update:modelValue', option.value);\n emit('change', option.value);\n close({ focusTrigger: true });\n}\n\nfunction move(delta: number) {\n const available = filteredOptions.value;\n if (available.length === 0) return;\n let next = activeIndex.value;\n for (let i = 0; i < available.length; i += 1) {\n next = (next + delta + available.length) % available.length;\n if (!available[next]?.disabled) break;\n }\n activeIndex.value = next;\n}\n\nfunction chooseActive() {\n const option = filteredOptions.value[activeIndex.value];\n if (option) selectOption(option);\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n if (!open.value) void show();\n else if (event.key === 'ArrowDown') move(1);\n else if (event.key === 'ArrowUp') move(-1);\n else chooseActive();\n }\n}\n\nfunction onMenuKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n close({ focusTrigger: true });\n }\n}\n\nfunction onSearchKeydown(event: KeyboardEvent) {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n move(1);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n move(-1);\n } else if (event.key === 'Enter') {\n event.preventDefault();\n chooseActive();\n } else if (event.key === 'Escape') {\n close({ focusTrigger: true });\n }\n}\n\nfunction onDocumentPointerDown(event: PointerEvent) {\n const target = event.target as Node;\n if (rootRef.value?.contains(target) || panelRef.value?.contains(target)) return;\n close();\n}\n\nfunction onWindowChange() {\n if (open.value) syncPanelPosition();\n}\n\nwatch(open, (value) => {\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n window.addEventListener('resize', onWindowChange);\n window.addEventListener('scroll', onWindowChange, true);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n window.removeEventListener('resize', onWindowChange);\n window.removeEventListener('scroll', onWindowChange, true);\n }\n});\n\nwatch(filteredOptions, () => {\n activeIndex.value = Math.min(activeIndex.value, Math.max(0, filteredOptions.value.length - 1));\n});\n\nonBeforeUnmount(() => {\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n window.removeEventListener('resize', onWindowChange);\n window.removeEventListener('scroll', onWindowChange, true);\n});\n</script>\n\n<style scoped>\n.select-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.select-field__label {\n color: var(--text-primary);\n font-size: 13px;\n font-weight: var(--fw-medium);\n}\n\n.select-field__trigger {\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n gap: var(--s-2);\n border: var(--bw-thin) solid var(--field-border);\n border-radius: var(--field-radius);\n background: var(--field-bg);\n color: var(--text-primary);\n font-family: var(--font-sans);\n font-size: 14px;\n padding-inline: var(--pad-x);\n text-align: left;\n transition: border-color var(--dur-fast) var(--ease-standard),\n box-shadow var(--dur-fast) var(--ease-standard);\n}\n\n.select-field[data-size=\"sm\"] .select-field__trigger {\n height: var(--ctrl-sm);\n}\n\n.select-field[data-size=\"md\"] .select-field__trigger {\n height: var(--ctrl-md);\n}\n\n.select-field[data-size=\"lg\"] .select-field__trigger {\n height: var(--ctrl-lg);\n}\n\n.select-field__trigger:focus-visible,\n.select-field__trigger[aria-expanded=\"true\"] {\n outline: none;\n border-color: var(--accent);\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.select-field[data-error] .select-field__trigger {\n border-color: var(--danger);\n}\n\n.select-field[data-disabled] .select-field__trigger {\n background: var(--bg-subtle);\n color: var(--text-tertiary);\n cursor: not-allowed;\n}\n\n.select-field__value {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.select-field__value[data-placeholder] {\n color: var(--text-tertiary);\n}\n\n.select-field__chevron {\n color: var(--text-tertiary);\n}\n\n.select-field__msg {\n margin: 0;\n color: var(--text-tertiary);\n font-size: 12px;\n}\n\n.select-field__msg--error {\n color: var(--danger);\n}\n\n.select-menu {\n z-index: var(--z-dropdown);\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-md);\n background: var(--bg-surface);\n box-shadow: var(--shadow-md);\n padding: 6px;\n}\n\n.select-menu__search {\n width: 100%;\n height: var(--ctrl-sm);\n margin-bottom: 6px;\n border: var(--bw-thin) solid var(--field-border);\n border-radius: var(--r-sm);\n background: var(--field-bg);\n color: var(--text-primary);\n font: inherit;\n padding-inline: var(--s-2);\n}\n\n.select-menu__search:focus {\n outline: none;\n border-color: var(--accent);\n}\n\n.select-menu__list {\n display: grid;\n max-height: 260px;\n gap: 2px;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n}\n\n.select-menu__item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--s-2);\n border-radius: var(--r-sm);\n color: var(--text-primary);\n cursor: pointer;\n font-size: 13.5px;\n padding: 8px 10px;\n}\n\n.select-menu__item[data-active] {\n background: var(--bg-hover);\n}\n\n.select-menu__item[data-selected] {\n background: var(--accent-subtle);\n color: var(--accent);\n font-weight: var(--fw-semibold);\n}\n\n.select-menu__item[data-disabled] {\n color: var(--text-tertiary);\n cursor: not-allowed;\n}\n\n.select-menu__empty {\n color: var(--text-tertiary);\n font-size: 13px;\n padding: 8px 10px;\n}\n</style>\n","<template>\n <label class=\"checkbox\" :data-disabled=\"disabled || null\" :data-error=\"error || null\">\n <input\n :id=\"id\"\n ref=\"inputRef\"\n class=\"checkbox__input\"\n type=\"checkbox\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :name=\"name\"\n :aria-label=\"ariaLabel\"\n :aria-invalid=\"error || undefined\"\n @change=\"emit('update:modelValue', ($event.target as HTMLInputElement).checked)\"\n />\n <span class=\"checkbox__box\" aria-hidden=\"true\" />\n <span v-if=\"label || $slots.default\" class=\"checkbox__label\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from 'vue';\nimport type { ACheckboxProps } from './ACheckbox.types';\n\ndefineOptions({ name: 'ACheckbox' });\n\nconst props = withDefaults(defineProps<ACheckboxProps>(), {\n modelValue: false,\n indeterminate: false,\n disabled: false,\n error: false,\n ariaLabel: undefined\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\n\nfunction syncIndeterminate() {\n if (inputRef.value) inputRef.value.indeterminate = props.indeterminate;\n}\n\nonMounted(syncIndeterminate);\nwatch(() => props.indeterminate, syncIndeterminate);\n</script>\n\n<style scoped>\n.checkbox {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n color: var(--text-primary);\n cursor: pointer;\n font-size: 14px;\n}\n\n.checkbox__input {\n position: absolute;\n opacity: 0;\n}\n\n.checkbox__box {\n display: inline-flex;\n width: 18px;\n height: 18px;\n align-items: center;\n justify-content: center;\n border: var(--bw-medium) solid var(--border-strong);\n border-radius: 5px;\n background: var(--field-bg);\n transition: background var(--dur-fast) var(--ease-standard),\n border-color var(--dur-fast) var(--ease-standard),\n box-shadow var(--dur-fast) var(--ease-standard);\n}\n\n.checkbox__input:checked + .checkbox__box,\n.checkbox__input:indeterminate + .checkbox__box {\n border-color: var(--accent);\n background: var(--accent);\n}\n\n.checkbox__input:checked + .checkbox__box::after {\n width: 9px;\n height: 5px;\n border: solid #fff;\n border-width: 0 0 2px 2px;\n content: \"\";\n transform: rotate(-45deg) translateY(-1px);\n}\n\n.checkbox__input:indeterminate + .checkbox__box::after {\n width: 9px;\n height: 2px;\n border-radius: var(--r-full);\n background: #fff;\n content: \"\";\n}\n\n.checkbox__input:focus-visible + .checkbox__box {\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.checkbox[data-disabled] {\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.checkbox[data-error] .checkbox__box {\n border-color: var(--danger);\n}\n</style>\n","<template>\n <div class=\"radio-group\" role=\"radiogroup\" :data-disabled=\"disabled || null\">\n <label v-for=\"option in options\" :key=\"option.value\" class=\"radio\">\n <input\n class=\"radio__input\"\n type=\"radio\"\n :name=\"name\"\n :value=\"option.value\"\n :checked=\"modelValue === option.value\"\n :disabled=\"disabled || option.disabled\"\n @change=\"emit('update:modelValue', option.value)\"\n />\n <span class=\"radio__mark\" aria-hidden=\"true\" />\n <span>{{ option.label }}</span>\n </label>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ARadioProps } from './ARadio.types';\n\ndefineOptions({ name: 'ARadio' });\n\nwithDefaults(defineProps<ARadioProps>(), {\n options: () => [],\n disabled: false\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n}>();\n</script>\n\n<style scoped>\n.radio-group {\n display: grid;\n gap: var(--s-2);\n}\n\n.radio {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n color: var(--text-primary);\n cursor: pointer;\n font-size: 14px;\n}\n\n.radio__input {\n position: absolute;\n opacity: 0;\n}\n\n.radio__mark {\n width: 18px;\n height: 18px;\n border: var(--bw-medium) solid var(--border-strong);\n border-radius: var(--r-full);\n background: var(--field-bg);\n}\n\n.radio__input:checked + .radio__mark {\n border: 5px solid var(--accent);\n}\n\n.radio__input:focus-visible + .radio__mark {\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.radio-group[data-disabled],\n.radio:has(.radio__input:disabled) {\n cursor: not-allowed;\n opacity: 0.7;\n}\n</style>\n","<template>\n <label class=\"switch\" :data-disabled=\"disabled || null\">\n <input class=\"switch__input\" type=\"checkbox\" :checked=\"modelValue\" :disabled=\"disabled\" @change=\"emit('update:modelValue', ($event.target as HTMLInputElement).checked)\" />\n <span class=\"switch__track\" aria-hidden=\"true\"><span class=\"switch__knob\" /></span>\n <span v-if=\"label || $slots.default\"><slot>{{ label }}</slot></span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ASwitchProps } from './ASwitch.types';\n\ndefineOptions({ name: 'ASwitch' });\n\nwithDefaults(defineProps<ASwitchProps>(), {\n modelValue: false,\n disabled: false\n});\n\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\n</script>\n\n<style scoped>\n.switch {\n display: inline-flex;\n align-items: center;\n gap: var(--s-2);\n color: var(--text-primary);\n cursor: pointer;\n font-size: 14px;\n}\n\n.switch__input {\n position: absolute;\n opacity: 0;\n}\n\n.switch__track {\n width: 38px;\n height: 22px;\n border-radius: var(--r-full);\n background: var(--bg-muted);\n padding: 2px;\n transition: background var(--dur-base) var(--ease-standard);\n}\n\n.switch__knob {\n display: block;\n width: 18px;\n height: 18px;\n border-radius: var(--r-full);\n background: var(--gray-0);\n box-shadow: var(--shadow-sm);\n transition: transform var(--dur-base) var(--ease-standard);\n}\n\n.switch__input:checked + .switch__track {\n background: var(--accent);\n}\n\n.switch__input:checked + .switch__track .switch__knob {\n transform: translateX(16px);\n}\n\n.switch__input:focus-visible + .switch__track {\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n\n.switch[data-disabled] {\n cursor: not-allowed;\n opacity: 0.7;\n}\n</style>\n","<template>\n <div class=\"segmented\" role=\"group\">\n <button\n v-for=\"option in options\"\n :key=\"option.value\"\n class=\"segmented__item\"\n type=\"button\"\n :data-active=\"modelValue === option.value || null\"\n @click=\"emit('update:modelValue', option.value)\"\n >\n {{ option.label }}\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ASegmentedProps } from './ASegmented.types';\n\ndefineOptions({ name: 'ASegmented' });\n\nwithDefaults(defineProps<ASegmentedProps>(), {\n options: () => []\n});\n\nconst emit = defineEmits<{ 'update:modelValue': [value: string | number] }>();\n</script>\n\n<style scoped>\n.segmented {\n display: inline-flex;\n gap: 3px;\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-md);\n background: var(--bg-subtle);\n padding: 3px;\n}\n\n.segmented__item {\n height: var(--ctrl-sm);\n border: 0;\n border-radius: var(--r-sm);\n background: transparent;\n color: var(--text-tertiary);\n font-size: 13.5px;\n padding-inline: var(--s-3);\n}\n\n.segmented__item[data-active] {\n background: var(--bg-surface);\n color: var(--text-primary);\n font-weight: var(--fw-semibold);\n box-shadow: var(--shadow-xs);\n}\n\n.segmented__item:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n</style>\n","<template>\n <input\n class=\"slider\"\n type=\"range\"\n :value=\"modelValue\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :disabled=\"disabled\"\n @input=\"emit('update:modelValue', Number(($event.target as HTMLInputElement).value))\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type { ASliderProps } from './ASlider.types';\n\ndefineOptions({ name: 'ASlider' });\n\nwithDefaults(defineProps<ASliderProps>(), {\n modelValue: 0,\n min: 0,\n max: 100,\n step: 1,\n disabled: false\n});\n\nconst emit = defineEmits<{ 'update:modelValue': [value: number] }>();\n</script>\n\n<style scoped>\n.slider {\n width: 100%;\n accent-color: var(--accent);\n}\n\n.slider:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--bw-focus) var(--focus-ring);\n}\n</style>\n","<template>\n <Teleport to=\"body\">\n <div v-if=\"modelValue\" class=\"modal\" role=\"presentation\" @click=\"onBackdrop\" @keydown=\"onKeydown\">\n <section ref=\"panelRef\" class=\"modal__panel\" :data-size=\"size\" :data-tone=\"tone\" role=\"dialog\" aria-modal=\"true\" :aria-label=\"title\" tabindex=\"-1\">\n <header v-if=\"title || $slots.header\" class=\"modal__header\">\n <slot name=\"header\">\n <span v-if=\"tone !== 'neutral'\" class=\"modal__tone\" aria-hidden=\"true\" />\n <h2 class=\"modal__title\">{{ title }}</h2>\n </slot>\n <button class=\"modal__close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"close\">x</button>\n </header>\n <div class=\"modal__body\">\n <slot />\n </div>\n <footer v-if=\"$slots.footer\" class=\"modal__footer\">\n <slot name=\"footer\" />\n </footer>\n </section>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport type { AModalProps } from './AModal.types';\n\ndefineOptions({ name: 'AModal' });\n\nconst props = withDefaults(defineProps<AModalProps>(), {\n modelValue: false,\n size: 'md',\n tone: 'neutral',\n closeOnBackdrop: true,\n closeOnEsc: true,\n closeLabel: 'Close'\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n close: [];\n}>();\n\nconst panelRef = ref<HTMLElement>();\nlet previousActiveElement: Element | null = null;\n\nconst focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(',');\n\nfunction getFocusableElements() {\n return Array.from(panelRef.value?.querySelectorAll<HTMLElement>(focusableSelector) || []).filter(\n (element) => !element.hasAttribute('disabled') && element.tabIndex !== -1\n );\n}\n\nasync function focusModal() {\n await nextTick();\n const explicit = props.initialFocus ? panelRef.value?.querySelector<HTMLElement>(props.initialFocus) : undefined;\n const first = explicit || getFocusableElements()[0] || panelRef.value;\n first?.focus();\n}\n\nfunction close() {\n emit('update:modelValue', false);\n emit('close');\n}\n\nfunction onBackdrop(event: MouseEvent) {\n if (props.closeOnBackdrop && event.target === event.currentTarget) close();\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (typeof document === 'undefined') return;\n if (event.key === 'Escape' && props.closeOnEsc) {\n event.preventDefault();\n close();\n return;\n }\n\n if (event.key !== 'Tab') return;\n const focusable = getFocusableElements();\n if (focusable.length === 0) {\n event.preventDefault();\n panelRef.value?.focus();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n}\n\nwatch(\n () => props.modelValue,\n (open) => {\n if (typeof document === 'undefined') return;\n if (open) {\n previousActiveElement = document.activeElement;\n void focusModal();\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n if (previousActiveElement instanceof HTMLElement) previousActiveElement.focus();\n }\n },\n { immediate: true }\n);\n\nonBeforeUnmount(() => {\n if (typeof document === 'undefined') return;\n document.body.style.overflow = '';\n});\n</script>\n\n<style scoped>\n.modal {\n position: fixed;\n inset: 0;\n z-index: var(--z-overlay);\n display: grid;\n place-items: center;\n padding: var(--s-4);\n background: rgba(13, 17, 23, 0.35);\n backdrop-filter: blur(2px);\n}\n\n.modal__panel {\n z-index: var(--z-modal);\n width: min(100%, 560px);\n overflow: hidden;\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-xl);\n background: var(--bg-surface);\n color: var(--text-primary);\n box-shadow: var(--shadow-xl);\n}\n\n.modal__panel[data-size=\"sm\"] {\n width: min(100%, 420px);\n}\n\n.modal__panel[data-size=\"lg\"] {\n width: min(100%, 760px);\n}\n\n.modal__header,\n.modal__footer {\n display: flex;\n align-items: center;\n gap: var(--s-3);\n padding: var(--s-4);\n}\n\n.modal__header {\n border-bottom: var(--bw-thin) solid var(--border);\n}\n\n.modal__footer {\n justify-content: flex-end;\n border-top: var(--bw-thin) solid var(--border);\n background: var(--bg-inset);\n}\n\n.modal__title {\n flex: 1;\n margin: 0;\n font-size: var(--fs-h3);\n line-height: var(--lh-tight);\n font-weight: var(--fw-semibold);\n}\n\n.modal__body {\n padding: var(--s-4);\n color: var(--text-secondary);\n}\n\n.modal__close {\n display: inline-flex;\n width: 30px;\n height: 30px;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: var(--r-sm);\n background: transparent;\n color: var(--text-tertiary);\n}\n\n.modal__close:hover {\n background: var(--bg-hover);\n color: var(--text-primary);\n}\n\n.modal__tone {\n width: 32px;\n height: 32px;\n border-radius: var(--r-md);\n background: var(--accent-subtle);\n}\n\n.modal__panel[data-tone=\"danger\"] .modal__tone {\n background: var(--danger-subtle);\n}\n</style>\n","<template>\n <div class=\"toast-host\" :data-position=\"position\" aria-live=\"polite\">\n <article v-for=\"item in items\" :key=\"item.id\" class=\"toast\" :data-tone=\"item.status || 'neutral'\">\n <span class=\"toast__icon\" aria-hidden=\"true\" />\n <div class=\"toast__content\">\n <strong v-if=\"item.title\" class=\"toast__title\">{{ item.title }}</strong>\n <p class=\"toast__message\">{{ item.message }}</p>\n </div>\n <button v-if=\"closable\" class=\"toast__close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"emit('close', item.id)\">x</button>\n </article>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { AToastProps } from './AToast.types';\n\ndefineOptions({ name: 'AToast' });\n\nwithDefaults(defineProps<AToastProps>(), {\n items: () => [],\n position: 'top-right',\n closable: false,\n closeLabel: 'Close toast'\n});\n\nconst emit = defineEmits<{\n close: [id: string | number];\n}>();\n</script>\n\n<style scoped>\n.toast-host {\n position: fixed;\n z-index: var(--z-toast);\n display: grid;\n gap: var(--s-3);\n width: min(calc(100vw - var(--s-8)), 380px);\n}\n\n.toast-host[data-position=\"top-right\"] {\n top: var(--s-4);\n right: var(--s-4);\n}\n\n.toast-host[data-position=\"top-left\"] {\n top: var(--s-4);\n left: var(--s-4);\n}\n\n.toast-host[data-position=\"bottom-right\"] {\n right: var(--s-4);\n bottom: var(--s-4);\n}\n\n.toast-host[data-position=\"bottom-left\"] {\n bottom: var(--s-4);\n left: var(--s-4);\n}\n\n.toast {\n display: flex;\n gap: var(--s-3);\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-md);\n padding: var(--s-3);\n background: var(--bg-surface);\n color: var(--text-primary);\n box-shadow: var(--shadow-lg);\n animation: ain-toast-in var(--dur-slow) var(--ease-standard);\n}\n\n.toast__icon {\n width: 28px;\n height: 28px;\n border-radius: var(--r-full);\n background: var(--accent-subtle);\n}\n\n.toast[data-tone=\"success\"] .toast__icon {\n background: var(--success-subtle);\n}\n\n.toast[data-tone=\"warning\"] .toast__icon {\n background: var(--warning-subtle);\n}\n\n.toast[data-tone=\"danger\"] .toast__icon {\n background: var(--danger-subtle);\n}\n\n.toast__content {\n flex: 1;\n min-width: 0;\n}\n\n.toast__title,\n.toast__message {\n margin: 0;\n}\n\n.toast__title {\n font-size: 14px;\n font-weight: var(--fw-semibold);\n}\n\n.toast__message {\n color: var(--text-secondary);\n font-size: 13.5px;\n}\n\n.toast__close {\n align-self: start;\n border: 0;\n border-radius: var(--r-sm);\n background: transparent;\n color: var(--text-tertiary);\n}\n\n.toast__close:hover {\n background: var(--bg-hover);\n color: var(--text-primary);\n}\n</style>\n","import { readonly, ref } from 'vue';\nimport type { AToastItem } from '../components/AToast/AToast.types';\nimport type { AStatus } from '../types';\n\nexport interface ToastOptions {\n message?: string;\n duration?: number;\n}\n\nconst toasts = ref<AToastItem[]>([]);\nconst timers = new Map<string | number, ReturnType<typeof setTimeout>>();\nlet toastId = 0;\n\nfunction schedule(id: string | number, duration = 5000) {\n if (typeof window === 'undefined' || duration <= 0) return;\n clear(id);\n timers.set(\n id,\n window.setTimeout(() => {\n dismiss(id);\n }, duration)\n );\n}\n\nfunction clear(id: string | number) {\n const timer = timers.get(id);\n if (timer) window.clearTimeout(timer);\n timers.delete(id);\n}\n\nfunction push(status: AStatus, title: string, options: ToastOptions = {}) {\n toastId += 1;\n const id = `toast-${toastId}`;\n const item: AToastItem = {\n id,\n title,\n message: options.message || title,\n status,\n duration: options.duration ?? 5000\n };\n toasts.value = [item, ...toasts.value].slice(0, 5);\n schedule(id, item.duration);\n return id;\n}\n\nfunction dismiss(id: string | number) {\n clear(id);\n toasts.value = toasts.value.filter((toast) => toast.id !== id);\n}\n\nfunction pause(id: string | number) {\n clear(id);\n}\n\nfunction resume(id: string | number) {\n const item = toasts.value.find((toast) => toast.id === id);\n if (item) schedule(id, item.duration);\n}\n\nexport function useToast() {\n return {\n toasts: readonly(toasts),\n dismiss,\n pause,\n resume,\n toast: {\n success: (title: string, options?: ToastOptions) => push('success', title, options),\n info: (title: string, options?: ToastOptions) => push('info', title, options),\n warning: (title: string, options?: ToastOptions) => push('warning', title, options),\n error: (title: string, options?: ToastOptions) => push('danger', title, options)\n }\n };\n}\n","<template>\n <div class=\"toast-host\" :data-position=\"position\" aria-live=\"polite\">\n <article\n v-for=\"item in toasts\"\n :key=\"item.id\"\n class=\"toast\"\n :data-tone=\"item.status || 'neutral'\"\n @mouseenter=\"pause(item.id)\"\n @mouseleave=\"resume(item.id)\"\n >\n <span class=\"toast__icon\" aria-hidden=\"true\" />\n <div class=\"toast__content\">\n <strong v-if=\"item.title\" class=\"toast__title\">{{ item.title }}</strong>\n <p class=\"toast__message\">{{ item.message }}</p>\n </div>\n <button class=\"toast__close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"dismiss(item.id)\">x</button>\n </article>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useToast } from '../../composables/useToast';\n\ndefineOptions({ name: 'AToastHost' });\n\nwithDefaults(\n defineProps<{\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n closeLabel?: string;\n }>(),\n {\n position: 'top-right',\n closeLabel: 'Close toast'\n }\n);\n\nconst { toasts, dismiss, pause, resume } = useToast();\n</script>\n\n<style scoped>\n@import \"./AToastHost.shared.css\";\n</style>\n","<template>\n <nav class=\"pagination\" :aria-label=\"ariaLabel\">\n <span class=\"pagination__range\">{{ start }}-{{ end }} {{ ofLabel }} {{ total }}</span>\n <button class=\"pagination__btn\" type=\"button\" :disabled=\"modelValue <= 1\" @click=\"emit('update:modelValue', modelValue - 1)\">{{ previousLabel }}</button>\n <span class=\"pagination__page\">{{ modelValue }} / {{ pageCount }}</span>\n <button class=\"pagination__btn\" type=\"button\" :disabled=\"modelValue >= pageCount\" @click=\"emit('update:modelValue', modelValue + 1)\">{{ nextLabel }}</button>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { APaginationProps } from './APagination.types';\n\ndefineOptions({ name: 'APagination' });\n\nconst props = withDefaults(defineProps<APaginationProps>(), {\n modelValue: 1,\n total: 0,\n pageSize: 20,\n previousLabel: 'Prev',\n nextLabel: 'Next',\n ariaLabel: 'Pagination',\n ofLabel: 'of'\n});\n\nconst emit = defineEmits<{ 'update:modelValue': [value: number] }>();\n\nconst pageCount = computed(() => Math.max(1, Math.ceil(props.total / props.pageSize)));\nconst start = computed(() => (props.total === 0 ? 0 : (props.modelValue - 1) * props.pageSize + 1));\nconst end = computed(() => Math.min(props.total, props.modelValue * props.pageSize));\n</script>\n\n<style scoped>\n.pagination {\n display: inline-flex;\n align-items: center;\n gap: var(--s-2);\n color: var(--text-secondary);\n font-size: 13px;\n}\n\n.pagination__range,\n.pagination__page {\n font-family: var(--font-mono);\n}\n\n.pagination__btn {\n height: 32px;\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-sm);\n background: var(--bg-surface);\n color: var(--text-primary);\n padding-inline: var(--s-3);\n}\n\n.pagination__btn:hover:not(:disabled) {\n background: var(--bg-hover);\n}\n\n.pagination__btn:disabled {\n color: var(--text-tertiary);\n cursor: not-allowed;\n}\n</style>\n","<template>\n <span class=\"skeleton\" :data-rounded=\"rounded || null\" :style=\"{ width: w, height: h }\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { ASkeletonProps } from './ASkeleton.types';\n\ndefineOptions({ name: 'ASkeleton' });\n\nwithDefaults(defineProps<ASkeletonProps>(), {\n w: '100%',\n h: '16px',\n rounded: false\n});\n</script>\n\n<style scoped>\n.skeleton {\n display: block;\n border-radius: var(--r-sm);\n background: linear-gradient(90deg, var(--bg-muted) 25%, var(--bg-subtle) 37%, var(--bg-muted) 63%);\n background-size: 200% 100%;\n animation: ain-shimmer 1.4s linear infinite;\n}\n\n.skeleton[data-rounded] {\n border-radius: var(--r-full);\n}\n</style>\n","<template>\n <div class=\"data-table\" :data-striped=\"striped || null\" :data-loading=\"loading || null\">\n <div v-if=\"toolbar || $slots.toolbar\" class=\"data-table__toolbar\">\n <slot name=\"toolbar\">\n <AInput v-model=\"searchValue\" size=\"sm\" :placeholder=\"searchPlaceholder\" @update:model-value=\"emit('search', $event)\" />\n <div class=\"data-table__toolbar-spacer\" />\n <AButton variant=\"secondary\" size=\"sm\" @click=\"emit('export')\">{{ exportLabel }}</AButton>\n <AButton size=\"sm\" @click=\"emit('add')\">{{ addLabel }}</AButton>\n </slot>\n </div>\n\n <div class=\"data-table__scroll\">\n <table class=\"data-table__table\">\n <thead>\n <tr>\n <th v-if=\"selectable\" class=\"data-table__select-cell\">\n <ACheckbox :model-value=\"allVisibleSelected\" :indeterminate=\"someVisibleSelected\" :aria-label=\"selectAllLabel\" @update:model-value=\"toggleAll\" />\n </th>\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :data-align=\"column.align || (column.numeric ? 'right' : 'left')\"\n :style=\"{ width: column.width }\"\n >\n <button v-if=\"column.sortable\" class=\"data-table__sort\" type=\"button\" @click=\"toggleSort(column)\">\n <span>{{ column.label }}</span>\n <span class=\"data-table__sort-icon\" :data-active=\"sort?.key === String(column.key) || null\">\n {{ sort?.key === String(column.key) ? (sort.dir === 'asc' ? 'up' : 'down') : 'sort' }}\n </span>\n </button>\n <span v-else>{{ column.label }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-if=\"loading\">\n <tr v-for=\"index in 5\" :key=\"`loading-${index}`\">\n <td v-if=\"selectable\" class=\"data-table__select-cell\"><ASkeleton w=\"18px\" h=\"18px\" rounded /></td>\n <td v-for=\"column in columns\" :key=\"column.key\"><ASkeleton h=\"14px\" /></td>\n </tr>\n </template>\n <tr v-else-if=\"rows.length === 0\">\n <td class=\"data-table__empty\" :colspan=\"columns.length + (selectable ? 1 : 0)\">\n <slot name=\"empty\">{{ emptyText }}</slot>\n </td>\n </tr>\n <tr v-for=\"(row, rowIndex) in rows\" v-else :key=\"getRowKey(row, rowIndex)\" :data-selected=\"isSelected(row, rowIndex) || null\">\n <td v-if=\"selectable\" class=\"data-table__select-cell\">\n <ACheckbox :model-value=\"isSelected(row, rowIndex)\" @update:model-value=\"toggleRow(row, rowIndex)\" />\n </td>\n <td v-for=\"column in columns\" :key=\"column.key\" :data-align=\"column.align || (column.numeric ? 'right' : 'left')\" :data-numeric=\"column.numeric || column.align === 'right' || null\">\n <slot :name=\"`cell-${String(column.key)}`\" :row=\"row\" :value=\"row[column.key]\" :column=\"column\">\n {{ row[column.key] }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <footer v-if=\"showFooter\" class=\"data-table__footer\">\n <span class=\"data-table__range\">{{ footerText }}</span>\n <APagination v-if=\"total > pageSize\" :model-value=\"page\" :total=\"total\" :page-size=\"pageSize\" @update:model-value=\"emit('update:page', $event)\" />\n </footer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport AButton from '../AButton/AButton.vue';\nimport ACheckbox from '../ACheckbox/ACheckbox.vue';\nimport AInput from '../AInput/AInput.vue';\nimport APagination from '../APagination/APagination.vue';\nimport ASkeleton from '../ASkeleton/ASkeleton.vue';\nimport type { ATableColumn, ATableProps, ATableSort } from './ATable.types';\n\ndefineOptions({ name: 'ATable' });\n\nconst props = withDefaults(defineProps<ATableProps>(), {\n columns: () => [],\n rows: () => [],\n rowKey: 'id',\n emptyText: 'No data',\n striped: false,\n selectable: false,\n loading: false,\n sort: null,\n modelSelected: () => [],\n page: 1,\n pageSize: 20,\n total: 0,\n toolbar: false,\n searchPlaceholder: 'Search',\n exportLabel: 'Export',\n addLabel: 'Add',\n selectedLabel: 'selected',\n ofLabel: 'of',\n selectAllLabel: 'Select all'\n});\n\nconst emit = defineEmits<{\n 'update:sort': [sort: ATableSort | null];\n 'update:modelSelected': [selected: Array<string | number>];\n 'update:page': [page: number];\n search: [value: string];\n export: [];\n add: [];\n}>();\n\nconst searchValue = ref('');\n\nconst effectiveTotal = computed(() => props.total || props.rows.length);\nconst showFooter = computed(() => props.selectable || effectiveTotal.value > props.pageSize);\nconst selectedSet = computed(() => new Set(props.modelSelected));\nconst visibleKeys = computed(() => props.rows.map((row, index) => getRowKey(row, index)));\nconst allVisibleSelected = computed(() => visibleKeys.value.length > 0 && visibleKeys.value.every((key) => selectedSet.value.has(key)));\nconst someVisibleSelected = computed(() => !allVisibleSelected.value && visibleKeys.value.some((key) => selectedSet.value.has(key)));\nconst footerText = computed(() => {\n const start = effectiveTotal.value === 0 ? 0 : (props.page - 1) * props.pageSize + 1;\n const end = Math.min(effectiveTotal.value, props.page * props.pageSize);\n const selected = props.modelSelected.length ? `${props.modelSelected.length} ${props.selectedLabel} · ` : '';\n return `${selected}${start}-${end} ${props.ofLabel} ${effectiveTotal.value}`;\n});\n\nfunction getRowKey(row: Record<string, unknown>, index: number): string | number {\n if (typeof props.rowKey === 'function') return props.rowKey(row, index);\n return (row[props.rowKey] as string | number | undefined) ?? index;\n}\n\nfunction isSelected(row: Record<string, unknown>, index: number) {\n return selectedSet.value.has(getRowKey(row, index));\n}\n\nfunction toggleRow(row: Record<string, unknown>, index: number) {\n const next = new Set(selectedSet.value);\n const key = getRowKey(row, index);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n emit('update:modelSelected', Array.from(next));\n}\n\nfunction toggleAll(value: boolean) {\n const next = new Set(selectedSet.value);\n visibleKeys.value.forEach((key) => {\n if (value) next.add(key);\n else next.delete(key);\n });\n emit('update:modelSelected', Array.from(next));\n}\n\nfunction toggleSort(column: ATableColumn) {\n const key = String(column.key);\n if (!props.sort || props.sort.key !== key) {\n emit('update:sort', { key, dir: 'asc' });\n } else if (props.sort.dir === 'asc') {\n emit('update:sort', { key, dir: 'desc' });\n } else {\n emit('update:sort', null);\n }\n}\n</script>\n\n<style scoped>\n.data-table {\n width: 100%;\n overflow: hidden;\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-lg);\n background: var(--bg-surface);\n box-shadow: var(--shadow-xs);\n}\n\n.data-table__toolbar,\n.data-table__footer {\n display: flex;\n align-items: center;\n gap: var(--s-2);\n padding: var(--s-4);\n}\n\n.data-table__toolbar {\n border-bottom: var(--bw-thin) solid var(--border);\n}\n\n.data-table__toolbar-spacer {\n flex: 1;\n}\n\n.data-table__scroll {\n overflow-x: auto;\n}\n\n.data-table__table {\n width: 100%;\n border-collapse: collapse;\n color: var(--text-primary);\n font-size: 13.5px;\n}\n\n.data-table th,\n.data-table td {\n height: var(--row-h);\n padding: 0 var(--s-4);\n border-bottom: var(--bw-thin) solid var(--border);\n vertical-align: middle;\n}\n\n.data-table th {\n background: var(--bg-inset);\n color: var(--text-tertiary);\n font-size: 11.5px;\n font-weight: var(--fw-semibold);\n letter-spacing: var(--ls-wide);\n text-transform: uppercase;\n}\n\n.data-table tbody tr:hover {\n background: var(--bg-hover);\n}\n\n.data-table tbody tr[data-selected] {\n background: var(--accent-subtle);\n}\n\n.data-table[data-striped] tbody tr:nth-child(even) {\n background: var(--bg-subtle);\n}\n\n.data-table tr:last-child td {\n border-bottom: 0;\n}\n\n.data-table [data-align=\"left\"] {\n text-align: left;\n}\n\n.data-table [data-align=\"center\"] {\n text-align: center;\n}\n\n.data-table [data-align=\"right\"] {\n text-align: right;\n}\n\n.data-table [data-numeric] {\n font-family: var(--font-mono);\n}\n\n.data-table__select-cell {\n width: 44px;\n padding-inline: var(--s-3);\n}\n\n.data-table__sort {\n display: inline-flex;\n align-items: center;\n gap: var(--s-1);\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n letter-spacing: inherit;\n text-transform: inherit;\n}\n\n.data-table__sort-icon[data-active] {\n color: var(--accent);\n}\n\n.data-table__empty {\n color: var(--text-tertiary);\n text-align: center;\n}\n\n.data-table__footer {\n justify-content: space-between;\n border-top: var(--bw-thin) solid var(--border);\n background: var(--bg-inset);\n color: var(--text-secondary);\n font-size: 13px;\n}\n\n.data-table__range {\n font-family: var(--font-mono);\n}\n</style>\n","<template>\n <span class=\"badge\" :data-tone=\"resolvedTone\" :data-appearance=\"appearance\">\n <span v-if=\"dot\" class=\"badge__dot\" aria-hidden=\"true\" />\n <slot />\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { ABadgeProps } from './ABadge.types';\n\ndefineOptions({ name: 'ABadge' });\n\nconst props = withDefaults(defineProps<ABadgeProps>(), {\n tone: 'neutral',\n appearance: 'subtle',\n dot: false\n});\n\nconst resolvedTone = computed(() => props.status || props.tone);\n</script>\n\n<style scoped>\n.badge {\n display: inline-flex;\n align-items: center;\n gap: var(--s-1);\n font-weight: var(--fw-semibold);\n white-space: nowrap;\n}\n\n.badge[data-tone=\"neutral\"] {\n --fg: var(--text-secondary);\n --bg: var(--bg-subtle);\n --bd: var(--border);\n --solid-bg: var(--bg-muted);\n --solid-fg: var(--text-secondary);\n --dot: var(--text-tertiary);\n}\n\n.badge[data-tone=\"accent\"] {\n --fg: var(--accent);\n --bg: var(--accent-subtle);\n --bd: var(--accent-border);\n --solid-bg: var(--accent);\n --solid-fg: #fff;\n --dot: var(--accent);\n}\n\n.badge[data-tone=\"success\"] {\n --fg: var(--success);\n --bg: var(--success-subtle);\n --bd: var(--success-border);\n --solid-bg: var(--success);\n --solid-fg: #fff;\n --dot: var(--success);\n}\n\n.badge[data-tone=\"warning\"] {\n --fg: var(--warning);\n --bg: var(--warning-subtle);\n --bd: var(--warning-border);\n --solid-bg: var(--warning);\n --solid-fg: #fff;\n --dot: var(--warning);\n}\n\n.badge[data-tone=\"danger\"] {\n --fg: var(--danger);\n --bg: var(--danger-subtle);\n --bd: var(--danger-border);\n --solid-bg: var(--danger);\n --solid-fg: #fff;\n --dot: var(--danger);\n}\n\n.badge[data-tone=\"info\"] {\n --fg: var(--info);\n --bg: var(--info-subtle);\n --bd: var(--info-border);\n --solid-bg: var(--accent);\n --solid-fg: #fff;\n --dot: var(--info);\n}\n\n.badge[data-appearance=\"subtle\"],\n.badge[data-appearance=\"solid\"],\n.badge[data-appearance=\"outline\"] {\n height: 22px;\n padding-inline: var(--s-2);\n border-radius: var(--r-sm);\n font-size: 12px;\n}\n\n.badge[data-appearance=\"subtle\"] {\n background: var(--bg);\n color: var(--fg);\n}\n\n.badge[data-appearance=\"solid\"] {\n background: var(--solid-bg);\n color: var(--solid-fg);\n}\n\n.badge[data-appearance=\"outline\"] {\n border: var(--bw-thin) solid var(--bd);\n background: transparent;\n color: var(--fg);\n}\n\n.badge[data-appearance=\"pill\"] {\n height: 24px;\n padding-inline: var(--s-2);\n border: var(--bw-thin) solid var(--bd);\n border-radius: var(--r-full);\n background: var(--bg);\n color: var(--fg);\n font-size: 12.5px;\n}\n\n.badge__dot {\n width: 6px;\n height: 6px;\n border-radius: var(--r-full);\n background: var(--dot);\n flex-shrink: 0;\n}\n</style>\n","<template>\n <span class=\"tag\">\n <span v-if=\"color\" class=\"tag__swatch\" :style=\"{ background: color }\" aria-hidden=\"true\" />\n <slot />\n <button v-if=\"removable\" class=\"tag__remove\" type=\"button\" :aria-label=\"removeLabel\" @click=\"emit('remove')\">x</button>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ATagProps } from './ATag.types';\n\ndefineOptions({ name: 'ATag' });\n\nwithDefaults(defineProps<ATagProps>(), {\n removable: false,\n removeLabel: 'Remove'\n});\n\nconst emit = defineEmits<{ remove: [] }>();\n</script>\n\n<style scoped>\n.tag {\n display: inline-flex;\n height: 26px;\n align-items: center;\n gap: var(--s-1);\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-sm);\n background: var(--bg-subtle);\n color: var(--text-secondary);\n font-size: 12.5px;\n padding-inline: var(--s-2);\n}\n\n.tag__swatch {\n width: 8px;\n height: 8px;\n border-radius: var(--r-xs);\n}\n\n.tag__remove {\n border: 0;\n background: transparent;\n color: var(--text-tertiary);\n}\n</style>\n","<template>\n <ABadge :tone=\"tone\" appearance=\"pill\" dot>\n <slot />\n </ABadge>\n</template>\n\n<script setup lang=\"ts\">\nimport ABadge from '../ABadge/ABadge.vue';\nimport type { AStatusPillProps } from './AStatusPill.types';\n\ndefineOptions({ name: 'AStatusPill' });\n\nwithDefaults(defineProps<AStatusPillProps>(), {\n tone: 'neutral'\n});\n</script>\n","<template>\n <section class=\"card\" :data-padded=\"padded || null\">\n <header v-if=\"title || subtitle || $slots.header\" class=\"card__header\">\n <slot name=\"header\">\n <div>\n <h3 v-if=\"title\" class=\"card__title\">{{ title }}</h3>\n <p v-if=\"subtitle\" class=\"card__subtitle\">{{ subtitle }}</p>\n </div>\n </slot>\n </header>\n <div class=\"card__body\">\n <slot />\n </div>\n <footer v-if=\"$slots.footer\" class=\"card__footer\">\n <slot name=\"footer\" />\n </footer>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ACardProps } from './ACard.types';\n\ndefineOptions({ name: 'ACard' });\n\nwithDefaults(defineProps<ACardProps>(), {\n padded: true\n});\n</script>\n\n<style scoped>\n.card {\n border: var(--bw-thin) solid var(--card-border);\n border-radius: var(--card-radius);\n background: var(--card-bg);\n color: var(--text-primary);\n box-shadow: var(--card-shadow);\n}\n\n.card[data-padded] .card__body,\n.card__header,\n.card__footer {\n padding: var(--card-pad);\n}\n\n.card__header {\n border-bottom: var(--bw-thin) solid var(--border);\n}\n\n.card__footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--s-2);\n border-top: var(--bw-thin) solid var(--border);\n background: var(--bg-inset);\n}\n\n.card__title,\n.card__subtitle {\n margin: 0;\n}\n\n.card__title {\n font-size: var(--fs-h3);\n line-height: var(--lh-tight);\n font-weight: var(--fw-semibold);\n}\n\n.card__subtitle {\n margin-top: var(--s-1);\n color: var(--text-secondary);\n font-size: var(--fs-caption);\n}\n</style>\n","<template>\n <svg class=\"icon\" :width=\"size\" :height=\"size\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path :d=\"path\" />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { AIconProps } from './AIcon.types';\n\ndefineOptions({ name: 'AIcon' });\n\nconst props = withDefaults(defineProps<AIconProps>(), {\n size: 20\n});\n\nconst paths: Record<string, string> = {\n home: 'M3 11.5 12 4l9 7.5V20a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1v-8.5Z',\n grid: 'M4 4h6v6H4V4Zm10 0h6v6h-6V4ZM4 14h6v6H4v-6Zm10 0h6v6h-6v-6Z',\n wallet: 'M4 7h16v12H4a2 2 0 0 1-2-2V7a3 3 0 0 1 3-3h13v3',\n doc: 'M6 3h8l4 4v14H6V3Zm8 0v5h5',\n users: 'M16 19c0-2-2-4-4-4s-4 2-4 4m8-10a4 4 0 1 1-8 0 4 4 0 0 1 8 0Zm3 10c0-1.5-1-2.8-2.4-3.5M17 5.2a3 3 0 0 1 0 5.6',\n chart: 'M4 19V5m0 14h16M8 16v-5m5 5V8m5 8v-9',\n settings: 'M12 8a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm8 4h2M2 12h2m12.8-6.8 1.4-1.4M5.8 18.2l1.4-1.4m0-11.6L5.8 3.8m12.4 14.4-1.4-1.4',\n search: 'M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Zm5.5-2 5 5',\n bell: 'M18 9a6 6 0 1 0-12 0c0 7-3 7-3 7h18s-3 0-3-7Zm-4 10a2 2 0 0 1-4 0',\n plus: 'M12 5v14M5 12h14',\n check: 'M20 6 9 17l-5-5',\n x: 'M6 6l12 12M18 6 6 18',\n arrow: 'M5 12h14m-6-6 6 6-6 6',\n chevron: 'm8 10 4 4 4-4',\n down: 'm7 9 5 5 5-5',\n up: 'm7 15 5-5 5 5',\n calendar: 'M7 3v4m10-4v4M4 9h16M5 5h14v16H5V5Z',\n filter: 'M4 5h16l-6 7v6l-4 2v-8L4 5Z',\n upload: 'M12 16V4m-5 5 5-5 5 5M5 20h14',\n trash: 'M4 7h16M9 7V4h6v3m-8 0 1 14h8l1-14',\n pencil: 'M4 20h4L19 9l-4-4L4 16v4Z',\n star: 'm12 3 2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.6 6.5 20l1-6.2L3 9.4l6.2-.9L12 3Z',\n clock: 'M12 21a9 9 0 1 1 0-18 9 9 0 0 1 0 18Zm0-13v5l3 2',\n lock: 'M7 10V7a5 5 0 0 1 10 0v3M6 10h12v11H6V10Z',\n mail: 'M4 6h16v12H4V6Zm0 0 8 7 8-7',\n info: 'M12 17v-6m0-4h.01M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20Z',\n warn: 'M12 4 2 21h20L12 4Zm0 6v5m0 3h.01',\n sort: 'M8 7h8M10 12h6M12 17h4',\n dots: 'M5 12h.01M12 12h.01M19 12h.01',\n card: 'M3 6h18v12H3V6Zm0 4h18'\n};\n\nconst path = computed(() => paths[props.name] || paths.info);\n</script>\n\n<style scoped>\n.icon {\n display: inline-block;\n flex-shrink: 0;\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 1.7;\n}\n</style>\n","<template>\n <section class=\"alert\" :data-tone=\"tone\" role=\"status\">\n <AIcon class=\"alert__icon\" :name=\"tone === 'warning' || tone === 'danger' ? 'warn' : 'info'\" />\n <div class=\"alert__content\">\n <strong v-if=\"title\" class=\"alert__title\">{{ title }}</strong>\n <div class=\"alert__body\"><slot /></div>\n </div>\n <button v-if=\"dismissible\" class=\"alert__close\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"emit('dismiss')\">x</button>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport AIcon from '../AIcon/AIcon.vue';\nimport type { AAlertProps } from './AAlert.types';\n\ndefineOptions({ name: 'AAlert' });\n\nwithDefaults(defineProps<AAlertProps>(), {\n tone: 'info',\n dismissible: false,\n dismissLabel: 'Dismiss'\n});\n\nconst emit = defineEmits<{ dismiss: [] }>();\n</script>\n\n<style scoped>\n.alert {\n display: flex;\n gap: var(--s-3);\n border: var(--bw-thin) solid var(--info-border);\n border-radius: var(--r-md);\n background: var(--info-subtle);\n color: var(--text-primary);\n padding: var(--s-3);\n}\n\n.alert[data-tone=\"success\"] {\n border-color: var(--success-border);\n background: var(--success-subtle);\n}\n\n.alert[data-tone=\"warning\"] {\n border-color: var(--warning-border);\n background: var(--warning-subtle);\n}\n\n.alert[data-tone=\"danger\"] {\n border-color: var(--danger-border);\n background: var(--danger-subtle);\n}\n\n.alert__icon {\n color: var(--info);\n}\n\n.alert[data-tone=\"success\"] .alert__icon {\n color: var(--success);\n}\n\n.alert[data-tone=\"warning\"] .alert__icon {\n color: var(--warning);\n}\n\n.alert[data-tone=\"danger\"] .alert__icon {\n color: var(--danger);\n}\n\n.alert__content {\n flex: 1;\n}\n\n.alert__title {\n display: block;\n font-size: 14px;\n font-weight: var(--fw-semibold);\n}\n\n.alert__body {\n color: var(--text-secondary);\n font-size: 13.5px;\n}\n\n.alert__close {\n border: 0;\n background: transparent;\n color: var(--text-tertiary);\n}\n</style>\n","<template>\n <div class=\"progress\">\n <div v-if=\"label\" class=\"progress__label\">\n <span>{{ label }}</span>\n <span>{{ normalized }}%</span>\n </div>\n <div class=\"progress__track\" role=\"progressbar\" :aria-valuenow=\"normalized\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <span class=\"progress__fill\" :style=\"{ width: `${normalized}%` }\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { AProgressProps } from './AProgress.types';\n\ndefineOptions({ name: 'AProgress' });\n\nconst props = withDefaults(defineProps<AProgressProps>(), {\n value: 0\n});\n\nconst normalized = computed(() => Math.min(100, Math.max(0, props.value)));\n</script>\n\n<style scoped>\n.progress {\n display: grid;\n gap: var(--s-2);\n}\n\n.progress__label {\n display: flex;\n justify-content: space-between;\n color: var(--text-secondary);\n font-size: 13px;\n}\n\n.progress__label span:last-child {\n font-family: var(--font-mono);\n}\n\n.progress__track {\n height: 8px;\n overflow: hidden;\n border-radius: var(--r-full);\n background: var(--bg-muted);\n}\n\n.progress__fill {\n display: block;\n height: 100%;\n border-radius: inherit;\n background: var(--accent);\n}\n</style>\n","<template>\n <div class=\"tabs\" :data-variant=\"variant\" role=\"tablist\">\n <button\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.value\"\n :ref=\"(element) => setTabRef(element as HTMLButtonElement | null, index)\"\n class=\"tabs__item\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"modelValue === tab.value\"\n :tabindex=\"modelValue === tab.value ? 0 : -1\"\n :data-active=\"modelValue === tab.value || null\"\n @click=\"emit('update:modelValue', tab.value)\"\n @keydown.left.prevent=\"focusSibling(index, -1)\"\n @keydown.right.prevent=\"focusSibling(index, 1)\"\n >\n {{ tab.label }}\n <span v-if=\"tab.count != null\" class=\"tabs__count\">{{ tab.count }}</span>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { ATabsProps } from './ATabs.types';\n\ndefineOptions({ name: 'ATabs' });\n\nwithDefaults(defineProps<ATabsProps>(), {\n tabs: () => [],\n variant: 'underline'\n});\n\nconst emit = defineEmits<{ 'update:modelValue': [value: string | number] }>();\nconst tabRefs = ref<HTMLButtonElement[]>([]);\n\nfunction setTabRef(element: HTMLButtonElement | null, index: number) {\n if (!element) return;\n tabRefs.value[index] = element;\n}\n\nfunction focusSibling(index: number, delta: number) {\n const nextIndex = (index + delta + tabRefs.value.length) % tabRefs.value.length;\n tabRefs.value[nextIndex]?.focus();\n}\n</script>\n\n<style scoped>\n.tabs {\n display: flex;\n gap: var(--s-1);\n}\n\n.tabs[data-variant=\"underline\"] {\n border-bottom: var(--bw-thin) solid var(--border);\n}\n\n.tabs[data-variant=\"pill\"] {\n display: inline-flex;\n border: var(--bw-thin) solid var(--border);\n border-radius: var(--r-md);\n background: var(--bg-subtle);\n padding: var(--s-1);\n}\n\n.tabs__item {\n display: inline-flex;\n align-items: center;\n gap: var(--s-1);\n border: 0;\n background: transparent;\n color: var(--text-tertiary);\n font-size: 14px;\n padding: var(--s-2) var(--s-3);\n}\n\n.tabs__item[data-active] {\n color: var(--text-primary);\n font-weight: var(--fw-semibold);\n}\n\n.tabs[data-variant=\"underline\"] .tabs__item[data-active] {\n box-shadow: inset 0 -2px 0 var(--accent);\n}\n\n.tabs[data-variant=\"pill\"] .tabs__item[data-active] {\n border-radius: var(--r-sm);\n background: var(--bg-surface);\n box-shadow: var(--shadow-xs);\n}\n\n.tabs__count {\n border-radius: var(--r-full);\n background: var(--bg-muted);\n color: var(--text-secondary);\n font-size: 11px;\n padding-inline: 6px;\n}\n</style>\n","<template>\n <nav class=\"breadcrumbs\" aria-label=\"Breadcrumbs\">\n <ol class=\"breadcrumbs__list\">\n <li v-for=\"(item, index) in items\" :key=\"`${item.label}-${index}`\" class=\"breadcrumbs__item\">\n <a v-if=\"item.href && index < items.length - 1\" class=\"breadcrumbs__link\" :href=\"item.href\">{{ item.label }}</a>\n <span v-else class=\"breadcrumbs__current\">{{ item.label }}</span>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ABreadcrumbsProps } from './ABreadcrumbs.types';\n\ndefineOptions({ name: 'ABreadcrumbs' });\n\nwithDefaults(defineProps<ABreadcrumbsProps>(), {\n items: () => []\n});\n</script>\n\n<style scoped>\n.breadcrumbs__list {\n display: flex;\n align-items: center;\n gap: var(--s-2);\n margin: 0;\n padding: 0;\n list-style: none;\n font-size: 13px;\n}\n\n.breadcrumbs__item {\n display: inline-flex;\n align-items: center;\n gap: var(--s-2);\n}\n\n.breadcrumbs__item:not(:last-child)::after {\n color: var(--text-tertiary);\n content: \"/\";\n}\n\n.breadcrumbs__link {\n color: var(--text-secondary);\n text-decoration: none;\n}\n\n.breadcrumbs__link:hover,\n.breadcrumbs__current {\n color: var(--text-primary);\n}\n\n.breadcrumbs__current {\n font-weight: var(--fw-semibold);\n}\n</style>\n","<template>\n <span class=\"avatar\" :data-shape=\"shape\" :data-status=\"status\" :style=\"{ width: `${size}px`, height: `${size}px` }\">\n <img v-if=\"src\" class=\"avatar__image\" :src=\"src\" :alt=\"name\" />\n <span v-else class=\"avatar__initials\">{{ initials }}</span>\n <span v-if=\"status !== 'none'\" class=\"avatar__status\" aria-hidden=\"true\" />\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { AAvatarProps } from './AAvatar.types';\n\ndefineOptions({ name: 'AAvatar' });\n\nconst props = withDefaults(defineProps<AAvatarProps>(), {\n name: '',\n size: 32,\n shape: 'circle',\n status: 'none'\n});\n\nconst initials = computed(() =>\n props.name\n .split(' ')\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join('') || '?'\n);\n</script>\n\n<style scoped>\n.avatar {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--r-full);\n background: var(--accent);\n color: #fff;\n font-weight: var(--fw-semibold);\n overflow: visible;\n}\n\n.avatar[data-shape=\"square\"] {\n border-radius: var(--r-md);\n}\n\n.avatar__image {\n width: 100%;\n height: 100%;\n border-radius: inherit;\n object-fit: cover;\n}\n\n.avatar__status {\n position: absolute;\n right: 0;\n bottom: 0;\n width: 12px;\n height: 12px;\n border-radius: var(--r-full);\n background: var(--success);\n box-shadow: 0 0 0 var(--bw-ring) var(--bg-surface);\n}\n\n.avatar[data-status=\"away\"] .avatar__status {\n background: var(--warning);\n}\n\n.avatar[data-status=\"busy\"] .avatar__status {\n background: var(--danger);\n}\n</style>\n","<template>\n <div class=\"avatar-group\">\n <AAvatar v-for=\"(item, index) in visibleItems\" :key=\"`${item.name}-${index}`\" v-bind=\"item\" />\n <span v-if=\"overflow > 0\" class=\"avatar-group__overflow\">+{{ overflow }}</span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport AAvatar from '../AAvatar/AAvatar.vue';\nimport type { AAvatarGroupProps } from './AAvatarGroup.types';\n\ndefineOptions({ name: 'AAvatarGroup' });\nconst props = withDefaults(defineProps<AAvatarGroupProps>(), { items: () => [], max: 4 });\nconst visibleItems = computed(() => props.items.slice(0, props.max));\nconst overflow = computed(() => Math.max(0, props.items.length - props.max));\n</script>\n\n<style scoped>\n.avatar-group { display: inline-flex; align-items: center; }\n.avatar-group :deep(.avatar), .avatar-group__overflow { margin-left: -10px; box-shadow: 0 0 0 var(--bw-ring) var(--bg-surface); }\n.avatar-group :deep(.avatar:first-child) { margin-left: 0; }\n.avatar-group__overflow { display: inline-grid; width: 32px; height: 32px; place-items: center; border-radius: var(--r-full); background: var(--bg-muted); color: var(--text-secondary); font-size: 12px; font-weight: var(--fw-semibold); }\n</style>\n","<template>\n <section class=\"empty\" :data-tone=\"tone\">\n <div class=\"empty__icon\" aria-hidden=\"true\">{{ icon }}</div>\n <h3 class=\"empty__title\">{{ title }}</h3>\n <p v-if=\"desc\" class=\"empty__desc\">{{ desc }}</p>\n <div v-if=\"$slots.action\" class=\"empty__action\"><slot name=\"action\" /></div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport type { AEmptyStateProps } from './AEmptyState.types';\n\ndefineOptions({ name: 'AEmptyState' });\n\nwithDefaults(defineProps<AEmptyStateProps>(), {\n tone: 'no-data',\n title: 'No data',\n icon: 'i'\n});\n</script>\n\n<style scoped>\n.empty {\n display: grid;\n justify-items: center;\n gap: var(--s-3);\n border: var(--bw-thin) dashed var(--border-strong);\n border-radius: var(--r-lg);\n background: var(--bg-surface);\n padding: var(--s-10);\n text-align: center;\n}\n\n.empty__icon {\n display: grid;\n width: 52px;\n height: 52px;\n place-items: center;\n border-radius: var(--r-lg);\n background: var(--bg-subtle);\n color: var(--text-tertiary);\n}\n\n.empty__title,\n.empty__desc {\n margin: 0;\n}\n\n.empty__title {\n font-size: 15px;\n font-weight: var(--fw-semibold);\n}\n\n.empty__desc {\n max-width: 34ch;\n color: var(--text-secondary);\n font-size: 14px;\n}\n</style>\n","<template>\n <ACard>\n <div class=\"kpi\">\n <div class=\"kpi__top\">\n <span class=\"kpi__label\">{{ label }}</span>\n <ABadge v-if=\"delta\" :tone=\"deltaTone\" appearance=\"pill\">{{ delta }}</ABadge>\n </div>\n <strong class=\"kpi__value\">{{ value }}</strong>\n <slot />\n </div>\n </ACard>\n</template>\n\n<script setup lang=\"ts\">\nimport ABadge from '../ABadge/ABadge.vue';\nimport ACard from '../ACard/ACard.vue';\nimport type { AKpiCardProps } from './AKpiCard.types';\n\ndefineOptions({ name: 'AKpiCard' });\n\nwithDefaults(defineProps<AKpiCardProps>(), {\n deltaTone: 'neutral'\n});\n</script>\n\n<style scoped>\n.kpi {\n display: grid;\n gap: var(--s-3);\n}\n\n.kpi__top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--s-2);\n}\n\n.kpi__label {\n color: var(--text-secondary);\n font-size: 13px;\n}\n\n.kpi__value {\n color: var(--text-primary);\n font-family: var(--font-mono);\n font-size: var(--fs-h2);\n line-height: var(--lh-tight);\n}\n</style>\n","<template>\n <span class=\"tooltip\" @mouseenter=\"open = true\" @mouseleave=\"open = false\" @focusin=\"open = true\" @focusout=\"open = false\">\n <slot />\n <span v-if=\"open\" class=\"tooltip__bubble\" :data-placement=\"placement\" role=\"tooltip\">{{ content }}</span>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { ATooltipProps } from './ATooltip.types';\n\ndefineOptions({ name: 'ATooltip' });\nwithDefaults(defineProps<ATooltipProps>(), { placement: 'top' });\nconst open = ref(false);\n</script>\n\n<style scoped>\n.tooltip { position: relative; display: inline-flex; }\n.tooltip__bubble {\n position: absolute; z-index: var(--z-tooltip); width: max-content; max-width: 240px;\n border-radius: var(--r-sm); background: var(--gray-900); color: #fff;\n box-shadow: var(--shadow-md); font-size: 12px; padding: 6px 10px; pointer-events: none;\n}\n.tooltip__bubble[data-placement=\"top\"] { bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); }\n.tooltip__bubble[data-placement=\"bottom\"] { top: calc(100% + 8px); left: 50%; transform: translateX(-50%); }\n.tooltip__bubble[data-placement=\"left\"] { right: calc(100% + 8px); top: 50%; transform: translateY(-50%); }\n.tooltip__bubble[data-placement=\"right\"] { left: calc(100% + 8px); top: 50%; transform: translateY(-50%); }\n</style>\n","<template>\n <nav class=\"sidebar-nav\">\n <section v-for=\"(group, groupIndex) in groups\" :key=\"group.label || groupIndex\" class=\"sidebar-nav__group\">\n <h3 v-if=\"group.label\" class=\"sidebar-nav__caption\">{{ group.label }}</h3>\n <a v-for=\"item in group.items\" :key=\"item.label\" class=\"sidebar-nav__item\" :data-active=\"item.active || null\" :href=\"item.href || '#'\" @click=\"emit('select', item)\">\n <AIcon v-if=\"item.icon\" :name=\"item.icon\" :size=\"20\" />\n <span>{{ item.label }}</span>\n <span v-if=\"item.badge != null\" class=\"sidebar-nav__badge\">{{ item.badge }}</span>\n </a>\n </section>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport AIcon from '../AIcon/AIcon.vue';\nimport type { ASidebarNavItem, ASidebarNavProps } from './ASidebarNav.types';\n\ndefineOptions({ name: 'ASidebarNav' });\nwithDefaults(defineProps<ASidebarNavProps>(), { groups: () => [] });\nconst emit = defineEmits<{ select: [item: ASidebarNavItem] }>();\n</script>\n\n<style scoped>\n.sidebar-nav { display: grid; gap: var(--s-5); }\n.sidebar-nav__group { display: grid; gap: var(--s-1); }\n.sidebar-nav__caption { margin: 0 0 var(--s-1); color: var(--text-tertiary); font-size: 10.5px; letter-spacing: var(--ls-wide); text-transform: uppercase; }\n.sidebar-nav__item { display: flex; align-items: center; gap: 10px; border-radius: var(--r-sm); color: var(--text-secondary); font-size: 13.5px; padding: 8px 10px; text-decoration: none; }\n.sidebar-nav__item:hover { background: var(--bg-hover); }\n.sidebar-nav__item[data-active] { background: var(--accent-subtle); color: var(--accent); font-weight: var(--fw-semibold); }\n.sidebar-nav__badge { margin-left: auto; border-radius: var(--r-full); background: var(--bg-muted); color: var(--text-secondary); font-size: 11px; padding-inline: 6px; }\n</style>\n","<template>\n <div class=\"number-input\" :data-disabled=\"disabled || null\">\n <button type=\"button\" :disabled=\"disabled\" @click=\"change(-step)\">-</button>\n <span v-if=\"prefix\" class=\"number-input__prefix\">{{ prefix }}</span>\n <input :value=\"modelValue\" :disabled=\"disabled\" type=\"number\" :min=\"min\" :max=\"max\" :step=\"step\" @input=\"set(Number(($event.target as HTMLInputElement).value))\" />\n <button type=\"button\" :disabled=\"disabled\" @click=\"change(step)\">+</button>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { ANumberInputProps } from './ANumberInput.types';\ndefineOptions({ name: 'ANumberInput' });\nconst props = withDefaults(defineProps<ANumberInputProps>(), { modelValue: 0, step: 1, disabled: false });\nconst emit = defineEmits<{ 'update:modelValue': [value: number] }>();\nfunction clamp(value: number) { return Math.min(props.max ?? value, Math.max(props.min ?? value, value)); }\nfunction set(value: number) { emit('update:modelValue', clamp(value)); }\nfunction change(delta: number) { set((props.modelValue ?? 0) + delta); }\n</script>\n<style scoped>\n.number-input { display: inline-flex; height: var(--ctrl-md); align-items: center; overflow: hidden; border: var(--bw-thin) solid var(--field-border); border-radius: var(--field-radius); background: var(--field-bg); }\n.number-input button { width: 36px; height: 100%; border: 0; background: transparent; color: var(--text-secondary); }\n.number-input button:hover:not(:disabled) { background: var(--bg-hover); }\n.number-input input { width: 80px; border: 0; outline: 0; background: transparent; color: var(--text-primary); font-family: var(--font-mono); text-align: center; }\n.number-input__prefix { color: var(--text-tertiary); font-family: var(--font-mono); }\n</style>\n","<template>\n <Teleport to=\"body\">\n <div v-if=\"modelValue\" class=\"drawer\" :data-side=\"side\" @click=\"onBackdrop\">\n <aside class=\"drawer__panel\" :data-size=\"size\">\n <header class=\"drawer__header\"><h2>{{ title }}</h2><button type=\"button\" :aria-label=\"closeLabel\" @click=\"close\">x</button></header>\n <div class=\"drawer__body\"><slot /></div>\n <footer v-if=\"$slots.footer\" class=\"drawer__footer\"><slot name=\"footer\" /></footer>\n </aside>\n </div>\n </Teleport>\n</template>\n<script setup lang=\"ts\">\nimport type { ADrawerProps } from './ADrawer.types';\ndefineOptions({ name: 'ADrawer' });\nwithDefaults(defineProps<ADrawerProps>(), { modelValue: false, side: 'right', size: 'md', closeLabel: 'Close drawer' });\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean]; close: [] }>();\nfunction close() { emit('update:modelValue', false); emit('close'); }\nfunction onBackdrop(event: MouseEvent) { if (event.target === event.currentTarget) close(); }\n</script>\n<style scoped>\n.drawer { position: fixed; inset: 0; z-index: var(--z-overlay); display: flex; background: rgba(13,17,23,.35); }\n.drawer[data-side=\"right\"] { justify-content: flex-end; }\n.drawer__panel { display: flex; width: min(100%, 420px); flex-direction: column; background: var(--bg-surface); box-shadow: var(--shadow-xl); }\n.drawer__panel[data-size=\"sm\"] { width: min(100%, 340px); }\n.drawer__panel[data-size=\"lg\"] { width: min(100%, 620px); }\n.drawer__header, .drawer__footer { display: flex; align-items: center; justify-content: space-between; gap: var(--s-3); padding: var(--s-4); border-bottom: var(--bw-thin) solid var(--border); }\n.drawer__footer { justify-content: flex-end; border-top: var(--bw-thin) solid var(--border); border-bottom: 0; background: var(--bg-inset); }\n.drawer__header h2 { margin: 0; font-size: var(--fs-h3); }\n.drawer__header button { border: 0; background: transparent; color: var(--text-tertiary); }\n.drawer__body { flex: 1; overflow: auto; padding: var(--s-4); }\n@media (max-width: 767px) { .drawer__panel { width: 100%; } }\n</style>\n","<template>\n <div class=\"accordion\">\n <section v-for=\"item in items\" :key=\"item.key\" class=\"accordion__item\">\n <button class=\"accordion__header\" type=\"button\" :aria-expanded=\"openKeys.has(item.key)\" :aria-controls=\"bodyId(item.key)\" @click=\"toggle(item.key)\">\n <span>{{ item.label }}</span><span :data-open=\"openKeys.has(item.key) || null\">v</span>\n </button>\n <div v-if=\"openKeys.has(item.key)\" :id=\"bodyId(item.key)\" class=\"accordion__body\"><slot :name=\"`item-${item.key}`\">{{ item.content }}</slot></div>\n </section>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { AAccordionProps } from './AAccordion.types';\ndefineOptions({ name: 'AAccordion' });\nconst props = withDefaults(defineProps<AAccordionProps>(), { items: () => [], multiple: false });\nconst openKeys = ref(new Set<string | number>());\nfunction toggle(key: string | number) { const next = props.multiple ? new Set(openKeys.value) : new Set<string | number>(); next.has(key) ? next.delete(key) : next.add(key); openKeys.value = next; }\nfunction bodyId(key: string | number) { return `a-accordion-panel-${key}`; }\n</script>\n<style scoped>\n.accordion { border: var(--bw-thin) solid var(--border); border-radius: var(--r-lg); overflow: hidden; }\n.accordion__item + .accordion__item { border-top: var(--bw-thin) solid var(--border); }\n.accordion__header { display: flex; width: 100%; align-items: center; justify-content: space-between; border: 0; background: var(--bg-surface); color: var(--text-primary); padding: var(--s-3) var(--s-4); text-align: left; }\n.accordion__header:hover { background: var(--bg-hover); }\n.accordion__header span[data-open] { transform: rotate(180deg); }\n.accordion__body { padding: var(--s-4); color: var(--text-secondary); }\n</style>\n","<template>\n <span ref=\"rootRef\" class=\"popover\">\n <button class=\"popover__trigger\" type=\"button\" :aria-expanded=\"open\" :aria-haspopup=\"'dialog'\" @click=\"open = !open\" @keydown.esc.prevent=\"open = false\">\n <slot name=\"trigger\" />\n </button>\n <div v-if=\"open\" class=\"popover__panel\" :data-placement=\"placement\" role=\"dialog\">\n <strong v-if=\"title\">{{ title }}</strong>\n <slot />\n </div>\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport type { APopoverProps } from './APopover.types';\ndefineOptions({ name: 'APopover' });\nwithDefaults(defineProps<APopoverProps>(), { placement: 'bottom' });\nconst open = ref(false); const rootRef = ref<HTMLElement>();\nfunction onDoc(e: PointerEvent) { if (!rootRef.value?.contains(e.target as Node)) open.value = false; }\nonMounted(() => { if (typeof document !== 'undefined') document.addEventListener('pointerdown', onDoc); }); onBeforeUnmount(() => { if (typeof document !== 'undefined') document.removeEventListener('pointerdown', onDoc); });\n</script>\n<style scoped>\n.popover { position: relative; display: inline-flex; }\n.popover__trigger { border: 0; background: transparent; padding: 0; }\n.popover__panel { position: absolute; z-index: var(--z-popover); min-width: 240px; border: var(--bw-thin) solid var(--border); border-radius: var(--r-lg); background: var(--bg-surface); box-shadow: var(--shadow-lg); color: var(--text-primary); padding: var(--s-4); }\n.popover__panel[data-placement=\"bottom\"] { top: calc(100% + 8px); left: 0; }\n.popover__panel[data-placement=\"top\"] { bottom: calc(100% + 8px); left: 0; }\n.popover__panel[data-placement=\"right\"] { left: calc(100% + 8px); top: 0; }\n.popover__panel[data-placement=\"left\"] { right: calc(100% + 8px); top: 0; }\n</style>\n","<template><section v-if=\"visible\" class=\"banner\" :data-tone=\"tone\"><slot /><span class=\"banner__action\"><slot name=\"action\" /></span><button v-if=\"dismissible\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"visible = false; emit('dismiss')\">x</button></section></template>\n<script setup lang=\"ts\">\nimport { ref } from 'vue'; import type { ABannerProps } from './ABanner.types';\ndefineOptions({ name: 'ABanner' }); withDefaults(defineProps<ABannerProps>(), { tone: 'info', dismissible: false, dismissLabel: 'Dismiss banner' }); const emit = defineEmits<{ dismiss: [] }>(); const visible = ref(true);\n</script>\n<style scoped>\n.banner { display: flex; align-items: center; gap: var(--s-3); border: var(--bw-thin) solid var(--info-border); background: var(--info-subtle); color: var(--text-primary); padding: var(--s-3) var(--s-4); }\n.banner[data-tone=\"system\"] { background: var(--gray-900); color: #fff; border-color: var(--gray-900); }\n.banner[data-tone=\"warning\"] { background: var(--warning-subtle); border-color: var(--warning-border); }\n.banner[data-tone=\"danger\"] { background: var(--danger-subtle); border-color: var(--danger-border); }\n.banner__action { margin-left: auto; } .banner button { border: 0; background: transparent; color: inherit; }\n</style>\n","<template>\n <label class=\"file-upload\" :data-dragging=\"dragging || null\" @dragover.prevent=\"dragging = true\" @dragleave.prevent=\"dragging = false\" @drop.prevent=\"onDrop\">\n <input class=\"file-upload__input\" type=\"file\" :accept=\"accept\" :multiple=\"multiple\" @change=\"onInput\" />\n <span class=\"file-upload__icon\">{{ iconLabel }}</span>\n <strong>{{ label }}</strong>\n <span v-if=\"resolvedHint\" class=\"file-upload__hint\">{{ resolvedHint }}</span>\n </label>\n</template>\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { AFileUploadProps } from './AFileUpload.types';\ndefineOptions({ name: 'AFileUpload' });\nconst props = withDefaults(defineProps<AFileUploadProps>(), {\n multiple: false,\n label: 'Drop files here or choose files',\n iconLabel: '+'\n});\nconst emit = defineEmits<{ files: [files: File[]] }>();\nconst dragging = ref(false);\nconst resolvedHint = computed(() => props.hint || (props.maxSize ? `Max ${Math.round(props.maxSize / 1024 / 1024)} MB` : ''));\nfunction send(list: FileList | null) { if (list) emit('files', Array.from(list)); }\nfunction onInput(event: Event) { send((event.target as HTMLInputElement).files); }\nfunction onDrop(event: DragEvent) { dragging.value = false; send(event.dataTransfer?.files || null); }\n</script>\n<style scoped>\n.file-upload { display: grid; justify-items: center; gap: var(--s-2); border: var(--bw-thin) dashed var(--border-strong); border-radius: var(--r-lg); background: var(--bg-surface); color: var(--text-primary); cursor: pointer; padding: var(--s-8); text-align: center; }\n.file-upload[data-dragging], .file-upload:hover { border-color: var(--accent); background: var(--accent-subtle); }\n.file-upload__input { position: absolute; opacity: 0; pointer-events: none; }\n.file-upload__icon { display: grid; width: 44px; height: 44px; place-items: center; border-radius: var(--r-lg); background: var(--bg-subtle); color: var(--text-tertiary); }\n.file-upload__hint { color: var(--text-tertiary); font-size: 12px; }\n</style>\n","<template><ol class=\"stepper\" :data-orientation=\"orientation\"><li v-for=\"(step, index) in steps\" :key=\"step.key\" class=\"stepper__item\" :data-state=\"state(index)\"><span class=\"stepper__circle\">{{ index < current ? '✓' : index + 1 }}</span><span>{{ step.label }}</span></li></ol></template>\n<script setup lang=\"ts\">\nimport type { AStepperProps } from './AStepper.types';\ndefineOptions({ name: 'AStepper' }); const props = withDefaults(defineProps<AStepperProps>(), { steps: () => [], current: 0, orientation: 'horizontal' });\nfunction state(index: number) { return index < props.current ? 'done' : index === props.current ? 'current' : 'upcoming'; }\n</script>\n<style scoped>\n.stepper { display: flex; gap: var(--s-4); margin: 0; padding: 0; list-style: none; }\n.stepper[data-orientation=\"vertical\"] { flex-direction: column; }\n.stepper__item { display: flex; align-items: center; gap: var(--s-2); color: var(--text-tertiary); }\n.stepper__circle { display: grid; width: 30px; height: 30px; place-items: center; border: var(--bw-medium) solid var(--border-strong); border-radius: var(--r-full); font-family: var(--font-mono); }\n.stepper__item[data-state=\"done\"] .stepper__circle { border-color: var(--accent); background: var(--accent); color: #fff; }\n.stepper__item[data-state=\"current\"] { color: var(--accent); font-weight: var(--fw-semibold); }\n.stepper__item[data-state=\"current\"] .stepper__circle { border-color: var(--accent); background: var(--accent-subtle); }\n</style>\n","<template><ol class=\"timeline\"><li v-for=\"(item, index) in items\" :key=\"`${item.time}-${index}`\" class=\"timeline__item\"><span class=\"timeline__node\">{{ item.icon || '' }}</span><p><strong>{{ item.actor }}</strong> {{ item.action }} <time>{{ item.time }}</time></p></li></ol></template>\n<script setup lang=\"ts\">\nimport type { ATimelineProps } from './ATimeline.types';\ndefineOptions({ name: 'ATimeline' }); withDefaults(defineProps<ATimelineProps>(), { items: () => [] });\n</script>\n<style scoped>\n.timeline { display: grid; gap: var(--s-4); margin: 0; padding: 0; list-style: none; }\n.timeline__item { position: relative; display: grid; grid-template-columns: 36px 1fr; gap: var(--s-3); }\n.timeline__item:not(:last-child)::before { position: absolute; top: 36px; bottom: calc(var(--s-4) * -1); left: 17px; width: 2px; background: var(--border); content: \"\"; }\n.timeline__node { display: grid; width: 36px; height: 36px; place-items: center; border-radius: var(--r-full); background: var(--bg-subtle); color: var(--text-tertiary); }\n.timeline p { margin: 0; color: var(--text-secondary); font-size: 14px; }\n.timeline strong { color: var(--text-primary); } .timeline time { color: var(--text-tertiary); font-family: var(--font-mono); font-size: 12px; }\n</style>\n","<template><ACard><header v-if=\"title || subtitle\" class=\"chart-frame__header\"><h3>{{ title }}</h3><p v-if=\"subtitle\">{{ subtitle }}</p></header><div class=\"chart-frame__body\"><slot /></div></ACard></template>\n<script setup lang=\"ts\">\nimport ACard from '../ACard/ACard.vue'; import type { AChartFrameProps } from './AChartFrame.types';\ndefineOptions({ name: 'AChartFrame' }); defineProps<AChartFrameProps>();\n</script>\n<style scoped>\n.chart-frame__header { display: grid; gap: var(--s-1); margin-bottom: var(--s-4); }\n.chart-frame__header h3, .chart-frame__header p { margin: 0; }\n.chart-frame__header h3 { font-size: var(--fs-h3); }\n.chart-frame__header p { color: var(--text-secondary); font-size: 13px; }\n.chart-frame__body { min-height: 220px; color: var(--text-secondary); }\n</style>\n","import type { App, Plugin } from 'vue';\nimport { vAFocus } from './directives';\nimport { AButton } from './components/AButton';\nimport { AInput } from './components/AInput';\nimport { AFormField } from './components/AFormField';\nimport { ASelect } from './components/ASelect';\nimport { ACheckbox } from './components/ACheckbox';\nimport { ARadio } from './components/ARadio';\nimport { ASwitch } from './components/ASwitch';\nimport { ASegmented } from './components/ASegmented';\nimport { ASlider } from './components/ASlider';\nimport { AModal } from './components/AModal';\nimport { AToast, AToastHost } from './components/AToast';\nimport { ATable } from './components/ATable';\nimport { ABadge } from './components/ABadge';\nimport { ATag } from './components/ATag';\nimport { AStatusPill } from './components/AStatusPill';\nimport { ACard } from './components/ACard';\nimport { ASpinner } from './components/ASpinner';\nimport { AIcon } from './components/AIcon';\nimport { AAlert } from './components/AAlert';\nimport { AProgress } from './components/AProgress';\nimport { ASkeleton } from './components/ASkeleton';\nimport { ATabs } from './components/ATabs';\nimport { ABreadcrumbs } from './components/ABreadcrumbs';\nimport { APagination } from './components/APagination';\nimport { AAvatar } from './components/AAvatar';\nimport { AAvatarGroup } from './components/AAvatarGroup';\nimport { AEmptyState } from './components/AEmptyState';\nimport { AKpiCard } from './components/AKpiCard';\nimport { ATooltip } from './components/ATooltip';\nimport { ASidebarNav } from './components/ASidebarNav';\nimport { ANumberInput } from './components/ANumberInput';\nimport { ADrawer } from './components/ADrawer';\nimport { AAccordion } from './components/AAccordion';\nimport { APopover } from './components/APopover';\nimport { ABanner } from './components/ABanner';\nimport { AFileUpload } from './components/AFileUpload';\nimport { AStepper } from './components/AStepper';\nimport { ATimeline } from './components/ATimeline';\nimport { AChartFrame } from './components/AChartFrame';\n\nexport const components = [\n AButton,\n AInput,\n AFormField,\n ASelect,\n ACheckbox,\n ARadio,\n ASwitch,\n ASegmented,\n ASlider,\n AModal,\n AToast,\n AToastHost,\n ATable,\n ABadge,\n ATag,\n AStatusPill,\n ACard,\n ASpinner,\n AIcon,\n AAlert,\n AProgress,\n ASkeleton,\n ATabs,\n ABreadcrumbs,\n APagination,\n AAvatar,\n AAvatarGroup,\n AEmptyState,\n AKpiCard,\n ATooltip,\n ASidebarNav,\n ANumberInput,\n ADrawer,\n AAccordion,\n APopover,\n ABanner,\n AFileUpload,\n AStepper,\n ATimeline,\n AChartFrame\n] as const;\n\nexport const AinorixUI: Plugin = {\n install(app: App) {\n components.forEach((component) => {\n if (component.name) app.component(component.name, component);\n });\n app.directive('a-focus', vAFocus);\n }\n};\n\nexport default AinorixUI;\n","import { ref } from 'vue';\n\nexport function useDisclosure(initialOpen = false) {\n const isOpen = ref(initialOpen);\n const open = () => {\n isOpen.value = true;\n };\n const close = () => {\n isOpen.value = false;\n };\n const toggle = () => {\n isOpen.value = !isOpen.value;\n };\n\n return { isOpen, open, close, toggle };\n}\n","import { ref } from 'vue';\nimport type { ADensity } from '../tokens';\n\nconst storageKey = 'ainorix-density';\nconst density = ref<ADensity>('comfortable');\nlet initialized = false;\n\nfunction getInitialDensity(): ADensity {\n if (typeof window === 'undefined') return 'comfortable';\n const stored = window.localStorage.getItem(storageKey);\n return stored === 'compact' || stored === 'comfortable' ? stored : 'comfortable';\n}\n\nfunction applyDensity(value: ADensity) {\n if (typeof document === 'undefined') return;\n document.documentElement.dataset.density = value;\n}\n\nfunction ensureInitialized() {\n if (initialized) return;\n density.value = getInitialDensity();\n applyDensity(density.value);\n initialized = true;\n}\n\nexport function useDensity() {\n ensureInitialized();\n function set(value: ADensity) {\n density.value = value;\n applyDensity(value);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(storageKey, value);\n }\n }\n\n return { density, set };\n}\n","import { computed, ref } from 'vue';\nimport type { ATheme } from '../tokens';\n\nconst storageKey = 'ainorix-theme';\nconst theme = ref<ATheme>('light');\nlet initialized = false;\n\nfunction getInitialTheme(): ATheme {\n if (typeof window === 'undefined') return 'light';\n const stored = window.localStorage.getItem(storageKey);\n if (stored === 'light' || stored === 'dark') return stored;\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nfunction applyTheme(value: ATheme) {\n if (typeof document === 'undefined') return;\n document.documentElement.classList.toggle('dark', value === 'dark');\n}\n\nfunction ensureInitialized() {\n if (initialized) return;\n theme.value = getInitialTheme();\n applyTheme(theme.value);\n initialized = true;\n}\n\nexport function useTheme() {\n ensureInitialized();\n const isDark = computed(() => theme.value === 'dark');\n\n function set(value: ATheme) {\n theme.value = value;\n applyTheme(value);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(storageKey, value);\n }\n }\n\n function toggle() {\n set(theme.value === 'dark' ? 'light' : 'dark');\n }\n\n return { theme, isDark, set, toggle };\n}\n","import { h } from 'vue';\n\nexport const CheckIcon = {\n name: 'CheckIcon',\n render() {\n return h('svg', { viewBox: '0 0 20 20', fill: 'none', 'aria-hidden': 'true' }, [\n h('path', {\n d: 'M16.25 5.75 8.5 13.5 4.75 9.75',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round'\n })\n ]);\n }\n};\n","export interface AChartTheme {\n accent: string;\n text: string;\n muted: string;\n grid: string;\n surface: string;\n}\n\nexport function getChartTheme(root?: Element): AChartTheme {\n const target = root ?? (typeof document !== 'undefined' ? document.documentElement : null);\n if (!target) {\n return {\n accent: '',\n text: '',\n muted: '',\n grid: '',\n surface: ''\n };\n }\n const styles = getComputedStyle(target);\n const read = (name: string) => styles.getPropertyValue(name).trim();\n return {\n accent: read('--accent'),\n text: read('--text-primary'),\n muted: read('--text-tertiary'),\n grid: read('--chart-grid'),\n surface: read('--bg-surface')\n };\n}\n","let idCounter = 0;\n\nexport function createAId(prefix = 'a'): string {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n"],"names":["vAFocus","el","binding","_createElementBlock","__props","_createElementVNode","_hoisted_2","_toDisplayString","props","emit","__emit","slots","useSlots","iconOnly","computed","_cache","$event","_createBlock","ASpinner","_renderSlot","_ctx","hasError","errorMessage","_hoisted_3","_unref","_openBlock","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_1","_createTextVNode","_hoisted_5","uid","triggerId","labelId","listboxId","rootRef","ref","triggerRef","panelRef","searchRef","open","query","activeIndex","panelStyle","isSearchable","selectedOption","option","filteredOptions","value","activeOptionId","optionId","index","syncPanelPosition","rect","_a","show","nextTick","close","focusTrigger","toggle","selectOption","move","delta","available","next","i","chooseActive","onTriggerKeydown","event","onMenuKeydown","onSearchKeydown","onDocumentPointerDown","target","_b","onWindowChange","watch","onBeforeUnmount","_Teleport","_Fragment","_renderList","_withModifiers","_hoisted_8","_hoisted_9","_hoisted_11","_hoisted_12","inputRef","syncIndeterminate","onMounted","$slots","previousActiveElement","focusableSelector","getFocusableElements","element","focusModal","first","onBackdrop","onKeydown","focusable","last","item","toasts","timers","toastId","schedule","id","duration","clear","dismiss","timer","push","status","title","options","toast","pause","resume","useToast","readonly","pageCount","start","end","_normalizeStyle","searchValue","effectiveTotal","showFooter","selectedSet","visibleKeys","row","getRowKey","allVisibleSelected","key","someVisibleSelected","footerText","isSelected","toggleRow","toggleAll","toggleSort","column","_createVNode","AInput","AButton","ACheckbox","_hoisted_10","ASkeleton","rowIndex","_hoisted_14","_hoisted_16","_hoisted_17","APagination","resolvedTone","ABadge","paths","path","AIcon","normalized","tabRefs","setTabRef","focusSibling","nextIndex","tab","_withKeys","initials","part","visibleItems","overflow","AAvatar","_mergeProps","ACard","group","groupIndex","clamp","set","change","openKeys","bodyId","onDoc","e","visible","dragging","resolvedHint","send","list","onInput","onDrop","state","step","components","AFormField","ASelect","ARadio","ASwitch","ASegmented","ASlider","AModal","AToast","AToastHost","ATable","ATag","AStatusPill","AAlert","AProgress","ATabs","ABreadcrumbs","AAvatarGroup","AEmptyState","AKpiCard","ATooltip","ASidebarNav","ANumberInput","ADrawer","AAccordion","APopover","ABanner","AFileUpload","AStepper","ATimeline","AChartFrame","AinorixUI","app","component","useDisclosure","initialOpen","isOpen","storageKey","density","initialized","getInitialDensity","stored","applyDensity","ensureInitialized","useDensity","theme","getInitialTheme","applyTheme","useTheme","isDark","CheckIcon","h","getChartTheme","root","styles","read","name","idCounter","createAId","prefix"],"mappings":"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"}