@astryx-vue/core 0.2.2 → 0.2.3

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 (253) hide show
  1. package/THIRD_PARTY_NOTICES.md +2 -0
  2. package/dist/AppShell/index.d.ts +1 -1
  3. package/dist/AppShell/index.js +1 -1
  4. package/dist/{AppShell-Cb41gIAj.js → AppShell-Dd-D4bA2.js} +2 -2
  5. package/dist/AvatarGroup/index.d.ts +1 -1
  6. package/dist/Banner/index.d.ts +1 -1
  7. package/dist/Breadcrumbs/index.d.ts +3 -2
  8. package/dist/Breadcrumbs/index.js +3 -2
  9. package/dist/{Breadcrumbs-CTQ7fjDn.js → Breadcrumbs-CWGfgLNK.js} +13 -8
  10. package/dist/Button/index.d.ts +1 -1
  11. package/dist/ButtonGroup/index.d.ts +1 -1
  12. package/dist/Calendar/index.d.ts +2 -2
  13. package/dist/Calendar/index.js +1 -1
  14. package/dist/Calendar-CnOsSjMY.js +656 -0
  15. package/dist/Card/index.d.ts +1 -1
  16. package/dist/Carousel/index.js +1 -1
  17. package/dist/{Carousel-X0cuQkvg.js → Carousel-JA7ilqI_.js} +2 -2
  18. package/dist/Chat/index.d.ts +1 -1
  19. package/dist/Chat/index.js +1 -1
  20. package/dist/{Chat-M0tiGrNT.js → Chat-C7WrCOE4.js} +3 -3
  21. package/dist/CheckboxIndicator/index.js +1 -1
  22. package/dist/CheckboxIndicator-D37cm2Rh.js +68 -0
  23. package/dist/CheckboxInput/index.d.ts +1 -1
  24. package/dist/CheckboxInput/index.js +1 -1
  25. package/dist/{CheckboxInput-CMsEE1_4.js → CheckboxInput-25Q8ItH-.js} +10 -9
  26. package/dist/CheckboxList/index.d.ts +1 -1
  27. package/dist/CheckboxList/index.js +1 -1
  28. package/dist/{CheckboxList-BbCPiend.js → CheckboxList-CnCGnkZk.js} +77 -24
  29. package/dist/Citation/index.js +1 -1
  30. package/dist/{Citation-C1veUk5p.js → Citation-CtwrU33I.js} +2 -2
  31. package/dist/ClickableCard/index.d.ts +1 -1
  32. package/dist/Code/index.d.ts +1 -1
  33. package/dist/Code/index.js +2 -2
  34. package/dist/{Code-yb_KOFtJ.js → Code-BvefYRpx.js} +2 -1
  35. package/dist/{CodeBlock-DesTJAkm.js → CodeBlock-BZGzYeoL.js} +1 -1
  36. package/dist/Collapsible/index.d.ts +1 -1
  37. package/dist/Collapsible/index.js +1 -1
  38. package/dist/{Collapsible-BestK35V.js → Collapsible-3YerR-FO.js} +1 -1
  39. package/dist/CommandPalette/index.js +1 -1
  40. package/dist/{CommandPalette-BArt97V8.js → CommandPalette-BNbM9T9y.js} +1 -1
  41. package/dist/ComplexSelector/index.d.ts +1 -1
  42. package/dist/ComplexSelector/index.js +1 -1
  43. package/dist/{ComplexSelector-CAoig1RK.js → ComplexSelector-LtbLlrcj.js} +3 -3
  44. package/dist/ContextMenu/index.d.ts +3 -2
  45. package/dist/ContextMenu/index.js +3 -2
  46. package/dist/{ContextMenu-9Im6i43E.js → ContextMenu-DVQl0xL5.js} +204 -56
  47. package/dist/DateInput/index.d.ts +2 -2
  48. package/dist/DateInput/index.js +1 -1
  49. package/dist/DateInput-zm8sNc0t.js +743 -0
  50. package/dist/DateRangeInput/index.d.ts +1 -1
  51. package/dist/DateRangeInput/index.js +1 -1
  52. package/dist/{DateRangeInput-DwDy3eRo.js → DateRangeInput-DlVFzrf7.js} +54 -19
  53. package/dist/DateTimeInput/index.d.ts +1 -1
  54. package/dist/DateTimeInput/index.js +1 -1
  55. package/dist/{DateTimeInput-BYiaC9bn.js → DateTimeInput-C7Z-p6Yd.js} +54 -15
  56. package/dist/Dialog/index.d.ts +1 -1
  57. package/dist/DropdownMenu/index.d.ts +3 -3
  58. package/dist/DropdownMenu/index.js +4 -3
  59. package/dist/{DropdownMenu-Dh-WAHKb.js → DropdownMenu-BoZChdev.js} +308 -63
  60. package/dist/DropdownMenu-u1psFjis.js +325 -0
  61. package/dist/DropdownMenuRadioItem.vue-uVM0FD2f.d.ts +564 -0
  62. package/dist/FileInput/index.d.ts +1 -1
  63. package/dist/FileInput/index.js +1 -1
  64. package/dist/{FileInput-DLO6V12n.js → FileInput-QdlZn7qK.js} +2 -2
  65. package/dist/Icon/index.d.ts +4 -3
  66. package/dist/Icon/index.js +2 -2
  67. package/dist/{Icon-CJKjdJy-.js → Icon-bteSId7T.js} +113 -18
  68. package/dist/Indicator/index.d.ts +3 -0
  69. package/dist/Indicator/index.js +2 -0
  70. package/dist/InputGroup/index.d.ts +2 -2
  71. package/dist/InputGroup/index.js +3 -2
  72. package/dist/InputGroup-BzR6JRZb.js +129 -0
  73. package/dist/Lightbox/index.js +1 -1
  74. package/dist/{Lightbox-CdFCS_EA.js → Lightbox-BSzfqZ-u.js} +2 -2
  75. package/dist/List/index.d.ts +1 -1
  76. package/dist/Markdown/index.js +1 -1
  77. package/dist/{Markdown-BqKloI3w.js → Markdown-B6tSqenv.js} +8 -5
  78. package/dist/MetadataList/index.js +1 -1
  79. package/dist/{MetadataList-CvZkmisf.js → MetadataList-aN1tRn6W.js} +1 -1
  80. package/dist/MobileNav/index.js +1 -1
  81. package/dist/{MobileNavToggle-Bwi0qXXM.js → MobileNavToggle-fqcSafkc.js} +1 -1
  82. package/dist/MoreMenu/index.d.ts +1 -1
  83. package/dist/MoreMenu/index.js +1 -1
  84. package/dist/{MoreMenu-BwJaJrkB.js → MoreMenu-B3brqdK_.js} +1 -1
  85. package/dist/MultiSelector/index.d.ts +2 -2
  86. package/dist/MultiSelector/index.js +1 -1
  87. package/dist/{MultiSelector-C-ETfFy_.js → MultiSelector-BD5PMgez.js} +303 -121
  88. package/dist/{NavDisclosure-DHrSNRDR.js → NavDisclosure-DbYLDXK0.js} +1 -1
  89. package/dist/NavItem/index.d.ts +1 -1
  90. package/dist/NavMenu/index.js +2 -2
  91. package/dist/{NavMenuItem-B-k7olt5.js → NavMenuItem-DrwIMHKO.js} +1 -1
  92. package/dist/NumberInput/index.d.ts +1 -1
  93. package/dist/NumberInput/index.js +1 -1
  94. package/dist/{NumberInput-DjetVB8O.js → NumberInput-CBeU4lEl.js} +1 -1
  95. package/dist/Outline/index.js +1 -1
  96. package/dist/{Outline-Bz9c-u5y.js → Outline--HVMSB6i.js} +1 -1
  97. package/dist/OverflowList/index.d.ts +1 -1
  98. package/dist/OverflowList/index.js +1 -1
  99. package/dist/{OverflowList-ED-KN9Y5.js → OverflowList-FMh7r-r_.js} +3 -3
  100. package/dist/Pagination/index.d.ts +1 -1
  101. package/dist/Pagination/index.js +1 -1
  102. package/dist/{Pagination-Cb66HMEf.js → Pagination-DlIvESjx.js} +2 -2
  103. package/dist/Popover/index.d.ts +1 -1
  104. package/dist/Popover/index.js +1 -1
  105. package/dist/{Popover-Crhk9PNP.js → Popover-D7zqpFwU.js} +1 -1
  106. package/dist/PowerSearch/index.d.ts +1 -1
  107. package/dist/PowerSearch/index.js +1 -1
  108. package/dist/{PowerSearch-CjU8y4mi.js → PowerSearch-CMG7Rb69.js} +14 -14
  109. package/dist/ProgressBar/index.d.ts +1 -1
  110. package/dist/Radio/index.d.ts +1 -1
  111. package/dist/Radio/index.js +1 -1
  112. package/dist/{RadioGroup-BqjdSCfJ.js → RadioGroup-CBqUPq_L.js} +16 -8
  113. package/dist/RadioList/index.d.ts +1 -1
  114. package/dist/RadioList/index.js +1 -1
  115. package/dist/{RadioList-DI8ujXcT.js → RadioList-CPOJn9Th.js} +1 -1
  116. package/dist/Resizable/index.js +1 -1
  117. package/dist/{Resizable-D-TBCg0Y.js → Resizable-CXpvj1TZ.js} +1 -1
  118. package/dist/ScrollableArea/index.d.ts +1 -1
  119. package/dist/SegmentedControl/index.d.ts +1 -1
  120. package/dist/SelectableCard/index.d.ts +1 -1
  121. package/dist/Selector/index.d.ts +2 -2
  122. package/dist/Selector/index.js +1 -1
  123. package/dist/Selector-BpPnuWH3.js +618 -0
  124. package/dist/SideNav/index.d.ts +1 -1
  125. package/dist/SideNav/index.js +1 -1
  126. package/dist/{SideNav-DonEfiAx.js → SideNav-D4TupqgE.js} +3 -3
  127. package/dist/Stack/index.d.ts +1 -1
  128. package/dist/Stepper/index.d.ts +1 -1
  129. package/dist/Stepper/index.js +1 -1
  130. package/dist/{Stepper-D2ZIcUNx.js → Stepper-H-6-T5Ps.js} +1 -1
  131. package/dist/Switch/index.d.ts +1 -1
  132. package/dist/TabList/index.d.ts +1 -1
  133. package/dist/TabList/index.js +1 -1
  134. package/dist/{TabList-D3F-stq-.js → TabList-BlzkrObv.js} +2 -2
  135. package/dist/Table/index.js +1 -1
  136. package/dist/{Table-CrP2Uffq.js → Table-nqA_njNz.js} +6 -6
  137. package/dist/TextArea/index.d.ts +1 -1
  138. package/dist/TextInput/index.d.ts +1 -1
  139. package/dist/Theme/index.d.ts +2 -1
  140. package/dist/Theme/index.js +1 -1
  141. package/dist/{Theme-BuUiiJNr.js → Theme-CejS9MHm.js} +21 -3
  142. package/dist/Thumbnail/index.js +1 -1
  143. package/dist/{Thumbnail-BC5JGPGZ.js → Thumbnail-CXb3m_Hv.js} +2 -2
  144. package/dist/{TimeField-DpHFrNv0.js → TimeField-B3cndWb0.js} +2 -2
  145. package/dist/TimeInput/index.d.ts +1 -1
  146. package/dist/TimeInput/index.js +1 -1
  147. package/dist/{TimeInput-DJLV0_4z.js → TimeInput-BHQ_LKGm.js} +1 -1
  148. package/dist/Timestamp/index.d.ts +1 -1
  149. package/dist/Timestamp/index.js +1 -1
  150. package/dist/{Timestamp-GKNjjt5g.js → Timestamp-Cfuxbb3i.js} +2 -2
  151. package/dist/ToggleButton/index.d.ts +1 -1
  152. package/dist/Token/index.d.ts +1 -1
  153. package/dist/Token/index.js +1 -1
  154. package/dist/{Token-Chu_eCVs.js → Token-CdVLH0_H.js} +2 -2
  155. package/dist/Tokenizer/index.d.ts +1 -1
  156. package/dist/Tokenizer/index.js +1 -1
  157. package/dist/{Tokenizer-DRDpvQ_l.js → Tokenizer-DlD-S_8-.js} +3 -3
  158. package/dist/Toolbar/index.d.ts +1 -1
  159. package/dist/TopNav/index.d.ts +1 -1
  160. package/dist/TopNav/index.js +1 -1
  161. package/dist/{TopNav-CEyWddtA.js → TopNav-DzV874G7.js} +5 -5
  162. package/dist/TreeList/index.js +1 -1
  163. package/dist/{TreeList-COS8US8e.js → TreeList-DEwvlZRV.js} +2 -2
  164. package/dist/Typeahead/index.d.ts +1 -1
  165. package/dist/Typeahead/index.js +1 -1
  166. package/dist/{Typeahead-P7cCqtaQ.js → Typeahead-DQ3tmqYe.js} +3 -3
  167. package/dist/{context-O2Vb8cJl.js → colorMode-CBgdgDSn.js} +1 -7
  168. package/dist/composables/index.d.ts +2 -2
  169. package/dist/composables/index.js +10 -5
  170. package/dist/{composables-CVfjp9h4.js → composables-DDI08XFF.js} +98 -1
  171. package/dist/context-Cws_tXTr.js +7 -0
  172. package/dist/context-D5-MwxnN.js +4 -0
  173. package/dist/{context-CiKncNSH.js → context-DmOLCubj.js} +82 -8
  174. package/dist/{index-DimuSES0.d.ts → index-B1x05arQ.d.ts} +3 -1
  175. package/dist/index-B9f1rUEv.d.ts +77 -0
  176. package/dist/{index-D-ZuubCK.d.ts → index-BB5yVIN-.d.ts} +2 -2
  177. package/dist/{index-Bu0Zd1uw.d.ts → index-BMn9ghAX.d.ts} +3 -3
  178. package/dist/{index-CJlBAXwj.d.ts → index-BRfR0lhb.d.ts} +41 -4
  179. package/dist/{index-DNRBbwp_.d.ts → index-BTAgQRP0.d.ts} +758 -111
  180. package/dist/{index-DA52oIdw.d.ts → index-BcJBLWJ0.d.ts} +2 -2
  181. package/dist/{index-jdjcb3Js.d.ts → index-Bqb_Fyju.d.ts} +2 -2
  182. package/dist/{index-CNjbOgty.d.ts → index-C-QpeUlQ.d.ts} +2 -2
  183. package/dist/{index-DGXviOlp.d.ts → index-C2sfHfBw.d.ts} +31 -5
  184. package/dist/{index-By2mSzUA.d.ts → index-CA6RbRWx.d.ts} +1 -1
  185. package/dist/{index-gW0HW02U.d.ts → index-COxy6LEW.d.ts} +1 -1
  186. package/dist/{index-CVn0GBdB.d.ts → index-Ca8VIE4l.d.ts} +1 -1
  187. package/dist/{index-CRizexSC.d.ts → index-Ch6BbxCP.d.ts} +2 -67
  188. package/dist/{index-DWH_HzXi.d.ts → index-ChWlKHjc.d.ts} +1 -1
  189. package/dist/{index-kVhSuA9t.d.ts → index-Ctu32CLv.d.ts} +4 -4
  190. package/dist/{index-DOUEn7V0.d.ts → index-D1Twv_fL.d.ts} +65 -6
  191. package/dist/{index-D_nYxnNv.d.ts → index-D7-WTV6I.d.ts} +1 -1
  192. package/dist/{index-c_TaW8mM.d.ts → index-D8o50qOE.d.ts} +1 -1
  193. package/dist/{index-D4I_obqR.d.ts → index-DAiGhkNZ.d.ts} +1 -1
  194. package/dist/{index-Cs5pcwY3.d.ts → index-DMQG6kdM.d.ts} +3 -3
  195. package/dist/index-D_UEJIU5.d.ts +83 -0
  196. package/dist/{index-fa72tWIU.d.ts → index-DkVEBdWa.d.ts} +2 -2
  197. package/dist/{index-B1TG2GPS.d.ts → index-DxsKyAxq.d.ts} +116 -44
  198. package/dist/{index-BHqRH7QW.d.ts → index-FEy8qFSD.d.ts} +2 -2
  199. package/dist/{index-qiZtHnGK.d.ts → index-LIyvJTW3.d.ts} +39 -0
  200. package/dist/{index-BKr7yvVv.d.ts → index-MPcg1Pm4.d.ts} +1 -1
  201. package/dist/{index-cGagYM1g.d.ts → index-ViSV0RBx.d.ts} +1 -1
  202. package/dist/{index-C7mxUcDR.d.ts → index-f4NGT-e2.d.ts} +4 -4
  203. package/dist/{index-DsyKhauk.d.ts → index-foQMNKZO.d.ts} +1 -1
  204. package/dist/{index-u5ozu0G7.d.ts → index-vP0EtrJJ.d.ts} +13 -3
  205. package/dist/{index-CZeoAr0a.d.ts → index-xfkEuGLY.d.ts} +2 -2
  206. package/dist/index.d.ts +76 -75
  207. package/dist/index.js +115 -107
  208. package/dist/locale/index.d.ts +1 -1
  209. package/dist/locale/index.js +2 -2
  210. package/dist/{locale-Cpk_nrLA.js → locale-CCwVnyMZ.js} +25 -1
  211. package/dist/searchResultMessage-DN0HeRRB.js +94 -0
  212. package/dist/semantic-CKH9XVqa.d.ts +54 -0
  213. package/dist/{types-pnljWjEE.d.ts → types-CwyibrRB.d.ts} +12 -11
  214. package/dist/types-jmqqnkKA.d.ts +163 -0
  215. package/dist/{useAnchoredListbox-7W90Ny-9.js → useAnchoredListbox-BN9LQnon.js} +1 -1
  216. package/dist/useDatePresentation-C07PnOCw.js +21 -0
  217. package/dist/{useMonthGrid-CmJsZTcB.js → useDateRange-CIXoE_8k.js} +1 -42
  218. package/dist/useDisclosureHandle-Df3HhAfC.js +24 -0
  219. package/dist/{useDismiss-CAiHU6QD.js → useDismiss-Cj8x_51F.js} +8 -4
  220. package/dist/useFieldControlState-voICDrys.js +18 -0
  221. package/dist/useHandleRef-6cdKugm8.js +17 -0
  222. package/dist/useIndicator-i1NORM7W.js +147 -0
  223. package/dist/useMenuDrillIn-OaEwjK44.js +520 -0
  224. package/dist/useMonthGrid-fGHSSrFc.js +43 -0
  225. package/dist/usePendingChange-ib-h8FZK.js +25 -0
  226. package/dist/useSubmenuMode-CZN9qrUo.js +37 -0
  227. package/package.json +5 -1
  228. package/styles/calendar.css +38 -3
  229. package/styles/check-indicator.css +17 -0
  230. package/styles/checkbox-indicator.css +29 -10
  231. package/styles/checkbox-input.css +0 -11
  232. package/styles/date-input.css +48 -0
  233. package/styles/dropdown-menu.css +163 -0
  234. package/styles/field.css +48 -0
  235. package/styles/icon.css +51 -3
  236. package/styles/input-group.css +32 -3
  237. package/styles/multi-selector.css +26 -0
  238. package/styles/radio-indicator.css +90 -0
  239. package/styles/radio.css +9 -42
  240. package/styles/selector.css +112 -14
  241. package/styles.css +2 -0
  242. package/dist/Calendar-BFaI5AMv.js +0 -352
  243. package/dist/CheckboxIndicator-DdJmksHt.js +0 -52
  244. package/dist/DateInput-BLocxqC3.js +0 -376
  245. package/dist/DropdownMenu-Ddfr-aEC.js +0 -164
  246. package/dist/InputGroup-ChrFVxzV.js +0 -42
  247. package/dist/Selector-DE2IEFML.js +0 -468
  248. package/dist/index-Bgv4ZmBl.d.ts +0 -72
  249. package/dist/index-DN7MXPHM.d.ts +0 -398
  250. package/dist/index-IbUN4M8V.d.ts +0 -40
  251. package/dist/types-DDAAT1Xd.d.ts +0 -285
  252. package/dist/useGridRovingFocus-DQQAOYH5.js +0 -99
  253. /package/dist/{index-BUXNRekN.d.ts → index-BXkNZF3q.d.ts} +0 -0
