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.
- package/CHANGELOG.md +69 -0
- package/README.md +139 -105
- package/dist/blessing-ui.css +97 -1
- package/dist/components/BlessAnnotator.css +1 -0
- package/dist/components/BlessAnnotator.js +6 -0
- package/dist/components/BlessAnnotator.vue.d.ts +71 -0
- package/dist/components/BlessAnnotator.vue_vue_type_script_setup_true_lang.js +264 -0
- package/dist/components/BlessAttachment.vue.d.ts +4 -1
- package/dist/components/BlessAttachment.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/BlessCalendar.vue.d.ts +4 -0
- package/dist/components/BlessCalendar.vue_vue_type_script_setup_true_lang.js +65 -60
- package/dist/components/BlessCarousel.vue.d.ts +3 -0
- package/dist/components/BlessCarousel.vue_vue_type_script_setup_true_lang.js +10 -9
- package/dist/components/BlessCoachmark.css +1 -0
- package/dist/components/BlessCoachmark.js +6 -0
- package/dist/components/BlessCoachmark.vue.d.ts +40 -0
- package/dist/components/BlessCoachmark.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/components/BlessCodeBlock.css +1 -0
- package/dist/components/BlessCodeBlock.js +6 -0
- package/dist/components/BlessCodeBlock.vue.d.ts +72 -0
- package/dist/components/BlessCodeBlock.vue_vue_type_script_setup_true_lang.js +140 -0
- package/dist/components/BlessCombobox.vue.d.ts +2 -0
- package/dist/components/BlessCombobox.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/BlessCommand.css +1 -1
- package/dist/components/BlessCommand.vue.d.ts +26 -0
- package/dist/components/BlessCommand.vue_vue_type_script_setup_true_lang.js +137 -70
- package/dist/components/BlessConfetti.css +1 -0
- package/dist/components/BlessConfetti.js +6 -0
- package/dist/components/BlessConfetti.vue.d.ts +40 -0
- package/dist/components/BlessConfetti.vue_vue_type_script_setup_true_lang.js +77 -0
- package/dist/components/BlessCountUp.css +1 -0
- package/dist/components/BlessCountUp.js +6 -0
- package/dist/components/BlessCountUp.vue.d.ts +18 -0
- package/dist/components/BlessCountUp.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/components/BlessCropper.css +1 -0
- package/dist/components/BlessCropper.js +6 -0
- package/dist/components/BlessCropper.vue.d.ts +70 -0
- package/dist/components/BlessCropper.vue_vue_type_script_setup_true_lang.js +220 -0
- package/dist/components/BlessDataTable.vue.d.ts +6 -0
- package/dist/components/BlessDataTable.vue_vue_type_script_setup_true_lang.js +56 -42
- package/dist/components/BlessDataView.vue.d.ts +7 -0
- package/dist/components/BlessDataView.vue_vue_type_script_setup_true_lang.js +38 -31
- package/dist/components/BlessDatePicker.vue.d.ts +3 -0
- package/dist/components/BlessDatePicker.vue_vue_type_script_setup_true_lang.js +46 -45
- package/dist/components/BlessDiff.css +1 -0
- package/dist/components/BlessDiff.js +6 -0
- package/dist/components/BlessDiff.vue.d.ts +22 -0
- package/dist/components/BlessDiff.vue_vue_type_script_setup_true_lang.js +148 -0
- package/dist/components/BlessDock.css +1 -0
- package/dist/components/BlessDock.js +6 -0
- package/dist/components/BlessDock.vue.d.ts +55 -0
- package/dist/components/BlessDock.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/components/BlessEditor.vue.d.ts +2 -0
- package/dist/components/BlessEditor.vue_vue_type_script_setup_true_lang.js +23 -22
- package/dist/components/BlessFileInput.vue.d.ts +2 -0
- package/dist/components/BlessFileInput.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/BlessFormula.css +1 -0
- package/dist/components/BlessFormula.js +6 -0
- package/dist/components/BlessFormula.vue.d.ts +53 -0
- package/dist/components/BlessFormula.vue_vue_type_script_setup_true_lang.js +111 -0
- package/dist/components/BlessGantt.css +1 -0
- package/dist/components/BlessGantt.js +6 -0
- package/dist/components/BlessGantt.vue.d.ts +81 -0
- package/dist/components/BlessGantt.vue_vue_type_script_setup_true_lang.js +276 -0
- package/dist/components/BlessGauge.css +1 -0
- package/dist/components/BlessGauge.js +6 -0
- package/dist/components/BlessGauge.vue.d.ts +36 -0
- package/dist/components/BlessGauge.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/components/BlessHeatmapCalendar.css +1 -0
- package/dist/components/BlessHeatmapCalendar.js +6 -0
- package/dist/components/BlessHeatmapCalendar.vue.d.ts +38 -0
- package/dist/components/BlessHeatmapCalendar.vue_vue_type_script_setup_true_lang.js +146 -0
- package/dist/components/BlessHotspots.css +1 -0
- package/dist/components/BlessHotspots.js +6 -0
- package/dist/components/BlessHotspots.vue.d.ts +49 -0
- package/dist/components/BlessHotspots.vue_vue_type_script_setup_true_lang.js +127 -0
- package/dist/components/BlessInfiniteCanvas.css +1 -0
- package/dist/components/BlessInfiniteCanvas.js +6 -0
- package/dist/components/BlessInfiniteCanvas.vue.d.ts +91 -0
- package/dist/components/BlessInfiniteCanvas.vue_vue_type_script_setup_true_lang.js +232 -0
- package/dist/components/BlessInputNumber.vue.d.ts +5 -0
- package/dist/components/BlessInputNumber.vue_vue_type_script_setup_true_lang.js +39 -34
- package/dist/components/BlessKanban.css +1 -0
- package/dist/components/BlessKanban.js +6 -0
- package/dist/components/BlessKanban.vue.d.ts +67 -0
- package/dist/components/BlessKanban.vue_vue_type_script_setup_true_lang.js +195 -0
- package/dist/components/BlessLoadingBar.vue.d.ts +2 -0
- package/dist/components/BlessLoadingBar.vue_vue_type_script_setup_true_lang.js +8 -3
- package/dist/components/BlessLoupe.css +1 -0
- package/dist/components/BlessLoupe.js +6 -0
- package/dist/components/BlessLoupe.vue.d.ts +16 -0
- package/dist/components/BlessLoupe.vue_vue_type_script_setup_true_lang.js +93 -0
- package/dist/components/BlessMarquee.css +1 -0
- package/dist/components/BlessMarquee.js +6 -0
- package/dist/components/BlessMarquee.vue.d.ts +44 -0
- package/dist/components/BlessMarquee.vue_vue_type_script_setup_true_lang.js +69 -0
- package/dist/components/BlessMasonry.css +1 -0
- package/dist/components/BlessMasonry.js +6 -0
- package/dist/components/BlessMasonry.vue.d.ts +33 -0
- package/dist/components/BlessMasonry.vue_vue_type_script_setup_true_lang.js +79 -0
- package/dist/components/BlessMention.css +1 -0
- package/dist/components/BlessMention.js +6 -0
- package/dist/components/BlessMention.vue.d.ts +32 -0
- package/dist/components/BlessMention.vue_vue_type_script_setup_true_lang.js +116 -0
- package/dist/components/BlessNodeGraph.css +1 -0
- package/dist/components/BlessNodeGraph.js +6 -0
- package/dist/components/BlessNodeGraph.vue.d.ts +110 -0
- package/dist/components/BlessNodeGraph.vue_vue_type_script_setup_true_lang.js +321 -0
- package/dist/components/BlessOnboardingChecklist.css +1 -0
- package/dist/components/BlessOnboardingChecklist.js +6 -0
- package/dist/components/BlessOnboardingChecklist.vue.d.ts +72 -0
- package/dist/components/BlessOnboardingChecklist.vue_vue_type_script_setup_true_lang.js +157 -0
- package/dist/components/BlessOrderList.vue.d.ts +5 -0
- package/dist/components/BlessOrderList.vue_vue_type_script_setup_true_lang.js +62 -56
- package/dist/components/BlessPagination.vue.d.ts +2 -0
- package/dist/components/BlessPagination.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BlessPickList.vue.d.ts +5 -0
- package/dist/components/BlessPickList.vue_vue_type_script_setup_true_lang.js +55 -49
- package/dist/components/BlessRadialMenu.css +1 -0
- package/dist/components/BlessRadialMenu.js +6 -0
- package/dist/components/BlessRadialMenu.vue.d.ts +45 -0
- package/dist/components/BlessRadialMenu.vue_vue_type_script_setup_true_lang.js +146 -0
- package/dist/components/BlessRangeCalendar.css +1 -0
- package/dist/components/BlessRangeCalendar.js +6 -0
- package/dist/components/BlessRangeCalendar.vue.d.ts +51 -0
- package/dist/components/BlessRangeCalendar.vue_vue_type_script_setup_true_lang.js +217 -0
- package/dist/components/BlessScheduler.css +1 -0
- package/dist/components/BlessScheduler.js +6 -0
- package/dist/components/BlessScheduler.vue.d.ts +95 -0
- package/dist/components/BlessScheduler.vue_vue_type_script_setup_true_lang.js +347 -0
- package/dist/components/BlessShortcutRecorder.css +1 -0
- package/dist/components/BlessShortcutRecorder.js +6 -0
- package/dist/components/BlessShortcutRecorder.vue.d.ts +39 -0
- package/dist/components/BlessShortcutRecorder.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BlessSignaturePad.vue.d.ts +1 -1
- package/dist/components/BlessSliderCaptcha.css +1 -0
- package/dist/components/BlessSliderCaptcha.js +6 -0
- package/dist/components/BlessSliderCaptcha.vue.d.ts +38 -0
- package/dist/components/BlessSliderCaptcha.vue_vue_type_script_setup_true_lang.js +146 -0
- package/dist/components/BlessSortable.css +1 -0
- package/dist/components/BlessSortable.js +6 -0
- package/dist/components/BlessSortable.vue.d.ts +51 -0
- package/dist/components/BlessSortable.vue_vue_type_script_setup_true_lang.js +135 -0
- package/dist/components/BlessSparkline.css +1 -0
- package/dist/components/BlessSparkline.js +6 -0
- package/dist/components/BlessSparkline.vue.d.ts +28 -0
- package/dist/components/BlessSparkline.vue_vue_type_script_setup_true_lang.js +107 -0
- package/dist/components/BlessSplitView.css +1 -0
- package/dist/components/BlessSplitView.js +6 -0
- package/dist/components/BlessSplitView.vue.d.ts +61 -0
- package/dist/components/BlessSplitView.vue_vue_type_script_setup_true_lang.js +92 -0
- package/dist/components/BlessSteps.vue.d.ts +2 -0
- package/dist/components/BlessSteps.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/BlessSwipeDeck.css +1 -0
- package/dist/components/BlessSwipeDeck.js +6 -0
- package/dist/components/BlessSwipeDeck.vue.d.ts +46 -0
- package/dist/components/BlessSwipeDeck.vue_vue_type_script_setup_true_lang.js +200 -0
- package/dist/components/BlessTimer.css +1 -0
- package/dist/components/BlessTimer.js +6 -0
- package/dist/components/BlessTimer.vue.d.ts +74 -0
- package/dist/components/BlessTimer.vue_vue_type_script_setup_true_lang.js +139 -0
- package/dist/components/BlessTour.vue.d.ts +1 -0
- package/dist/components/BlessTour.vue_vue_type_script_setup_true_lang.js +48 -42
- package/dist/components/BlessTreemap.css +1 -0
- package/dist/components/BlessTreemap.js +6 -0
- package/dist/components/BlessTreemap.vue.d.ts +46 -0
- package/dist/components/BlessTreemap.vue_vue_type_script_setup_true_lang.js +137 -0
- package/dist/components/BlessUploader.vue.d.ts +11 -0
- package/dist/components/BlessUploader.vue_vue_type_script_setup_true_lang.js +80 -69
- package/dist/composables/annotate.d.ts +35 -0
- package/dist/composables/annotate.js +33 -0
- package/dist/composables/canvasView.d.ts +21 -0
- package/dist/composables/canvasView.js +23 -0
- package/dist/composables/confetti.d.ts +32 -0
- package/dist/composables/confetti.js +23 -0
- package/dist/composables/cropBox.d.ts +22 -0
- package/dist/composables/cropBox.js +39 -0
- package/dist/composables/dayBlocks.d.ts +11 -0
- package/dist/composables/dayBlocks.js +26 -0
- package/dist/composables/diffLines.d.ts +10 -0
- package/dist/composables/diffLines.js +55 -0
- package/dist/composables/formula.d.ts +28 -0
- package/dist/composables/formula.js +161 -0
- package/dist/composables/graph.d.ts +19 -0
- package/dist/composables/graph.js +16 -0
- package/dist/composables/radial.d.ts +15 -0
- package/dist/composables/radial.js +22 -0
- package/dist/composables/schedule.d.ts +27 -0
- package/dist/composables/schedule.js +54 -0
- package/dist/composables/shortcut.d.ts +12 -0
- package/dist/composables/shortcut.js +35 -0
- package/dist/composables/treemap.d.ts +23 -0
- package/dist/composables/treemap.js +77 -0
- package/dist/composables/useAutoScroll.d.ts +15 -0
- package/dist/composables/useAutoScroll.js +32 -0
- package/dist/composables/useSortable.d.ts +58 -0
- package/dist/composables/useSortable.js +107 -0
- package/dist/index.d.ts +62 -1
- package/dist/index.js +93 -53
- 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,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;
|