@filipgutica/ui 1.15.0 → 1.16.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.
@@ -8,7 +8,8 @@ export interface UiSegmentedControlProps<T extends string = string> {
8
8
  /** Names the group for assistive technology. */
9
9
  label: string;
10
10
  items: readonly UiSegmentedItem<T>[];
11
- modelValue?: T;
11
+ /** The pressed option. Undefined leaves every option unpressed. */
12
+ modelValue?: T | undefined;
12
13
  /** Shows only the icon slot; each label becomes the button's accessible name and tooltip. */
13
14
  iconOnly?: boolean;
14
15
  disabled?: boolean;
@@ -0,0 +1,12 @@
1
+ import type { SiteAppearanceChoice } from './appearance.js';
2
+ export interface UiSiteAppearancePickerProps {
3
+ /** The pressed choice. Leave it undefined when another theme is active, so no option is pressed. */
4
+ modelValue?: SiteAppearanceChoice | undefined;
5
+ }
6
+ declare const __VLS_export: import("vue").DefineComponent<UiSiteAppearancePickerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
7
+ "update:modelValue": (value: SiteAppearanceChoice) => any;
8
+ }, string, import("vue").PublicProps, Readonly<UiSiteAppearancePickerProps> & Readonly<{
9
+ "onUpdate:modelValue"?: (value: SiteAppearanceChoice) => any;
10
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -1,5 +1,7 @@
1
1
  export { default as UiSiteHeader } from './UiSiteHeader.vue';
2
2
  export type { UiSiteHeaderProps, UiSiteLink } from './UiSiteHeader.vue';
3
+ export { default as UiSiteAppearancePicker } from './UiSiteAppearancePicker.vue';
4
+ export type { UiSiteAppearancePickerProps } from './UiSiteAppearancePicker.vue';
3
5
  export { default as UiSiteNav } from './UiSiteNav.vue';
4
6
  export type { UiSiteNavGroup, UiSiteNavItem, UiSiteNavProps } from './UiSiteNav.vue';
5
7
  export { default as UiCapture } from './UiCapture.vue';
package/dist/site.js CHANGED
@@ -73,14 +73,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
73
73
  href: "https://filipgutica.github.io/ui/",
74
74
  repository: "https://github.com/filipgutica/ui"
75
75
  }
