@astryx-vue/core 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/AlertDialog/index.js +1 -1
  2. package/dist/{AlertDialog-BylcA4vV.js → AlertDialog-ovx4cBjM.js} +1 -1
  3. package/dist/AppShell/index.js +1 -1
  4. package/dist/{AppShell-b0PWt9Fz.js → AppShell-EiGyPFbA.js} +2 -2
  5. package/dist/AvatarGroup/index.d.ts +1 -1
  6. package/dist/Banner/index.d.ts +1 -1
  7. package/dist/Button/index.d.ts +1 -1
  8. package/dist/ButtonGroup/index.d.ts +1 -1
  9. package/dist/Calendar/index.js +1 -1
  10. package/dist/{Calendar-CYhGDT6f.js → Calendar-BG7wEsro.js} +1 -1
  11. package/dist/Carousel/index.d.ts +2 -0
  12. package/dist/Carousel/index.js +2 -0
  13. package/dist/Carousel-BTtHkKea.js +363 -0
  14. package/dist/Chat/index.js +1 -1
  15. package/dist/{Chat-C1aWl5V3.js → Chat-DjNxw5gv.js} +2 -2
  16. package/dist/CheckboxInput/index.d.ts +1 -1
  17. package/dist/CheckboxList/index.d.ts +1 -1
  18. package/dist/Citation/index.js +1 -1
  19. package/dist/{Citation-C1X0Rde8.js → Citation-DijdbUUu.js} +2 -2
  20. package/dist/ClickableCard/index.d.ts +1 -1
  21. package/dist/Code/index.d.ts +3 -2
  22. package/dist/Code/index.js +4 -2
  23. package/dist/Code-yb_KOFtJ.js +299 -0
  24. package/dist/{CodeBlock-BQdooQy2.js → CodeBlock-CxTb6j9_.js} +8 -2
  25. package/dist/Collapsible/index.js +1 -1
  26. package/dist/{Collapsible-BS9ctCQV.js → Collapsible-9MC08X39.js} +1 -1
  27. package/dist/CommandPalette/index.js +1 -1
  28. package/dist/{CommandPalette-u5h_E05P.js → CommandPalette-BD2iODF5.js} +1 -1
  29. package/dist/ComplexSelector/index.d.ts +1 -1
  30. package/dist/ComplexSelector/index.js +1 -1
  31. package/dist/{ComplexSelector-BHmGWml0.js → ComplexSelector-D9iXd5cH.js} +2 -2
  32. package/dist/ContextMenu/index.js +1 -1
  33. package/dist/{ContextMenu-dA-ppaRQ.js → ContextMenu-HS_WqYIg.js} +1 -1
  34. package/dist/DateInput/index.d.ts +1 -1
  35. package/dist/DateInput/index.js +1 -1
  36. package/dist/{DateInput-D2ErjXYO.js → DateInput-DE2TN1Rq.js} +2 -2
  37. package/dist/DateRangeInput/index.d.ts +1 -1
  38. package/dist/DateRangeInput/index.js +1 -1
  39. package/dist/{DateRangeInput-fmQlr_A7.js → DateRangeInput-1bhPGG2s.js} +2 -2
  40. package/dist/DateTimeInput/index.d.ts +1 -1
  41. package/dist/DateTimeInput/index.js +1 -1
  42. package/dist/{DateTimeInput-Bs1JmcIp.js → DateTimeInput-SnPdgk6P.js} +3 -3
  43. package/dist/Divider/index.d.ts +1 -1
  44. package/dist/DropdownMenu/index.js +1 -1
  45. package/dist/{DropdownMenu-B0gogrvG.js → DropdownMenu-UJGych6v.js} +1 -1
  46. package/dist/EmptyState/index.js +1 -1
  47. package/dist/{EmptyState-Bhlqgsg4.js → EmptyState-CUJdTYKV.js} +1 -1
  48. package/dist/FileInput/index.d.ts +1 -1
  49. package/dist/FileInput/index.js +1 -1
  50. package/dist/{FileInput-CmAfOpkA.js → FileInput-BQiwE-GB.js} +2 -2
  51. package/dist/Icon/index.d.ts +3 -0
  52. package/dist/Icon/index.js +2 -0
  53. package/dist/{Icon-5MdZQ18k.js → Icon-Dfr4k6-S.js} +1 -1
  54. package/dist/Lightbox/index.d.ts +2 -0
  55. package/dist/Lightbox/index.js +2 -0
  56. package/dist/Lightbox-CshKoB0r.js +384 -0
  57. package/dist/Link/index.d.ts +1 -1
  58. package/dist/Markdown/index.js +1 -1
  59. package/dist/{Markdown-CwtLr3f_.js → Markdown-D-Ua055V.js} +2 -2
  60. package/dist/MetadataList/index.js +1 -1
  61. package/dist/{MetadataList-DlXQTLog.js → MetadataList-sYph_d8Q.js} +1 -1
  62. package/dist/MobileNav/index.js +1 -1
  63. package/dist/{MobileNavToggle-CgQamG6E.js → MobileNavToggle-DD9D01aj.js} +1 -1
  64. package/dist/MoreMenu/index.d.ts +1 -1
  65. package/dist/MoreMenu/index.js +1 -1
  66. package/dist/{MoreMenu-BXL6Dqsu.js → MoreMenu-BVrK5kkk.js} +1 -1
  67. package/dist/MultiSelector/index.d.ts +1 -1
  68. package/dist/MultiSelector/index.js +1 -1
  69. package/dist/{MultiSelector-DT8ZccMI.js → MultiSelector-DiYov9sF.js} +2 -2
  70. package/dist/NavMenu/index.d.ts +1 -1
  71. package/dist/NavMenu/index.js +1 -1
  72. package/dist/{NavMenuItem-mzNQESpB.js → NavMenuItem-B-k7olt5.js} +2 -1
  73. package/dist/NumberInput/index.d.ts +1 -1
  74. package/dist/NumberInput/index.js +1 -1
  75. package/dist/{NumberInput-DspJO6z6.js → NumberInput-CTYiQxHq.js} +1 -1
  76. package/dist/Outline/index.d.ts +2 -0
  77. package/dist/Outline/index.js +2 -0
  78. package/dist/Outline-DQfEBxlc.js +325 -0
  79. package/dist/OverflowList/index.d.ts +1 -1
  80. package/dist/OverflowList/index.js +1 -1
  81. package/dist/{OverflowList-zXg3g6fy.js → OverflowList-BU5VCntl.js} +2 -2
  82. package/dist/Pagination/index.js +1 -1
  83. package/dist/{Pagination-DXfgMUKJ.js → Pagination-HdhtykeF.js} +2 -2
  84. package/dist/Popover/index.d.ts +1 -1
  85. package/dist/Radio/index.d.ts +1 -1
  86. package/dist/RadioList/index.d.ts +1 -1
  87. package/dist/Resizable/index.js +1 -1
  88. package/dist/{Resizable-BuGKvU9I.js → Resizable-BhSMfO5B.js} +1 -1
  89. package/dist/ScrollableArea/index.d.ts +1 -1
  90. package/dist/SelectableCard/index.d.ts +1 -1
  91. package/dist/Selector/index.d.ts +1 -1
  92. package/dist/Selector/index.js +1 -1
  93. package/dist/{Selector-DlZpQh42.js → Selector-Da-2BO3q.js} +1 -1
  94. package/dist/SideNav/index.d.ts +1 -1
  95. package/dist/SideNav/index.js +1 -1
  96. package/dist/{SideNav-Cdrigq2A.js → SideNav-B-Om6Bz3.js} +2 -2
  97. package/dist/Stepper/index.js +1 -1
  98. package/dist/{Stepper-DxmLfh8O.js → Stepper-BZ_8SEZt.js} +1 -1
  99. package/dist/Switch/index.d.ts +1 -1
  100. package/dist/TabList/index.js +1 -1
  101. package/dist/{TabList-C411uNQU.js → TabList-Cnc2Hs1H.js} +1 -1
  102. package/dist/Table/index.js +1 -1
  103. package/dist/{Table-7qRmlIQd.js → Table-D-LhAy_J.js} +4 -4
  104. package/dist/Text/index.d.ts +3 -2
  105. package/dist/Text/index.js +1 -1
  106. package/dist/{Text-CKd7e3gK.js → Text-BHVghsWo.js} +12 -2
  107. package/dist/TextArea/index.d.ts +1 -1
  108. package/dist/TextInput/index.d.ts +1 -1
  109. package/dist/Theme/index.d.ts +2 -0
  110. package/dist/Theme/index.js +2 -0
  111. package/dist/Theme-BuUiiJNr.js +429 -0
  112. package/dist/Thumbnail/index.js +1 -1
  113. package/dist/{Thumbnail-BWVzLLyI.js → Thumbnail-Dc1UpykG.js} +2 -2
  114. package/dist/{TimeField-l3QzU6vC.js → TimeField-C7t9Knq9.js} +2 -2
  115. package/dist/TimeInput/index.d.ts +1 -1
  116. package/dist/TimeInput/index.js +1 -1
  117. package/dist/{TimeInput-OkgX-xbQ.js → TimeInput-BXxCOY98.js} +1 -1
  118. package/dist/Timer/index.d.ts +2 -0
  119. package/dist/Timer/index.js +2 -0
  120. package/dist/Timer-B7GV6hqd.js +134 -0
  121. package/dist/Timestamp/index.d.ts +1 -1
  122. package/dist/Timestamp/index.js +1 -1
  123. package/dist/{Timestamp-DUoP9ari.js → Timestamp-DlZSmgCJ.js} +3 -3
  124. package/dist/ToggleButton/index.d.ts +1 -1
  125. package/dist/Token/index.d.ts +1 -1
  126. package/dist/Token/index.js +1 -1
  127. package/dist/{Token-C4KD0fZD.js → Token-wt4e80IM.js} +1 -1
  128. package/dist/Tokenizer/index.d.ts +1 -1
  129. package/dist/Tokenizer/index.js +1 -1
  130. package/dist/{Tokenizer-BA8sTMPZ.js → Tokenizer-nmTqdS9n.js} +2 -2
  131. package/dist/Toolbar/index.d.ts +1 -1
  132. package/dist/TopNav/index.d.ts +1 -1
  133. package/dist/TopNav/index.js +1 -1
  134. package/dist/{TopNav-CZokS7E_.js → TopNav-notp-mJx.js} +4 -4
  135. package/dist/TreeList/index.js +1 -1
  136. package/dist/{TreeList-CIbAGOMf.js → TreeList-s1xBQ0qq.js} +2 -2
  137. package/dist/Typeahead/index.d.ts +1 -1
  138. package/dist/Typeahead/index.js +1 -1
  139. package/dist/{Typeahead-DIw-K4aa.js → Typeahead-VAuiCurV.js} +2 -2
  140. package/dist/{context-D6ECRdc5.js → context-Dbo22sck.js} +54 -0
  141. package/dist/context-O2Vb8cJl.js +57 -0
  142. package/dist/index-1AZ4KZhg.d.ts +96 -0
  143. package/dist/{index-FEy8qFSD.d.ts → index-BHqRH7QW.d.ts} +2 -2
  144. package/dist/index-BMrggCw-.d.ts +52 -0
  145. package/dist/index-Bainr_3n.d.ts +31 -0
  146. package/dist/{index-DXDGk38y.d.ts → index-Bn_odHQ9.d.ts} +1 -1
  147. package/dist/{index-C6RecznD.d.ts → index-BtPZKO20.d.ts} +2 -2
  148. package/dist/{index-CjtAH60j.d.ts → index-Bu0Zd1uw.d.ts} +1 -1
  149. package/dist/{index-CX97hlld.d.ts → index-C59PdX9L.d.ts} +2 -19
  150. package/dist/{index-Df2YvC8o.d.ts → index-C6iJwTL0.d.ts} +38 -31
  151. package/dist/{index-B4OOtNP8.d.ts → index-C7mxUcDR.d.ts} +2 -2
  152. package/dist/index-CRizexSC.d.ts +147 -0
  153. package/dist/index-Cm_TiLXU.d.ts +22 -0
  154. package/dist/index-Cn-sSds-.d.ts +68 -0
  155. package/dist/index-CsVS37na.d.ts +81 -0
  156. package/dist/{index-CT8KEpec.d.ts → index-D0TlUOtG.d.ts} +1 -1
  157. package/dist/{index-DGNqi2za.d.ts → index-DOUEn7V0.d.ts} +3 -3
  158. package/dist/{index-DYChvBOM.d.ts → index-DoFCm2Q2.d.ts} +29 -0
  159. package/dist/{index-mQ6EPmaG.d.ts → index-DsyKhauk.d.ts} +78 -9
  160. package/dist/{index-ZJyk8RtQ.d.ts → index-DtjAdYEc.d.ts} +1 -1
  161. package/dist/{index-Byar3h1e.d.ts → index-HV6W3xCx.d.ts} +1 -1
  162. package/dist/{index-2u4l3wq8.d.ts → index-NzLDrOkk.d.ts} +1 -1
  163. package/dist/{index-Bqb_Fyju.d.ts → index-jdjcb3Js.d.ts} +2 -2
  164. package/dist/index.d.ts +71 -62
  165. package/dist/index.js +100 -92
  166. package/dist/locale/index.d.ts +1 -1
  167. package/dist/locale/index.js +1 -1
  168. package/dist/syntaxTheme-Bcs1YMF7.d.ts +38 -0
  169. package/dist/syntaxTheme-ClpWALZX.js +75 -0
  170. package/dist/types-Bt-lSgYX.d.ts +65 -0
  171. package/dist/types-DZoEm_DG.d.ts +97 -0
  172. package/package.json +25 -1
  173. package/styles/carousel.css +120 -0
  174. package/styles/heading.css +6 -2
  175. package/styles/lightbox.css +144 -0
  176. package/styles/media-theme.css +51 -0
  177. package/styles/outline.css +124 -0
  178. package/styles/text.css +63 -14
  179. package/styles/theme.css +29 -0
  180. package/styles/timer.css +34 -0
  181. package/styles.css +6 -0
  182. package/dist/index-BzqRns96.d.ts +0 -64
  183. package/dist/{index-4FM5lQdV.d.ts → index-BUXNRekN.d.ts} +1 -1