@@ -0,0 +1,163 @@
1
+ import { n as SyntaxThemeDefinition } from "./syntaxTheme-Bcs1YMF7.js";
2
+ import { t as SemanticIconMap } from "./semantic-CKH9XVqa.js";
3
+ import { Component } from "vue";
4
+ //#region src/Indicator/types.d.ts
5
+ /**
6
+ * Each family owns its own states.
7
+ *
8
+ * A radio is only chosen or not. A checkbox can also be partial. Keeping the
9
+ * families apart means a radio graphic is never asked to draw a mixed state.
10
+ */
11
+ interface IndicatorFamilyMap {
12
+ singleSelection: 'unchecked' | 'checked';
13
+ multiSelection: 'unchecked' | 'checked' | 'indeterminate';
14
+ }
15
+ type IndicatorFamily = keyof IndicatorFamilyMap & string;
16
+ type IndicatorState<F extends IndicatorFamily = IndicatorFamily> = IndicatorFamilyMap[F];
17
+ /** Matches the control sizes of the inputs that draw these graphics. */
18
+ type IndicatorSize = 'sm' | 'md';
19
+ /**
20
+ * Which edge of a row the mark sits on.
21
+ *
22
+ * Logical, not physical: start is the left edge in left-to-right text.
23
+ * The row decides this. The graphic itself has no position.
24
+ */
25
+ type IndicatorPosition = 'start' | 'end';
26
+ /**
27
+ * Props every indicator accepts.
28
+ *
29
+ * The graphic is decorative. The control that draws it keeps the input, the
30
+ * role, the accessible name, and the keyboard. Hover and focus reach the
31
+ * graphic through the `astryx-indicator-scope` class on that control, not
32
+ * through a prop.
33
+ */
34
+ interface IndicatorProps<F extends IndicatorFamily = IndicatorFamily> {
35
+ /** Which state to draw. The family decides which states exist. */
36
+ state: IndicatorState<F>;
37
+ /**
38
+ * Control size. `sm` is 20px and `md` is 24px.
39
+ * @default 'md'
40
+ */
41
+ size?: IndicatorSize;
42
+ /**
43
+ * Whether the owning control is disabled. Visual only.
44
+ * @default false
45
+ */
46
+ isDisabled?: boolean;
47
+ }
48
+ /** A component that can stand in for one indicator name. */
49
+ type IndicatorComponent<F extends IndicatorFamily = IndicatorFamily> = Component<IndicatorProps<F>>;
50
+ /**
51
+ * Names a theme can replace.
52
+ *
53
+ * Packages can add names by augmenting this interface. Core has no default
54
+ * for a name it does not know, so `getIndicator` returns undefined for those
55
+ * and the caller supplies the fallback.
56
+ */
57
+ interface IndicatorMap {
58
+ /** The mark on a chosen option. A check by default, and nothing when unchosen. */
59
+ check: 'singleSelection';
60
+ /** The circle of a radio. */
61
+ radio: 'singleSelection';
62
+ /** The box of a checkbox, including the partial state. */
63
+ checkbox: 'multiSelection';
64
+ }
65
+ type IndicatorName = keyof IndicatorMap & string;
66
+ type CoreIndicatorName = 'check' | 'checkbox' | 'radio';
67
+ /**
68
+ * Theme overrides, keyed by indicator name.
69
+ *
70
+ * One entry replaces that graphic everywhere it is drawn. Mapping `check` to
71
+ * the radio graphic turns every single-selection mark into a radio.
72
+ */
73
+ interface IndicatorRegistry {
74
+ check?: IndicatorComponent<'singleSelection'>;
75
+ radio?: IndicatorComponent<'singleSelection'>;
76
+ checkbox?: IndicatorComponent<'multiSelection'>;
77
+ [name: string]: Component | undefined;
78
+ }
79
+ //#endregion
80
+ //#region src/Theme/types.d.ts
81
+ /** Color mode for a theme subtree. `system` follows the page and the OS. */
82
+ type ThemeMode = 'light' | 'dark' | 'system';
83
+ /**
84
+ * A token value.
85
+ *
86
+ * A string is used as written. A two-item tuple is the light stop, then the
87
+ * dark stop, and becomes `light-dark()`.
88
+ */
89
+ type ThemeTokenValue = string | readonly [string, string];
90
+ /** CSS custom properties for a theme. Keys may omit the `--astryx-` prefix. */
91
+ type ThemeTokens = Record<string, ThemeTokenValue>;
92
+ /** Token overrides for one inverted surface. */
93
+ interface ThemeSurfaceInput {
94
+ tokens?: ThemeTokens;
95
+ }
96
+ interface DefineThemeInput {
97
+ /** Theme name. Used as `data-astryx-theme`. */
98
+ name: string;
99
+ /** Semantic token overrides for this theme. */
100
+ tokens?: ThemeTokens;
101
+ /** Another theme to start from. This theme's own values win. */
102
+ extends?: ThemeDefinition;
103
+ /** Syntax colors for code in this subtree, unless a SyntaxTheme is closer. */
104
+ syntax?: SyntaxThemeDefinition;
105
+ /** Extra tokens for content on a dark surface. */
106
+ onDark?: ThemeSurfaceInput;
107
+ /** Extra tokens for content on a light surface. */
108
+ onLight?: ThemeSurfaceInput;
109
+ /**
110
+ * Semantic icon name to Iconify id.
111
+ *
112
+ * Entries replace the built-in map by name and merge with the theme this
113
+ * one extends. A name that is not listed keeps the built-in id.
114
+ */
115
+ icons?: SemanticIconMap;
116
+ /**
117
+ * Indicator graphics, replaced by name.
118
+ *
119
+ * One entry reaches every control that draws that indicator. Entries merge
120
+ * with the theme this one extends.
121
+ */
122
+ indicators?: IndicatorRegistry;
123
+ }
124
+ interface ThemeDefinition {
125
+ name: string;
126
+ /** Token values already written as CSS. */
127
+ tokens: Readonly<Record<string, string>>;
128
+ /** Extra tokens applied by MediaTheme when the surface is dark. */
129
+ onDark: Readonly<Record<string, string>>;
130
+ /** Extra tokens applied by MediaTheme when the surface is light. */
131
+ onLight: Readonly<Record<string, string>>;
132
+ syntax?: SyntaxThemeDefinition;
133
+ /** Semantic icon overrides. Absent when this theme does not set any. */
134
+ icons?: SemanticIconMap;
135
+ /** Indicator overrides. Absent when this theme does not set any. */
136
+ indicators?: IndicatorRegistry;
137
+ readonly __astryxTheme: true;
138
+ }
139
+ interface ThemeProps {
140
+ /** Theme from `defineTheme()`. */
141
+ theme: ThemeDefinition;
142
+ /**
143
+ * Color mode for this subtree.
144
+ * @default 'system'
145
+ */
146
+ mode?: ThemeMode;
147
+ }
148
+ /** Surface luminance, `auto` to measure it, or `off` to leave the page theme. */
149
+ type MediaThemeMode = 'dark' | 'light' | 'auto' | 'off';
150
+ interface MediaThemeProps {
151
+ /**
152
+ * Which surface the children sit on.
153
+ * `auto` measures the parent. `off` keeps the surrounding theme.
154
+ */
155
+ mode: MediaThemeMode;
156
+ /**
157
+ * Side used by `auto` before the surface can be measured, and when it cannot.
158
+ * @default 'dark'
159
+ */
160
+ fallback?: 'dark' | 'light';
161
+ }
162
+ //#endregion
163
+ export { IndicatorProps as _, ThemeMode as a, IndicatorState as b, ThemeTokenValue as c, IndicatorComponent as d, IndicatorFamily as f, IndicatorPosition as g, IndicatorName as h, ThemeDefinition as i, ThemeTokens as l, IndicatorMap as m, MediaThemeMode as n, ThemeProps as o, IndicatorFamilyMap as p, MediaThemeProps as r, ThemeSurfaceInput as s, DefineThemeInput as t, CoreIndicatorName as u, IndicatorRegistry as v, IndicatorSize as y };
@@ -1,4 +1,4 @@
1
- import { t as useDismiss } from "./useDismiss-CAiHU6QD.js";
1
+ import { t as useDismiss } from "./useDismiss-Cj8x_51F.js";
2
2
  import { t as usePositionedLayer } from "./usePositionedLayer-C1NBOsVT.js";