76
- ], te = { class: "fg-site-header" }, ne = { class: "fg-site-header__inner" }, re = ["aria-label"], ie = {
77
- class: "fg-site-projects__menu fg-site-nav",
78
- "aria-label": "Projects"
79
- }, W = ["href", "aria-current"], G = { class: "fg-site-header__end" }, K = {
80
- key: 0,
81
- class: "fg-site-header__links",
82
- "aria-label": "Site links"
83
- }, q = ["href"], J = {
76
+ ], te = {
84
77
  viewBox: "0 0 24 24",
85
78
  width: "18",
86
79
  height: "18",
@@ -88,17 +81,15 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
88
81
  stroke: "currentColor",
89
82
  "stroke-width": "1.5",
90
83
  "aria-hidden": "true"
91
- }, Y = {
84
+ }, ne = {
92
85
  key: 2,
93
86
  d: "M20.5 13.5A9 9 0 0 1 10.5 3a9 9 0 1 0 10 10.5Z"
94
- }, ae = /* @__PURE__ */ h({
95
- __name: "UiSiteHeader",
96
- props: {
97
- project: {},
98
- links: { default: () => [] }
99
- },
100
- setup(e) {
101
- let t = [
87
+ }, W = /* @__PURE__ */ h({
88
+ __name: "UiSiteAppearancePicker",
89
+ props: { modelValue: { default: () => void 0 } },
90
+ emits: ["update:modelValue"],
91
+ setup(e, { emit: t }) {
92
+ let n = t, r = [
102
93
  {
103
94
  value: "system",
104
95
  label: "System theme"
@@ -111,29 +102,67 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
111
102
  value: "dark",
112
103
  label: "Dark theme"
113
104
  }
114
- ], n = c(() => U.find(({ id: t }) => t === e.project)?.label ?? e.project), r = M().default ? void 0 : H(), a = w(!1), o = w(), p = w(), m = () => {
115
- o.value && (o.value.open = !1);
105
+ ];
106
+ return (t, a) => (C(), l(i, {
107
+ class: "fg-site-appearance",
108
+ label: "Color theme",
109
+ size: "lg",
110
+ "icon-only": "",
111
+ items: r,
112
+ "model-value": e.modelValue,
113
+ "onUpdate:modelValue": a[0] ||= (e) => n("update:modelValue", e)
114
+ }, {
115
+ icon: F(({ item: e }) => [(C(), d("svg", te, [e.value === "system" ? (C(), d(s, { key: 0 }, [a[1] ||= f("rect", {
116
+ x: "3",
117
+ y: "4",
118
+ width: "18",
119
+ height: "13",
120
+ rx: "2"
121
+ }, null, -1), a[2] ||= f("path", { d: "M8 21h8m-4-4v4" }, null, -1)], 64)) : e.value === "light" ? (C(), d(s, { key: 1 }, [a[3] ||= f("circle", {
122
+ cx: "12",
123
+ cy: "12",
124
+ r: "4"
125
+ }, null, -1), a[4] ||= f("path", { d: "M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1.5 1.5m11 11L19 19M5 19l1.5-1.5m11-11L19 5" }, null, -1)], 64)) : (C(), d("path", ne))]))]),
126
+ _: 1
127
+ }, 8, ["model-value"]));
128
+ }
129
+ }), re = { class: "fg-site-header" }, ie = { class: "fg-site-header__inner" }, G = ["aria-label"], K = {
130
+ class: "fg-site-projects__menu fg-site-nav",
131
+ "aria-label": "Projects"
132
+ }, q = ["href", "aria-current"], J = { class: "fg-site-header__end" }, Y = {
133
+ key: 0,
134
+ class: "fg-site-header__links",
135
+ "aria-label": "Site links"
136
+ }, ae = ["href"], oe = /* @__PURE__ */ h({
137
+ __name: "UiSiteHeader",
138
+ props: {
139
+ project: {},
140
+ links: { default: () => [] }
141
+ },
142
+ setup(e) {
143
+ let t = c(() => U.find(({ id: t }) => t === e.project)?.label ?? e.project), n = M().default ? void 0 : H(), r = w(!1), i = w(), a = w(), o = () => {
144
+ i.value && (i.value.open = !1);
145
+ }, p = (e) => {
146
+ e.key !== "Escape" || !i.value?.open || (o(), a.value?.focus());
147
+ }, m = (e) => {
148
+ e.relatedTarget instanceof Node && !i.value?.contains(e.relatedTarget) && o();
116
149
  }, h = (e) => {
117
- e.key !== "Escape" || !o.value?.open || (m(), p.value?.focus());
118
- }, g = (e) => {
119
- e.relatedTarget instanceof Node && !o.value?.contains(e.relatedTarget) && m();
120
- }, _ = (e) => {
121
- e.target instanceof Node && !o.value?.contains(e.target) && m();
150
+ e.target instanceof Node && !i.value?.contains(e.target) && o();
122
151
  };
123
152
  return x(() => {
124
- a.value = !0, document.addEventListener("pointerdown", _);
125
- }), b(() => document.removeEventListener("pointerdown", _)), (c, m) => (C(), d("header", te, [f("div", ne, [f("details", {
153
+ r.value = !0, document.addEventListener("pointerdown", h);
154
+ }), b(() => document.removeEventListener("pointerdown", h)), (o, c) => (C(), d("header", re, [f("div", ie, [f("details", {
126
155
  ref_key: "menu",
127
- ref: o,
156
+ ref: i,
128
157
  class: "fg-site-projects",
129
- onKeydown: h,
130
- onFocusout: g
158
+ onKeydown: p,
159
+ onFocusout: m
131
160
  }, [f("summary", {
132
161
  ref_key: "trigger",
133
- ref: p,
162
+ ref: a,
134
163
  class: "fg-site-projects__trigger",
135
- "aria-label": `Project: ${n.value}`
136
- }, [f("span", null, O(n.value), 1), m[0] ||= f("svg", {
164
+ "aria-label": `Project: ${t.value}`
165
+ }, [f("span", null, O(t.value), 1), c[0] ||= f("svg", {
137
166
  class: "fg-site-projects__chevron",
138
167
  viewBox: "0 0 16 16",
139
168
  width: "16",
@@ -142,42 +171,24 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
142
171
  stroke: "currentColor",
143
172
  "stroke-width": "1.5",
144
173
  "aria-hidden": "true"
145
- }, [f("path", { d: "m4 6 4 4 4-4" })], -1)], 8, re), f("nav", ie, [(C(!0), d(s, null, T(k(U), (t) => (C(), d("a", {
174
+ }, [f("path", { d: "m4 6 4 4 4-4" })], -1)], 8, G), f("nav", K, [(C(!0), d(s, null, T(k(U), (t) => (C(), d("a", {
146
175
  key: t.id,
147
176
  href: t.href,
148
177
  "aria-current": t.id === e.project ? "page" : void 0
149
- }, O(t.label), 9, W))), 128))])], 544), f("div", G, [e.links.length > 0 ? (C(), d("nav", K, [(C(!0), d(s, null, T(e.links, (e) => (C(), d("a", {
178
+ }, O(t.label), 9, q))), 128))])], 544), f("div", J, [e.links.length > 0 ? (C(), d("nav", Y, [(C(!0), d(s, null, T(e.links, (e) => (C(), d("a", {
150
179
  key: e.href,
151
180
  href: e.href
152
- }, O(e.label), 9, q))), 128))])) : u("", !0), E(c.$slots, "default", {}, () => [a.value && k(r) ? (C(), l(i, {
181
+ }, O(e.label), 9, ae))), 128))])) : u("", !0), E(o.$slots, "default", {}, () => [r.value && k(n) ? (C(), l(W, {
153
182
  key: 0,
154
- class: "fg-site-appearance",
155
- label: "Color theme",
156
- size: "lg",
157
- "icon-only": "",
158
- items: t,
159
- "model-value": k(r).choice.value,
160
- "onUpdate:modelValue": k(r).chooseAppearance
161
- }, {
162
- icon: F(({ item: e }) => [(C(), d("svg", J, [e.value === "system" ? (C(), d(s, { key: 0 }, [m[1] ||= f("rect", {
163
- x: "3",
164
- y: "4",
165
- width: "18",
166
- height: "13",
167
- rx: "2"
168
- }, null, -1), m[2] ||= f("path", { d: "M8 21h8m-4-4v4" }, null, -1)], 64)) : e.value === "light" ? (C(), d(s, { key: 1 }, [m[3] ||= f("circle", {
169
- cx: "12",
170
- cy: "12",
171
- r: "4"
172
- }, null, -1), m[4] ||= f("path", { d: "M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1.5 1.5m11 11L19 19M5 19l1.5-1.5m11-11L19 5" }, null, -1)], 64)) : (C(), d("path", Y))]))]),
173
- _: 1
174
- }, 8, ["model-value", "onUpdate:modelValue"])) : u("", !0)])])])]));
183
+ "model-value": k(n).choice.value,
184
+ "onUpdate:modelValue": k(n).chooseAppearance
185
+ }, null, 8, ["model-value", "onUpdate:modelValue"])) : u("", !0)])])])]));
175
186
  }
176
- }), oe = ["id"], se = ["role", "aria-labelledby"], ce = ["id"], le = [
187
+ }), se = ["id"], ce = ["role", "aria-labelledby"], le = ["id"], ue = [
177
188
  "href",
178
189
  "aria-current",
179
190
  "onClick"
180
- ], ue = { key: 0 }, X = /* @__PURE__ */ h({
191
+ ], de = { key: 0 }, X = /* @__PURE__ */ h({
181
192
  __name: "SiteNavLinks",
182
193
  props: {
183
194
  contentId: {},
@@ -206,14 +217,14 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
206
217
  key: 0,
207
218
  id: i(t),
208
219
  class: "fg-site-rail__group-label"
209
- }, O(e.label), 9, ce)) : u("", !0), (C(!0), d(s, null, T(e.items, (e) => (C(), d("a", {
220
+ }, O(e.label), 9, le)) : u("", !0), (C(!0), d(s, null, T(e.items, (e) => (C(), d("a", {
210
221
  key: e.href,
211
222
  href: e.href,
212
223
  "aria-current": a(e),
213
224
  onClick: (t) => n("navigate", e.href, t)
214
- }, [e.code ? (C(), d("code", ue, O(e.label), 1)) : (C(), d(s, { key: 1 }, [p(O(e.label), 1)], 64))], 8, le))), 128))], 8, se))), 128))])], 8, oe));
225
+ }, [e.code ? (C(), d("code", de, O(e.label), 1)) : (C(), d(s, { key: 1 }, [p(O(e.label), 1)], 64))], 8, ue))), 128))], 8, ce))), 128))])], 8, se));
215
226
  }