@@ -0,0 +1,384 @@
1
+ import { t as useAnnounce } from "./announce-Cnio10Wk.js";
2
+ import { t as useScrollLock } from "./scrollLock-BzIvIimL.js";
3
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
4
+ import { t as _sfc_main$1 } from "./IconButton-BNQuz9W_.js";
5
+ import { t as _sfc_main$2 } from "./Icon-Dfr4k6-S.js";
6
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, ref, toDisplayString, toRef, unref, useTemplateRef, watch, withCtx } from "vue";
7
+ import "../styles/lightbox.css";
8
+ //#region src/Lightbox/Lightbox.vue
9
+ const _hoisted_1 = ["aria-label"];
10
+ const _hoisted_2 = { class: "astryx-lightbox__media" };
11
+ const _hoisted_3 = [
12
+ "data-zoomable",
13
+ "data-zoomed",
14
+ "data-dragging",
15
+ "role",
16
+ "tabindex",
17
+ "aria-pressed",
18
+ "aria-label"
19
+ ];
20
+ const _hoisted_4 = [
21
+ "src",
22
+ "aria-label",
23
+ "autoplay"
24
+ ];
25
+ const _hoisted_5 = [
26
+ "src",
27
+ "alt",
28
+ "data-dragging"
29
+ ];
30
+ const _hoisted_6 = {
31
+ key: 0,
32
+ class: "astryx-lightbox__caption"
33
+ };
34
+ const _hoisted_7 = {
35
+ key: 2,
36
+ class: "astryx-lightbox__counter"
37
+ };
38
+ const _sfc_main = /*@__PURE__*/ defineComponent({
39
+ name: "AstryxLightbox",
40
+ inheritAttrs: false,
41
+ __name: "Lightbox",
42
+ props: {
43
+ isOpen: { type: Boolean },
44
+ media: {},
45
+ index: {},
46
+ defaultIndex: { default: 0 },
47
+ hasZoom: {
48
+ type: Boolean,
49
+ default: false
50
+ },
51
+ hasAutoPlay: {
52
+ type: Boolean,
53
+ default: false
54
+ }
55
+ },
56
+ emits: ["update:isOpen", "update:index"],
57
+ setup(__props, { emit: __emit }) {
58
+ const props = __props;
59
+ const emit = __emit;
60
+ const messages = useAstryxMessages();
61
+ const announce = useAnnounce();
62
+ const dialogRef = useTemplateRef("dialog");
63
+ const containerRef = ref(null);
64
+ useScrollLock(toRef(props, "isOpen"));
65
+ const mediaList = computed(() => Array.isArray(props.media) ? props.media : [props.media]);
66
+ const isGallery = computed(() => Array.isArray(props.media) && mediaList.value.length > 1);
67
+ const internalIndex = ref(props.defaultIndex);
68
+ const index = computed(() => {
69
+ const raw = props.index ?? internalIndex.value;
70
+ const last = Math.max(0, mediaList.value.length - 1);
71
+ return Math.min(Math.max(0, raw), last);
72
+ });
73
+ const current = computed(() => mediaList.value[index.value]);
74
+ const isVideo = computed(() => current.value?.type === "video");
75
+ const canPrev = computed(() => index.value > 0);
76
+ const canNext = computed(() => index.value < mediaList.value.length - 1);
77
+ const zoom = ref(1);
78
+ const pan = ref({
79
+ x: 0,
80
+ y: 0
81
+ });
82
+ const dragging = ref(false);
83
+ const didDrag = ref(false);
84
+ const dragStart = {
85
+ x: 0,
86
+ y: 0,
87
+ panX: 0,
88
+ panY: 0
89
+ };
90
+ let restoreFocus = null;
91
+ const zoomable = computed(() => props.hasZoom && !isVideo.value);
92
+ const imageTransform = computed(() => zoom.value === 1 ? void 0 : `scale(${zoom.value}) translate(${pan.value.x / zoom.value}px, ${pan.value.y / zoom.value}px)`);
93
+ function close() {
94
+ emit("update:isOpen", false);
95
+ }
96
+ function setIndex(next) {
97
+ const last = Math.max(0, mediaList.value.length - 1);
98
+ const clamped = Math.min(Math.max(0, next), last);
99
+ internalIndex.value = clamped;
100
+ emit("update:index", clamped);
101
+ }
102
+ function resetZoom() {
103
+ zoom.value = 1;
104
+ pan.value = {
105
+ x: 0,
106
+ y: 0
107
+ };
108
+ dragging.value = false;
109
+ }
110
+ function applyZoom(next) {
111
+ if (!zoomable.value || next === zoom.value) return;
112
+ zoom.value = next;
113
+ pan.value = {
114
+ x: 0,
115
+ y: 0
116
+ };
117
+ announce(next > 1 ? messages.value.lightbox.zoomedIn : messages.value.lightbox.zoomedOut);
118
+ }
119
+ function toggleZoom() {
120
+ applyZoom(zoom.value === 1 ? 2 : 1);
121
+ }
122
+ function onCancel(event) {
123
+ event.preventDefault();
124
+ close();
125
+ }
126
+ function onBackdropClick(event) {
127
+ if (didDrag.value) {
128
+ didDrag.value = false;
129
+ return;
130
+ }
131
+ if (event.target === event.currentTarget || event.target === containerRef.value) close();
132
+ }
133
+ function onKeyDown(event) {
134
+ if (zoomable.value) {
135
+ if (event.key === "+" || event.key === "=") {
136
+ event.preventDefault();
137
+ applyZoom(2);
138
+ return;
139
+ }
140
+ if (event.key === "-" || event.key === "_") {
141
+ event.preventDefault();
142
+ applyZoom(1);
143
+ return;
144
+ }
145
+ const step = 50;
146
+ const offsets = {
147
+ ArrowDown: [0, -50],
148
+ ArrowLeft: [step, 0],
149
+ ArrowRight: [-50, 0],
150
+ ArrowUp: [0, step]
151
+ };
152
+ const offset = zoom.value > 1 ? offsets[event.key] : void 0;
153
+ if (offset != null) {
154
+ event.preventDefault();
155
+ pan.value = {
156
+ x: pan.value.x + offset[0],
157
+ y: pan.value.y + offset[1]
158
+ };
159
+ return;
160
+ }
161
+ }
162
+ if (event.key === "ArrowLeft" && canPrev.value) {
163
+ event.preventDefault();
164
+ setIndex(index.value - 1);
165
+ } else if (event.key === "ArrowRight" && canNext.value) {
166
+ event.preventDefault();
167
+ setIndex(index.value + 1);
168
+ }
169
+ }
170
+ function onImageKeyDown(event) {
171
+ if (event.key === "Enter" || event.key === " ") {
172
+ event.preventDefault();
173
+ toggleZoom();
174
+ }
175
+ }
176
+ function onPointerDown(event) {
177
+ if (!zoomable.value || zoom.value <= 1) return;
178
+ dragging.value = true;
179
+ didDrag.value = false;
180
+ dragStart.x = event.clientX;
181
+ dragStart.y = event.clientY;
182
+ dragStart.panX = pan.value.x;
183
+ dragStart.panY = pan.value.y;
184
+ }
185
+ function onPointerMove(event) {
186
+ if (!dragging.value) return;
187
+ didDrag.value = true;
188
+ pan.value = {
189
+ x: dragStart.panX + event.clientX - dragStart.x,
190
+ y: dragStart.panY + event.clientY - dragStart.y
191
+ };
192
+ }
193
+ function onPointerUp() {
194
+ dragging.value = false;
195
+ }
196
+ watch(() => props.isOpen, (open) => {
197
+ const dialog = dialogRef.value;
198
+ if (dialog == null) return;
199
+ if (open && !dialog.open) {
200
+ const active = document.activeElement;
201
+ restoreFocus = active instanceof HTMLElement ? active : null;
202
+ dialog.showModal();
203
+ } else if (!open && dialog.open) {
204
+ dialog.close();
205
+ resetZoom();
206
+ restoreFocus?.focus();
207
+ restoreFocus = null;
208
+ }
209
+ }, { flush: "post" });
210
+ watch(index, () => {
211
+ resetZoom();
212
+ if (!props.isOpen) return;
213
+ const item = current.value;
214
+ if (item == null || mediaList.value.length < 2) return;
215
+ const position = {
216
+ index: index.value + 1,
217
+ total: mediaList.value.length
218
+ };
219
+ announce(item.alt ? messages.value.lightbox.mediaPosition(item.alt, position.index, position.total) : messages.value.lightbox.imagePosition(position.index, position.total));
220
+ });
221
+ watch([dragging], ([isDragging]) => {
222
+ if (!isDragging) return;
223
+ window.addEventListener("pointermove", onPointerMove);
224
+ window.addEventListener("pointerup", onPointerUp);
225
+ }, { flush: "post" });
226
+ onBeforeUnmount(() => {
227
+ window.removeEventListener("pointermove", onPointerMove);
228
+ window.removeEventListener("pointerup", onPointerUp);
229
+ });
230
+ watch(dragging, (isDragging, wasDragging) => {
231
+ if (wasDragging && !isDragging) {
232
+ window.removeEventListener("pointermove", onPointerMove);
233
+ window.removeEventListener("pointerup", onPointerUp);
234
+ }
235
+ });
236
+ return (_ctx, _cache) => {
237
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" eslint-disable-next-line vue-a11y/click-events-have-key-events, vue-a11y/no-static-element-interactions -- 点在 dialog 自身上等于点遮罩;键盘走 Escape 和方向键。 "), current.value ? (openBlock(), createElementBlock("dialog", {
238
+ key: 0,
239
+ ref: "dialog",
240
+ class: normalizeClass(["astryx-lightbox", _ctx.$attrs.class]),
241
+ style: normalizeStyle(_ctx.$attrs.style),
242
+ "aria-label": current.value.alt || unref(messages).lightbox.mediaViewer,
243
+ "data-component": "lightbox",
244
+ onCancel,
245
+ onClick: onBackdropClick,
246
+ onKeydown: onKeyDown
247
+ }, [createElementVNode("div", {
248
+ ref_key: "containerRef",
249
+ ref: containerRef,
250
+ class: "astryx-lightbox__container"
251
+ }, [
252
+ createVNode(_sfc_main$1, {
253
+ class: "astryx-lightbox__close",
254
+ variant: "ghost",
255
+ size: "sm",
256
+ label: unref(messages).lightbox.close,
257
+ onClick: close
258
+ }, {
259
+ default: withCtx(() => [createVNode(_sfc_main$2, {
260
+ icon: "close",
261
+ size: "sm"
262
+ })]),
263
+ _: 1
264
+ }, 8, ["label"]),
265
+ isGallery.value ? (openBlock(), createBlock(_sfc_main$1, {
266
+ key: 0,
267
+ class: "astryx-lightbox__nav astryx-lightbox__nav--prev",
268
+ variant: "ghost",
269
+ size: "sm",
270
+ label: unref(messages).lightbox.previous,
271
+ "is-disabled": !canPrev.value,
272
+ onClick: _cache[0] || (_cache[0] = ($event) => setIndex(index.value - 1))
273
+ }, {
274
+ default: withCtx(() => [createVNode(_sfc_main$2, {
275
+ icon: "chevronLeft",
276
+ size: "sm"
277
+ })]),
278
+ _: 1
279
+ }, 8, ["label", "is-disabled"])) : createCommentVNode("v-if", true),
280
+ createElementVNode("div", _hoisted_2, [
281
+ createCommentVNode(" eslint-disable-next-line vue-a11y/no-static-element-interactions -- 可缩放时 role、tabindex 和 aria 从脚本绑上;视频没有这些交互。 "),
282
+ createElementVNode("div", {
283
+ class: "astryx-lightbox__frame",
284
+ "data-zoomable": zoomable.value || void 0,
285
+ "data-zoomed": zoom.value > 1 || void 0,
286
+ "data-dragging": dragging.value || void 0,
287
+ role: zoomable.value ? "button" : void 0,
288
+ tabindex: zoomable.value ? 0 : void 0,
289
+ "aria-pressed": zoomable.value ? zoom.value > 1 : void 0,
290
+ "aria-label": zoomable.value ? unref(messages).lightbox.zoom : void 0,
291
+ onDblclick: _cache[1] || (_cache[1] = ($event) => isVideo.value ? void 0 : toggleZoom()),
292
+ onKeydown: _cache[2] || (_cache[2] = ($event) => zoomable.value ? onImageKeyDown($event) : void 0),
293
+ onPointerdown: _cache[3] || (_cache[3] = ($event) => isVideo.value ? void 0 : onPointerDown($event))
294
+ }, [createCommentVNode(" eslint-disable-next-line vue-a11y/media-has-caption -- 说明文字在灯箱 caption 里;媒体文件本身不带字幕轨。 "), isVideo.value ? (openBlock(), createElementBlock("video", {
295
+ key: 0,
296
+ class: "astryx-lightbox__video",
297
+ src: current.value.src,
298
+ "aria-label": current.value.alt,
299
+ controls: "",
300
+ autoplay: __props.hasAutoPlay
301
+ }, null, 8, _hoisted_4)) : (openBlock(), createElementBlock("img", {
302
+ key: 1,
303
+ class: "astryx-lightbox__image",
304
+ src: current.value.src,
305
+ alt: current.value.alt,
306
+ draggable: "false",
307
+ style: normalizeStyle(imageTransform.value ? { transform: imageTransform.value } : void 0),
308
+ "data-dragging": dragging.value || void 0
309
+ }, null, 12, _hoisted_5))], 40, _hoisted_3),
310
+ current.value.caption ? (openBlock(), createElementBlock("p", _hoisted_6, toDisplayString(current.value.caption), 1)) : createCommentVNode("v-if", true)
311
+ ]),
312
+ isGallery.value ? (openBlock(), createBlock(_sfc_main$1, {
313
+ key: 1,
314
+ class: "astryx-lightbox__nav astryx-lightbox__nav--next",
315
+ variant: "ghost",
316
+ size: "sm",
317
+ label: unref(messages).lightbox.next,
318
+ "is-disabled": !canNext.value,
319
+ onClick: _cache[4] || (_cache[4] = ($event) => setIndex(index.value + 1))
320
+ }, {
321
+ default: withCtx(() => [createVNode(_sfc_main$2, {
322
+ icon: "chevronRight",
323
+ size: "sm"
324
+ })]),
325
+ _: 1
326
+ }, 8, ["label", "is-disabled"])) : createCommentVNode("v-if", true),
327
+ isGallery.value ? (openBlock(), createElementBlock("p", _hoisted_7, toDisplayString(index.value + 1) + " / " + toDisplayString(mediaList.value.length), 1)) : createCommentVNode("v-if", true)
328
+ ], 512)], 46, _hoisted_1)) : createCommentVNode("v-if", true)], 2112);
329
+ };
330
+ }
331
+ });
332
+ //#endregion
333
+ //#region src/Lightbox/useLightbox.ts
334
+ /**
335
+ * Owns the open state and gallery index for a `Lightbox`.
336
+ * Bind `bindings` onto `Lightbox`, and call `open(index)` from a thumbnail.
337
+ */
338
+ function useLightbox(options) {
339
+ const isOpen = ref(false);
340
+ const index = ref(0);
341
+ function open(next = 0) {
342
+ index.value = next;
343
+ isOpen.value = true;
344
+ }
345
+ function close() {
346
+ isOpen.value = false;
347
+ }
348
+ function triggerPropsFor(next) {
349
+ return {
350
+ "aria-haspopup": "dialog",
351
+ "onClick": () => open(next),
352
+ "onKeydown": (event) => {
353
+ if (event.key !== "Enter" && event.key !== " ") return;
354
+ event.preventDefault();
355
+ open(next);
356
+ },
357
+ "role": "button",
358
+ "tabindex": 0
359
+ };
360
+ }
361
+ return {
362
+ bindings: computed(() => ({
363
+ "hasAutoPlay": options.hasAutoPlay,
364
+ "hasZoom": options.hasZoom,
365
+ "index": index.value,
366
+ "isOpen": isOpen.value,
367
+ "media": options.media,
368
+ "onUpdate:index": (next) => {
369
+ index.value = next;
370
+ },
371
+ "onUpdate:isOpen": (next) => {
372
+ isOpen.value = next;
373
+ }
374
+ })),
375
+ close,
376
+ getTriggerProps: triggerPropsFor,
377
+ index,
378
+ isOpen,
379
+ open,
380
+ triggerProps: computed(() => triggerPropsFor(0))
381
+ };
382
+ }
383
+ //#endregion
384
+ export { _sfc_main as n, useLightbox as t };
@@ -1,2 +1,2 @@
1
- import { n as LinkColor, r as LinkProps, t as _default } from "../index-DXDGk38y.js";
1
+ import { n as LinkColor, r as LinkProps, t as _default } from "../index-Bn_odHQ9.js";
2
2
  export { _default as Link, type LinkColor, type LinkProps };