3
3
  import { computed, onMounted, ref, watch } from "vue";
4
4
  //#region src/Typeahead/useAnchoredListbox.ts
@@ -0,0 +1,21 @@
1
+ //#region src/composables/useDatePresentation.ts
2
+ /**
3
+ * `presentation` wins over the older native picker name.
4
+ * With neither set, a mouse gets the calendar popover and a coarse pointer gets the system date control.
5
+ */
6
+ function resolveDatePresentation(presentation, nativePicker) {
7
+ if (presentation) return presentation;
8
+ if (nativePicker === "always") return "native";
9
+ if (nativePicker === "never") return "adaptive-bottom-sheet";
10
+ if (nativePicker === "touch") return "adaptive-native";
11
+ return "adaptive-native";
12
+ }
13
+ function resolveDateSurface(presentation, coarse) {
14
+ if (presentation === "popover") return "popover";
15
+ if (presentation === "bottom-sheet") return "sheet";
16
+ if (presentation === "native") return "native";
17
+ if (presentation === "adaptive-bottom-sheet") return coarse ? "sheet" : "popover";
18
+ return coarse ? "native" : "popover";
19
+ }
20
+ //#endregion
21
+ export { resolveDateSurface as n, resolveDatePresentation as t };
@@ -1,4 +1,3 @@
1
- import { CalendarDate } from "@internationalized/date";
2
1
  //#region src/composables/useDateRange.ts
