blessing-ui 0.2.0 → 0.3.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 (133) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +137 -125
  3. package/dist/blessing-ui.css +38 -2
  4. package/dist/components/BlessAnnotator.css +1 -0
  5. package/dist/components/BlessAnnotator.js +6 -0
  6. package/dist/components/BlessAnnotator.vue.d.ts +71 -0
  7. package/dist/components/BlessAnnotator.vue_vue_type_script_setup_true_lang.js +264 -0
  8. package/dist/components/BlessAttachment.vue.d.ts +4 -1
  9. package/dist/components/BlessAttachment.vue_vue_type_script_setup_true_lang.js +3 -2
  10. package/dist/components/BlessCalendar.vue.d.ts +4 -0
  11. package/dist/components/BlessCalendar.vue_vue_type_script_setup_true_lang.js +65 -60
  12. package/dist/components/BlessCarousel.vue.d.ts +3 -0
  13. package/dist/components/BlessCarousel.vue_vue_type_script_setup_true_lang.js +10 -9
  14. package/dist/components/BlessCoachmark.css +1 -0
  15. package/dist/components/BlessCoachmark.js +6 -0
  16. package/dist/components/BlessCoachmark.vue.d.ts +40 -0
  17. package/dist/components/BlessCoachmark.vue_vue_type_script_setup_true_lang.js +74 -0
  18. package/dist/components/BlessCodeBlock.vue.d.ts +10 -0
  19. package/dist/components/BlessCodeBlock.vue_vue_type_script_setup_true_lang.js +39 -33
  20. package/dist/components/BlessCombobox.vue.d.ts +2 -0
  21. package/dist/components/BlessCombobox.vue_vue_type_script_setup_true_lang.js +3 -2
  22. package/dist/components/BlessCommand.css +1 -1
  23. package/dist/components/BlessCommand.vue.d.ts +26 -0
  24. package/dist/components/BlessCommand.vue_vue_type_script_setup_true_lang.js +137 -70
  25. package/dist/components/BlessConfetti.css +1 -0
  26. package/dist/components/BlessConfetti.js +6 -0
  27. package/dist/components/BlessConfetti.vue.d.ts +40 -0
  28. package/dist/components/BlessConfetti.vue_vue_type_script_setup_true_lang.js +77 -0
  29. package/dist/components/BlessCropper.vue.d.ts +16 -0
  30. package/dist/components/BlessCropper.vue_vue_type_script_setup_true_lang.js +47 -39
  31. package/dist/components/BlessDataTable.vue.d.ts +6 -0
  32. package/dist/components/BlessDataTable.vue_vue_type_script_setup_true_lang.js +56 -42
  33. package/dist/components/BlessDataView.vue.d.ts +7 -0
  34. package/dist/components/BlessDataView.vue_vue_type_script_setup_true_lang.js +38 -31
  35. package/dist/components/BlessDatePicker.vue.d.ts +3 -0
  36. package/dist/components/BlessDatePicker.vue_vue_type_script_setup_true_lang.js +46 -45
  37. package/dist/components/BlessDock.css +1 -0
  38. package/dist/components/BlessDock.js +6 -0
  39. package/dist/components/BlessDock.vue.d.ts +55 -0
  40. package/dist/components/BlessDock.vue_vue_type_script_setup_true_lang.js +100 -0
  41. package/dist/components/BlessEditor.vue.d.ts +2 -0
  42. package/dist/components/BlessEditor.vue_vue_type_script_setup_true_lang.js +23 -22
  43. package/dist/components/BlessFileInput.vue.d.ts +2 -0
  44. package/dist/components/BlessFileInput.vue_vue_type_script_setup_true_lang.js +3 -2
  45. package/dist/components/BlessFormula.css +1 -0
  46. package/dist/components/BlessFormula.js +6 -0
  47. package/dist/components/BlessFormula.vue.d.ts +53 -0
  48. package/dist/components/BlessFormula.vue_vue_type_script_setup_true_lang.js +111 -0
  49. package/dist/components/BlessGantt.vue.d.ts +12 -0
  50. package/dist/components/BlessGantt.vue_vue_type_script_setup_true_lang.js +74 -68
  51. package/dist/components/BlessInfiniteCanvas.css +1 -0
  52. package/dist/components/BlessInfiniteCanvas.js +6 -0
  53. package/dist/components/BlessInfiniteCanvas.vue.d.ts +91 -0
  54. package/dist/components/BlessInfiniteCanvas.vue_vue_type_script_setup_true_lang.js +232 -0
  55. package/dist/components/BlessInputNumber.vue.d.ts +5 -0
  56. package/dist/components/BlessInputNumber.vue_vue_type_script_setup_true_lang.js +39 -34
  57. package/dist/components/BlessKanban.vue.d.ts +12 -0
  58. package/dist/components/BlessKanban.vue_vue_type_script_setup_true_lang.js +127 -97
  59. package/dist/components/BlessLoadingBar.vue.d.ts +2 -0
  60. package/dist/components/BlessLoadingBar.vue_vue_type_script_setup_true_lang.js +8 -3
  61. package/dist/components/BlessMarquee.vue.d.ts +4 -0
  62. package/dist/components/BlessMarquee.vue_vue_type_script_setup_true_lang.js +32 -27
  63. package/dist/components/BlessNodeGraph.css +1 -0
  64. package/dist/components/BlessNodeGraph.js +6 -0
  65. package/dist/components/BlessNodeGraph.vue.d.ts +110 -0
  66. package/dist/components/BlessNodeGraph.vue_vue_type_script_setup_true_lang.js +321 -0
  67. package/dist/components/BlessOnboardingChecklist.css +1 -0
  68. package/dist/components/BlessOnboardingChecklist.js +6 -0
  69. package/dist/components/BlessOnboardingChecklist.vue.d.ts +72 -0
  70. package/dist/components/BlessOnboardingChecklist.vue_vue_type_script_setup_true_lang.js +157 -0
  71. package/dist/components/BlessOrderList.vue.d.ts +5 -0
  72. package/dist/components/BlessOrderList.vue_vue_type_script_setup_true_lang.js +62 -56
  73. package/dist/components/BlessPagination.vue.d.ts +2 -0
  74. package/dist/components/BlessPagination.vue_vue_type_script_setup_true_lang.js +2 -1
  75. package/dist/components/BlessPickList.vue.d.ts +5 -0
  76. package/dist/components/BlessPickList.vue_vue_type_script_setup_true_lang.js +55 -49
  77. package/dist/components/BlessRangeCalendar.css +1 -0
  78. package/dist/components/BlessRangeCalendar.js +6 -0
  79. package/dist/components/BlessRangeCalendar.vue.d.ts +51 -0
  80. package/dist/components/BlessRangeCalendar.vue_vue_type_script_setup_true_lang.js +217 -0
  81. package/dist/components/BlessScheduler.css +1 -0
  82. package/dist/components/BlessScheduler.js +6 -0
  83. package/dist/components/BlessScheduler.vue.d.ts +95 -0
  84. package/dist/components/BlessScheduler.vue_vue_type_script_setup_true_lang.js +347 -0
  85. package/dist/components/BlessShortcutRecorder.vue.d.ts +10 -0
  86. package/dist/components/BlessShortcutRecorder.vue_vue_type_script_setup_true_lang.js +50 -40
  87. package/dist/components/BlessSignaturePad.vue.d.ts +1 -1
  88. package/dist/components/BlessSliderCaptcha.vue.d.ts +5 -0
  89. package/dist/components/BlessSliderCaptcha.vue_vue_type_script_setup_true_lang.js +89 -84
  90. package/dist/components/BlessSortable.css +1 -1
  91. package/dist/components/BlessSortable.vue.d.ts +19 -1
  92. package/dist/components/BlessSortable.vue_vue_type_script_setup_true_lang.js +103 -55
  93. package/dist/components/BlessSparkline.css +1 -0
  94. package/dist/components/BlessSparkline.js +6 -0
  95. package/dist/components/BlessSparkline.vue.d.ts +28 -0
  96. package/dist/components/BlessSparkline.vue_vue_type_script_setup_true_lang.js +107 -0
  97. package/dist/components/BlessSteps.vue.d.ts +2 -0
  98. package/dist/components/BlessSteps.vue_vue_type_script_setup_true_lang.js +3 -2
  99. package/dist/components/BlessSwipeDeck.vue.d.ts +1 -1
  100. package/dist/components/BlessSwipeDeck.vue_vue_type_script_setup_true_lang.js +2 -1
  101. package/dist/components/BlessTimer.vue.d.ts +18 -0
  102. package/dist/components/BlessTimer.vue_vue_type_script_setup_true_lang.js +52 -43
  103. package/dist/components/BlessTour.vue.d.ts +1 -0
  104. package/dist/components/BlessTour.vue_vue_type_script_setup_true_lang.js +48 -42
  105. package/dist/components/BlessTreemap.css +1 -0
  106. package/dist/components/BlessTreemap.js +6 -0
  107. package/dist/components/BlessTreemap.vue.d.ts +46 -0
  108. package/dist/components/BlessTreemap.vue_vue_type_script_setup_true_lang.js +137 -0
  109. package/dist/components/BlessUploader.vue.d.ts +11 -0
  110. package/dist/components/BlessUploader.vue_vue_type_script_setup_true_lang.js +80 -69
  111. package/dist/composables/annotate.d.ts +35 -0
  112. package/dist/composables/annotate.js +33 -0
  113. package/dist/composables/canvasView.d.ts +21 -0
  114. package/dist/composables/canvasView.js +23 -0
  115. package/dist/composables/confetti.d.ts +32 -0
  116. package/dist/composables/confetti.js +23 -0
  117. package/dist/composables/dayBlocks.d.ts +11 -0
  118. package/dist/composables/dayBlocks.js +26 -0
  119. package/dist/composables/formula.d.ts +28 -0
  120. package/dist/composables/formula.js +161 -0
  121. package/dist/composables/graph.d.ts +19 -0
  122. package/dist/composables/graph.js +16 -0
  123. package/dist/composables/schedule.d.ts +27 -0
  124. package/dist/composables/schedule.js +54 -0
  125. package/dist/composables/treemap.d.ts +23 -0
  126. package/dist/composables/treemap.js +77 -0
  127. package/dist/composables/useAutoScroll.d.ts +15 -0
  128. package/dist/composables/useAutoScroll.js +32 -0
  129. package/dist/composables/useSortable.d.ts +42 -2
  130. package/dist/composables/useSortable.js +87 -14
  131. package/dist/index.d.ts +25 -1
  132. package/dist/index.js +78 -63
  133. package/package.json +4 -2