@@ -1,2 +1,2 @@
1
- import { i as parseMarkdown, n as slugify, r as uniqueSlug, t as _sfc_main } from "../Markdown-CwtLr3f_.js";
1
+ import { i as parseMarkdown, n as slugify, r as uniqueSlug, t as _sfc_main } from "../Markdown-D-Ua055V.js";
2
2
  export { _sfc_main as Markdown, parseMarkdown, slugify, uniqueSlug };
@@ -1,9 +1,9 @@
1
1
  import { t as _sfc_main$1 } from "./VisuallyHidden-C7NN3VEP.js";
2
2
  import { t as _sfc_main$2 } from "./Heading-Dugosn6j.js";
3
- import { a as useAstryxMessages } from "./context-D6ECRdc5.js";
3
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
4
4
  import { t as _sfc_main$3 } from "./Blockquote-DFqBv_oJ.js";
5
5
  import { t as _sfc_main$4 } from "./CheckboxIndicator-DdJmksHt.js";
6
- import { c as _sfc_main$5, t as _sfc_main$6 } from "./CodeBlock-BQdooQy2.js";
6
+ import { c as _sfc_main$5, t as _sfc_main$6 } from "./CodeBlock-CxTb6j9_.js";
7
7
  import { t as _sfc_main$7 } from "./Link-CprjOuTI.js";
