blessing-ui 0.1.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 (200) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +139 -105
  3. package/dist/blessing-ui.css +97 -1
  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.css +1 -0
  19. package/dist/components/BlessCodeBlock.js +6 -0
  20. package/dist/components/BlessCodeBlock.vue.d.ts +72 -0
  21. package/dist/components/BlessCodeBlock.vue_vue_type_script_setup_true_lang.js +140 -0
  22. package/dist/components/BlessCombobox.vue.d.ts +2 -0
  23. package/dist/components/BlessCombobox.vue_vue_type_script_setup_true_lang.js +3 -2
  24. package/dist/components/BlessCommand.css +1 -1
  25. package/dist/components/BlessCommand.vue.d.ts +26 -0
  26. package/dist/components/BlessCommand.vue_vue_type_script_setup_true_lang.js +137 -70
  27. package/dist/components/BlessConfetti.css +1 -0
  28. package/dist/components/BlessConfetti.js +6 -0
  29. package/dist/components/BlessConfetti.vue.d.ts +40 -0
  30. package/dist/components/BlessConfetti.vue_vue_type_script_setup_true_lang.js +77 -0
  31. package/dist/components/BlessCountUp.css +1 -0
  32. package/dist/components/BlessCountUp.js +6 -0
  33. package/dist/components/BlessCountUp.vue.d.ts +18 -0
  34. package/dist/components/BlessCountUp.vue_vue_type_script_setup_true_lang.js +49 -0
  35. package/dist/components/BlessCropper.css +1 -0
  36. package/dist/components/BlessCropper.js +6 -0
  37. package/dist/components/BlessCropper.vue.d.ts +70 -0
  38. package/dist/components/BlessCropper.vue_vue_type_script_setup_true_lang.js +220 -0
  39. package/dist/components/BlessDataTable.vue.d.ts +6 -0
  40. package/dist/components/BlessDataTable.vue_vue_type_script_setup_true_lang.js +56 -42
  41. package/dist/components/BlessDataView.vue.d.ts +7 -0
  42. package/dist/components/BlessDataView.vue_vue_type_script_setup_true_lang.js +38 -31
  43. package/dist/components/BlessDatePicker.vue.d.ts +3 -0
  44. package/dist/components/BlessDatePicker.vue_vue_type_script_setup_true_lang.js +46 -45
  45. package/dist/components/BlessDiff.css +1 -0
  46. package/dist/components/BlessDiff.js +6 -0
  47. package/dist/components/BlessDiff.vue.d.ts +22 -0
  48. package/dist/components/BlessDiff.vue_vue_type_script_setup_true_lang.js +148 -0
  49. package/dist/components/BlessDock.css +1 -0
  50. package/dist/components/BlessDock.js +6 -0
  51. package/dist/components/BlessDock.vue.d.ts +55 -0
  52. package/dist/components/BlessDock.vue_vue_type_script_setup_true_lang.js +100 -0
  53. package/dist/components/BlessEditor.vue.d.ts +2 -0
  54. package/dist/components/BlessEditor.vue_vue_type_script_setup_true_lang.js +23 -22
  55. package/dist/components/BlessFileInput.vue.d.ts +2 -0
  56. package/dist/components/BlessFileInput.vue_vue_type_script_setup_true_lang.js +3 -2
  57. package/dist/components/BlessFormula.css +1 -0
  58. package/dist/components/BlessFormula.js +6 -0
  59. package/dist/components/BlessFormula.vue.d.ts +53 -0
  60. package/dist/components/BlessFormula.vue_vue_type_script_setup_true_lang.js +111 -0
  61. package/dist/components/BlessGantt.css +1 -0
  62. package/dist/components/BlessGantt.js +6 -0
  63. package/dist/components/BlessGantt.vue.d.ts +81 -0
  64. package/dist/components/BlessGantt.vue_vue_type_script_setup_true_lang.js +276 -0
  65. package/dist/components/BlessGauge.css +1 -0
  66. package/dist/components/BlessGauge.js +6 -0
  67. package/dist/components/BlessGauge.vue.d.ts +36 -0
  68. package/dist/components/BlessGauge.vue_vue_type_script_setup_true_lang.js +100 -0
  69. package/dist/components/BlessHeatmapCalendar.css +1 -0
  70. package/dist/components/BlessHeatmapCalendar.js +6 -0
  71. package/dist/components/BlessHeatmapCalendar.vue.d.ts +38 -0
  72. package/dist/components/BlessHeatmapCalendar.vue_vue_type_script_setup_true_lang.js +146 -0
  73. package/dist/components/BlessHotspots.css +1 -0
  74. package/dist/components/BlessHotspots.js +6 -0
  75. package/dist/components/BlessHotspots.vue.d.ts +49 -0
  76. package/dist/components/BlessHotspots.vue_vue_type_script_setup_true_lang.js +127 -0
  77. package/dist/components/BlessInfiniteCanvas.css +1 -0
  78. package/dist/components/BlessInfiniteCanvas.js +6 -0
  79. package/dist/components/BlessInfiniteCanvas.vue.d.ts +91 -0
  80. package/dist/components/BlessInfiniteCanvas.vue_vue_type_script_setup_true_lang.js +232 -0
  81. package/dist/components/BlessInputNumber.vue.d.ts +5 -0
  82. package/dist/components/BlessInputNumber.vue_vue_type_script_setup_true_lang.js +39 -34
  83. package/dist/components/BlessKanban.css +1 -0
  84. package/dist/components/BlessKanban.js +6 -0
  85. package/dist/components/BlessKanban.vue.d.ts +67 -0
  86. package/dist/components/BlessKanban.vue_vue_type_script_setup_true_lang.js +195 -0
  87. package/dist/components/BlessLoadingBar.vue.d.ts +2 -0
  88. package/dist/components/BlessLoadingBar.vue_vue_type_script_setup_true_lang.js +8 -3
  89. package/dist/components/BlessLoupe.css +1 -0
  90. package/dist/components/BlessLoupe.js +6 -0
  91. package/dist/components/BlessLoupe.vue.d.ts +16 -0
  92. package/dist/components/BlessLoupe.vue_vue_type_script_setup_true_lang.js +93 -0
  93. package/dist/components/BlessMarquee.css +1 -0
  94. package/dist/components/BlessMarquee.js +6 -0
  95. package/dist/components/BlessMarquee.vue.d.ts +44 -0
  96. package/dist/components/BlessMarquee.vue_vue_type_script_setup_true_lang.js +69 -0
  97. package/dist/components/BlessMasonry.css +1 -0
  98. package/dist/components/BlessMasonry.js +6 -0
  99. package/dist/components/BlessMasonry.vue.d.ts +33 -0
  100. package/dist/components/BlessMasonry.vue_vue_type_script_setup_true_lang.js +79 -0
  101. package/dist/components/BlessMention.css +1 -0
  102. package/dist/components/BlessMention.js +6 -0
  103. package/dist/components/BlessMention.vue.d.ts +32 -0
  104. package/dist/components/BlessMention.vue_vue_type_script_setup_true_lang.js +116 -0
  105. package/dist/components/BlessNodeGraph.css +1 -0
  106. package/dist/components/BlessNodeGraph.js +6 -0
  107. package/dist/components/BlessNodeGraph.vue.d.ts +110 -0
  108. package/dist/components/BlessNodeGraph.vue_vue_type_script_setup_true_lang.js +321 -0
  109. package/dist/components/BlessOnboardingChecklist.css +1 -0
  110. package/dist/components/BlessOnboardingChecklist.js +6 -0
  111. package/dist/components/BlessOnboardingChecklist.vue.d.ts +72 -0
  112. package/dist/components/BlessOnboardingChecklist.vue_vue_type_script_setup_true_lang.js +157 -0
  113. package/dist/components/BlessOrderList.vue.d.ts +5 -0
  114. package/dist/components/BlessOrderList.vue_vue_type_script_setup_true_lang.js +62 -56
  115. package/dist/components/BlessPagination.vue.d.ts +2 -0
  116. package/dist/components/BlessPagination.vue_vue_type_script_setup_true_lang.js +2 -1
  117. package/dist/components/BlessPickList.vue.d.ts +5 -0
  118. package/dist/components/BlessPickList.vue_vue_type_script_setup_true_lang.js +55 -49
  119. package/dist/components/BlessRadialMenu.css +1 -0
  120. package/dist/components/BlessRadialMenu.js +6 -0
  121. package/dist/components/BlessRadialMenu.vue.d.ts +45 -0
  122. package/dist/components/BlessRadialMenu.vue_vue_type_script_setup_true_lang.js +146 -0
  123. package/dist/components/BlessRangeCalendar.css +1 -0
  124. package/dist/components/BlessRangeCalendar.js +6 -0
  125. package/dist/components/BlessRangeCalendar.vue.d.ts +51 -0
  126. package/dist/components/BlessRangeCalendar.vue_vue_type_script_setup_true_lang.js +217 -0
  127. package/dist/components/BlessScheduler.css +1 -0
  128. package/dist/components/BlessScheduler.js +6 -0
  129. package/dist/components/BlessScheduler.vue.d.ts +95 -0
  130. package/dist/components/BlessScheduler.vue_vue_type_script_setup_true_lang.js +347 -0
  131. package/dist/components/BlessShortcutRecorder.css +1 -0
  132. package/dist/components/BlessShortcutRecorder.js +6 -0
  133. package/dist/components/BlessShortcutRecorder.vue.d.ts +39 -0
  134. package/dist/components/BlessShortcutRecorder.vue_vue_type_script_setup_true_lang.js +126 -0
  135. package/dist/components/BlessSignaturePad.vue.d.ts +1 -1
  136. package/dist/components/BlessSliderCaptcha.css +1 -0
  137. package/dist/components/BlessSliderCaptcha.js +6 -0
  138. package/dist/components/BlessSliderCaptcha.vue.d.ts +38 -0
  139. package/dist/components/BlessSliderCaptcha.vue_vue_type_script_setup_true_lang.js +146 -0
  140. package/dist/components/BlessSortable.css +1 -0
  141. package/dist/components/BlessSortable.js +6 -0
  142. package/dist/components/BlessSortable.vue.d.ts +51 -0
  143. package/dist/components/BlessSortable.vue_vue_type_script_setup_true_lang.js +135 -0
  144. package/dist/components/BlessSparkline.css +1 -0
  145. package/dist/components/BlessSparkline.js +6 -0
  146. package/dist/components/BlessSparkline.vue.d.ts +28 -0
  147. package/dist/components/BlessSparkline.vue_vue_type_script_setup_true_lang.js +107 -0
  148. package/dist/components/BlessSplitView.css +1 -0
  149. package/dist/components/BlessSplitView.js +6 -0
  150. package/dist/components/BlessSplitView.vue.d.ts +61 -0
  151. package/dist/components/BlessSplitView.vue_vue_type_script_setup_true_lang.js +92 -0
  152. package/dist/components/BlessSteps.vue.d.ts +2 -0
  153. package/dist/components/BlessSteps.vue_vue_type_script_setup_true_lang.js +3 -2
  154. package/dist/components/BlessSwipeDeck.css +1 -0
  155. package/dist/components/BlessSwipeDeck.js +6 -0
  156. package/dist/components/BlessSwipeDeck.vue.d.ts +46 -0
  157. package/dist/components/BlessSwipeDeck.vue_vue_type_script_setup_true_lang.js +200 -0
  158. package/dist/components/BlessTimer.css +1 -0
  159. package/dist/components/BlessTimer.js +6 -0
  160. package/dist/components/BlessTimer.vue.d.ts +74 -0
  161. package/dist/components/BlessTimer.vue_vue_type_script_setup_true_lang.js +139 -0
  162. package/dist/components/BlessTour.vue.d.ts +1 -0
  163. package/dist/components/BlessTour.vue_vue_type_script_setup_true_lang.js +48 -42
  164. package/dist/components/BlessTreemap.css +1 -0
  165. package/dist/components/BlessTreemap.js +6 -0
  166. package/dist/components/BlessTreemap.vue.d.ts +46 -0
  167. package/dist/components/BlessTreemap.vue_vue_type_script_setup_true_lang.js +137 -0
  168. package/dist/components/BlessUploader.vue.d.ts +11 -0
  169. package/dist/components/BlessUploader.vue_vue_type_script_setup_true_lang.js +80 -69
  170. package/dist/composables/annotate.d.ts +35 -0
  171. package/dist/composables/annotate.js +33 -0
  172. package/dist/composables/canvasView.d.ts +21 -0
  173. package/dist/composables/canvasView.js +23 -0
  174. package/dist/composables/confetti.d.ts +32 -0
  175. package/dist/composables/confetti.js +23 -0
  176. package/dist/composables/cropBox.d.ts +22 -0
  177. package/dist/composables/cropBox.js +39 -0
  178. package/dist/composables/dayBlocks.d.ts +11 -0
  179. package/dist/composables/dayBlocks.js +26 -0
  180. package/dist/composables/diffLines.d.ts +10 -0
  181. package/dist/composables/diffLines.js +55 -0
  182. package/dist/composables/formula.d.ts +28 -0
  183. package/dist/composables/formula.js +161 -0
  184. package/dist/composables/graph.d.ts +19 -0
  185. package/dist/composables/graph.js +16 -0
  186. package/dist/composables/radial.d.ts +15 -0
  187. package/dist/composables/radial.js +22 -0
  188. package/dist/composables/schedule.d.ts +27 -0
  189. package/dist/composables/schedule.js +54 -0
  190. package/dist/composables/shortcut.d.ts +12 -0
  191. package/dist/composables/shortcut.js +35 -0
  192. package/dist/composables/treemap.d.ts +23 -0
  193. package/dist/composables/treemap.js +77 -0
  194. package/dist/composables/useAutoScroll.d.ts +15 -0
  195. package/dist/composables/useAutoScroll.js +32 -0
  196. package/dist/composables/useSortable.d.ts +58 -0
  197. package/dist/composables/useSortable.js +107 -0
  198. package/dist/index.d.ts +62 -1
  199. package/dist/index.js +93 -53
  200. package/package.json +22 -18