@@ -2,16 +2,16 @@ import { logicalKey as e } from "../composables/rtl.js";
2
2
  import { addDays as t, addMonths as n, fromISO as r, isoToday as i, toISO as a } from "../composables/date.js";
3
3
  import { Fragment as o, computed as s, createElementBlock as c, createElementVNode as l, defineComponent as u, mergeModels as d, normalizeClass as f, onMounted as p, openBlock as m, ref as h, renderList as g, toDisplayString as _, unref as v, useId as y, useModel as b, watch as x } from "vue";
4
4
  //#region src/components/BlessCalendar.vue?vue&type=script&setup=true&lang.ts
5
- var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = {
5
+ var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = ["aria-label"], T = {
6
6
  class: "bless-calendar__month",
7
7
  "aria-live": "polite"
8
- }, T = {
8
+ }, E = ["aria-label"], D = {
9
9
  key: 0,
10
10
  class: "bless-calendar__grid bless-calendar__grid--pending"
11
- }, E = {
11
+ }, O = {
12
12
  role: "row",
13
13
  class: "bless-calendar__row bless-calendar__row--head"
14
- }, D = [
14
+ }, k = [
15
15
  "id",
16
16
  "tabindex",
17
17
  "aria-selected",
@@ -20,7 +20,7 @@ var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = {
20
20
  "onClick",
21
21
  "onMouseenter",
22
22
  "onFocus"
23
- ], O = /*@__PURE__*/ u({
23
+ ], A = /*@__PURE__*/ u({
24
24
  name: "BlessCalendar",
25
25
  __name: "BlessCalendar",
26
26
  props: /*@__PURE__*/ d({
@@ -30,25 +30,30 @@ var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = {
30
30
  weekStart: { default: 1 },
31
31
  locale: { default: "ja-JP" },
32
32
  disabledDates: {},
33
- month: {}
33
+ month: {},
34
+ labels: {}
34
35
  }, {
35
36
  modelValue: {},
36
37
  modelModifiers: {}
37
38
  }),
38
39
  emits: ["update:modelValue"],
39
40
  setup(u) {
40
- let d = u, O = b(u, "modelValue"), k = y(), A = s(() => Array.isArray(O.value) ? O.value[0] : O.value), j = d.month ? `${d.month}-01` : A.value, M = h(""), N = h(!!j), P = h(r(j ?? i())), F = h(A.value ?? j ?? i());
41
+ let d = u, A = s(() => ({
42
+ prev: "Previous month",
43
+ next: "Next month",
44
+ ...d.labels
45
+ })), j = b(u, "modelValue"), M = y(), N = s(() => Array.isArray(j.value) ? j.value[0] : j.value), P = d.month ? `${d.month}-01` : N.value, F = h(""), I = h(!!P), L = h(r(P ?? i())), R = h(N.value ?? P ?? i());
41
46
  p(() => {
42
- M.value = i(), j || (P.value = r(M.value), F.value = M.value, N.value = !0);
47
+ F.value = i(), P || (L.value = r(F.value), R.value = F.value, I.value = !0);
43
48
  });
44
- let I = h(), L = h(), R = s(() => new Intl.DateTimeFormat(d.locale, {
49
+ let z = h(), B = h(), V = s(() => new Intl.DateTimeFormat(d.locale, {
45
50
  year: "numeric",
46
51
  month: "long"
47
- }).format(P.value)), z = s(() => new Intl.DateTimeFormat(d.locale, { dateStyle: "full" })), B = s(() => {
52
+ }).format(L.value)), H = s(() => new Intl.DateTimeFormat(d.locale, { dateStyle: "full" })), U = s(() => {
48
53
  let e = new Intl.DateTimeFormat(d.locale, { weekday: "short" }), n = new Date(2024, 0, 7 + d.weekStart);
49
54
  return Array.from({ length: 7 }, (r, i) => e.format(t(n, i)));
50
- }), V = s(() => {
51
- let e = P.value.getFullYear(), t = P.value.getMonth(), n = (new Date(e, t, 1).getDay() - d.weekStart + 7) % 7, r = [];
55
+ }), W = s(() => {
56
+ let e = L.value.getFullYear(), t = L.value.getMonth(), n = (new Date(e, t, 1).getDay() - d.weekStart + 7) % 7, r = [];
52
57
  for (let i = -n; r.length < 42; i++) {
53
58
  let n = new Date(e, t, 1 + i);
54
59
  r.push({
@@ -58,63 +63,63 @@ var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = {
58
63
  });
59
64
  }
60
65
  return r;
61
- }), H = (e) => d.min && e < d.min || d.max && e > d.max || !!d.disabledDates?.(e), U = s(() => {
66
+ }), G = (e) => d.min && e < d.min || d.max && e > d.max || !!d.disabledDates?.(e), K = s(() => {
62
67
  if (!d.range) return null;
63
- if (L.value) {
64
- let e = I.value ?? F.value;
65
- return e < L.value ? [e, L.value] : [L.value, e];
68
+ if (B.value) {
69
+ let e = z.value ?? R.value;
70
+ return e < B.value ? [e, B.value] : [B.value, e];
66
71
  }
67
- return Array.isArray(O.value) ? O.value : null;
68
- }), W = (e) => d.range ? U.value?.[0] === e || U.value?.[1] === e : O.value === e, G = (e) => !!U.value && e > U.value[0] && e < U.value[1];
69
- function K(e) {
70
- if (!H(e)) {
71
- if (F.value = e, !d.range) return void (O.value = e);
72
- L.value ? (O.value = e < L.value ? [e, L.value] : [L.value, e], L.value = void 0) : L.value = e;
72
+ return Array.isArray(j.value) ? j.value : null;
73
+ }), q = (e) => d.range ? K.value?.[0] === e || K.value?.[1] === e : j.value === e, J = (e) => !!K.value && e > K.value[0] && e < K.value[1];
74
+ function Y(e) {
75
+ if (!G(e)) {
76
+ if (R.value = e, !d.range) return void (j.value = e);
77
+ B.value ? (j.value = e < B.value ? [e, B.value] : [B.value, e], B.value = void 0) : B.value = e;
73
78
  }
74
79
  }
75
- function q(e) {
76
- let n = r(F.value);
77
- n = t(n, e), F.value = a(n), (n.getMonth() !== P.value.getMonth() || n.getFullYear() !== P.value.getFullYear()) && (P.value = new Date(n.getFullYear(), n.getMonth(), 1)), requestAnimationFrame(() => document.getElementById(`${k}-${F.value}`)?.focus());
80
+ function X(e) {
81
+ let n = r(R.value);
82
+ n = t(n, e), R.value = a(n), (n.getMonth() !== L.value.getMonth() || n.getFullYear() !== L.value.getFullYear()) && (L.value = new Date(n.getFullYear(), n.getMonth(), 1)), requestAnimationFrame(() => document.getElementById(`${M}-${R.value}`)?.focus());
78
83
  }
79
- function J(t) {
84
+ function Z(t) {
80
85
  let n = {
81
86
  ArrowLeft: -1,
82
87
  ArrowRight: 1,
83
88
  ArrowUp: -7,
84
89
  ArrowDown: 7
85
90
  };
86
- t.key in n ? (t.preventDefault(), q(n[e(t)])) : t.key === "PageUp" ? (t.preventDefault(), Y(t.shiftKey ? -12 : -1, !0)) : t.key === "PageDown" ? (t.preventDefault(), Y(t.shiftKey ? 12 : 1, !0)) : t.key === "Home" ? (t.preventDefault(), q(-((r(F.value).getDay() - d.weekStart + 7) % 7))) : t.key === "End" ? (t.preventDefault(), q(6 - (r(F.value).getDay() - d.weekStart + 7) % 7)) : (t.key === "Enter" || t.key === " ") && (t.preventDefault(), K(F.value));
91
+ t.key in n ? (t.preventDefault(), X(n[e(t)])) : t.key === "PageUp" ? (t.preventDefault(), Q(t.shiftKey ? -12 : -1, !0)) : t.key === "PageDown" ? (t.preventDefault(), Q(t.shiftKey ? 12 : 1, !0)) : t.key === "Home" ? (t.preventDefault(), X(-((r(R.value).getDay() - d.weekStart + 7) % 7))) : t.key === "End" ? (t.preventDefault(), X(6 - (r(R.value).getDay() - d.weekStart + 7) % 7)) : (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Y(R.value));
87
92
  }
88
- function Y(e, t = !1) {
89
- P.value = n(P.value, e), t && requestAnimationFrame(() => document.getElementById(`${k}-${F.value}`)?.focus());
93
+ function Q(e, t = !1) {
94
+ L.value = n(L.value, e), t && requestAnimationFrame(() => document.getElementById(`${M}-${R.value}`)?.focus());
90
95
  }
91
- return x(A, (e) => e && (P.value = n(r(e), 0))), x(P, (e) => {
92
- let t = r(F.value);
93
- (t.getFullYear() !== e.getFullYear() || t.getMonth() !== e.getMonth()) && (F.value = a(new Date(e.getFullYear(), e.getMonth(), Math.min(t.getDate(), 28))));
96
+ return x(N, (e) => e && (L.value = n(r(e), 0))), x(L, (e) => {
97
+ let t = r(R.value);
98
+ (t.getFullYear() !== e.getFullYear() || t.getMonth() !== e.getMonth()) && (R.value = a(new Date(e.getFullYear(), e.getMonth(), Math.min(t.getDate(), 28))));
94
99
  }, { immediate: !0 }), (e, t) => (m(), c("div", {
95
100
  class: "bless-calendar",
96
101
  role: "group",
97
- "aria-label": N.value ? R.value : void 0
102
+ "aria-label": I.value ? V.value : void 0
98
103
  }, [l("div", C, [
99
104
  l("button", {
100
105
  type: "button",
101
106
  class: "bless-calendar__nav",
102
- "aria-label": "Previous month",
103
- onClick: t[0] ||= (e) => Y(-1)
104
- }, [...t[3] ||= [l("span", { "aria-hidden": "true" }, "‹", -1)]]),
105
- l("span", w, _(N.value ? R.value : ""), 1),
107
+ "aria-label": A.value.prev,
108
+ onClick: t[0] ||= (e) => Q(-1)
109
+ }, [...t[3] ||= [l("span", { "aria-hidden": "true" }, "‹", -1)]], 8, w),
110
+ l("span", T, _(I.value ? V.value : ""), 1),
106
111
  l("button", {
107
112
  type: "button",
108
113
  class: "bless-calendar__nav",
109
- "aria-label": "Next month",
110
- onClick: t[1] ||= (e) => Y(1)
111
- }, [...t[4] ||= [l("span", { "aria-hidden": "true" }, "›", -1)]])
112
- ]), N.value ? (m(), c("div", {
114
+ "aria-label": A.value.next,
115
+ onClick: t[1] ||= (e) => Q(1)
116
+ }, [...t[4] ||= [l("span", { "aria-hidden": "true" }, "›", -1)]], 8, E)
117
+ ]), I.value ? (m(), c("div", {
113
118
  key: 1,
114
119
  class: "bless-calendar__grid",
115
120
  role: "grid",
116
- onKeydown: J
117
- }, [l("div", E, [(m(!0), c(o, null, g(B.value, (e) => (m(), c("span", {
121
+ onKeydown: Z
122
+ }, [l("div", O, [(m(!0), c(o, null, g(U.value, (e) => (m(), c("span", {
118
123
  key: e,
119
124
  role: "columnheader",
120
125
  class: "bless-calendar__dow"
@@ -122,29 +127,29 @@ var S = ["aria-label"], C = { class: "bless-calendar__head" }, w = {
122
127
  key: e,
123
128
  role: "row",
124
129
  class: "bless-calendar__row"
125
- }, [(m(!0), c(o, null, g(V.value.slice((e - 1) * 7, e * 7), (e) => (m(), c("button", {
130
+ }, [(m(!0), c(o, null, g(W.value.slice((e - 1) * 7, e * 7), (e) => (m(), c("button", {
126
131
  key: e.iso,
127
- id: `${v(k)}-${e.iso}`,
132
+ id: `${v(M)}-${e.iso}`,
128
133
  type: "button",
129
134
  role: "gridcell",
130
135
  class: f(["bless-calendar__day", {
131
136
  "bless-calendar__day--outside": e.outside,
132
- "bless-calendar__day--today": e.iso === M.value,
133
- "bless-calendar__day--selected": W(e.iso),
134
- "bless-calendar__day--in-range": G(e.iso),
135
- "bless-calendar__day--start": U.value?.[0] === e.iso,
136
- "bless-calendar__day--end": U.value?.[1] === e.iso
137
+ "bless-calendar__day--today": e.iso === F.value,
138
+ "bless-calendar__day--selected": q(e.iso),
139
+ "bless-calendar__day--in-range": J(e.iso),
140
+ "bless-calendar__day--start": K.value?.[0] === e.iso,
141
+ "bless-calendar__day--end": K.value?.[1] === e.iso
137
142
  }]),
138
- tabindex: e.iso === F.value ? 0 : -1,
139
- "aria-selected": W(e.iso) || void 0,
140
- "aria-disabled": H(e.iso) || void 0,
141
- "aria-label": z.value.format(e.date),
142
- onClick: (t) => K(e.iso),
143
- onMouseenter: (t) => I.value = e.iso,
144
- onMouseleave: t[2] ||= (e) => I.value = void 0,
145
- onFocus: (t) => F.value = e.iso
146
- }, _(e.date.getDate()), 43, D))), 128))])), 64))], 32)) : (m(), c("div", T))], 8, S));
143
+ tabindex: e.iso === R.value ? 0 : -1,
144
+ "aria-selected": q(e.iso) || void 0,
145
+ "aria-disabled": G(e.iso) || void 0,
146
+ "aria-label": H.value.format(e.date),
147
+ onClick: (t) => Y(e.iso),
148
+ onMouseenter: (t) => z.value = e.iso,
149
+ onMouseleave: t[2] ||= (e) => z.value = void 0,
150
+ onFocus: (t) => R.value = e.iso
151
+ }, _(e.date.getDate()), 43, k))), 128))])), 64))], 32)) : (m(), c("div", D))], 8, S));
147
152
  }
148
153
  });
149
154
  //#endregion
150
- export { O as default };
155
+ export { A as default };
@@ -12,6 +12,8 @@ type __VLS_Props = {
12
12
  nextLabel?: string;
13
13
  /** the autoplay button's name; its pressed state says whether it's paused */
14
14
  pauseLabel?: string;
15
+ /** accessible name of the slide dots */
16
+ dotsLabel?: string;
15
17
  };
16
18
  declare function go(i: number, smooth?: boolean): void;
17
19
  type __VLS_ModelProps = {
@@ -41,6 +43,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {
41
43
  dots: boolean;
42
44
  arrows: boolean;
43
45
  pauseLabel: string;
46
+ dotsLabel: string;
44
47
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
45
48
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
46
49
  declare const _default: typeof __VLS_export;
@@ -2,12 +2,7 @@ import { reducedMotion as e, scrollBehavior as t } from "../composables/useMedia
2
2
  import { logicalKey as n } from "../composables/rtl.js";
3
3
  import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, mergeModels as l, normalizeClass as u, normalizeStyle as d, onBeforeUnmount as f, onMounted as p, openBlock as m, ref as h, renderList as g, renderSlot as _, toDisplayString as v, useModel as y, watch as b } from "vue";
4
4
  //#region src/components/BlessCarousel.vue?vue&type=script&setup=true&lang.ts
5
- var x = ["aria-label"], S = ["aria-label", "aria-disabled"], C = ["aria-label", "aria-disabled"], w = {
6
- key: 1,
7
- class: "bless-carousel__dots",
8
- role: "group",
9
- "aria-label": "Slides"
10
- }, T = [
5
+ var x = ["aria-label"], S = ["aria-label", "aria-disabled"], C = ["aria-label", "aria-disabled"], w = ["aria-label"], T = [
11
6
  "aria-current",
12
7
  "aria-label",
13
8
  "onClick"
@@ -33,7 +28,8 @@ var x = ["aria-label"], S = ["aria-label", "aria-disabled"], C = ["aria-label",
33
28
  label: { default: "Carousel" },
34
29
  prevLabel: { default: "Previous slide" },
35
30
  nextLabel: { default: "Next slide" },
36
- pauseLabel: { default: "Pause slides" }
31
+ pauseLabel: { default: "Pause slides" },
32
+ dotsLabel: { default: "Slides" }
37
33
  }, {
38
34
  modelValue: { default: 0 },
39
35
  modelModifiers: {}
@@ -120,14 +116,19 @@ var x = ["aria-label"], S = ["aria-label", "aria-disabled"], C = ["aria-label",
120
116
  "aria-disabled": !R.value || void 0,
121
117
  onClick: t[1] ||= (e) => R.value && V(A.value + 1)
122
118
  }, [...t[3] ||= [s("span", { "aria-hidden": "true" }, "›", -1)]], 8, C)], 64)) : a("", !0),
123
- c.dots && I.value > 1 ? (m(), o("div", w, [(m(!0), o(r, null, g(I.value, (e) => (m(), o("button", {
119
+ c.dots && I.value > 1 ? (m(), o("div", {
120
+ key: 1,
121
+ class: "bless-carousel__dots",
122
+ role: "group",
123
+ "aria-label": c.dotsLabel
124
+ }, [(m(!0), o(r, null, g(I.value, (e) => (m(), o("button", {
124
125
  key: e,
125
126
  type: "button",
126
127
  class: u(["bless-carousel__dot", { "bless-carousel__dot--active": e - 1 === A.value }]),
127
128
  "aria-current": e - 1 === A.value || void 0,
128
129
  "aria-label": `Slide ${e}`,
129
130
  onClick: (t) => V(e - 1)
130
- }, null, 10, T))), 128))])) : a("", !0),
131
+ }, null, 10, T))), 128))], 8, w)) : a("", !0),
131
132
  c.autoplay > 0 ? (m(), o("button", {
132
133
  key: 2,
133
134
  type: "button",
@@ -0,0 +1 @@
1
+ .bless-coachmark{display:inline-flex;position:relative}.bless-coachmark__dot{background:var(--bless-color-badge);cursor:pointer;border:0;width:12px;height:12px;padding:0;position:absolute}.bless-coachmark__dot:before{content:"";position:absolute;inset:-10px}.bless-coachmark__dot:after{content:"";border:2px solid var(--bless-color-badge);animation:bless-coachmark-pulse 1.8s var(--bless-ease-out) infinite;position:absolute;inset:-4px}.bless-coachmark__dot:focus-visible{outline:2px solid var(--bless-color-accent);outline-offset:3px}.bless-coachmark__dot--top-end{top:-4px;inset-inline-end:-4px}.bless-coachmark__dot--top-start{top:-4px;inset-inline-start:-4px}.bless-coachmark__dot--bottom-end{bottom:-4px;inset-inline-end:-4px}.bless-coachmark__dot--bottom-start{bottom:-4px;inset-inline-start:-4px}.bless-coachmark__bubble{z-index:2;gap:var(--bless-space-2);width:max-content;max-width:220px;padding:var(--bless-space-3);background:var(--bless-color-bg);border:var(--bless-border-width) solid var(--bless-color-accent);box-shadow:var(--bless-shadow-plate);font-family:var(--bless-font-sans);font-size:var(--bless-text-sm);color:var(--bless-color-text);display:grid;position:absolute}.bless-coachmark__bubble--top-end,.bless-coachmark__bubble--top-start{top:calc(100% + 12px)}.bless-coachmark__bubble--bottom-end,.bless-coachmark__bubble--bottom-start{bottom:calc(100% + 12px)}.bless-coachmark__bubble--top-end,.bless-coachmark__bubble--bottom-end{inset-inline-end:0}.bless-coachmark__bubble--top-start,.bless-coachmark__bubble--bottom-start{inset-inline-start:0}@keyframes bless-coachmark-pulse{0%{opacity:.9;transform:scale(.6)}to{opacity:0;transform:scale(1.6)}}@media (prefers-reduced-motion:reduce){.bless-coachmark__dot:after{opacity:.5;animation:none;transform:none}}
@@ -0,0 +1,6 @@
1
+ import "./BlessCoachmark.css";
2
+ import e from "./BlessCoachmark.vue_vue_type_script_setup_true_lang.js";
3
+ //#region src/components/BlessCoachmark.vue
4
+ var t = e;
5
+ //#endregion
6
+ export { t as default };
@@ -0,0 +1,40 @@
1
+ type __VLS_Props = {
2
+ /** what is new, said in the bubble and to screen readers */
3
+ text: string;
4
+ /** remembers a dismissal under this key (localStorage), so it shows once; omit to show until `dismissed` is set */
5
+ id?: string;
6
+ /** which corner of the wrapped element the dot sits on */
7
+ placement?: "top-end" | "top-start" | "bottom-end" | "bottom-start";
8
+ /** using the wrapped element (a click inside it) counts as seen */
9
+ dismissOnUse?: boolean;
10
+ labels?: Partial<{
11
+ dot: (text: string) => string;
12
+ ok: string;
13
+ }>;
14
+ };
15
+ type __VLS_ModelProps = {
16
+ "dismissed"?: boolean;
17
+ };
18
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
19
+ declare var __VLS_1: {};
20
+ type __VLS_Slots = {} & {
21
+ default?: (props: typeof __VLS_1) => any;
22
+ };
23
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
24
+ dismiss: () => any;
25
+ "update:dismissed": (value: boolean) => any;
26
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
27
+ onDismiss?: (() => any) | undefined;
28
+ "onUpdate:dismissed"?: ((value: boolean) => any) | undefined;
29
+ }>, {
30
+ placement: "top-end" | "top-start" | "bottom-end" | "bottom-start";
31
+ dismissOnUse: boolean;
32
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
33
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
+ declare const _default: typeof __VLS_export;
35
+ export default _default;
36
+ type __VLS_WithSlots<T, S> = T & {
37
+ new (): {
38
+ $slots: S;
39
+ };
40
+ };
@@ -0,0 +1,74 @@
1
+ import e from "./BlessButton.js";
2
+ import { Fragment as t, computed as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineComponent as c, mergeModels as l, normalizeClass as u, onMounted as d, openBlock as f, ref as p, renderSlot as m, toDisplayString as h, useId as g, useModel as _, withCtx as v, withKeys as y, withModifiers as b } from "vue";
3
+ //#region src/components/BlessCoachmark.vue?vue&type=script&setup=true&lang.ts
4
+ var x = ["aria-label", "aria-expanded"], S = /*@__PURE__*/ c({
5
+ name: "BlessCoachmark",
6
+ __name: "BlessCoachmark",
7
+ props: /*@__PURE__*/ l({
8
+ text: {},
9
+ id: {},
10
+ placement: { default: "top-end" },
11
+ dismissOnUse: {
12
+ type: Boolean,
13
+ default: !0
14
+ },
15
+ labels: {}
16
+ }, {
17
+ dismissed: {
18
+ type: Boolean,
19
+ default: !1
20
+ },
21
+ dismissedModifiers: {}
22
+ }),
23
+ emits: /*@__PURE__*/ l(["dismiss"], ["update:dismissed"]),
24
+ setup(c, { emit: l }) {
25
+ let S = c, C = _(c, "dismissed"), w = l, T = n(() => ({
26
+ dot: (e) => `New: ${e}`,
27
+ ok: "Got it",
28
+ ...S.labels
29
+ })), E = n(() => S.id ? `bless-coachmark:${S.id}` : null), D = p(!1), O = p(!1), k = `${g()}-bubble`;
30
+ d(() => {
31
+ try {
32
+ E.value && localStorage.getItem(E.value) && (C.value = !0);
33
+ } catch {}
34
+ O.value = !0;
35
+ });
36
+ function A() {
37
+ if (!C.value) {
38
+ C.value = !0, D.value = !1;
39
+ try {
40
+ E.value && localStorage.setItem(E.value, "1");
41
+ } catch {}
42
+ w("dismiss");
43
+ }
44
+ }
45
+ let j = (e) => {
46
+ S.dismissOnUse && !e.target.closest?.(".bless-coachmark__dot, .bless-coachmark__bubble") && A();
47
+ };
48
+ return (n, l) => (f(), i("span", {
49
+ class: "bless-coachmark",
50
+ onClickCapture: j,
51
+ onKeydown: l[1] ||= y((e) => D.value = !1, ["esc"])
52
+ }, [m(n.$slots, "default"), O.value && !C.value ? (f(), i(t, { key: 0 }, [a("button", {
53
+ type: "button",
54
+ class: u(["bless-coachmark__dot", `bless-coachmark__dot--${c.placement}`]),
55
+ "aria-label": T.value.dot(S.text),
56
+ "aria-expanded": D.value,
57
+ "aria-controls": k,
58
+ onClick: l[0] ||= b((e) => D.value = !D.value, ["stop"])
59
+ }, null, 10, x), D.value ? (f(), i("span", {
60
+ key: 0,
61
+ id: k,
62
+ class: u(["bless-coachmark__bubble", `bless-coachmark__bubble--${c.placement}`]),
63
+ role: "status"
64
+ }, [o(h(S.text) + " ", 1), s(e, {
65
+ size: "sm",
66
+ onClick: A
67
+ }, {
68
+ default: v(() => [o(h(T.value.ok), 1)]),
69
+ _: 1
70
+ })], 2)) : r("", !0)], 64)) : r("", !0)], 32));
71
+ }
72
+ });
73
+ //#endregion
74
+ export { S as default };
@@ -18,6 +18,11 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
18
18
  /** wrap long lines instead of scrolling sideways */
19
19
  wrap?: boolean;
20
20
  label?: string;
21
+ labels?: Partial<{
22
+ copy: string;
23
+ copied: string;
24
+ copiedLive: string;
25
+ }>;
21
26
  } & {
22
27
  active?: number;
23
28
  }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
@@ -36,6 +41,11 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
36
41
  /** wrap long lines instead of scrolling sideways */
37
42
  wrap?: boolean;
38
43
  label?: string;
44
+ labels?: Partial<{
45
+ copy: string;
46
+ copied: string;
47
+ copiedLive: string;
48
+ }>;
39
49
  } & {
40
50
  active?: number;
41
51
  }> & Readonly<{
@@ -42,18 +42,24 @@ var y = { class: "bless-code" }, b = {
42
42
  default: !0
43
43
  },
44
44
  wrap: { type: Boolean },
45
- label: { default: "Code" }
45
+ label: { default: "Code" },
46
+ labels: {}
46
47
  }, {
47
48
  active: { default: 0 },
48
49
  activeModifiers: {}
49
50
  }),
50
51
  emits: /*@__PURE__*/ s(["copy"], ["update:active"]),
51
52
  setup(o, { emit: s }) {
52
- let O = o, k = v(o, "active"), A = s, j = _(), M = t(() => (O.files?.length ? O.files[Math.min(k.value, O.files.length - 1)] : void 0) ?? {
53
+ let O = o, k = t(() => ({
54
+ copy: "Copy",
55
+ copied: "Copied",
56
+ copiedLive: "Copied to clipboard",
57
+ ...O.labels
58
+ })), A = v(o, "active"), j = s, M = _(), N = t(() => (O.files?.length ? O.files[Math.min(A.value, O.files.length - 1)] : void 0) ?? {
53
59
  name: O.filename ?? "",
54
60
  code: O.code ?? "",
55
61
  lang: O.lang
56
- }), N = t(() => M.value.lang ?? O.lang), P = t(() => {
62
+ }), P = t(() => N.value.lang ?? O.lang), F = t(() => {
57
63
  let e = /* @__PURE__ */ new Set();
58
64
  if (Array.isArray(O.lines)) O.lines.forEach((t) => e.add(t));
59
65
  else for (let t of (O.lines ?? "").split(",")) {
@@ -61,72 +67,72 @@ var y = { class: "bless-code" }, b = {
61
67
  if (n) for (let t = n; t <= (r ?? n); t++) e.add(t);
62
68
  }
63
69
  return e;
64
- }), F = t(() => M.value.code.replace(/\n$/, "").split("\n").map((e, t) => ({
70
+ }), I = t(() => N.value.code.replace(/\n$/, "").split("\n").map((e, t) => ({
65
71
  n: t + 1,
66
72
  text: e,
67
- hl: P.value.has(t + 1)
68
- }))), I = f();
69
- function L(e) {
70
- let t = O.files?.length ?? 0, n = e.key === "ArrowRight" ? k.value + 1 : e.key === "ArrowLeft" ? k.value - 1 : e.key === "Home" ? 0 : e.key === "End" ? t - 1 : null;
71
- n != null && (e.preventDefault(), k.value = (n + t) % t, c(() => I.value?.querySelectorAll("[role=\"tab\"]")[k.value]?.focus()));
73
+ hl: F.value.has(t + 1)
74
+ }))), L = f();
75
+ function R(e) {
76
+ let t = O.files?.length ?? 0, n = e.key === "ArrowRight" ? A.value + 1 : e.key === "ArrowLeft" ? A.value - 1 : e.key === "Home" ? 0 : e.key === "End" ? t - 1 : null;
77
+ n != null && (e.preventDefault(), A.value = (n + t) % t, c(() => L.value?.querySelectorAll("[role=\"tab\"]")[A.value]?.focus()));
72
78
  }
73
- let R = f(!1), z;
74
- async function B() {
75
- let e = M.value.code;
79
+ let z = f(!1), B;
80
+ async function V() {
81
+ let e = N.value.code;
76
82
  try {
77
83
  await navigator.clipboard.writeText(e);
78
84
  } catch {
79
85
  let t = document.createElement("textarea");
80
86
  t.value = e, t.style.position = "fixed", t.style.opacity = "0", document.body.append(t), t.select(), document.execCommand("copy"), t.remove();
81
87
  }
82
- A("copy", e), R.value = !0, clearTimeout(z), z = setTimeout(() => R.value = !1, 2e3);
88
+ j("copy", e), z.value = !0, clearTimeout(B), B = setTimeout(() => z.value = !1, 2e3);
83
89
  }
84
- return u(() => clearTimeout(z)), (t, s) => (d(), r("figure", y, [
85
- o.files?.length || o.filename || N.value || o.copy ? (d(), r("figcaption", b, [
90
+ return u(() => clearTimeout(B)), (t, s) => (d(), r("figure", y, [
91
+ o.files?.length || o.filename || P.value || o.copy ? (d(), r("figcaption", b, [
86
92
  o.files?.length ? (d(), r("div", {
87
93
  key: 0,
88
94
  ref_key: "tabs",
89
- ref: I,
95
+ ref: L,
90
96
  class: "bless-code__tabs",
91
97
  role: "tablist",
92
98
  "aria-label": o.label
93
99
  }, [(d(!0), r(e, null, p(o.files, (e, t) => (d(), r("button", {
94
- id: `${g(j)}-t${t}`,
100
+ id: `${g(M)}-t${t}`,
95
101
  key: e.name,
96
102
  type: "button",
97
103
  role: "tab",
98
104
  class: "bless-code__tab",
99
- "aria-selected": t === k.value,
100
- "aria-controls": `${g(j)}-p`,
101
- tabindex: t === k.value ? 0 : -1,
102
- onClick: (e) => k.value = t,
103
- onKeydown: L
105
+ "aria-selected": t === A.value,
106
+ "aria-controls": `${g(M)}-p`,
107
+ tabindex: t === A.value ? 0 : -1,
108
+ onClick: (e) => A.value = t,
109
+ onKeydown: R
104
110
  }, h(e.name), 41, S))), 128))], 8, x)) : o.filename ? (d(), r("span", C, h(o.filename), 1)) : n("", !0),
105
111
  s[0] ||= i("span", { class: "bless-code__spacer" }, null, -1),
106
- N.value ? (d(), r("span", w, h(N.value), 1)) : n("", !0),
112
+ P.value ? (d(), r("span", w, h(P.value), 1)) : n("", !0),
107
113
  o.copy ? (d(), r("button", {
108
114
  key: 3,
109
115
  type: "button",
110
116
  class: "bless-code__copy",
111
- onClick: B
112
- }, h(R.value ? "Copied" : "Copy"), 1)) : n("", !0)
117
+ onClick: V
118
+ }, h(z.value ? k.value.copied : k.value.copy), 1)) : n("", !0)
113
119
  ])) : n("", !0),
114
120
  i("div", {
115
- id: `${g(j)}-p`,
121
+ id: `${g(M)}-p`,
116
122
  class: "bless-code__scroll",
117
123
  tabindex: "0",
118
124
  role: o.files?.length ? "tabpanel" : "region",
119
- "aria-labelledby": o.files?.length ? `${g(j)}-t${k.value}` : void 0,
120
- "aria-label": o.files?.length ? void 0 : M.value.name || o.label
125
+ "aria-labelledby": o.files?.length ? `${g(M)}-t${A.value}` : void 0,
126
+ "aria-label": o.files?.length ? void 0 : N.value.name || o.label
121
127
  }, [m(t.$slots, "code", {
122
- code: M.value.code,
123
- lang: N.value,
124
- lines: F.value
125
- }, () => [i("pre", { class: l(["bless-code__pre", { "bless-code__pre--wrap": o.wrap }]) }, [i("code", null, [(d(!0), r(e, null, p(F.value, (e) => (d(), r("span", {
128
+ code: N.value.code,
129
+ lang: P.value,
130
+ lines: I.value
131
+ }, () => [i("pre", { class: l(["bless-code__pre", { "bless-code__pre--wrap": o.wrap }]) }, [i("code", null, [(d(!0), r(e, null, p(I.value, (e) => (d(), r("span", {
126
132
  key: e.n,
127
133
  class: l(["bless-code__line", { "bless-code__line--hl": e.hl }])
128
134
  }, [o.lineNumbers ? (d(), r("span", E, h(e.n), 1)) : n("", !0), a(h(e.text) + "\n", 1)], 2))), 128))])], 2)])], 8, T),
129
- i("span", D, h(R.value ? "Copied to clipboard" : ""), 1)
135
+ i("span", D, h(z.value ? k.value.copiedLive : ""), 1)
130
136
  ]));
131
137
  }
132
138
  });
@@ -13,6 +13,8 @@ declare const __VLS_export: <T extends string | number>(__VLS_props: NonNullable
13
13
  size?: "sm" | "md" | "lg";
14
14
  /** accessible name when there is no <label for> */
15
15
  label?: string;
16
+ /** name of a chip's remove button, from the option's label */
17
+ removeLabel?: (name: string) => string;
16
18
  } & {
17
19
  modelValue?: T | T[] | undefined;
18
20
  }) & {
@@ -38,7 +38,8 @@ var O = ["aria-label", "onClick"], ee = [
38
38
  invalid: { type: Boolean },
39
39
  emptyText: { default: "No results." },
40
40
  size: { default: "md" },
41
- label: {}
41
+ label: {},
42
+ removeLabel: {}
42
43
  }, {
43
44
  modelValue: {},
44
45
  modelModifiers: {}
@@ -105,7 +106,7 @@ var O = ["aria-label", "onClick"], ee = [
105
106
  default: T(() => [u(b(q(t)) + " ", 1), l("button", {
106
107
  type: "button",
107
108
  class: "bless-combobox__chip-x",
108
- "aria-label": `Remove ${q(t)}`,
109
+ "aria-label": (d.removeLabel ?? ((e) => `Remove ${e}`))(q(t)),
109
110
  tabindex: "-1",
110
111
  onClick: D((e) => $(t), ["stop"])
111
112
  }, " × ", 8, O)]),
@@ -1 +1 @@
1
- .bless-command .bless-modal__body{padding:0}.bless-command .bless-modal__close{display:none}.bless-command .bless-modal__panel{--_w:560px}.bless-command--inline{border:var(--bless-border-width) solid var(--bless-color-border);background:var(--bless-color-bg)}.bless-command__box{border-radius:var(--bless-radius);font-family:var(--bless-font-sans);color:var(--bless-color-text);flex-direction:column;display:flex}.bless-command__search{border-radius:var(--bless-radius-plate);align-items:center;gap:var(--bless-space-3);padding:var(--bless-space-3) var(--bless-space-4);border-bottom:var(--bless-border-width) solid var(--bless-color-border);display:flex}.bless-command__icon{font-size:var(--bless-text-lg);color:var(--bless-color-text-muted);transform:skewX(var(--bless-skew-counter)) rotate(-45deg)}.bless-command__input{min-width:0;font:inherit;font-size:var(--bless-text-md);color:inherit;background:0 0;border:0;outline:0;flex:1}.bless-command__input::placeholder{color:var(--bless-color-text-muted)}.bless-command__list{max-height:320px;padding:var(--bless-space-2) 0;scrollbar-width:thin;overflow-y:auto}.bless-command__empty:empty{display:none}.bless-command__empty{padding:var(--bless-space-6);text-align:center;font-size:var(--bless-text-sm);color:var(--bless-color-text-muted);margin:0}.bless-command__group{padding:var(--bless-space-2) var(--bless-space-4) var(--bless-space-1);font-size:var(--bless-text-2xs);font-weight:var(--bless-font-weight-bold);letter-spacing:var(--bless-tracking-wider);text-transform:uppercase;color:var(--bless-color-text-muted)}.bless-command__item{align-items:center;gap:var(--bless-space-3);padding:var(--bless-space-2) var(--bless-space-4);font-size:var(--bless-text-sm);cursor:pointer;display:flex}.bless-command__item--active{background:var(--bless-color-surface)}.bless-command__item[aria-disabled=true]{opacity:.4;cursor:not-allowed}.bless-command__mark{text-align:center;flex:none;width:1.2em}.bless-command__label{flex:1}.bless-command__footer{gap:var(--bless-space-4);padding:var(--bless-space-2) var(--bless-space-4);border-top:var(--bless-border-width) solid var(--bless-color-border);font-size:var(--bless-text-xs);color:var(--bless-color-text-muted);display:flex}.bless-command__search{transform:skewX(var(--bless-skew))}.bless-command__search>:not(.bless-skew,.bless-chip,.bless-badge){transform:skewX(var(--bless-skew-counter))}
1
+ .bless-command .bless-modal__body{padding:0}.bless-command .bless-modal__close{display:none}.bless-command .bless-modal__panel{--_w:560px}.bless-command--inline{border:var(--bless-border-width) solid var(--bless-color-border);background:var(--bless-color-bg)}.bless-command__box{border-radius:var(--bless-radius);font-family:var(--bless-font-sans);color:var(--bless-color-text);flex-direction:column;display:flex}.bless-command__search{border-radius:var(--bless-radius-plate);align-items:center;gap:var(--bless-space-3);padding:var(--bless-space-3) var(--bless-space-4);border-bottom:var(--bless-border-width) solid var(--bless-color-border);display:flex}.bless-command__icon{font-size:var(--bless-text-lg);color:var(--bless-color-text-muted);transform:skewX(var(--bless-skew-counter)) rotate(-45deg)}.bless-command__input{min-width:0;font:inherit;font-size:var(--bless-text-md);color:inherit;background:0 0;border:0;outline:0;flex:1}.bless-command__input::placeholder{color:var(--bless-color-text-muted)}.bless-command__list{max-height:320px;padding:var(--bless-space-2) 0;scrollbar-width:thin;overflow-y:auto}.bless-command__empty:empty{display:none}.bless-command__empty{padding:var(--bless-space-6);text-align:center;font-size:var(--bless-text-sm);color:var(--bless-color-text-muted);margin:0}.bless-command__scope{padding:0 var(--bless-space-2);background:var(--bless-color-accent);color:var(--bless-color-on-accent);font:inherit;font-size:var(--bless-text-xs);cursor:pointer;border:0;flex:none}.bless-command__scope:focus-visible{outline:2px solid var(--bless-color-text);outline-offset:2px}.bless-command__hint{padding:var(--bless-space-1) var(--bless-space-3);color:var(--bless-color-text-muted);font-size:var(--bless-text-xs);margin:0}.bless-command__group{padding:var(--bless-space-2) var(--bless-space-4) var(--bless-space-1);font-size:var(--bless-text-2xs);font-weight:var(--bless-font-weight-bold);letter-spacing:var(--bless-tracking-wider);text-transform:uppercase;color:var(--bless-color-text-muted)}.bless-command__item{align-items:center;gap:var(--bless-space-3);padding:var(--bless-space-2) var(--bless-space-4);font-size:var(--bless-text-sm);cursor:pointer;display:flex}.bless-command__item--active{background:var(--bless-color-surface)}.bless-command__item[aria-disabled=true]{opacity:.4;cursor:not-allowed}.bless-command__mark{text-align:center;flex:none;width:1.2em}.bless-command__label{flex:1}.bless-command__footer{gap:var(--bless-space-4);padding:var(--bless-space-2) var(--bless-space-4);border-top:var(--bless-border-width) solid var(--bless-color-border);font-size:var(--bless-text-xs);color:var(--bless-color-text-muted);display:flex}.bless-command__search{transform:skewX(var(--bless-skew))}.bless-command__search>:not(.bless-skew,.bless-chip,.bless-badge){transform:skewX(var(--bless-skew-counter))}