8
8
  import { Fragment, computed, defineComponent, h, ref } from "vue";
9
9
  import { fromMarkdown } from "mdast-util-from-markdown";
@@ -1,2 +1,2 @@
1
- import { n as _sfc_main, t as _sfc_main$1 } from "../MetadataList-DlXQTLog.js";
1
+ import { n as _sfc_main, t as _sfc_main$1 } from "../MetadataList-sYph_d8Q.js";
2
2
  export { _sfc_main as MetadataList, _sfc_main$1 as MetadataListItem };
@@ -1,4 +1,4 @@
1
- import { a as useAstryxMessages } from "./context-D6ECRdc5.js";
1
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
2
2
  import { Comment, Fragment, computed, defineComponent, h, inject, provide, ref, useId, useSlots } from "vue";
3
3
  import "../styles/metadata-list.css";
4
4
  //#region src/MetadataList/context.ts
@@ -1,2 +1,2 @@
1
- import { n as _sfc_main, r as mobileNavKey, t as _sfc_main$1 } from "../MobileNavToggle-CgQamG6E.js";
1
+ import { n as _sfc_main, r as mobileNavKey, t as _sfc_main$1 } from "../MobileNavToggle-DD9D01aj.js";
2
2
  export { _sfc_main as MobileNav, _sfc_main$1 as MobileNavToggle, mobileNavKey };
