@ptbdynamic/plinth 0.0.0-stage → 0.1.1

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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +258 -2
  3. package/package.json +99 -4
  4. package/packages/css/dist/avatar.css +122 -0
  5. package/packages/css/dist/badge.css +76 -0
  6. package/packages/css/dist/button.css +273 -0
  7. package/packages/css/dist/callout.css +143 -0
  8. package/packages/css/dist/code-block.css +283 -0
  9. package/packages/css/dist/confirm-dialog.css +183 -0
  10. package/packages/css/dist/data-table.css +470 -0
  11. package/packages/css/dist/dialog.css +113 -0
  12. package/packages/css/dist/drawer.css +156 -0
  13. package/packages/css/dist/fonts/geist/LICENSE +93 -0
  14. package/packages/css/dist/fonts/geist/geist-cyrillic-ext-wght-normal.woff2 +0 -0
  15. package/packages/css/dist/fonts/geist/geist-cyrillic-wght-normal.woff2 +0 -0
  16. package/packages/css/dist/fonts/geist/geist-latin-ext-wght-normal.woff2 +0 -0
  17. package/packages/css/dist/fonts/geist/geist-latin-wght-normal.woff2 +0 -0
  18. package/packages/css/dist/fonts/geist/geist-vietnamese-wght-normal.woff2 +0 -0
  19. package/packages/css/dist/fonts/geist-mono/LICENSE +93 -0
  20. package/packages/css/dist/fonts/geist-mono/geist-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  21. package/packages/css/dist/fonts/geist-mono/geist-mono-cyrillic-wght-normal.woff2 +0 -0
  22. package/packages/css/dist/fonts/geist-mono/geist-mono-latin-ext-wght-normal.woff2 +0 -0
  23. package/packages/css/dist/fonts/geist-mono/geist-mono-latin-wght-normal.woff2 +0 -0
  24. package/packages/css/dist/fonts/geist-mono/geist-mono-symbols2-wght-normal.woff2 +0 -0
  25. package/packages/css/dist/fonts/geist-mono/geist-mono-vietnamese-wght-normal.woff2 +0 -0
  26. package/packages/css/dist/fonts/index.css +109 -0
  27. package/packages/css/dist/header.css +110 -0
  28. package/packages/css/dist/icon.css +51 -0
  29. package/packages/css/dist/list-card.css +76 -0
  30. package/packages/css/dist/list-row.css +164 -0
  31. package/packages/css/dist/menu-sheet.css +84 -0
  32. package/packages/css/dist/modal.css +367 -0
  33. package/packages/css/dist/pill-row.css +197 -0
  34. package/packages/css/dist/plinth.css +3773 -0
  35. package/packages/css/dist/section-menu.css +225 -0
  36. package/packages/css/dist/sheet.css +239 -0
  37. package/packages/css/dist/tokens.css +405 -0
  38. package/packages/react/dist/PlinthAvatar.d.ts +17 -0
  39. package/packages/react/dist/PlinthBadge.d.ts +7 -0
  40. package/packages/react/dist/PlinthButton.d.ts +29 -0
  41. package/packages/react/dist/PlinthCallout.d.ts +16 -0
  42. package/packages/react/dist/PlinthCodeBlock.d.ts +24 -0
  43. package/packages/react/dist/PlinthConfirmDialog.d.ts +38 -0
  44. package/packages/react/dist/PlinthDataTable.d.ts +11 -0
  45. package/packages/react/dist/PlinthDataTableCell.d.ts +15 -0
  46. package/packages/react/dist/PlinthDataTableColumn.d.ts +13 -0
  47. package/packages/react/dist/PlinthDataTableEmpty.d.ts +9 -0
  48. package/packages/react/dist/PlinthDataTableRow.d.ts +9 -0
  49. package/packages/react/dist/PlinthDataTableSort.d.ts +4 -0
  50. package/packages/react/dist/PlinthDialog.d.ts +26 -0
  51. package/packages/react/dist/PlinthDrawer.d.ts +29 -0
  52. package/packages/react/dist/PlinthHeader.d.ts +12 -0
  53. package/packages/react/dist/PlinthIcon.d.ts +10 -0
  54. package/packages/react/dist/PlinthIconButton.d.ts +26 -0
  55. package/packages/react/dist/PlinthListCard.d.ts +14 -0
  56. package/packages/react/dist/PlinthListRow.d.ts +29 -0
  57. package/packages/react/dist/PlinthMenuSheet.d.ts +24 -0
  58. package/packages/react/dist/PlinthPill.d.ts +17 -0
  59. package/packages/react/dist/PlinthPillRow.d.ts +13 -0
  60. package/packages/react/dist/PlinthSectionMenu.d.ts +11 -0
  61. package/packages/react/dist/PlinthSectionMenuItem.d.ts +20 -0
  62. package/packages/react/dist/PlinthSheet.d.ts +26 -0
  63. package/packages/react/dist/avatar.d.ts +12 -0
  64. package/packages/react/dist/button.d.ts +21 -0
  65. package/packages/react/dist/callout.d.ts +19 -0
  66. package/packages/react/dist/code-block.d.ts +16 -0
  67. package/packages/react/dist/confirm-dialog.d.ts +23 -0
  68. package/packages/react/dist/data-table.d.ts +15 -0
  69. package/packages/react/dist/dialog.d.ts +10 -0
  70. package/packages/react/dist/drawer.d.ts +20 -0
  71. package/packages/react/dist/heading.d.ts +5 -0
  72. package/packages/react/dist/icon.d.ts +5 -0
  73. package/packages/react/dist/index.d.ts +40 -0
  74. package/packages/react/dist/index.js +1127 -0
  75. package/packages/react/dist/list-row.d.ts +5 -0
  76. package/packages/react/dist/markup.d.ts +9 -0
  77. package/packages/react/dist/sheet.d.ts +12 -0
  78. package/packages/react/dist/size.d.ts +13 -0
  79. package/packages/react/dist/swipe.d.ts +15 -0
  80. package/packages/react/dist/tones.d.ts +5 -0
  81. package/packages/tokens/dist/index.d.ts +218 -0
  82. package/packages/tokens/dist/index.js +3966 -0
  83. package/packages/tokens/dist/tailwind-theme.css +80 -0
  84. package/packages/tokens/dist/tokens.css +405 -0
  85. package/packages/tokens/dist/tokens.json +3762 -0
  86. package/packages/vue/dist/PlinthAvatar.vue.d.ts +24 -0
  87. package/packages/vue/dist/PlinthBadge.vue.d.ts +21 -0
  88. package/packages/vue/dist/PlinthButton.vue.d.ts +42 -0
  89. package/packages/vue/dist/PlinthCallout.vue.d.ts +31 -0
  90. package/packages/vue/dist/PlinthCodeBlock.vue.d.ts +49 -0
  91. package/packages/vue/dist/PlinthConfirmDialog.vue.d.ts +51 -0
  92. package/packages/vue/dist/PlinthDataTable.vue.d.ts +21 -0
  93. package/packages/vue/dist/PlinthDataTableCell.vue.d.ts +29 -0
  94. package/packages/vue/dist/PlinthDataTableColumn.vue.d.ts +26 -0
  95. package/packages/vue/dist/PlinthDataTableEmpty.vue.d.ts +19 -0
  96. package/packages/vue/dist/PlinthDataTableRow.vue.d.ts +19 -0
  97. package/packages/vue/dist/PlinthDataTableSort.vue.d.ts +13 -0
  98. package/packages/vue/dist/PlinthDialog.vue.d.ts +45 -0
  99. package/packages/vue/dist/PlinthDrawer.vue.d.ts +48 -0
  100. package/packages/vue/dist/PlinthHeader.vue.d.ts +19 -0
  101. package/packages/vue/dist/PlinthIcon.vue.d.ts +23 -0
  102. package/packages/vue/dist/PlinthIconButton.vue.d.ts +37 -0
  103. package/packages/vue/dist/PlinthListCard.vue.d.ts +26 -0
  104. package/packages/vue/dist/PlinthListRow.vue.d.ts +38 -0
  105. package/packages/vue/dist/PlinthMenuSheet.vue.d.ts +48 -0
  106. package/packages/vue/dist/PlinthPill.vue.d.ts +28 -0
  107. package/packages/vue/dist/PlinthPillRow.vue.d.ts +22 -0
  108. package/packages/vue/dist/PlinthSectionMenu.vue.d.ts +22 -0
  109. package/packages/vue/dist/PlinthSectionMenuItem.vue.d.ts +28 -0
  110. package/packages/vue/dist/PlinthSheet.vue.d.ts +45 -0
  111. package/packages/vue/dist/avatar.d.ts +12 -0
  112. package/packages/vue/dist/button.d.ts +5 -0
  113. package/packages/vue/dist/callout.d.ts +19 -0
  114. package/packages/vue/dist/code-block.d.ts +16 -0
  115. package/packages/vue/dist/confirm-dialog.d.ts +23 -0
  116. package/packages/vue/dist/data-table.d.ts +15 -0
  117. package/packages/vue/dist/dialog.d.ts +10 -0
  118. package/packages/vue/dist/drawer.d.ts +20 -0
  119. package/packages/vue/dist/heading.d.ts +5 -0
  120. package/packages/vue/dist/icon.d.ts +5 -0
  121. package/packages/vue/dist/index.d.ts +44 -0
  122. package/packages/vue/dist/index.js +1439 -0
  123. package/packages/vue/dist/list-row.d.ts +5 -0
  124. package/packages/vue/dist/sheet.d.ts +12 -0
  125. package/packages/vue/dist/size.d.ts +13 -0
  126. package/packages/vue/dist/slots.d.ts +3 -0
  127. package/packages/vue/dist/swipe.d.ts +12 -0
  128. package/packages/vue/dist/tones.d.ts +5 -0