216
- }), de = ["data-enhanced"], fe = ["open"], pe = ["aria-controls"], me = "(max-width: 800px)", he = /* @__PURE__ */ h({
227
+ }), fe = ["data-enhanced"], pe = ["open"], me = ["aria-controls"], he = "(max-width: 800px)", ge = /* @__PURE__ */ h({
217
228
  __name: "UiSiteNav",
218
229
  props: {
219
230
  label: {},
@@ -234,7 +245,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
234
245
  T ? (e.preventDefault(), T.tabIndex = -1, T.focus({ preventScroll: !0 }), T = null) : s.value || (e.preventDefault(), D());
235
246
  };
236
247
  return x(() => {
237
- b = matchMedia(me), j(), i.value = !0, b.addEventListener("change", j);
248
+ b = matchMedia(he), j(), i.value = !0, b.addEventListener("change", j);
238
249
  }), S(() => b?.removeEventListener("change", j)), (o, c) => (C(), d("div", {
239
250
  ref_key: "root",
240
251
  ref: r,
@@ -247,7 +258,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
247
258
  }, [f("summary", {
248
259
  class: "fg-site-rail__summary",
249
260
  "aria-controls": k(n)
250
- }, O(y.value), 9, pe), m(X, {
261
+ }, O(y.value), 9, me), m(X, {
251
262
  "content-id": k(n),
252
263
  label: e.label,
253
264
  groups: e.groups,
@@ -257,7 +268,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
257
268
  "label",
258
269
  "groups",
259
270
  "active-id"
260
- ])], 8, fe)) : (C(), l(t, {
271
+ ])], 8, pe)) : (C(), l(t, {
261
272
  key: 1,
262
273
  open: u.value,
263
274
  "onUpdate:open": c[0] ||= (e) => u.value = e,
@@ -285,9 +296,9 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
285
296
  "active-id"
286
297
  ])]),