@@ -1,5 +1,5 @@
1
1
  import { n as useFocusTrap, t as useRestoreFocus } from "./useRestoreFocus-BvMdXVX9.js";
2
- import { a as useAstryxMessages } from "./context-D6ECRdc5.js";
2
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
3
3
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, provide, ref, renderSlot, toDisplayString, unref, useId, useModel, watch } from "vue";
4
4
  import "../styles/mobile-nav.css";
5
5
  //#region src/MobileNav/context.ts
@@ -1,2 +1,2 @@
1
- import { An as MoreMenuIcon, Dn as _default, Fn as MoreMenuPresentation, In as MoreMenuProps, Ln as MoreMenuResolvedPresentation, Mn as MoreMenuItem, Nn as MoreMenuItemVariant, On as MoreMenuDivider, Pn as MoreMenuOption, Rn as MoreMenuSection, jn as MoreMenuInitialFocus, kn as MoreMenuEmits, zn as MoreMenuSlots } from "../index-Df2YvC8o.js";
1
+ import { An as MoreMenuIcon, Dn as _default, Fn as MoreMenuPresentation, In as MoreMenuProps, Ln as MoreMenuResolvedPresentation, Mn as MoreMenuItem, Nn as MoreMenuItemVariant, On as MoreMenuDivider, Pn as MoreMenuOption, Rn as MoreMenuSection, jn as MoreMenuInitialFocus, kn as MoreMenuEmits, zn as MoreMenuSlots } from "../index-C6iJwTL0.js";
2
2
  export { _default as MoreMenu, type MoreMenuDivider, type MoreMenuEmits, type MoreMenuIcon, type MoreMenuInitialFocus, type MoreMenuItem, type MoreMenuItemVariant, type MoreMenuOption, type MoreMenuPresentation, type MoreMenuProps, type MoreMenuResolvedPresentation, type MoreMenuSection, type MoreMenuSlots };