@@ -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 };
@@ -0,0 +1 @@
1
+ .bless-code{border:var(--bless-border-width) solid var(--bless-color-border);background:var(--bless-color-bg);min-width:0;max-width:100%;color:var(--bless-color-text);font-family:var(--bless-font-sans);font-size:var(--bless-text-sm);margin:0;position:relative}.bless-code__head{align-items:center;gap:var(--bless-space-2);padding:0 var(--bless-space-2) 0 var(--bless-space-3);background:var(--bless-color-surface);border-bottom:var(--bless-border-width) solid var(--bless-color-border);min-height:36px;display:flex}.bless-code__spacer{flex:1}.bless-code__tabs{align-self:stretch;gap:var(--bless-space-1);margin-inline-start:calc(var(--bless-space-3) * -1);display:flex}.bless-code__tab{padding:0 var(--bless-space-3);color:var(--bless-color-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000}.bless-code__tab[aria-selected=true]{color:var(--bless-color-text);border-bottom-color:var(--bless-color-accent)}.bless-code__tab:focus-visible,.bless-code__copy:focus-visible{outline:2px solid var(--bless-color-accent);outline-offset:-2px}.bless-code__name{font-weight:600}.bless-code__lang{color:var(--bless-color-text-muted);font-size:var(--bless-text-xs);text-transform:uppercase}.bless-code__copy{padding:var(--bless-space-1) var(--bless-space-2);border:var(--bless-border-width) solid var(--bless-color-border);background:var(--bless-color-bg);color:inherit;font:inherit;font-size:var(--bless-text-xs);cursor:pointer}.bless-code__scroll{overflow:auto}.bless-code__scroll:focus-visible{outline:2px solid var(--bless-color-accent);outline-offset:-2px}.bless-code__pre{padding:var(--bless-space-3) 0;font-family:var(--bless-font-mono,ui-monospace, monospace);font-size:var(--bless-text-sm);tab-size:2;margin:0;line-height:1.6}.bless-code__pre--wrap{white-space:pre-wrap;overflow-wrap:anywhere}.bless-code__line{padding:0 var(--bless-space-3);display:block}.bless-code__line--hl{background:color-mix(in srgb, var(--bless-color-text) 8%, var(--bless-color-bg));box-shadow:inset 3px 0 0 var(--bless-color-text)}.bless-code__no{min-width:3ch;text-align:end;color:var(--bless-color-text-muted);-webkit-user-select:none;user-select:none;margin-inline-end:var(--bless-space-3);display:inline-block}.bless-code__live{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}
@@ -0,0 +1,6 @@
1
+ import "./BlessCodeBlock.css";
2
+ import e from "./BlessCodeBlock.vue_vue_type_script_setup_true_lang.js";
3
+ //#region src/components/BlessCodeBlock.vue
4
+ var t = e;
5
+ //#endregion
6
+ export { t as default };
@@ -0,0 +1,72 @@
1
+ export interface BlessCodeFile {
2
+ name: string;
3
+ code: string;
4
+ lang?: string;
5
+ }
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
8
+ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
9
+ code?: string;
10
+ lang?: string;
11
+ filename?: string;
12
+ /** several files as tabs; wins over `code` */
13
+ files?: BlessCodeFile[];
14
+ /** lines to mark, e.g. `"2,4-6"` or `[2, 4, 5, 6]` (1-based) */
15
+ lines?: string | number[];
16
+ lineNumbers?: boolean;
17
+ copy?: boolean;
18
+ /** wrap long lines instead of scrolling sideways */
19
+ wrap?: boolean;
20
+ label?: string;
21
+ labels?: Partial<{
22
+ copy: string;
23
+ copied: string;
24
+ copiedLive: string;
25
+ }>;
26
+ } & {
27
+ active?: number;
28
+ }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
29
+ copy: (code: string) => any;
30
+ "update:active": (value: number) => any;
31
+ }, string, import('vue').PublicProps, Readonly<{
32
+ code?: string;
33
+ lang?: string;
34
+ filename?: string;
35
+ /** several files as tabs; wins over `code` */
36
+ files?: BlessCodeFile[];
37
+ /** lines to mark, e.g. `"2,4-6"` or `[2, 4, 5, 6]` (1-based) */
38
+ lines?: string | number[];
39
+ lineNumbers?: boolean;
40
+ copy?: boolean;
41
+ /** wrap long lines instead of scrolling sideways */
42
+ wrap?: boolean;
43
+ label?: string;
44
+ labels?: Partial<{
45
+ copy: string;
46
+ copied: string;
47
+ copiedLive: string;
48
+ }>;
49
+ } & {
50
+ active?: number;
51
+ }> & Readonly<{
52
+ onCopy?: ((code: string) => any) | undefined;
53
+ "onUpdate:active"?: ((value: number) => any) | undefined;
54
+ }>, {
55
+ label: string;
56
+ copy: boolean;
57
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {
58
+ code?: (props: {
59
+ code: string;
60
+ lang: string | undefined;
61
+ lines: {
62
+ n: number;
63
+ text: string;
64
+ hl: boolean;
65
+ }[];
66
+ }) => any;
67
+ }>;
68
+ type __VLS_WithSlots<T, S> = T & {
69
+ new (): {
70
+ $slots: S;
71
+ };
72
+ };
@@ -0,0 +1,140 @@
1
+ import { Fragment as e, computed as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, defineComponent as o, mergeModels as s, nextTick as c, normalizeClass as l, onBeforeUnmount as u, openBlock as d, ref as f, renderList as p, renderSlot as m, toDisplayString as h, unref as g, useId as _, useModel as v } from "vue";
2
+ //#region src/components/BlessCodeBlock.vue?vue&type=script&setup=true&lang.ts
3
+ var y = { class: "bless-code" }, b = {
4
+ key: 0,
5
+ class: "bless-code__head"
6
+ }, x = ["aria-label"], S = [
7
+ "id",
8
+ "aria-selected",
9
+ "aria-controls",
10
+ "tabindex",
11
+ "onClick"
12
+ ], C = {
13
+ key: 1,
14
+ class: "bless-code__name"
15
+ }, w = {
16
+ key: 2,
17
+ class: "bless-code__lang"
18
+ }, T = [
19
+ "id",
20
+ "role",
21
+ "aria-labelledby",
22
+ "aria-label"
23
+ ], E = {
24
+ key: 0,
25
+ class: "bless-code__no",
26
+ "aria-hidden": "true"
27
+ }, D = {
28
+ class: "bless-code__live",
29
+ "aria-live": "polite"
30
+ }, O = /*@__PURE__*/ o({
31
+ name: "BlessCodeBlock",
32
+ __name: "BlessCodeBlock",
33
+ props: /*@__PURE__*/ s({
34
+ code: {},
35
+ lang: {},
36
+ filename: {},
37
+ files: {},
38
+ lines: {},
39
+ lineNumbers: { type: Boolean },
40
+ copy: {
41
+ type: Boolean,
42
+ default: !0
43
+ },
44
+ wrap: { type: Boolean },
45
+ label: { default: "Code" },
46
+ labels: {}
47
+ }, {
48
+ active: { default: 0 },
49
+ activeModifiers: {}
50
+ }),
51
+ emits: /*@__PURE__*/ s(["copy"], ["update:active"]),
52
+ setup(o, { emit: s }) {
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) ?? {
59
+ name: O.filename ?? "",
60
+ code: O.code ?? "",
61
+ lang: O.lang
62
+ }), P = t(() => N.value.lang ?? O.lang), F = t(() => {
63
+ let e = /* @__PURE__ */ new Set();
64
+ if (Array.isArray(O.lines)) O.lines.forEach((t) => e.add(t));
65
+ else for (let t of (O.lines ?? "").split(",")) {
66
+ let [n, r] = t.split("-").map((e) => parseInt(e, 10));
67
+ if (n) for (let t = n; t <= (r ?? n); t++) e.add(t);
68
+ }
69
+ return e;
70
+ }), I = t(() => N.value.code.replace(/\n$/, "").split("\n").map((e, t) => ({
71
+ n: t + 1,
72
+ text: e,
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()));
78
+ }
79
+ let z = f(!1), B;
80
+ async function V() {
81
+ let e = N.value.code;
82
+ try {
83
+ await navigator.clipboard.writeText(e);
84
+ } catch {
85
+ let t = document.createElement("textarea");
86
+ t.value = e, t.style.position = "fixed", t.style.opacity = "0", document.body.append(t), t.select(), document.execCommand("copy"), t.remove();
87
+ }
88
+ j("copy", e), z.value = !0, clearTimeout(B), B = setTimeout(() => z.value = !1, 2e3);
89
+ }
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, [
92
+ o.files?.length ? (d(), r("div", {
93
+ key: 0,
94
+ ref_key: "tabs",
95
+ ref: L,
96
+ class: "bless-code__tabs",
97
+ role: "tablist",
98
+ "aria-label": o.label
99
+ }, [(d(!0), r(e, null, p(o.files, (e, t) => (d(), r("button", {
100
+ id: `${g(M)}-t${t}`,
101
+ key: e.name,
102
+ type: "button",
103
+ role: "tab",
104
+ class: "bless-code__tab",
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
110
+ }, h(e.name), 41, S))), 128))], 8, x)) : o.filename ? (d(), r("span", C, h(o.filename), 1)) : n("", !0),
111
+ s[0] ||= i("span", { class: "bless-code__spacer" }, null, -1),
112
+ P.value ? (d(), r("span", w, h(P.value), 1)) : n("", !0),
113
+ o.copy ? (d(), r("button", {
114
+ key: 3,
115
+ type: "button",
116
+ class: "bless-code__copy",
117
+ onClick: V
118
+ }, h(z.value ? k.value.copied : k.value.copy), 1)) : n("", !0)
119
+ ])) : n("", !0),
120
+ i("div", {
121
+ id: `${g(M)}-p`,
122
+ class: "bless-code__scroll",
123
+ tabindex: "0",
124
+ role: o.files?.length ? "tabpanel" : "region",
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
127
+ }, [m(t.$slots, "code", {
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", {
132
+ key: e.n,
133
+ class: l(["bless-code__line", { "bless-code__line--hl": e.hl }])
134
+ }, [o.lineNumbers ? (d(), r("span", E, h(e.n), 1)) : n("", !0), a(h(e.text) + "\n", 1)], 2))), 128))])], 2)])], 8, T),
135
+ i("span", D, h(z.value ? k.value.copiedLive : ""), 1)
136
+ ]));
137
+ }
138
+ });
139
+ //#endregion
140
+ export { O as default };
@@ -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))}
@@ -1,3 +1,11 @@
1
+ export interface BlessCommandScope {
2
+ /** the character that starts it when typed first: `@`, `#`, `>` */
3
+ key: string;
4
+ /** the `group` of the items it searches */
5
+ group: string;
6
+ /** what it is called in the chip and the hint; defaults to the group */
7
+ label?: string;
8
+ }
1
9
  export interface BlessCommandItem {
2
10
  label: string;
3
11
  value: string;
@@ -18,9 +26,24 @@ type __VLS_Props = {
18
26
  /** render inline instead of inside a modal */
19
27
  inline?: boolean;
20
28
  filter?: (item: BlessCommandItem, query: string) => boolean;
29
+ /** prefixes that narrow the search to one group: `[{ key: "@", group: "People" }]` */
30
+ scopes?: BlessCommandScope[];
31
+ /** put the items chosen before at the top while the search is empty */
32
+ recent?: boolean;
33
+ recentLimit?: number;
34
+ /** keep the history in localStorage under this key (read after mount) */
35
+ persist?: string;
36
+ labels?: Partial<{
37
+ recent: string;
38
+ scope: (label: string) => string;
39
+ clearScope: string;
40
+ scopeHint: (parts: string[]) => string;
41
+ }>;
21
42
  };
22
43
  type __VLS_ModelProps = {
23
44
  "open"?: boolean;
45
+ /** values of the items chosen so far, most recent first */
46
+ "history"?: string[];
24
47
  };
25
48
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
26
49
  declare var __VLS_14: {
@@ -34,14 +57,17 @@ type __VLS_Slots = {} & {
34
57
  declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
35
58
  select: (item: BlessCommandItem) => any;
36
59
  "update:open": (value: boolean) => any;
60
+ "update:history": (value: string[]) => any;
37
61
  }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
38
62
  onSelect?: ((item: BlessCommandItem) => any) | undefined;
39
63
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
64
+ "onUpdate:history"?: ((value: string[]) => any) | undefined;
40
65
  }>, {
41
66
  label: string;
42
67
  placeholder: string;
43
68
  emptyText: string;
44
69
  hotkey: boolean;
70
+ recentLimit: number;
45
71
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
46
72
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
47
73
  declare const _default: typeof __VLS_export;