287
298
  _: 1
288
- }, 8, ["open", "title"]))], 8, de));
299
+ }, 8, ["open", "title"]))], 8, fe));
289
300
  }
290
- }), ge = [
301
+ }), _e = [
291
302
  "aria-label",
292
303
  "tabindex",
293
304
  "data-fit",
@@ -325,12 +336,12 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
325
336
  "--capture-scale": n.value
326
337
  }),
327
338
  innerHTML: e.html
328
- }, null, 12, ge));
339
+ }, null, 12, _e));
329
340
  }
330
- }), _e = ["data-enhanced"], ve = ["aria-label"], ye = ["id"], be = { class: "fg-capture__preview" }, xe = ["title", "onClick"], Se = {
341
+ }), ve = ["data-enhanced"], ye = ["aria-label"], be = ["id"], xe = { class: "fg-capture__preview" }, Se = ["title", "onClick"], Ce = {
331
342
  key: 0,
332
343
  class: "fg-capture__caption"
333
- }, Ce = { key: 0 }, we = /* @__PURE__ */ h({
344
+ }, we = { key: 0 }, Te = /* @__PURE__ */ h({
334
345
  __name: "UiCapture",
335
346
  props: /*@__PURE__*/ g({
336
347
  items: {},
@@ -393,7 +404,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
393
404
  stroke: "currentColor",
394
405
  "stroke-width": "1.5",
395
406
  "aria-hidden": "true"
396
- }, [f("path", { d: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7" })], -1), f("span", { class: "fg-capture__full-label" }, "Full size", -1)]], 8, ve)) : u("", !0),
407
+ }, [f("path", { d: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7" })], -1), f("span", { class: "fg-capture__full-label" }, "Full size", -1)]], 8, ye)) : u("", !0),
397
408
  m(n, {
398
409
  "model-value": h.value,
399
410
  items: o.value,
@@ -404,7 +415,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
404
415
  key: 0,
405
416
  id: `${t.idPrefix}${n.id}`,
406
417
  class: "fg-capture__figure"
407
- }, [f("div", be, [m(Q, {
418
+ }, [f("div", xe, [m(Q, {
408
419
  html: n.html,
409
420
  label: `Terminal capture: ${n.label}`,
410
421
  fit: i.value
@@ -420,7 +431,7 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
420
431
  "aria-hidden": "true",
421
432
  title: `Open ${n.label} capture at full size`,
422
433
  onClick: (e) => M(n)
423
- }, null, 8, xe)) : u("", !0)]), n.command || c.$slots.caption ? (C(), d("figcaption", Se, [n.command ? (C(), d("code", Ce, O(n.command), 1)) : u("", !0), E(c.$slots, "caption", { item: n })])) : u("", !0)], 8, ye)) : u("", !0)], 64))), 128))]),
434
+ }, null, 8, Se)) : u("", !0)]), n.command || c.$slots.caption ? (C(), d("figcaption", Ce, [n.command ? (C(), d("code", we, O(n.command), 1)) : u("", !0), E(c.$slots, "caption", { item: n })])) : u("", !0)], 8, be)) : u("", !0)], 64))), 128))]),
424
435
  _: 3