@@ -1,2 +1,2 @@
1
- import { t as _sfc_main } from "../MoreMenu-BXL6Dqsu.js";
1
+ import { t as _sfc_main } from "../MoreMenu-BVrK5kkk.js";
2
2
  export { _sfc_main as MoreMenu };
@@ -2,7 +2,7 @@ import { n as getFocusables, t as focusElement } from "./focus-CpficIgf.js";
2
2
  import { n as useOverflow } from "./useOverflow-VrwF5oek.js";
3
3
  import { t as _sfc_main$5 } from "./Heading-Dugosn6j.js";
4
4
  import { t as _sfc_main$6 } from "./IconButton-BNQuz9W_.js";
5
- import { t as _sfc_main$7 } from "./Icon-5MdZQ18k.js";
5
+ import { t as _sfc_main$7 } from "./Icon-Dfr4k6-S.js";
6
6
  import { t as _sfc_main$8 } from "./Divider-BtwnL18I.js";
7
7
  import { n as _sfc_main$10, t as _sfc_main$9 } from "./ListItem-pGxvn6QJ.js";
8
8
  import { t as usePositionedLayer } from "./usePositionedLayer-C1NBOsVT.js";
@@ -1,2 +1,2 @@
1
- import { a as MultiSelectorDivider, c as MultiSelectorOptionData, d as MultiSelectorSection, f as MultiSelectorSize, g as MultiSelectorVariant, h as MultiSelectorTriggerDisplay, i as MultiSelectorCheckboxPosition, l as MultiSelectorPresentation, m as MultiSelectorStatus, n as flattenOptions, o as MultiSelectorEmits, p as MultiSelectorSlots, r as _default, s as MultiSelectorOption, t as SELECT_ALL_VALUE, u as MultiSelectorProps } from "../index-DGNqi2za.js";
1
+ import { a as MultiSelectorDivider, c as MultiSelectorOptionData, d as MultiSelectorSection, f as MultiSelectorSize, g as MultiSelectorVariant, h as MultiSelectorTriggerDisplay, i as MultiSelectorCheckboxPosition, l as MultiSelectorPresentation, m as MultiSelectorStatus, n as flattenOptions, o as MultiSelectorEmits, p as MultiSelectorSlots, r as _default, s as MultiSelectorOption, t as SELECT_ALL_VALUE, u as MultiSelectorProps } from "../index-DOUEn7V0.js";
2
2
  export { _default as MultiSelector, type MultiSelectorCheckboxPosition, type MultiSelectorDivider, type MultiSelectorEmits, type MultiSelectorOption, type MultiSelectorOptionData, type MultiSelectorPresentation, type MultiSelectorProps, type MultiSelectorSection, type MultiSelectorSize, type MultiSelectorSlots, type MultiSelectorStatus, type MultiSelectorTriggerDisplay, type MultiSelectorVariant, SELECT_ALL_VALUE, flattenOptions };