@@ -0,0 +1,1439 @@
1
+ import { Comment as e, Fragment as t, Static as n, Text as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, mergeProps as f, onBeforeUnmount as p, onMounted as m, openBlock as h, ref as g, renderList as _, renderSlot as v, resolveDynamicComponent as y, toDisplayString as b, unref as x, useAttrs as S, useId as C, useSlots as w, warn as T, watchEffect as E, withCtx as D } from "vue";
2
+ //#region src/size.ts
3
+ var O = [
4
+ "xs",
5
+ "sm",
6
+ "md",
7
+ "lg",
8
+ "xl"
9
+ ], k = [
10
+ "sm",
11
+ "md",
12
+ "lg"
13
+ ];
14
+ function A(e, t, n) {
15
+ return t.includes(e) ? e : n;
16
+ }
17
+ function j(e) {
18
+ return e === "xs" || e === "sm" ? "sm" : "md";
19
+ }
20
+ //#endregion
21
+ //#region src/avatar.ts
22
+ var ee = [
23
+ "sm",
24
+ "md",
25
+ "lg",
26
+ "xl"
27
+ ];
28
+ function te(e) {
29
+ return A(e, ee, "md");
30
+ }
31
+ function M(e) {
32
+ let t = e.trim().split(/\s+/).filter(Boolean);
33
+ return t.length === 0 ? "" : ([...t[0]][0] + (t.length > 1 ? [...t.at(-1)][0] : "")).toUpperCase();
34
+ }
35
+ var ne = "<svg class=\"plinth-avatar-glyph\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"9\" r=\"4\"></circle><path d=\"M4.5 20a7.5 7.5 0 0 1 15 0\"></path></svg>", N = [
36
+ "neutral",
37
+ "success",
38
+ "warning",
39
+ "danger"
40
+ ];
41
+ function re(e) {
42
+ return N.includes(e) ? e : N[0];
43
+ }
44
+ //#endregion
45
+ //#region src/PlinthAvatar.vue?vue&type=script&setup=true&lang.ts
46
+ var ie = [
47
+ "data-size",
48
+ "role",
49
+ "aria-label",
50
+ "aria-hidden"
51
+ ], ae = ["src"], oe = {
52
+ key: 1,
53
+ class: "plinth-avatar-initials",
54
+ "aria-hidden": "true"
55
+ }, se = {
56
+ key: 2,
57
+ class: "plinth-avatar-glyph",
58
+ viewBox: "0 0 24 24",
59
+ fill: "none",
60
+ stroke: "currentColor",
61
+ "stroke-width": "1.5",
62
+ "stroke-linecap": "round",
63
+ "aria-hidden": "true"
64
+ }, ce = ["data-tone"], P = /* @__PURE__ */ d({
65
+ __name: "PlinthAvatar",
66
+ props: {
67
+ name: { default: "" },
68
+ src: { default: void 0 },
69
+ initials: { default: void 0 },
70
+ size: { default: "md" },
71
+ status: { default: void 0 },
72
+ statusLabel: { default: void 0 },
73
+ decorative: {
74
+ type: Boolean,
75
+ default: !1
76
+ }
77
+ },
78
+ setup(e) {
79
+ let t = e, n = i(() => te(t.size)), r = i(() => t.status ? re(t.status) : void 0), a = i(() => {
80
+ if (!t.decorative) return r.value && t.statusLabel ? `${t.name}, ${t.statusLabel}` : t.name;
81
+ }), l = i(() => t.initials ?? M(t.name));
82
+ return E(() => {
83
+ t.decorative || (t.name.trim() || T("PlinthAvatar needs a name, or decorative when the name is shown next to it."), t.status && !t.statusLabel && T("PlinthAvatar needs a statusLabel with a status: colour alone does not say what it means."));
84
+ }), (t, i) => (h(), s("span", {
85
+ class: "plinth-avatar",
86
+ "data-size": n.value,
87
+ role: a.value === void 0 ? void 0 : "img",
88
+ "aria-label": a.value,
89
+ "aria-hidden": e.decorative ? "true" : void 0
90
+ }, [e.src ? (h(), s("img", {
91
+ key: 0,
92
+ class: "plinth-avatar-image",
93
+ src: e.src,
94
+ alt: ""
95
+ }, null, 8, ae)) : l.value ? (h(), s("span", oe, b(l.value), 1)) : (h(), s("svg", se, [...i[0] ||= [c("circle", {
96
+ cx: "12",
97
+ cy: "9",
98
+ r: "4"
99
+ }, null, -1), c("path", { d: "M4.5 20a7.5 7.5 0 0 1 15 0" }, null, -1)]])), r.value ? (h(), s("span", {
100
+ key: 3,
101
+ class: "plinth-avatar-status",
102
+ "data-tone": r.value,
103
+ "aria-hidden": "true"
104
+ }, null, 8, ce)) : o("", !0)], 8, ie));
105
+ }
106
+ }), le = ["data-tone"], ue = {
107
+ key: 0,
108
+ class: "plinth-badge-dot",
109
+ "aria-hidden": "true"
110
+ }, de = { class: "plinth-badge-label" }, F = /* @__PURE__ */ d({
111
+ __name: "PlinthBadge",
112
+ props: {
113
+ tone: { default: "neutral" },
114
+ dot: {
115
+ type: Boolean,
116
+ default: !1
117
+ }
118
+ },
119
+ setup(e) {
120
+ let t = e, n = i(() => re(t.tone));
121
+ return (t, r) => (h(), s("span", {
122
+ class: "plinth-badge",
123
+ "data-tone": n.value
124
+ }, [e.dot ? (h(), s("span", ue)) : o("", !0), c("span", de, [v(t.$slots, "default")])], 8, le));
125
+ }
126
+ }), I = [
127
+ "primary",
128
+ "accent",
129
+ "secondary",
130
+ "ghost",
131
+ "danger",
132
+ "danger-ghost"
133
+ ];
134
+ function L(e) {
135
+ return I.includes(e) ? e : "primary";
136
+ }
137
+ //#endregion
138
+ //#region src/PlinthButton.vue?vue&type=script&setup=true&lang.ts
139
+ var fe = [
140
+ "href",
141
+ "data-variant",
142
+ "data-size",
143
+ "role",
144
+ "aria-busy",
145
+ "aria-disabled"
146
+ ], pe = {
147
+ key: 0,
148
+ class: "plinth-button-spinner",
149
+ "aria-hidden": "true"
150
+ }, me = ["data-size", "data-mirror"], he = { class: "plinth-button-label" }, ge = ["data-size", "data-mirror"], _e = [
151
+ "data-variant",
152
+ "data-size",
153
+ "disabled",
154
+ "aria-busy",
155
+ "aria-disabled"
156
+ ], ve = {
157
+ key: 0,
158
+ class: "plinth-button-spinner",
159
+ "aria-hidden": "true"
160
+ }, ye = ["data-size", "data-mirror"], be = { class: "plinth-button-label" }, xe = ["data-size", "data-mirror"], R = /* @__PURE__ */ d({
161
+ __name: "PlinthButton",
162
+ props: {
163
+ variant: { default: "primary" },
164
+ size: { default: "md" },
165
+ href: { default: void 0 },
166
+ disabled: {
167
+ type: Boolean,
168
+ default: !1
169
+ },
170
+ busy: {
171
+ type: Boolean,
172
+ default: !1
173
+ },
174
+ mirrorIcon: {
175
+ type: Boolean,
176
+ default: !1
177
+ },
178
+ mirrorTrailing: {
179
+ type: Boolean,
180
+ default: !1
181
+ }
182
+ },
183
+ setup(e) {
184
+ let t = e, n = i(() => L(t.variant)), r = i(() => A(t.size, k, "md")), a = i(() => j(r.value)), l = i(() => t.busy && !t.disabled);
185
+ return (t, i) => e.href ? (h(), s("a", {
186
+ key: 0,
187
+ class: "plinth-button",
188
+ href: e.disabled ? void 0 : e.href,
189
+ "data-variant": n.value,
190
+ "data-size": r.value,
191
+ role: e.disabled ? "link" : void 0,
192
+ "aria-busy": l.value ? "true" : void 0,
193
+ "aria-disabled": l.value || e.disabled ? "true" : void 0
194
+ }, [
195
+ l.value ? (h(), s("span", pe)) : t.$slots.icon ? (h(), s("span", {
196
+ key: 1,
197
+ class: "plinth-icon",
198
+ "data-size": a.value,
199
+ "data-mirror": e.mirrorIcon ? "" : void 0,
200
+ "aria-hidden": "true"
201
+ }, [v(t.$slots, "icon")], 8, me)) : o("", !0),
202
+ c("span", he, [v(t.$slots, "default")]),
203
+ t.$slots.trailing ? (h(), s("span", {
204
+ key: 2,
205
+ class: "plinth-icon",
206
+ "data-size": a.value,
207
+ "data-mirror": e.mirrorTrailing ? "" : void 0,
208
+ "aria-hidden": "true"
209
+ }, [v(t.$slots, "trailing")], 8, ge)) : o("", !0)
210
+ ], 8, fe)) : (h(), s("button", {
211
+ key: 1,
212
+ type: "button",
213
+ class: "plinth-button",
214
+ "data-variant": n.value,
215
+ "data-size": r.value,
216
+ disabled: e.disabled || void 0,
217
+ "aria-busy": l.value ? "true" : void 0,
218
+ "aria-disabled": l.value ? "true" : void 0
219
+ }, [
220
+ l.value ? (h(), s("span", ve)) : t.$slots.icon ? (h(), s("span", {
221
+ key: 1,
222
+ class: "plinth-icon",
223
+ "data-size": a.value,
224
+ "data-mirror": e.mirrorIcon ? "" : void 0,
225
+ "aria-hidden": "true"
226
+ }, [v(t.$slots, "icon")], 8, ye)) : o("", !0),
227
+ c("span", be, [v(t.$slots, "default")]),
228
+ t.$slots.trailing ? (h(), s("span", {
229
+ key: 2,
230
+ class: "plinth-icon",
231
+ "data-size": a.value,
232
+ "data-mirror": e.mirrorTrailing ? "" : void 0,
233
+ "aria-hidden": "true"
234
+ }, [v(t.$slots, "trailing")], 8, xe)) : o("", !0)
235
+ ], 8, _e));
236
+ }
237
+ }), z = [
238
+ "neutral",
239
+ "info",
240
+ "success",
241
+ "warning",
242
+ "danger"
243
+ ];
244
+ function B(e) {
245
+ return z.includes(e) ? e : "neutral";
246
+ }
247
+ var V = [
248
+ "note",
249
+ "status",
250
+ "alert"
251
+ ];
252
+ function H(e) {
253
+ return V.includes(e) ? e : "note";
254
+ }
255
+ var U = (e) => `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${e}</svg>`, W = {
256
+ neutral: U("<rect x=\"5\" y=\"4\" width=\"14\" height=\"16\" rx=\"2\"></rect><path d=\"M9 9h6M9 13h6M9 17h3\"></path>"),
257
+ info: U("<circle cx=\"12\" cy=\"12\" r=\"9\"></circle><path d=\"M12 11v5M12 7.5v.01\"></path>"),
258
+ success: U("<circle cx=\"12\" cy=\"12\" r=\"9\"></circle><path d=\"M8 12.5l2.5 2.5L16 9.5\"></path>"),
259
+ warning: U("<path d=\"M10.3 4.3L2.6 18a2 2 0 0 0 1.7 3h15.4a2 2 0 0 0 1.7-3L13.7 4.3a2 2 0 0 0-3.4 0z\"></path><path d=\"M12 9.5v4M12 17v.01\"></path>"),
260
+ danger: U("<path d=\"M8.5 3h7L21 8.5v7L15.5 21h-7L3 15.5v-7z\"></path><path d=\"M12 7.5v5M12 16v.01\"></path>")
261
+ }, G = (i) => (i ?? []).some((i) => i.type === e ? !1 : i.type === r || i.type === n ? String(i.children).trim() !== "" : i.type !== t || G(i.children)), Se = ["data-tone", "role"], Ce = {
262
+ key: 0,
263
+ class: "plinth-icon plinth-callout-icon",
264
+ "data-size": "md",
265
+ "aria-hidden": "true"
266
+ }, we = ["innerHTML"], Te = { class: "plinth-callout-body" }, Ee = {
267
+ key: 0,
268
+ class: "plinth-callout-title"
269
+ }, De = {
270
+ key: 1,
271
+ class: "plinth-callout-text"
272
+ }, Oe = {
273
+ key: 2,
274
+ class: "plinth-callout-actions"
275
+ }, ke = /* @__PURE__ */ d({
276
+ __name: "PlinthCallout",
277
+ props: {
278
+ tone: { default: "neutral" },
279
+ role: { default: "note" },
280
+ title: { default: void 0 }
281
+ },
282
+ setup(e) {
283
+ let t = e, n = w(), r = i(() => B(t.tone)), a = i(() => H(t.role));
284
+ return (t, i) => (h(), s("div", {
285
+ class: "plinth-callout",
286
+ "data-tone": r.value,
287
+ role: a.value
288
+ }, [x(G)(x(n).icon?.()) ? (h(), s("span", Ce, [v(t.$slots, "icon")])) : (h(), s("span", {
289
+ key: 1,
290
+ class: "plinth-icon plinth-callout-icon",
291
+ "data-size": "md",
292
+ "aria-hidden": "true",
293
+ innerHTML: x(W)[r.value]
294
+ }, null, 8, we)), c("div", Te, [
295
+ e.title?.trim() || x(G)(x(n).title?.()) ? (h(), s("p", Ee, [v(t.$slots, "title", {}, () => [l(b(e.title), 1)])])) : o("", !0),
296
+ x(G)(x(n).default?.()) ? (h(), s("div", De, [v(t.$slots, "default")])) : o("", !0),
297
+ x(G)(x(n).actions?.()) ? (h(), s("div", Oe, [v(t.$slots, "actions")])) : o("", !0)
298
+ ])], 8, Se));
299
+ }
300
+ }), Ae = (e) => e.slice(0, 6), je = (e, t) => Math.max(0, e.findIndex((e) => e.label === t));
301
+ function Me(e) {
302
+ let t = e.closest(".plinth-code-block"), n = [...t?.querySelectorAll(".plinth-code-block-tab-input") ?? []], r = Math.max(0, n.findIndex((e) => e.checked));
303
+ return t?.querySelectorAll(".plinth-code-block-code")[r]?.textContent ?? "";
304
+ }
305
+ //#endregion
306
+ //#region src/PlinthCodeBlock.vue?vue&type=script&setup=true&lang.ts
307
+ var Ne = ["id"], Pe = { class: "plinth-code-block-header" }, Fe = {
308
+ key: 0,
309
+ class: "plinth-code-block-label"
310
+ }, Ie = {
311
+ key: 1,
312
+ class: "plinth-code-block-label"
313
+ }, Le = ["aria-label"], Re = ["name", "checked"], ze = { class: "plinth-code-block-tab-label" }, Be = {
314
+ class: "plinth-code-block-status",
315
+ role: "status"
316
+ }, Ve = {
317
+ key: 0,
318
+ class: "plinth-code-block-code",
319
+ dir: "ltr",
320
+ tabindex: "0"
321
+ }, He = ["innerHTML"], Ue = {
322
+ key: 1,
323
+ class: "plinth-code-block-code",
324
+ dir: "ltr",
325
+ tabindex: "0"
326
+ }, We = {
327
+ key: 1,
328
+ class: "plinth-code-block-code",
329
+ dir: "ltr",
330
+ tabindex: "0"
331
+ }, Ge = ["innerHTML"], Ke = {
332
+ key: 2,
333
+ class: "plinth-code-block-code",
334
+ dir: "ltr",
335
+ tabindex: "0"
336
+ }, qe = /* @__PURE__ */ d({
337
+ __name: "PlinthCodeBlock",
338
+ props: {
339
+ id: { default: void 0 },
340
+ label: { default: void 0 },
341
+ html: { default: void 0 },
342
+ tabs: { default: () => [] },
343
+ selected: { default: void 0 },
344
+ tabsLabel: { default: "Language" },
345
+ copy: {
346
+ type: Boolean,
347
+ default: !0
348
+ },
349
+ copyLabel: { default: "Copy" },
350
+ copiedLabel: { default: "Copied" }
351
+ },
352
+ emits: ["copied"],
353
+ setup(e, { emit: n }) {
354
+ let r = e, a = n, d = w(), f = C(), y = i(() => r.id?.trim() || void 0), S = i(() => `${y.value ?? `plinth-code-block-${f}`}-language`), T = i(() => Ae(r.tabs)), E = je(Ae(r.tabs), r.selected), O = g(!1), k = g(!1), A;
355
+ m(() => {
356
+ O.value = !!navigator.clipboard;
357
+ }), p(() => clearTimeout(A));
358
+ async function j(e) {
359
+ let t = Me(e.currentTarget);
360
+ try {
361
+ await navigator.clipboard.writeText(t);
362
+ } catch {
363
+ return;
364
+ }
365
+ k.value = !0, clearTimeout(A), A = setTimeout(() => k.value = !1, 2e3), a("copied", t);
366
+ }
367
+ return (n, r) => (h(), s("div", {
368
+ id: y.value,
369
+ class: "plinth-code-block"
370
+ }, [c("div", Pe, [
371
+ x(G)(x(d).label?.()) ? (h(), s("span", Fe, [v(n.$slots, "label")])) : e.label?.trim() ? (h(), s("span", Ie, b(e.label), 1)) : o("", !0),
372
+ T.value.length ? (h(), s("div", {
373
+ key: 2,
374
+ class: "plinth-code-block-tabs",
375
+ role: "radiogroup",
376
+ "aria-label": e.tabsLabel
377
+ }, [(h(!0), s(t, null, _(T.value, (e, t) => (h(), s("label", {
378
+ key: t,
379
+ class: "plinth-code-block-tab"
380
+ }, [c("input", {
381
+ type: "radio",
382
+ class: "plinth-code-block-tab-input",
383
+ name: S.value,
384
+ checked: t === x(E)
385
+ }, null, 8, Re), c("span", ze, b(e.label), 1)]))), 128))], 8, Le)) : o("", !0),
386
+ e.copy ? (h(), s(t, { key: 3 }, [u(R, {
387
+ class: "plinth-code-block-copy",
388
+ variant: "ghost",
389
+ size: "sm",
390
+ hidden: !O.value,
391
+ onClick: j
392
+ }, {
393
+ default: D(() => [l(b(k.value ? e.copiedLabel : e.copyLabel), 1)]),
394
+ _: 1
395
+ }, 8, ["hidden"]), c("span", Be, b(k.value ? e.copiedLabel : ""), 1)], 64)) : o("", !0)
396
+ ]), T.value.length ? (h(!0), s(t, { key: 0 }, _(T.value, (e, n) => (h(), s(t, { key: n }, [e.html === void 0 ? (h(), s("pre", Ue, [c("code", null, b(e.code), 1)])) : (h(), s("pre", Ve, [c("code", { innerHTML: e.html }, null, 8, He)]))], 64))), 128)) : e.html === void 0 ? (h(), s("pre", Ke, [c("code", null, [v(n.$slots, "default")])])) : (h(), s("pre", We, [c("code", { innerHTML: e.html }, null, 8, Ge)]))], 8, Ne));
397
+ }
398
+ }), Je = [
399
+ "simple",
400
+ "type",
401
+ "password"
402
+ ];
403
+ function Ye(e) {
404
+ return Je.includes(e) ? e : "simple";
405
+ }
406
+ var Xe = ["neutral", "danger"];
407
+ function Ze(e) {
408
+ return Xe.includes(e) ? e : "neutral";
409
+ }
410
+ var Qe = {
411
+ type: "Type :phrase to confirm",
412
+ password: "Password"
413
+ }, $e = (e) => e.replace(/[\\^$.*+?()[\]{}|/]/g, "\\$&"), et = [
414
+ "start",
415
+ "end",
416
+ "top",
417
+ "bottom"
418
+ ];
419
+ function tt(e) {
420
+ return K(e) ?? "end";
421
+ }
422
+ function K(e) {
423
+ return et.includes(e) ? e : void 0;
424
+ }
425
+ var q = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"></path></svg>", nt = ["center", "bottom"];
426
+ function J(e) {
427
+ return nt.includes(e) ? e : "center";
428
+ }
429
+ var rt = q, it = [
430
+ "id",
431
+ "data-side-phone",
432
+ "aria-labelledby",
433
+ "aria-describedby"
434
+ ], at = {
435
+ method: "dialog",
436
+ class: "plinth-confirm-dialog-form"
437
+ }, ot = { class: "plinth-dialog-header" }, st = ["id"], ct = { class: "plinth-dialog-body" }, lt = ["id"], ut = {
438
+ key: 0,
439
+ class: "plinth-confirm-dialog-field"
440
+ }, dt = ["for"], ft = { key: 0 }, pt = [
441
+ "id",
442
+ "pattern",
443
+ "aria-invalid",
444
+ "aria-describedby"
445
+ ], mt = [
446
+ "id",
447
+ "aria-invalid",
448
+ "aria-describedby"
449
+ ], ht = ["id"], gt = { class: "plinth-dialog-footer" }, Y = /* @__PURE__ */ d({
450
+ __name: "PlinthConfirmDialog",
451
+ props: {
452
+ id: { default: void 0 },
453
+ title: {},
454
+ message: {},
455
+ kind: { default: "simple" },
456
+ phrase: { default: void 0 },
457
+ fieldLabel: { default: void 0 },
458
+ confirmLabel: { default: "Confirm" },
459
+ cancelLabel: { default: "Cancel" },
460
+ tone: { default: "neutral" },
461
+ error: { default: void 0 },
462
+ busy: {
463
+ type: Boolean,
464
+ default: !1
465
+ },
466
+ sidePhone: { default: "center" }
467
+ },
468
+ emits: ["close"],
469
+ setup(e, { expose: n, emit: r }) {
470
+ let a = e, d = r;
471
+ if (!a.title?.trim()) throw Error("<PlinthConfirmDialog> needs a title: it is the dialog's accessible name.");
472
+ if (!a.message?.trim()) throw Error("<PlinthConfirmDialog> needs a message: it is the dialog's accessible description.");
473
+ let f = i(() => Ye(a.kind));
474
+ if (f.value === "type" && !a.phrase?.trim()) throw Error("<PlinthConfirmDialog kind=\"type\"> needs a phrase: it is what the person types.");
475
+ let p = C(), m = i(() => a.id?.trim() || `plinth-confirm-dialog-${p}`), v = i(() => J(a.sidePhone)), y = i(() => a.phrase?.trim() ?? ""), S = i(() => f.value !== "simple" && !!a.error?.trim()), w = i(() => {
476
+ let e = a.fieldLabel?.trim() || Qe[f.value];
477
+ return f.value === "type" ? e.split(":phrase") : [e];
478
+ }), T = g();
479
+ return n({
480
+ showModal: () => T.value?.showModal(),
481
+ close: (e) => T.value?.close(e)
482
+ }), (n, r) => (h(), s("dialog", {
483
+ id: m.value,
484
+ ref_key: "dialog",
485
+ ref: T,
486
+ class: "plinth-dialog plinth-confirm-dialog",
487
+ role: "alertdialog",
488
+ "data-side-phone": v.value === "center" ? void 0 : v.value,
489
+ closedby: "closerequest",
490
+ "aria-labelledby": `${m.value}-title`,
491
+ "aria-describedby": `${m.value}-message`,
492
+ onClose: r[0] ||= (e) => d("close", e)
493
+ }, [c("form", at, [
494
+ c("div", ot, [c("h2", {
495
+ id: `${m.value}-title`,
496
+ class: "plinth-dialog-title"
497
+ }, b(e.title), 9, st)]),
498
+ c("div", ct, [
499
+ c("p", {
500
+ id: `${m.value}-message`,
501
+ class: "plinth-confirm-dialog-message"
502
+ }, b(e.message), 9, lt),
503
+ f.value === "simple" ? o("", !0) : (h(), s("div", ut, [c("label", {
504
+ for: `${m.value}-field`,
505
+ class: "plinth-confirm-dialog-label"
506
+ }, [(h(!0), s(t, null, _(w.value, (e, n) => (h(), s(t, { key: n }, [n > 0 ? (h(), s("strong", ft, b(y.value), 1)) : o("", !0), l(b(e), 1)], 64))), 128))], 8, dt), f.value === "type" ? (h(), s("input", {
507
+ key: 0,
508
+ id: `${m.value}-field`,
509
+ class: "plinth-confirm-dialog-input",
510
+ type: "text",
511
+ name: "confirmation",
512
+ required: "",
513
+ pattern: x($e)(y.value),
514
+ autocomplete: "off",
515
+ autocapitalize: "none",
516
+ spellcheck: "false",
517
+ "aria-invalid": S.value ? "true" : void 0,
518
+ "aria-describedby": S.value ? `${m.value}-error` : void 0
519
+ }, null, 8, pt)) : (h(), s("input", {
520
+ key: 1,
521
+ id: `${m.value}-field`,
522
+ class: "plinth-confirm-dialog-input",
523
+ type: "password",
524
+ name: "password",
525
+ required: "",
526
+ autocomplete: "current-password",
527
+ "aria-invalid": S.value ? "true" : void 0,
528
+ "aria-describedby": S.value ? `${m.value}-error` : void 0
529
+ }, null, 8, mt))])),
530
+ S.value ? (h(), s("p", {
531
+ key: 1,
532
+ id: `${m.value}-error`,
533
+ class: "plinth-confirm-dialog-error",
534
+ role: "alert"
535
+ }, b(e.error), 9, ht)) : o("", !0)
536
+ ]),
537
+ c("div", gt, [u(R, {
538
+ variant: "secondary",
539
+ commandfor: m.value,
540
+ command: "close",
541
+ value: "cancel"
542
+ }, {
543
+ default: D(() => [l(b(e.cancelLabel), 1)]),
544
+ _: 1
545
+ }, 8, ["commandfor"]), u(R, {
546
+ class: "plinth-confirm-dialog-confirm",
547
+ type: "submit",
548
+ value: "confirm",
549
+ variant: x(Ze)(e.tone) === "danger" ? "danger" : "primary",
550
+ busy: e.busy
551
+ }, {
552
+ default: D(() => [l(b(e.confirmLabel), 1)]),
553
+ _: 1
554
+ }, 8, ["variant", "busy"])])
555
+ ])], 40, it));
556
+ }
557
+ }), _t = {
558
+ class: "plinth-data-table",
559
+ role: "table"
560
+ }, vt = {
561
+ key: 0,
562
+ class: "plinth-data-table-caption"
563
+ }, yt = {
564
+ class: "plinth-data-table-head",
565
+ role: "rowgroup"
566
+ }, bt = {
567
+ class: "plinth-data-table-head-row",
568
+ role: "row"
569
+ }, xt = {
570
+ class: "plinth-data-table-body",
571
+ role: "rowgroup"
572
+ }, St = /* @__PURE__ */ d({
573
+ __name: "PlinthDataTable",
574
+ props: { caption: { default: void 0 } },
575
+ setup(e) {
576
+ return (t, n) => (h(), s("table", _t, [
577
+ e.caption?.trim() ? (h(), s("caption", vt, b(e.caption), 1)) : o("", !0),
578
+ c("thead", yt, [c("tr", bt, [v(t.$slots, "head")])]),
579
+ c("tbody", xt, [v(t.$slots, "default")])
580
+ ]));
581
+ }
582
+ }), Ct = [
583
+ "none",
584
+ "ascending",
585
+ "descending"
586
+ ];
587
+ function wt(e) {
588
+ return Ct.includes(e) ? e : "none";
589
+ }
590
+ var Tt = [
591
+ "field",
592
+ "title",
593
+ "actions"
594
+ ];
595
+ function Et(e) {
596
+ return Tt.includes(e) ? e : "field";
597
+ }
598
+ var Dt = "<span class=\"plinth-icon plinth-data-table-sort-icon\" data-size=\"sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path class=\"plinth-data-table-sort-up\" d=\"M8 9l4-4 4 4\"></path><path class=\"plinth-data-table-sort-down\" d=\"M8 15l4 4 4-4\"></path></svg></span>", Ot = [
599
+ "data-kind",
600
+ "data-numeric",
601
+ "data-phone"
602
+ ], kt = {
603
+ key: 0,
604
+ class: "plinth-data-table-label",
605
+ "aria-hidden": "true"
606
+ }, At = { class: "plinth-data-table-value" }, jt = /* @__PURE__ */ d({
607
+ __name: "PlinthDataTableCell",
608
+ props: {
609
+ label: { default: void 0 },
610
+ kind: { default: "field" },
611
+ numeric: {
612
+ type: Boolean,
613
+ default: !1
614
+ },
615
+ hideOnPhone: {
616
+ type: Boolean,
617
+ default: !1
618
+ }
619
+ },
620
+ setup(e) {
621
+ let t = e, n = i(() => Et(t.kind));
622
+ return (t, r) => (h(), s("td", {
623
+ class: "plinth-data-table-cell",
624
+ role: "cell",
625
+ "data-kind": n.value,
626
+ "data-numeric": e.numeric ? "" : void 0,
627
+ "data-phone": e.hideOnPhone ? "hidden" : void 0
628
+ }, [e.label?.trim() ? (h(), s("span", kt, b(e.label), 1)) : o("", !0), c("span", At, [v(t.$slots, "default")])], 8, Ot));
629
+ }
630
+ }), Mt = [
631
+ "aria-sort",
632
+ "data-numeric",
633
+ "data-phone"
634
+ ], Nt = /* @__PURE__ */ d({
635
+ __name: "PlinthDataTableColumn",
636
+ props: {
637
+ sort: { default: void 0 },
638
+ numeric: {
639
+ type: Boolean,
640
+ default: !1
641
+ },
642
+ hideOnPhone: {
643
+ type: Boolean,
644
+ default: !1
645
+ }
646
+ },
647
+ setup(e) {
648
+ let t = e, n = i(() => t.sort?.trim() ? wt(t.sort) : void 0);
649
+ return (t, r) => (h(), s("th", {
650
+ class: "plinth-data-table-column",
651
+ role: "columnheader",
652
+ scope: "col",
653
+ "aria-sort": n.value,
654
+ "data-numeric": e.numeric ? "" : void 0,
655
+ "data-phone": e.hideOnPhone ? "hidden" : void 0
656
+ }, [v(t.$slots, "default")], 8, Mt));
657
+ }
658
+ }), Pt = {
659
+ class: "plinth-data-table-empty",
660
+ role: "row"
661
+ }, Ft = ["colspan"], It = /* @__PURE__ */ d({
662
+ __name: "PlinthDataTableEmpty",
663
+ props: { columns: { default: 1 } },
664
+ setup(e) {
665
+ let t = e, n = /^\s*[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?\s*$/, r = i(() => {
666
+ let e = typeof t.columns == "number" ? t.columns : String(t.columns), r = typeof e == "number" || n.test(e) ? Number(e) : NaN;
667
+ return Number.isFinite(r) ? Math.max(1, Math.trunc(r)) : 1;
668
+ });
669
+ return (e, t) => (h(), s("tr", Pt, [c("td", {
670
+ class: "plinth-data-table-empty-cell",
671
+ role: "cell",
672
+ colspan: r.value
673
+ }, [v(e.$slots, "default")], 8, Ft)]));
674
+ }
675
+ }), Lt = ["aria-selected"], Rt = /* @__PURE__ */ d({
676
+ __name: "PlinthDataTableRow",
677
+ props: { selected: {
678
+ type: Boolean,
679
+ default: void 0
680
+ } },
681
+ setup(e) {
682
+ return (t, n) => (h(), s("tr", {
683
+ class: "plinth-data-table-row",
684
+ role: "row",
685
+ "aria-selected": e.selected === void 0 ? void 0 : e.selected ? "true" : "false"
686
+ }, [v(t.$slots, "default")], 8, Lt));
687
+ }
688
+ }), zt = {
689
+ type: "button",
690
+ class: "plinth-data-table-sort"
691
+ }, Bt = { class: "plinth-data-table-sort-label" }, Vt = /* @__PURE__ */ d({
692
+ __name: "PlinthDataTableSort",
693
+ setup(e) {
694
+ return (e, t) => (h(), s("button", zt, [c("span", Bt, [v(e.$slots, "default")]), t[0] ||= c("span", {
695
+ class: "plinth-icon plinth-data-table-sort-icon",
696
+ "data-size": "sm",
697
+ "aria-hidden": "true"
698
+ }, [c("svg", {
699
+ viewBox: "0 0 24 24",
700
+ fill: "none",
701
+ stroke: "currentColor",
702
+ "stroke-width": "2",
703
+ "stroke-linecap": "round",
704
+ "stroke-linejoin": "round"
705
+ }, [c("path", {
706
+ class: "plinth-data-table-sort-up",
707
+ d: "M8 9l4-4 4 4"
708
+ }), c("path", {
709
+ class: "plinth-data-table-sort-down",
710
+ d: "M8 15l4 4 4-4"
711
+ })])], -1)]));
712
+ }
713
+ }), Ht = [
714
+ "href",
715
+ "data-variant",
716
+ "data-size",
717
+ "aria-label",
718
+ "role",
719
+ "aria-busy",
720
+ "aria-disabled"
721
+ ], Ut = {
722
+ key: 0,
723
+ class: "plinth-button-spinner",
724
+ "aria-hidden": "true"
725
+ }, Wt = ["data-size", "data-mirror"], Gt = [
726
+ "data-variant",
727
+ "data-size",
728
+ "aria-label",
729
+ "aria-pressed",
730
+ "disabled",
731
+ "aria-busy",
732
+ "aria-disabled"
733
+ ], Kt = {
734
+ key: 0,
735
+ class: "plinth-button-spinner",
736
+ "aria-hidden": "true"
737
+ }, qt = ["data-size", "data-mirror"], X = /* @__PURE__ */ d({
738
+ inheritAttrs: !1,
739
+ __name: "PlinthIconButton",
740
+ props: {
741
+ label: {},
742
+ variant: { default: "ghost" },
743
+ size: { default: "md" },
744
+ href: { default: void 0 },
745
+ disabled: {
746
+ type: Boolean,
747
+ default: !1
748
+ },
749
+ busy: {
750
+ type: Boolean,
751
+ default: !1
752
+ },
753
+ pressed: {
754
+ type: [Boolean, null],
755
+ default: null
756
+ },
757
+ mirror: {
758
+ type: Boolean,
759
+ default: !1
760
+ }
761
+ },
762
+ setup(e) {
763
+ let t = e, n = S(), r = i(() => L(t.variant)), a = i(() => A(t.size, k, "md")), o = i(() => j(a.value)), c = i(() => t.busy && !t.disabled), l = i(() => t.label || n["aria-label"]), u = i(() => Object.fromEntries(Object.entries(n).filter(([e]) => e !== "aria-label")));
764
+ return (t, n) => e.href ? (h(), s("a", f({
765
+ key: 0,
766
+ class: "plinth-button plinth-icon-button",
767
+ href: e.disabled ? void 0 : e.href,
768
+ "data-variant": r.value,
769
+ "data-size": a.value,
770
+ "aria-label": l.value,
771
+ role: e.disabled ? "link" : void 0,
772
+ "aria-busy": c.value ? "true" : void 0,
773
+ "aria-disabled": c.value || e.disabled ? "true" : void 0
774
+ }, u.value), [c.value ? (h(), s("span", Ut)) : (h(), s("span", {
775
+ key: 1,
776
+ class: "plinth-icon",
777
+ "data-size": o.value,
778
+ "data-mirror": e.mirror ? "" : void 0,
779
+ "aria-hidden": "true"
780
+ }, [v(t.$slots, "default")], 8, Wt))], 16, Ht)) : (h(), s("button", f({
781
+ key: 1,
782
+ type: "button",
783
+ class: "plinth-button plinth-icon-button",
784
+ "data-variant": r.value,
785
+ "data-size": a.value,
786
+ "aria-label": l.value,
787
+ "aria-pressed": e.pressed === null ? void 0 : e.pressed ? "true" : "false",
788
+ disabled: e.disabled || void 0,
789
+ "aria-busy": c.value ? "true" : void 0,
790
+ "aria-disabled": c.value ? "true" : void 0
791
+ }, u.value), [c.value ? (h(), s("span", Kt)) : (h(), s("span", {
792
+ key: 1,
793
+ class: "plinth-icon",
794
+ "data-size": o.value,
795
+ "data-mirror": e.mirror ? "" : void 0,
796
+ "aria-hidden": "true"
797
+ }, [v(t.$slots, "default")], 8, qt))], 16, Gt));
798
+ }
799
+ });
800
+ //#endregion
801
+ //#region src/swipe.ts
802
+ function Jt(e) {
803
+ let t = e.firstElementChild, n = () => getComputedStyle(e).scrollSnapType.startsWith("y"), r = () => {
804
+ e.requestClose ? e.requestClose() : e.close(), e.open && (e.scrollTop = 0);
805
+ }, i = () => {
806
+ let i = t.getBoundingClientRect().top >= e.getBoundingClientRect().bottom - 1;
807
+ e.open && n() && i && r();
808
+ }, a = (t) => {
809
+ t.target === e && n() && e.getAttribute("closedby") === "any" && r();
810
+ }, o = (r) => {
811
+ let [i, a] = t.children, o = {
812
+ peek: i,
813
+ half: a
814
+ }[e.dataset.snap ?? ""];
815
+ if (r.newState !== "open" || !o || !n()) return;
816
+ let s = parseFloat(getComputedStyle(o).scrollMarginBlockStart);
817
+ e.scrollTop += o.getBoundingClientRect().top - e.getBoundingClientRect().top - s;
818
+ }, s = "onscrollend" in window ? "scrollend" : "scroll";
819
+ return e.addEventListener(s, i), e.addEventListener("click", a), e.addEventListener("toggle", o), () => {
820
+ e.removeEventListener(s, i), e.removeEventListener("click", a), e.removeEventListener("toggle", o);
821
+ };
822
+ }
823
+ function Z(e) {
824
+ let t;
825
+ m(() => {
826
+ t = e.value ? Jt(e.value) : void 0;
827
+ }), p(() => t?.());
828
+ }
829
+ //#endregion
830
+ //#region src/PlinthDialog.vue?vue&type=script&setup=true&lang.ts
831
+ var Yt = [
832
+ "id",
833
+ "role",
834
+ "data-side-phone",
835
+ "closedby",
836
+ "aria-labelledby",
837
+ "aria-describedby"
838
+ ], Xt = { class: "plinth-dialog-panel" }, Zt = {
839
+ key: 0,
840
+ class: "plinth-dialog-handle",
841
+ "aria-hidden": "true"
842
+ }, Qt = { class: "plinth-dialog-header" }, $t = ["id"], en = ["id"], tn = { class: "plinth-dialog-body" }, nn = {
843
+ key: 1,
844
+ class: "plinth-dialog-footer"
845
+ }, rn = /* @__PURE__ */ d({
846
+ __name: "PlinthDialog",
847
+ props: {
848
+ id: { default: void 0 },
849
+ title: {},
850
+ description: { default: void 0 },
851
+ closeLabel: { default: "Close" },
852
+ dismissible: {
853
+ type: Boolean,
854
+ default: !0
855
+ },
856
+ sidePhone: { default: "center" }
857
+ },
858
+ emits: ["close"],
859
+ setup(e, { expose: t, emit: n }) {
860
+ let r = e, l = n;
861
+ if (!r.title?.trim()) throw Error("<PlinthDialog> needs a title: it is the dialog's accessible name.");
862
+ let u = w(), d = C(), f = i(() => r.id?.trim() || `plinth-dialog-${d}`), p = i(() => J(r.sidePhone)), m = i(() => !!r.description?.trim()), _ = g();
863
+ return Z(_), t({
864
+ showModal: () => _.value?.showModal(),
865
+ close: () => _.value?.close()
866
+ }), (t, n) => (h(), s("dialog", {
867
+ id: f.value,
868
+ ref_key: "dialog",
869
+ ref: _,
870
+ class: "plinth-dialog",
871
+ role: e.dismissible ? void 0 : "alertdialog",
872
+ "data-side-phone": p.value === "center" ? void 0 : p.value,
873
+ closedby: e.dismissible ? "any" : "closerequest",
874
+ "aria-labelledby": `${f.value}-title`,
875
+ "aria-describedby": m.value ? `${f.value}-description` : void 0,
876
+ onClose: n[0] ||= (e) => l("close", e)
877
+ }, [c("div", Xt, [
878
+ e.dismissible && p.value === "bottom" ? (h(), s("div", Zt)) : o("", !0),
879
+ c("div", Qt, [
880
+ c("h2", {
881
+ id: `${f.value}-title`,
882
+ class: "plinth-dialog-title"
883
+ }, b(e.title), 9, $t),
884
+ m.value ? (h(), s("p", {
885
+ key: 0,
886
+ id: `${f.value}-description`,
887
+ class: "plinth-dialog-description"
888
+ }, b(e.description), 9, en)) : o("", !0),
889
+ e.dismissible ? (h(), a(X, {
890
+ key: 1,
891
+ class: "plinth-dialog-close",
892
+ label: e.closeLabel,
893
+ variant: "ghost",
894
+ commandfor: f.value,
895
+ command: "close"
896
+ }, {
897
+ default: D(() => [...n[1] ||= [c("svg", {
898
+ viewBox: "0 0 24 24",
899
+ fill: "none",
900
+ stroke: "currentColor",
901
+ "stroke-width": "2",
902
+ "stroke-linecap": "round",
903
+ "stroke-linejoin": "round"
904
+ }, [c("path", { d: "M6 6l12 12M18 6L6 18" })], -1)]]),
905
+ _: 1
906
+ }, 8, ["label", "commandfor"])) : o("", !0)
907
+ ]),
908
+ c("div", tn, [v(t.$slots, "default")]),
909
+ x(G)(x(u).footer?.()) ? (h(), s("div", nn, [v(t.$slots, "footer")])) : o("", !0)
910
+ ])], 40, Yt));
911
+ }
912
+ }), an = ["dialog", "sheet"];
913
+ function on(e) {
914
+ return an.includes(e) ? e : "dialog";
915
+ }
916
+ var sn = [
917
+ "peek",
918
+ "half",
919
+ "full"
920
+ ];
921
+ function cn(e) {
922
+ let t = typeof e == "string" ? e.split(/\s+/) : e ?? [];
923
+ return sn.filter((e) => t.includes(e));
924
+ }
925
+ function ln(e, t) {
926
+ return t.includes(e) ? e : t.at(-1);
927
+ }
928
+ var un = q, dn = [
929
+ "id",
930
+ "data-desktop",
931
+ "data-snap-points",
932
+ "data-snap",
933
+ "aria-labelledby",
934
+ "aria-describedby"
935
+ ], fn = { class: "plinth-drawer-panel" }, pn = { class: "plinth-drawer-header" }, mn = ["id"], hn = ["id"], gn = { class: "plinth-drawer-body" }, _n = {
936
+ key: 0,
937
+ class: "plinth-drawer-footer"
938
+ }, vn = /* @__PURE__ */ d({
939
+ __name: "PlinthDrawer",
940
+ props: {
941
+ id: { default: void 0 },
942
+ title: {},
943
+ description: { default: void 0 },
944
+ closeLabel: { default: "Close" },
945
+ desktop: { default: "dialog" },
946
+ snapPoints: { default: void 0 },
947
+ snap: { default: void 0 }
948
+ },
949
+ emits: ["close"],
950
+ setup(e, { expose: t, emit: n }) {
951
+ let r = e, a = n;
952
+ if (!r.title?.trim()) throw Error("<PlinthDrawer> needs a title: it is the drawer's accessible name.");
953
+ let l = w(), d = C(), f = i(() => r.id?.trim() || `plinth-drawer-${d}`), p = i(() => cn(r.snapPoints)), m = i(() => !!r.description?.trim()), _ = g();
954
+ return Z(_), t({
955
+ showModal: () => _.value?.showModal(),
956
+ close: () => _.value?.close()
957
+ }), (t, n) => (h(), s("dialog", {
958
+ id: f.value,
959
+ ref_key: "dialog",
960
+ ref: _,
961
+ class: "plinth-drawer",
962
+ "data-desktop": x(on)(e.desktop),
963
+ "data-snap-points": p.value.length ? p.value.join(" ") : void 0,
964
+ "data-snap": x(ln)(e.snap, p.value),
965
+ closedby: "any",
966
+ "aria-labelledby": `${f.value}-title`,
967
+ "aria-describedby": m.value ? `${f.value}-description` : void 0,
968
+ onClose: n[0] ||= (e) => a("close", e)
969
+ }, [c("div", fn, [
970
+ n[2] ||= c("div", {
971
+ class: "plinth-drawer-handle",
972
+ "aria-hidden": "true"
973
+ }, null, -1),
974
+ c("div", pn, [
975
+ c("h2", {
976
+ id: `${f.value}-title`,
977
+ class: "plinth-drawer-title"
978
+ }, b(e.title), 9, mn),
979
+ m.value ? (h(), s("p", {
980
+ key: 0,
981
+ id: `${f.value}-description`,
982
+ class: "plinth-drawer-description"
983
+ }, b(e.description), 9, hn)) : o("", !0),
984
+ u(X, {
985
+ class: "plinth-drawer-close",
986
+ label: e.closeLabel,
987
+ variant: "ghost",
988
+ commandfor: f.value,
989
+ command: "close"
990
+ }, {
991
+ default: D(() => [...n[1] ||= [c("svg", {
992
+ viewBox: "0 0 24 24",
993
+ fill: "none",
994
+ stroke: "currentColor",
995
+ "stroke-width": "2",
996
+ "stroke-linecap": "round",
997
+ "stroke-linejoin": "round"
998
+ }, [c("path", { d: "M6 6l12 12M18 6L6 18" })], -1)]]),
999
+ _: 1
1000
+ }, 8, ["label", "commandfor"])
1001
+ ]),
1002
+ c("div", gn, [v(t.$slots, "default")]),
1003
+ x(G)(x(l).footer?.()) ? (h(), s("div", _n, [v(t.$slots, "footer")])) : o("", !0)
1004
+ ])], 40, dn));
1005
+ }
1006
+ }), yn = { class: "plinth-header" }, bn = {
1007
+ key: 0,
1008
+ class: "plinth-header-leading"
1009
+ }, xn = { class: "plinth-header-title" }, Sn = {
1010
+ key: 1,
1011
+ class: "plinth-header-actions"
1012
+ }, Cn = /* @__PURE__ */ d({
1013
+ __name: "PlinthHeader",
1014
+ props: { title: {} },
1015
+ setup(e) {
1016
+ if (!e.title?.trim()) throw Error("<PlinthHeader> needs a title: it is the page's heading.");
1017
+ let t = w();
1018
+ return (n, r) => (h(), s("header", yn, [
1019
+ x(G)(x(t).leading?.()) ? (h(), s("div", bn, [v(n.$slots, "leading")])) : o("", !0),
1020
+ c("h1", xn, b(e.title), 1),
1021
+ x(G)(x(t).actions?.()) ? (h(), s("div", Sn, [v(n.$slots, "actions")])) : o("", !0)
1022
+ ]));
1023
+ }
1024
+ }), wn = [
1025
+ "sm",
1026
+ "md",
1027
+ "lg"
1028
+ ];
1029
+ function Tn(e) {
1030
+ return A(e, wn, "md");
1031
+ }
1032
+ //#endregion
1033
+ //#region src/PlinthIcon.vue?vue&type=script&setup=true&lang.ts
1034
+ var En = [
1035
+ "data-size",
1036
+ "data-mirror",
1037
+ "role",
1038
+ "aria-label",
1039
+ "aria-hidden"
1040
+ ], Dn = /* @__PURE__ */ d({
1041
+ inheritAttrs: !1,
1042
+ __name: "PlinthIcon",
1043
+ props: {
1044
+ size: { default: "md" },
1045
+ label: { default: void 0 },
1046
+ mirror: {
1047
+ type: Boolean,
1048
+ default: !1
1049
+ }
1050
+ },
1051
+ setup(e) {
1052
+ let t = e, n = S(), r = i(() => Tn(t.size)), a = i(() => {
1053
+ let e = t.label ?? n["aria-label"];
1054
+ return e?.trim() ? e : void 0;
1055
+ }), o = i(() => Object.fromEntries(Object.entries(n).filter(([e]) => e !== "aria-label")));
1056
+ return (t, n) => (h(), s("span", f({
1057
+ class: "plinth-icon",
1058
+ "data-size": r.value,
1059
+ "data-mirror": e.mirror ? "" : void 0,
1060
+ role: a.value ? "img" : void 0,
1061
+ "aria-label": a.value,
1062
+ "aria-hidden": a.value ? void 0 : "true"
1063
+ }, o.value), [v(t.$slots, "default")], 16, En));
1064
+ }
1065
+ }), On = [
1066
+ "h2",
1067
+ "h3",
1068
+ "h4",
1069
+ "h5",
1070
+ "h6"
1071
+ ];
1072
+ function kn(e) {
1073
+ return On.includes(e) ? e : "h2";
1074
+ }
1075
+ //#endregion
1076
+ //#region src/PlinthListCard.vue?vue&type=script&setup=true&lang.ts
1077
+ var An = { class: "plinth-list-card" }, jn = {
1078
+ class: "plinth-list-card-list",
1079
+ role: "list"
1080
+ }, Mn = {
1081
+ key: 1,
1082
+ class: "plinth-list-card-footer"
1083
+ }, Nn = /* @__PURE__ */ d({
1084
+ __name: "PlinthListCard",
1085
+ props: {
1086
+ heading: { default: void 0 },
1087
+ headingLevel: { default: "h2" },
1088
+ footer: { default: void 0 }
1089
+ },
1090
+ setup(e) {
1091
+ let t = e, n = i(() => kn(t.headingLevel));
1092
+ return (t, r) => (h(), s("div", An, [
1093
+ e.heading?.trim() ? (h(), a(y(n.value), {
1094
+ key: 0,
1095
+ class: "plinth-list-card-heading"
1096
+ }, {
1097
+ default: D(() => [l(b(e.heading), 1)]),
1098
+ _: 1
1099
+ })) : o("", !0),
1100
+ c("ul", jn, [v(t.$slots, "default")]),
1101
+ e.footer?.trim() ? (h(), s("p", Mn, b(e.footer), 1)) : o("", !0)
1102
+ ]));
1103
+ }
1104
+ }), Pn = {
1105
+ key: 0,
1106
+ class: "plinth-list-row-leading"
1107
+ }, Fn = { class: "plinth-list-row-content" }, In = { class: "plinth-list-row-title" }, Ln = {
1108
+ key: 0,
1109
+ class: "plinth-list-row-description"
1110
+ }, Rn = {
1111
+ key: 1,
1112
+ class: "plinth-list-row-trailing"
1113
+ }, zn = {
1114
+ key: 0,
1115
+ class: "plinth-icon plinth-list-row-chevron",
1116
+ "data-size": "sm",
1117
+ "data-mirror": "",
1118
+ "aria-hidden": "true"
1119
+ }, Q = /* @__PURE__ */ d({
1120
+ __name: "PlinthListRow",
1121
+ props: {
1122
+ description: { default: void 0 },
1123
+ chevron: {
1124
+ type: Boolean,
1125
+ default: !1
1126
+ },
1127
+ href: { default: void 0 },
1128
+ button: {
1129
+ type: Boolean,
1130
+ default: !1
1131
+ },
1132
+ current: {
1133
+ type: Boolean,
1134
+ default: !1
1135
+ },
1136
+ disabled: {
1137
+ type: Boolean,
1138
+ default: !1
1139
+ }
1140
+ },
1141
+ setup(e) {
1142
+ let t = e, n = i(() => t.href ? "a" : t.button ? "button" : "div");
1143
+ return (t, r) => (h(), a(y(n.value), {
1144
+ class: "plinth-list-row",
1145
+ type: n.value === "button" ? "button" : void 0,
1146
+ href: n.value === "a" && !e.disabled ? e.href : void 0,
1147
+ "aria-current": e.current && n.value !== "button" ? "page" : void 0,
1148
+ disabled: n.value === "button" && e.disabled ? !0 : void 0,
1149
+ role: n.value === "a" && e.disabled ? "link" : void 0,
1150
+ "aria-disabled": n.value === "a" && e.disabled ? "true" : void 0
1151
+ }, {
1152
+ default: D(() => [
1153
+ t.$slots.leading ? (h(), s("span", Pn, [v(t.$slots, "leading")])) : o("", !0),
1154
+ c("span", Fn, [c("span", In, [v(t.$slots, "default")]), e.description ? (h(), s("span", Ln, b(e.description), 1)) : o("", !0)]),
1155
+ t.$slots.trailing || e.chevron ? (h(), s("span", Rn, [v(t.$slots, "trailing"), e.chevron ? (h(), s("span", zn, [...r[0] ||= [c("svg", {
1156
+ viewBox: "0 0 24 24",
1157
+ fill: "none",
1158
+ stroke: "currentColor",
1159
+ "stroke-width": "2",
1160
+ "stroke-linecap": "round",
1161
+ "stroke-linejoin": "round"
1162
+ }, [c("path", { d: "M9 6l6 6-6 6" })], -1)]])) : o("", !0)])) : o("", !0)
1163
+ ]),
1164
+ _: 3
1165
+ }, 8, [
1166
+ "type",
1167
+ "href",
1168
+ "aria-current",
1169
+ "disabled",
1170
+ "role",
1171
+ "aria-disabled"
1172
+ ]));
1173
+ }
1174
+ }), Bn = [
1175
+ "id",
1176
+ "data-side",
1177
+ "data-side-phone",
1178
+ "aria-labelledby",
1179
+ "aria-describedby"
1180
+ ], Vn = { class: "plinth-sheet-panel" }, Hn = {
1181
+ key: 0,
1182
+ class: "plinth-sheet-handle",
1183
+ "aria-hidden": "true"
1184
+ }, Un = { class: "plinth-sheet-header" }, Wn = ["id"], Gn = ["id"], Kn = { class: "plinth-sheet-body" }, qn = {
1185
+ key: 1,
1186
+ class: "plinth-sheet-footer"
1187
+ }, $ = /* @__PURE__ */ d({
1188
+ __name: "PlinthSheet",
1189
+ props: {
1190
+ id: { default: void 0 },
1191
+ title: {},
1192
+ description: { default: void 0 },
1193
+ closeLabel: { default: "Close" },
1194
+ side: { default: "end" },
1195
+ sidePhone: { default: void 0 }
1196
+ },
1197
+ emits: ["close"],
1198
+ setup(e, { expose: t, emit: n }) {
1199
+ let r = e, a = n;
1200
+ if (!r.title?.trim()) throw Error("<PlinthSheet> needs a title: it is the sheet's accessible name.");
1201
+ let l = w(), d = C(), f = i(() => r.id?.trim() || `plinth-sheet-${d}`), p = i(() => tt(r.side)), m = i(() => K(r.sidePhone)), _ = i(() => !!r.description?.trim()), y = g(), S = i(() => (m.value ?? p.value) === "bottom");
1202
+ return Z(y), t({
1203
+ showModal: () => y.value?.showModal(),
1204
+ close: () => y.value?.close()
1205
+ }), (t, n) => (h(), s("dialog", {
1206
+ id: f.value,
1207
+ ref_key: "dialog",
1208
+ ref: y,
1209
+ class: "plinth-sheet",
1210
+ "data-side": p.value,
1211
+ "data-side-phone": m.value,
1212
+ closedby: "any",
1213
+ "aria-labelledby": `${f.value}-title`,
1214
+ "aria-describedby": _.value ? `${f.value}-description` : void 0,
1215
+ onClose: n[0] ||= (e) => a("close", e)
1216
+ }, [c("div", Vn, [
1217
+ S.value ? (h(), s("div", Hn)) : o("", !0),
1218
+ c("div", Un, [
1219
+ c("h2", {
1220
+ id: `${f.value}-title`,
1221
+ class: "plinth-sheet-title"
1222
+ }, b(e.title), 9, Wn),
1223
+ _.value ? (h(), s("p", {
1224
+ key: 0,
1225
+ id: `${f.value}-description`,
1226
+ class: "plinth-sheet-description"
1227
+ }, b(e.description), 9, Gn)) : o("", !0),
1228
+ u(X, {
1229
+ class: "plinth-sheet-close",
1230
+ label: e.closeLabel,
1231
+ variant: "ghost",
1232
+ commandfor: f.value,
1233
+ command: "close"
1234
+ }, {
1235
+ default: D(() => [...n[1] ||= [c("svg", {
1236
+ viewBox: "0 0 24 24",
1237
+ fill: "none",
1238
+ stroke: "currentColor",
1239
+ "stroke-width": "2",
1240
+ "stroke-linecap": "round",
1241
+ "stroke-linejoin": "round"
1242
+ }, [c("path", { d: "M6 6l12 12M18 6L6 18" })], -1)]]),
1243
+ _: 1
1244
+ }, 8, ["label", "commandfor"])
1245
+ ]),
1246
+ c("div", Kn, [v(t.$slots, "default")]),
1247
+ x(G)(x(l).footer?.()) ? (h(), s("div", qn, [v(t.$slots, "footer")])) : o("", !0)
1248
+ ])], 40, Bn));
1249
+ }
1250
+ }), Jn = ["aria-labelledby"], Yn = {
1251
+ key: 1,
1252
+ class: "plinth-menu-sheet-account"
1253
+ }, Xn = /* @__PURE__ */ d({
1254
+ __name: "PlinthMenuSheet",
1255
+ props: {
1256
+ id: { default: void 0 },
1257
+ title: { default: "Menu" },
1258
+ closeLabel: { default: "Close" },
1259
+ userName: { default: void 0 },
1260
+ userDetail: { default: void 0 },
1261
+ userSrc: { default: void 0 },
1262
+ userHref: { default: void 0 }
1263
+ },
1264
+ emits: ["close"],
1265
+ setup(e, { expose: t, emit: n }) {
1266
+ let r = e, d = n, f = w(), p = C(), m = i(() => r.id?.trim() || `plinth-menu-sheet-${p}`), _ = i(() => !!r.userName?.trim()), y = i(() => r.userHref?.trim() ? r.userHref : void 0), S = i(() => r.userSrc?.trim() ? r.userSrc : void 0), T = i(() => r.userDetail?.trim() ? r.userDetail : void 0), E = g();
1267
+ return t({
1268
+ showModal: () => E.value?.showModal(),
1269
+ close: () => E.value?.close()
1270
+ }), (t, n) => (h(), a($, {
1271
+ id: m.value,
1272
+ ref_key: "sheet",
1273
+ ref: E,
1274
+ class: "plinth-menu-sheet",
1275
+ title: e.title,
1276
+ "close-label": e.closeLabel,
1277
+ side: "end",
1278
+ "side-phone": "bottom",
1279
+ onClose: n[0] ||= (e) => d("close", e)
1280
+ }, {
1281
+ default: D(() => [
1282
+ _.value ? (h(), a(Q, {
1283
+ key: 0,
1284
+ class: "plinth-menu-sheet-user",
1285
+ description: T.value,
1286
+ href: y.value,
1287
+ chevron: !!y.value
1288
+ }, {
1289
+ leading: D(() => [u(P, {
1290
+ name: e.userName,
1291
+ src: S.value,
1292
+ size: "lg",
1293
+ decorative: ""
1294
+ }, null, 8, ["name", "src"])]),
1295
+ default: D(() => [l(b(e.userName), 1)]),
1296
+ _: 1
1297
+ }, 8, [
1298
+ "description",
1299
+ "href",
1300
+ "chevron"
1301
+ ])) : o("", !0),
1302
+ c("nav", {
1303
+ class: "plinth-menu-sheet-nav",
1304
+ "aria-labelledby": `${m.value}-title`
1305
+ }, [v(t.$slots, "default")], 8, Jn),
1306
+ x(G)(x(f).account?.()) ? (h(), s("div", Yn, [v(t.$slots, "account")])) : o("", !0)
1307
+ ]),
1308
+ _: 3
1309
+ }, 8, [
1310
+ "id",
1311
+ "title",
1312
+ "close-label"
1313
+ ]));
1314
+ }
1315
+ }), Zn = { class: "plinth-pill-label" }, Qn = {
1316
+ key: 0,
1317
+ class: "plinth-pill-count"
1318
+ }, $n = /* @__PURE__ */ d({
1319
+ __name: "PlinthPill",
1320
+ props: {
1321
+ count: { default: void 0 },
1322
+ href: { default: void 0 },
1323
+ selected: {
1324
+ type: Boolean,
1325
+ default: !1
1326
+ },
1327
+ disabled: {
1328
+ type: Boolean,
1329
+ default: !1
1330
+ }
1331
+ },
1332
+ setup(e) {
1333
+ let t = e, n = i(() => t.href ? "a" : "button"), r = i(() => t.count != null && String(t.count).trim() !== "");
1334
+ return (t, i) => (h(), a(y(n.value), {
1335
+ class: "plinth-pill",
1336
+ type: n.value === "button" ? "button" : void 0,
1337
+ href: n.value === "a" && !e.disabled ? e.href : void 0,
1338
+ "aria-pressed": n.value === "button" ? String(e.selected) : void 0,
1339
+ "aria-current": n.value === "a" && e.selected ? "page" : void 0,
1340
+ disabled: n.value === "button" && e.disabled ? !0 : void 0,
1341
+ role: n.value === "a" && e.disabled ? "link" : void 0,
1342
+ "aria-disabled": n.value === "a" && e.disabled ? "true" : void 0
1343
+ }, {
1344
+ default: D(() => [c("span", Zn, [v(t.$slots, "default")]), r.value ? (h(), s("span", Qn, b(e.count), 1)) : o("", !0)]),
1345
+ _: 3
1346
+ }, 8, [
1347
+ "type",
1348
+ "href",
1349
+ "aria-pressed",
1350
+ "aria-current",
1351
+ "disabled",
1352
+ "role",
1353
+ "aria-disabled"
1354
+ ]));
1355
+ }
1356
+ }), er = /* @__PURE__ */ d({
1357
+ __name: "PlinthPillRow",
1358
+ props: {
1359
+ label: { default: void 0 },
1360
+ nav: {
1361
+ type: Boolean,
1362
+ default: !1
1363
+ }
1364
+ },
1365
+ setup(e) {
1366
+ return (t, n) => (h(), a(y(e.nav ? "nav" : "div"), {
1367
+ class: "plinth-pill-row",
1368
+ role: e.nav ? void 0 : "group",
1369
+ "aria-label": e.label || void 0
1370
+ }, {
1371
+ default: D(() => [v(t.$slots, "default")]),
1372
+ _: 3
1373
+ }, 8, ["role", "aria-label"]));
1374
+ }
1375
+ }), tr = /* @__PURE__ */ d({
1376
+ __name: "PlinthSectionMenu",
1377
+ props: {
1378
+ label: { default: void 0 },
1379
+ nav: {
1380
+ type: Boolean,
1381
+ default: !0
1382
+ }
1383
+ },
1384
+ setup(e) {
1385
+ return (t, n) => (h(), a(y(e.nav ? "nav" : "div"), {
1386
+ class: "plinth-section-menu",
1387
+ role: e.nav ? void 0 : "group",
1388
+ "aria-label": e.label?.trim() ? e.label : void 0
1389
+ }, {
1390
+ default: D(() => [v(t.$slots, "default")]),
1391
+ _: 3
1392
+ }, 8, ["role", "aria-label"]));
1393
+ }
1394
+ }), nr = { class: "plinth-section-menu-label" }, rr = {
1395
+ key: 0,
1396
+ class: "plinth-section-menu-count"
1397
+ }, ir = /* @__PURE__ */ d({
1398
+ __name: "PlinthSectionMenuItem",
1399
+ props: {
1400
+ count: { default: void 0 },
1401
+ href: { default: void 0 },
1402
+ current: {
1403
+ type: Boolean,
1404
+ default: !1
1405
+ },
1406
+ disabled: {
1407
+ type: Boolean,
1408
+ default: !1
1409
+ }
1410
+ },
1411
+ setup(e) {
1412
+ let t = e, n = i(() => t.href?.trim() ? "a" : "button"), r = i(() => t.count != null && String(t.count).trim() !== "");
1413
+ return (t, i) => (h(), a(y(n.value), {
1414
+ class: "plinth-section-menu-item",
1415
+ type: n.value === "button" ? "button" : void 0,
1416
+ href: n.value === "a" && !e.disabled ? e.href : void 0,
1417
+ "aria-pressed": n.value === "button" ? String(e.current) : void 0,
1418
+ "aria-current": n.value === "a" && e.current ? "page" : void 0,
1419
+ disabled: n.value === "button" && e.disabled ? !0 : void 0,
1420
+ role: n.value === "a" && e.disabled ? "link" : void 0,
1421
+ "aria-disabled": n.value === "a" && e.disabled ? "true" : void 0
1422
+ }, {
1423
+ default: D(() => [c("span", nr, [v(t.$slots, "default")]), r.value ? (h(), s("span", rr, b(e.count), 1)) : o("", !0)]),
1424
+ _: 3
1425
+ }, 8, [
1426
+ "type",
1427
+ "href",
1428
+ "aria-pressed",
1429
+ "aria-current",
1430
+ "disabled",
1431
+ "role",
1432
+ "aria-disabled"
1433
+ ]));
1434
+ }
1435
+ }), ar = "<span class=\"plinth-icon plinth-list-row-chevron\" data-size=\"sm\" data-mirror aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 6l6 6-6 6\"></path></svg></span>", or = { install(e) {
1436
+ e.component("PlinthAvatar", P), e.component("PlinthBadge", F), e.component("PlinthButton", R), e.component("PlinthCallout", ke), e.component("PlinthCodeBlock", qe), e.component("PlinthConfirmDialog", Y), e.component("PlinthDataTable", St), e.component("PlinthDataTableCell", jt), e.component("PlinthDataTableColumn", Nt), e.component("PlinthDataTableEmpty", It), e.component("PlinthDataTableRow", Rt), e.component("PlinthDataTableSort", Vt), e.component("PlinthDialog", rn), e.component("PlinthDrawer", vn), e.component("PlinthHeader", Cn), e.component("PlinthIcon", Dn), e.component("PlinthIconButton", X), e.component("PlinthListCard", Nn), e.component("PlinthListRow", Q), e.component("PlinthMenuSheet", Xn), e.component("PlinthPill", $n), e.component("PlinthPillRow", er), e.component("PlinthSectionMenu", tr), e.component("PlinthSectionMenuItem", ir), e.component("PlinthSheet", $);
1437
+ } };
1438
+ //#endregion
1439
+ export { or as Plinth, P as PlinthAvatar, F as PlinthBadge, R as PlinthButton, ke as PlinthCallout, qe as PlinthCodeBlock, Y as PlinthConfirmDialog, St as PlinthDataTable, jt as PlinthDataTableCell, Nt as PlinthDataTableColumn, It as PlinthDataTableEmpty, Rt as PlinthDataTableRow, Vt as PlinthDataTableSort, rn as PlinthDialog, vn as PlinthDrawer, Cn as PlinthHeader, Dn as PlinthIcon, X as PlinthIconButton, Nn as PlinthListCard, Q as PlinthListRow, Xn as PlinthMenuSheet, $n as PlinthPill, er as PlinthPillRow, tr as PlinthSectionMenu, ir as PlinthSectionMenuItem, $ as PlinthSheet, ne as avatarGlyph, ee as avatarSizes, I as buttonVariants, W as calloutIcons, H as calloutRole, V as calloutRoles, B as calloutTone, z as calloutTones, Qe as confirmDialogFieldLabels, Ye as confirmDialogKind, Je as confirmDialogKinds, $e as confirmDialogPattern, Ze as confirmDialogTone, Xe as confirmDialogTones, k as controlSizes, Et as dataTableCellKind, Tt as dataTableCellKinds, wt as dataTableSort, Dt as dataTableSortIcon, Ct as dataTableSorts, rt as dialogCloseIcon, J as dialogSidePhone, nt as dialogSidePhones, un as drawerCloseIcon, on as drawerDesktop, an as drawerDesktops, ln as drawerSnap, cn as drawerSnapPoints, sn as drawerSnaps, kn as headingLevel, On as headingLevels, j as iconSizeFor, wn as iconSizes, M as initialsFrom, ar as listRowChevron, A as resolveSize, q as sheetCloseIcon, tt as sheetSide, K as sheetSidePhone, et as sheetSides, O as sizes, Jt as swipeToClose, N as tones, Z as useSwipeToClose };