425
436
  }, 8, [
426
437
  "model-value",
@@ -451,26 +462,26 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
451
462
  }, null, 8, ["html", "label"])) : u("", !0)]),
452
463
  _: 1
453
464
  }, 8, ["open", "title"])
454
- ], 8, _e));
465
+ ], 8, ve));
455
466
  }
456
- }), Te = { class: "fg-command-list" }, Ee = { class: "fg-command-list__table" }, De = { scope: "col" }, $ = { scope: "col" }, Oe = { key: 0 }, ke = { class: "fg-command-list__command" }, Ae = { class: "fg-command-list__description" }, je = {
467
+ }), Ee = { class: "fg-command-list" }, De = { class: "fg-command-list__table" }, $ = { scope: "col" }, Oe = { scope: "col" }, ke = { key: 0 }, Ae = { class: "fg-command-list__command" }, je = { class: "fg-command-list__description" }, Me = {
457
468
  key: 0,
458
469
  class: "fg-command-list__action"
459
- }, Me = [
470
+ }, Ne = [
460
471
  "disabled",
461
472
  "aria-label",
462
473
  "title",
463
474
  "onClick"
464
- ], Ne = {
475
+ ], Pe = {
465
476
  viewBox: "0 0 24 24",
466
477
  fill: "none",
467
478
  stroke: "currentColor",
468
479
  "stroke-width": "1.5",
469
480
  "aria-hidden": "true"
470
- }, Pe = {
481
+ }, Fe = {
471
482
  key: 0,
472
483
  d: "m5 12 4 4L19 6"
473
- }, Fe = /* @__PURE__ */ h({
484
+ }, Ie = /* @__PURE__ */ h({
474
485
  __name: "UiCommandList",
475
486
  props: {
476
487
  items: {},
@@ -490,14 +501,14 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
490
501
  unavailableMessage: "Clipboard unavailable. Select the command to copy it.",
491
502
  failureMessage: "Could not copy. Select the command to copy it."
492
503
  }), l = w(""), m = c(() => a.value || (n.value ? `${l.value} copied to clipboard.` : "")), h = (e) => (l.value = e, o(e));
493
- return (r, o) => (C(), d("div", Te, [f("table", Ee, [f("thead", null, [f("tr", null, [
494
- f("th", De, O(e.commandHeader), 1),
495
- f("th", $, O(e.descriptionHeader), 1),
496
- e.copyable ? (C(), d("td", Oe)) : u("", !0)
504
+ return (r, o) => (C(), d("div", Ee, [f("table", De, [f("thead", null, [f("tr", null, [
505
+ f("th", $, O(e.commandHeader), 1),
506
+ f("th", Oe, O(e.descriptionHeader), 1),
507
+ e.copyable ? (C(), d("td", ke)) : u("", !0)
497
508
  ])]), f("tbody", null, [(C(!0), d(s, null, T(e.items, (c) => (C(), d("tr", { key: c.command }, [
498
- f("td", ke, [E(r.$slots, "command", { item: c }, () => [f("code", null, O(c.command), 1)])]),
499
- f("td", Ae, [E(r.$slots, "description", { item: c }, () => [p(O(c.description), 1)])]),
500
- e.copyable ? (C(), d("td", je, [t.value ? (C(), d("button", {
509
+ f("td", Ae, [E(r.$slots, "command", { item: c }, () => [f("code", null, O(c.command), 1)])]),
510
+ f("td", je, [E(r.$slots, "description", { item: c }, () => [p(O(c.description), 1)])]),
511
+ e.copyable ? (C(), d("td", Me, [t.value ? (C(), d("button", {
501
512
  key: 0,
502
513
  type: "button",
503
514
  class: "fg-command-list__copy",
@@ -505,13 +516,13 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
505
516
  "aria-label": `Copy ${c.command}`,
506
517
  title: `Copy ${c.command}`,
507
518
  onClick: (e) => h(c.command)
508
- }, [(C(), d("svg", Ne, [k(n) && !k(a) && l.value === c.command ? (C(), d("path", Pe)) : (C(), d(s, { key: 1 }, [o[0] ||= f("rect", {
519
+ }, [(C(), d("svg", Pe, [k(n) && !k(a) && l.value === c.command ? (C(), d("path", Fe)) : (C(), d(s, { key: 1 }, [o[0] ||= f("rect", {
509
520
  x: "8",
510
521
  y: "8",
511
522
  width: "12",
512
523
  height: "13",
513
524
  rx: "2"
514
- }, null, -1), o[1] ||= f("path", { d: "M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3" }, null, -1)], 64))]))], 8, Me)) : u("", !0)])) : u("", !0)
525
+ }, null, -1), o[1] ||= f("path", { d: "M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3" }, null, -1)], 64))]))], 8, Ne)) : u("", !0)])) : u("", !0)
515
526
  ]))), 128))])]), f("span", {
516
527
  class: v(["fg-command-list__status", { "fg-site-sr-only": !k(a) }]),
517
528
  role: "status"
@@ -519,4 +530,4 @@ var z = "tool-site-theme", B = (e) => e === "system" || e === "light" || e === "
519
530
  }
520
531
  });
521
532
  //#endregion
522
- export { z as SITE_APPEARANCE_KEY, U as SITE_PROJECTS, we as UiCapture, Fe as UiCommandList, ae as UiSiteHeader, he as UiSiteNav, V as applySiteAppearance, ee as siteThemeBootScript, H as useSiteAppearance };
533
+ export { z as SITE_APPEARANCE_KEY, U as SITE_PROJECTS, Te as UiCapture, Ie as UiCommandList, W as UiSiteAppearancePicker, oe as UiSiteHeader, ge as UiSiteNav, V as applySiteAppearance, ee as siteThemeBootScript, H as useSiteAppearance };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filipgutica/ui",
3
- "version": "1.15.0",
3
+ "version": "1.16.1",
4
4
  "description": "A compact Vue design system with Tailwind CSS and VS Code theme support",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -729,7 +729,8 @@
729
729
  --fg-segmented-thumb: light-dark(var(--color-row-selected), color-mix(in srgb, var(--color-text) 10%, var(--color-surface-muted)));
730
730
  display: inline-flex;
731
731
  flex: none;
732
- border: 1px solid var(--color-border-subtle);
732
+ /* The fill alone marks the track. The transparent border keeps its size, and forced colors draw it. */
733
+ border: 1px solid transparent;
733
734
  border-radius: var(--radius-control);
734
735
  background: var(--color-surface-muted);
735
736
  }
package/src/site.css CHANGED
@@ -479,23 +479,37 @@
479
479
  * rule runs down the leading column to the next step. */
480
480
  .fg-site-steps > li {
481
481
  position: relative;
482
- display: grid;
483
- grid-template-columns: var(--space-8) minmax(0, 1fr);
484
- row-gap: var(--space-2);
482
+ display: flow-root;
483
+ min-width: 0;
484
+ padding-inline-start: var(--space-8);
485
485
  counter-increment: fg-site-step;
486
486
  }
487
- .fg-site-steps > li > * { grid-column: 2; }
488
- .fg-site-steps > li::before {
487
+ /* Keep text and inline elements in normal flow; only the number occupies the gutter. */
488
+ .fg-site-steps > li > * + * { margin-block-start: var(--space-2); }
489
+ .fg-site-steps > li::before,
490
+ .fg-site-steps > li > h3:first-child::before {
489
491
  content: counter(fg-site-step);
490
- grid-area: 1 / 1;
491
- align-self: baseline;
492
492
  color: var(--color-project);
493
493
  font-family: var(--font-mono);
494
494
  font-size: var(--text-sm);
495
495
  font-weight: var(--weight-semibold);
496
496
  font-variant-numeric: tabular-nums;
497
+ line-height: var(--leading);
498
+ }
499
+ .fg-site-steps > li::before {
500
+ position: absolute;
501
+ inset-inline-start: 0;
502
+ top: 0;
503
+ }
504
+ /* A titled step keeps the number on the heading's baseline and preserves its line box. */
505
+ .fg-site-steps > li:has(> h3:first-child)::before { content: none; }
506
+ .fg-site-steps > li > h3:first-child::before {
507
+ display: inline-block;
508
+ width: var(--space-8);
509
+ margin-inline-start: calc(-1 * var(--space-8));
510
+ /* A unit line height keeps the number from making a wrapped title's line boxes taller. */
511
+ line-height: 1;
497
512
  }
498
- .fg-site-steps > li > :first-child { align-self: baseline; }
499
513
  .fg-site-steps > li:not(:last-child)::after {
500
514
  content: '';
501
515
  position: absolute;