@@ -1,2 +1,2 @@
1
- import { n as SELECT_ALL_VALUE, r as flattenOptions, t as _sfc_main } from "../MultiSelector-DT8ZccMI.js";
1
+ import { n as SELECT_ALL_VALUE, r as flattenOptions, t as _sfc_main } from "../MultiSelector-DiYov9sF.js";
2
2
  export { _sfc_main as MultiSelector, SELECT_ALL_VALUE, flattenOptions };
@@ -1,10 +1,10 @@
1
1
  import { t as useCombobox } from "./useCombobox-CTo5C-gc.js";
2
2
  import { n as useOverflow } from "./useOverflow-VrwF5oek.js";
3
- import { a as useAstryxMessages } from "./context-D6ECRdc5.js";
3
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
4
4
  import { t as _sfc_main$1 } from "./BottomSheet-Dg95HB1s.js";
5
5
  import { t as _sfc_main$2 } from "./CheckboxIndicator-DdJmksHt.js";
6
6
  import { t as _sfc_main$3 } from "./Field-8zRxzDHE.js";
7
- import { t as _sfc_main$4 } from "./Token-C4KD0fZD.js";
7
+ import { t as _sfc_main$4 } from "./Token-wt4e80IM.js";
8
8
  import { n as useAnchoredListbox, t as scrollOptionIntoView } from "./useAnchoredListbox-7W90Ny-9.js";