3
2
  const WEEKDAY_INDEX = {
4
3
  sun: 0,
@@ -96,44 +95,4 @@ function formatDateRange(range, locale) {
96
95
  return `${format(range.start)} – ${format(range.end)}`;
97
96
  }
98
97
  //#endregion
99
- //#region src/composables/useMonthGrid.ts
100
- function toISODate(date) {
101
- const month = String(date.month).padStart(2, "0");
102
- const day = String(date.day).padStart(2, "0");
103
- return `${date.year}-${month}-${day}`;
104
- }
105
- function parseISODate(value) {
106
- const [year, month, day] = value.split("-").map(Number);
107
- return new CalendarDate(year, month, day);
108
- }
109
- function buildMonthGrid(year, month, weekStartsOn) {
110
- const first = new CalendarDate(year, month, 1);
111
- const start = resolveWeekStart(weekStartsOn);
112
- const offset = (first.toDate("UTC").getUTCDay() - start + 7) % 7;
113
- let cursor = first.subtract({ days: offset });
114
- const weeks = [];
115
- for (let week = 0; week < 6; week += 1) {
116
- const days = [];
117
- for (let day = 0; day < 7; day += 1) {
118
- days.push(toISODate(cursor));
119
- cursor = cursor.add({ days: 1 });
120
- }
121
- weeks.push(days);
122
- }
123
- return weeks;
124
- }
125
- function addMonths(year, month, amount) {
126
- const date = new CalendarDate(year, month, 1).add({ months: amount });
127
- return {
128
- year: date.year,
129
- month: date.month
130
- };
131
- }
132
- function todayISODate() {
133
- const now = /* @__PURE__ */ new Date();
134
- const month = String(now.getMonth() + 1).padStart(2, "0");
135
- const day = String(now.getDate()).padStart(2, "0");
136
- return `${now.getFullYear()}-${month}-${day}`;
137
- }
138
- //#endregion
139
- export { todayISODate as a, formatDateRange as c, isSameRange as d, orderRange as f, toISODate as i, isDayOutsideSpan as l, spanDays as m, buildMonthGrid as n, applyRangeClick as o, resolveWeekStart as p, parseISODate as r, compareISODate as s, addMonths as t, isRangeWithinSpan as u };
98
+ export { isRangeWithinSpan as a, resolveWeekStart as c, isDayOutsideSpan as i, spanDays as l, compareISODate as n, isSameRange as o, formatDateRange as r, orderRange as s, applyRangeClick as t };
@@ -0,0 +1,24 @@
1
+ import { onBeforeUnmount, watchEffect } from "vue";
2
+ //#region src/composables/useDisclosureHandle.ts
3
+ function publish(target, value) {
4
+ if (target == null) return;
5
+ if (typeof target === "function") target(value);
6
+ else target.value = value;
7
+ }
8
+ /**
9
+ * 把打开、关闭、切换和当前是否打开写到调用方持有的句柄上。
10
+ * 必须传入读取函数。句柄本身常常就是一个 ref,直接交给 Vue 的解包会拿到里面的 null。
11
+ * 句柄换掉时先把旧的清空,组件卸载时也清空。
12
+ */
13
+ function useDisclosureHandle(read, handle) {
14
+ let previous;
15
+ watchEffect(() => {
16
+ const target = read();
17
+ if (previous != null && previous !== target) publish(previous, null);
18
+ publish(target, handle);
19
+ previous = target;
20
+ });
21
+ onBeforeUnmount(() => publish(read(), null));
22
+ }
23
+ //#endregion
24
+ export { useDisclosureHandle as t };
@@ -13,6 +13,10 @@ const escapeStack = [];
13
13
  function useDismiss(options) {
14
14
  const { container, trigger, isEnabled, enableEscape = { value: true }, onDismiss } = options;
15
15
  let isAttached = false;
16
+ function dismissFromEscape() {
17
+ if (options.onEscape != null) options.onEscape();
18
+ else onDismiss();
19
+ }
16
20
  function onClickOutside(event) {
17
21
  if (!isEnabled.value) return;
18
22
  const el = container.value;
@@ -25,9 +29,9 @@ function useDismiss(options) {
25
29
  function onEscapeKey(event) {
26
30
  if (!isEnabled.value || !enableEscape.value) return;
27
31
  if (event.key === "Escape") {
28
- if (escapeStack[escapeStack.length - 1] === onDismiss) {
32
+ if (escapeStack[escapeStack.length - 1] === dismissFromEscape) {
29
33
  event.preventDefault();
30
- onDismiss();
34
+ dismissFromEscape();
31
35
  }
32
36
  }
33
37
  }
@@ -38,14 +42,14 @@ function useDismiss(options) {
38
42
  isAttached = true;
39
43
  document.addEventListener("pointerdown", onClickOutside, true);
40
44
  document.addEventListener("keydown", onEscapeKey, true);
41
- if (enableEscape.value) escapeStack.push(onDismiss);
45
+ if (enableEscape.value) escapeStack.push(dismissFromEscape);
42
46
  }
43
47
  function teardown() {
44
48
  if (typeof document === "undefined" || !isAttached) return;
45
49
  isAttached = false;
46
50
  document.removeEventListener("pointerdown", onClickOutside, true);
47
51
  document.removeEventListener("keydown", onEscapeKey, true);
48
- const index = escapeStack.indexOf(onDismiss);
52
+ const index = escapeStack.indexOf(dismissFromEscape);
49
53
  if (index !== -1) escapeStack.splice(index, 1);
50
54
  }
51
55
  watch(isEnabled, (enabled) => {
@@ -0,0 +1,18 @@
1
+ import { computed, toValue } from "vue";
2
+ //#region src/composables/useFieldControlState.ts
3
+ /**
4
+ * 选择器和复选列表共用的三种互斥状态。
5
+ * 同时标成禁用和只读时,按禁用处理。
6
+ */
7
+ function useFieldControlState(input) {
8
+ const isDisabled = computed(() => toValue(input.disabled) === true);
9
+ const isReadOnly = computed(() => toValue(input.readOnly) === true && !isDisabled.value);
10
+ return {
11
+ isDisabled,
12
+ isReadOnly,
13
+ isLoading: computed(() => toValue(input.loading) === true),
14
+ canActivate: computed(() => !isDisabled.value && !isReadOnly.value)
15
+ };
16
+ }
17
+ //#endregion
18
+ export { useFieldControlState as t };
@@ -0,0 +1,17 @@
1
+ import { onBeforeUnmount, watch } from "vue";
2
+ //#region src/composables/useHandleRef.ts
3
+ function publish(target, handle) {
4
+ if (target == null) return;
5
+ if (typeof target === "function") target(handle);
6
+ else target.value = handle;
7
+ }
8
+ /** Keeps an imperative handle on a ref or a callback, and clears it when the owner goes away. */
9
+ function useHandleRef(read, handle) {
10
+ watch(read, (_next, previous) => {
11
+ if (previous != null && previous !== read()) publish(previous, null);
12
+ publish(read(), handle);
13
+ }, { immediate: true });
14
+ onBeforeUnmount(() => publish(read(), null));
15
+ }
16
+ //#endregion
17
+ export { useHandleRef as t };
@@ -0,0 +1,147 @@
1
+ import { t as _sfc_main$2 } from "./Icon-bteSId7T.js";
2
+ import { n as themeContextKey } from "./context-Cws_tXTr.js";
3
+ import { n as decorativeAttrs, t as _sfc_main$3 } from "./CheckboxIndicator-D37cm2Rh.js";
4
+ import { Comment, Fragment, Text, computed, createBlock, createCommentVNode, createElementBlock, defineComponent, inject, mergeProps, openBlock, renderSlot, unref, useAttrs, useSlots, useTemplateRef } from "vue";
5
+ import "../styles/check-indicator.css";
6
+ import "../styles/radio-indicator.css";
7
+ //#region src/Indicator/isRenderable.ts
8
+ /**
9
+ * Whether a slot or vnode should replace an indicator's own mark.
10
+ *
11
+ * Null, undefined, booleans, and the empty string do not count. An element
12
+ * does, even when that element later renders nothing. A host writes
13
+ * `v-if="busy"` around a spinner, and `false` must not delete the mark.
14
+ */
15
+ function isRenderable(value) {
16
+ if (value == null || typeof value === "boolean" || value === "") return false;
17
+ if (Array.isArray(value)) return value.some((item) => isRenderable(item));
18
+ if (typeof value !== "object") return true;
19
+ const node = value;
20
+ if (node.type === Comment) return false;
21
+ if (node.type === Text) return String(node.children ?? "").trim() !== "";
22
+ if (node.type === Fragment) return isRenderable(node.children);
23
+ return true;
24
+ }
25
+ //#endregion
26
+ //#region src/Indicator/useReplacementSlot.ts
27
+ /**
28
+ * Whether the default slot should take the place of the state mark.
29
+ *
30
+ * Called during render. The slot function runs once to inspect, and the
31
+ * template renders it again when the answer is yes.
32
+ */
33
+ function useReplacementSlot() {
34
+ const slots = useSlots();
35
+ return () => isRenderable(slots.default?.());
36
+ }
37
+ //#endregion
38
+ //#region src/Indicator/CheckIndicator.vue
39
+ const _hoisted_1$1 = ["data-size", "data-disabled"];
40
+ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
41
+ name: "AstryxCheckIndicator",
42
+ inheritAttrs: false,
43
+ __name: "CheckIndicator",
44
+ props: {
45
+ state: {},
46
+ size: { default: "md" },
47
+ isDisabled: { type: Boolean }
48
+ },
49
+ setup(__props, { expose: __expose }) {
50
+ const props = __props;
51
+ const attrs = useAttrs();
52
+ const element = useTemplateRef("mark");
53
+ const passed = computed(() => decorativeAttrs(attrs));
54
+ const replacement = useReplacementSlot();
55
+ __expose({ element });
56
+ return (_ctx, _cache) => {
57
+ return unref(replacement)() ? (openBlock(), createElementBlock("span", mergeProps({
58
+ key: 0,
59
+ ref: "mark"
60
+ }, passed.value, {
61
+ class: "astryx-check-indicator",
62
+ "aria-hidden": "true",
63
+ "data-size": props.size,
64
+ "data-disabled": __props.isDisabled || void 0
65
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$1)) : __props.state === "checked" ? (openBlock(), createBlock(_sfc_main$2, mergeProps({
66
+ key: 1,
67
+ ref: "mark"
68
+ }, passed.value, {
69
+ icon: "check",
70
+ size: "sm",
71
+ color: __props.isDisabled ? "disabled" : "accent",
72
+ "aria-hidden": "true"
73
+ }), null, 16, ["color"])) : createCommentVNode("v-if", true);
74
+ };
75
+ }
76
+ });
77
+ //#endregion
78
+ //#region src/Indicator/RadioIndicator.vue
79
+ const _hoisted_1 = [
80
+ "data-state",
81
+ "data-size",
82
+ "data-disabled"
83
+ ];
84
+ const _hoisted_2 = {
85
+ key: 0,
86
+ class: "astryx-radio-indicator-dot"
87
+ };
88
+ const _sfc_main = /*@__PURE__*/ defineComponent({
89
+ name: "AstryxRadioIndicator",
90
+ inheritAttrs: false,
91
+ __name: "RadioIndicator",
92
+ props: {
93
+ state: {},
94
+ size: {},
95
+ isDisabled: { type: Boolean }
96
+ },
97
+ setup(__props, { expose: __expose }) {
98
+ const props = __props;
99
+ const attrs = useAttrs();
100
+ const element = useTemplateRef("indicator");
101
+ const passed = computed(() => decorativeAttrs(attrs));
102
+ const checked = computed(() => props.state !== "unchecked");
103
+ __expose({ element });
104
+ return (_ctx, _cache) => {
105
+ return openBlock(), createElementBlock("span", mergeProps(passed.value, {
106
+ ref: "indicator",
107
+ class: "astryx-radio-indicator",
108
+ "aria-hidden": "true",
109
+ "data-state": checked.value ? "checked" : "unchecked",
110
+ "data-size": props.size,
111
+ "data-disabled": __props.isDisabled || void 0
112
+ }), [renderSlot(_ctx.$slots, "default", {}, () => [checked.value ? (openBlock(), createElementBlock("span", _hoisted_2)) : createCommentVNode("v-if", true)])], 16, _hoisted_1);
113
+ };
114
+ }
115
+ });
116
+ //#endregion
117
+ //#region src/Indicator/registry.ts
118
+ /**
119
+ * The graphics this package ships.
120
+ *
121
+ * A theme's `indicators` entries replace these by name. The set is closed:
122
+ * a name added by augmentation is not in here.
123
+ */
124
+ const defaultIndicators = {
125
+ check: _sfc_main$1,
126
+ checkbox: _sfc_main$3,
127
+ radio: _sfc_main
128
+ };
129
+ function isCoreIndicatorName(name) {
130
+ return name === "check" || name === "checkbox" || name === "radio";
131
+ }
132
+ function themeIndicators(theme) {
133
+ return theme?.indicators;
134
+ }
135
+ function getIndicator(name, theme) {
136
+ const override = themeIndicators(theme)?.[name];
137
+ if (override) return override;
138
+ if (isCoreIndicatorName(name)) return defaultIndicators[name];
139
+ }
140
+ //#endregion
141
+ //#region src/Indicator/useIndicator.ts
142
+ function useIndicator(name) {
143
+ const context = inject(themeContextKey, null);
144
+ return computed(() => getIndicator(name, context?.value.theme));
145
+ }
146
+ //#endregion
147
+ export { _sfc_main as a, isCoreIndicatorName as i, defaultIndicators as n, _sfc_main$1 as o, getIndicator as r, isRenderable as s, useIndicator as t };