9
9
  import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useId, useTemplateRef, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
10
10
  import "../styles/visually-hidden-utility.css";
@@ -1,2 +1,2 @@
1
- import { a as NavMenuEmits, c as NavMenuProps, i as NavDisclosureProps, l as NavMenuFocusRequest, n as _default$1, o as NavMenuItemEmits, r as _default, s as NavMenuItemProps, t as _default$2, u as NavMenuSize } from "../index-CT8KEpec.js";
1
+ import { a as NavMenuEmits, c as NavMenuProps, i as NavDisclosureProps, l as NavMenuFocusRequest, n as _default$1, o as NavMenuItemEmits, r as _default, s as NavMenuItemProps, t as _default$2, u as NavMenuSize } from "../index-D0TlUOtG.js";
2
2
  export { _default as NavDisclosure, type NavDisclosureProps, _default$1 as NavMenu, type NavMenuEmits, type NavMenuFocusRequest, _default$2 as NavMenuItem, type NavMenuItemEmits, type NavMenuItemProps, type NavMenuProps, type NavMenuSize };
@@ -1,3 +1,3 @@
1
1
  import { t as _sfc_main } from "../NavDisclosure-DHrSNRDR.js";
2
- import { n as _sfc_main$1, t as _sfc_main$2 } from "../NavMenuItem-mzNQESpB.js";
2
+ import { n as _sfc_main$1, t as _sfc_main$2 } from "../NavMenuItem-B-k7olt5.js";
3
3
  export { _sfc_main as NavDisclosure, _sfc_main$1 as NavMenu, _sfc_main$2 as NavMenuItem };
@@ -126,8 +126,9 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
126
126
  event.preventDefault();
127
127
  return;
128
128
  }
129
+ const preventedBeforeItem = event.defaultPrevented;
129
130
  emit("click", event);
130
- if (event.defaultPrevented || props.keepOpen) return;
131
+ if (props.keepOpen || !preventedBeforeItem && event.defaultPrevented) return;
131
132
  closeMenu?.();
132
133
  menu?.close();
133
134
  }
@@ -1,2 +1,2 @@
1
- import { n as NumberInputEmits, r as NumberInputProps, t as _default } from "../index-2u4l3wq8.js";
1
+ import { n as NumberInputEmits, r as NumberInputProps, t as _default } from "../index-NzLDrOkk.js";
2
2
  export { _default as NumberInput, type NumberInputEmits, type NumberInputProps };
@@ -1,2 +1,2 @@
1
- import { t as _sfc_main } from "../NumberInput-DspJO6z6.js";
1
+ import { t as _sfc_main } from "../NumberInput-CTYiQxHq.js";
2
2
  export { _sfc_main as NumberInput };
@@ -1,5 +1,5 @@
1
1
  import { t as useNumberField } from "./useNumberField-DL-Radsp.js";
2
- import { a as useAstryxMessages } from "./context-D6ECRdc5.js";
2
+ import { a as useAstryxMessages } from "./context-Dbo22sck.js";
3
3
  import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, ref, unref, useId } from "vue";
4
4
  import "../styles/number-input.css";
5
5
  //#region src/NumberInput/NumberInput.vue
@@ -0,0 +1,2 @@
1
+ import { a as OutlineProps, i as OutlineItem, n as OutlineDensity, r as OutlineEmits, t as _default } from "../index-Cn-sSds-.js";
2
+ export { _default as Outline, type OutlineDensity, type OutlineEmits, type OutlineItem, type OutlineProps };
@@ -0,0 +1,2 @@
1
+ import { t as _sfc_main } from "../Outline-DQfEBxlc.js";
2
+ export { _sfc_main as Outline };