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,51 @@
1
+ import { DayBlock } from '../composables/dayBlocks';
2
+ type __VLS_Props = {
3
+ /** 0 = Sunday, 1 = Monday */
4
+ weekStart?: 0 | 1;
5
+ locale?: string;
6
+ min?: string;
7
+ max?: string;
8
+ disabledDates?: (iso: string) => boolean;
9
+ /** month shown first (YYYY-MM); defaults to the first chosen day, else this month */
10
+ month?: string;
11
+ label?: string;
12
+ labels?: Partial<{
13
+ prev: string;
14
+ next: string;
15
+ clear: string;
16
+ summary: (days: number, blocks: number) => string;
17
+ selected: (day: string) => string;
18
+ cleared: (day: string) => string;
19
+ hint: string;
20
+ }>;
21
+ };
22
+ type __VLS_ModelProps = {
23
+ /** every chosen day, as sorted `YYYY-MM-DD` */
24
+ modelValue?: string[];
25
+ };
26
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
27
+ declare var __VLS_17: {
28
+ blocks: DayBlock[];
29
+ };
30
+ type __VLS_Slots = {} & {
31
+ summary?: (props: typeof __VLS_17) => any;
32
+ };
33
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
34
+ change: (blocks: DayBlock[]) => any;
35
+ "update:modelValue": (value: string[]) => any;
36
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
+ onChange?: ((blocks: DayBlock[]) => any) | undefined;
38
+ "onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
39
+ }>, {
40
+ label: string;
41
+ weekStart: 0 | 1;
42
+ locale: string;
43
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
44
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
45
+ declare const _default: typeof __VLS_export;
46
+ export default _default;
47
+ type __VLS_WithSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -0,0 +1,217 @@
1
+ import e from "./BlessButton.js";
2
+ import { addDays as t, addMonths as n, fromISO as r, isoToday as i, toISO as a } from "../composables/date.js";
3
+ import { applyRange as o, blocks as s, rangeBetween as c } from "../composables/dayBlocks.js";
4
+ import { Fragment as l, computed as u, createCommentVNode as ee, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, mergeModels as g, nextTick as te, normalizeClass as ne, onMounted as _, openBlock as v, ref as y, renderList as b, renderSlot as x, toDisplayString as S, unref as C, useId as re, useModel as ie, withCtx as w } from "vue";
5
+ //#region src/components/BlessRangeCalendar.vue?vue&type=script&setup=true&lang.ts
6
+ var T = ["aria-label"], ae = { class: "bless-range__bar" }, oe = {
7
+ class: "bless-range__title",
8
+ "aria-live": "polite"
9
+ }, se = ["aria-label"], ce = {
10
+ class: "bless-range__row",
11
+ role: "row"
12
+ }, le = {
13
+ key: 0,
14
+ class: "bless-range__gap",
15
+ role: "gridcell",
16
+ "aria-hidden": "true"
17
+ }, ue = [
18
+ "id",
19
+ "data-day",
20
+ "aria-selected",
21
+ "aria-disabled",
22
+ "aria-label",
23
+ "aria-current",
24
+ "tabindex",
25
+ "onPointerdown",
26
+ "onKeydown",
27
+ "onFocus"
28
+ ], E = { class: "bless-range__foot" }, D = { class: "bless-range__summary" }, O = {
29
+ class: "bless-range__live",
30
+ "aria-live": "polite"
31
+ }, k = /*@__PURE__*/ h({
32
+ name: "BlessRangeCalendar",
33
+ __name: "BlessRangeCalendar",
34
+ props: /*@__PURE__*/ g({
35
+ weekStart: { default: 1 },
36
+ locale: { default: "en" },
37
+ min: {},
38
+ max: {},
39
+ disabledDates: {},
40
+ month: {},
41
+ label: { default: "Days" },
42
+ labels: {}
43
+ }, {
44
+ modelValue: { default: () => [] },
45
+ modelModifiers: {}
46
+ }),
47
+ emits: /*@__PURE__*/ g(["change"], ["update:modelValue"]),
48
+ setup(h, { emit: g }) {
49
+ let k = h, A = ie(h, "modelValue"), j = g, M = u(() => ({
50
+ prev: "Previous month",
51
+ next: "Next month",
52
+ clear: "Clear all",
53
+ summary: (e, t) => e ? `${e} day${e === 1 ? "" : "s"} in ${t} block${t === 1 ? "" : "s"}` : "No days chosen",
54
+ selected: (e) => `${e} chosen`,
55
+ cleared: (e) => `${e} cleared`,
56
+ hint: "Arrow keys move, Space toggles a day, hold Shift and press arrows to paint, Page Up and Down change month.",
57
+ ...k.labels
58
+ })), N = re(), P = `${N}-hint`, F = y(k.month ? r(`${k.month}-01`) : A.value[0] ? r(`${A.value[0].slice(0, 7)}-01`) : null), I = y(""), L = y("");
59
+ _(() => {
60
+ I.value = i(), F.value ??= r(`${I.value.slice(0, 7)}-01`), L.value = R(F.value);
61
+ });
62
+ let R = (e) => a(new Date(e.getFullYear(), e.getMonth(), 1)), z = u(() => new Intl.DateTimeFormat(k.locale, {
63
+ month: "long",
64
+ year: "numeric"
65
+ })), B = u(() => new Intl.DateTimeFormat(k.locale, {
66
+ weekday: "long",
67
+ day: "numeric",
68
+ month: "long",
69
+ year: "numeric"
70
+ })), V = u(() => new Intl.DateTimeFormat(k.locale, { weekday: "short" })), H = u(() => Array.from({ length: 7 }, (e, n) => V.value.format(t(new Date(2023, 0, 1 + k.weekStart + n), 0)))), U = (e) => k.min != null && e < k.min || k.max != null && e > k.max || !!k.disabledDates?.(e), W = u(() => new Set(A.value)), G = u(() => {
71
+ let e = F.value;
72
+ if (!e) return [];
73
+ let t = (new Date(e.getFullYear(), e.getMonth(), 1).getDay() - k.weekStart + 7) % 7, n = new Date(e.getFullYear(), e.getMonth() + 1, 0).getDate(), r = [...Array(t).fill(null), ...Array.from({ length: n }, (t, n) => a(new Date(e.getFullYear(), e.getMonth(), n + 1)))];
74
+ for (; r.length % 7;) r.push(null);
75
+ return Array.from({ length: r.length / 7 }, (e, t) => r.slice(t * 7, t * 7 + 7));
76
+ }), K = y(null), q = u(() => K.value ? new Set(c(K.value.from, K.value.to)) : null), J = y("");
77
+ function Y(e, t) {
78
+ let n = o(A.value, e, t, (e) => !U(e));
79
+ n.join() !== A.value.join() && (A.value = n, j("change", s(n)));
80
+ }
81
+ let de = (e, t) => document.elementFromPoint(e, t)?.closest("[data-day]")?.dataset.day;
82
+ function fe(e, t) {
83
+ t.button || U(e) || (t.currentTarget.setPointerCapture?.(t.pointerId), L.value = e, K.value = {
84
+ from: e,
85
+ to: e,
86
+ mode: W.value.has(e) ? "clear" : "set"
87
+ });
88
+ }
89
+ function pe(e) {
90
+ let t = K.value, n = t && de(e.clientX, e.clientY);
91
+ t && n && (K.value = {
92
+ ...t,
93
+ to: n
94
+ });
95
+ }
96
+ function me() {
97
+ let e = K.value;
98
+ K.value = null, e && (Y(c(e.from, e.to), e.mode), J.value = (e.mode === "set" ? M.value.selected : M.value.cleared)(e.from === e.to ? B.value.format(r(e.from)) : `${e.from} – ${e.to}`));
99
+ }
100
+ let X = null, he = (e) => te(() => document.getElementById(`${N}-${e}`)?.focus());
101
+ function Z(e) {
102
+ let t = r(e);
103
+ (!F.value || t.getMonth() !== F.value.getMonth() || t.getFullYear() !== F.value.getFullYear()) && (F.value = new Date(t.getFullYear(), t.getMonth(), 1)), L.value = e, he(e);
104
+ }
105
+ function ge(e, i) {
106
+ let o = {
107
+ ArrowLeft: -1,
108
+ ArrowRight: 1,
109
+ ArrowUp: -7,
110
+ ArrowDown: 7
111
+ }[i.key];
112
+ if (o) {
113
+ i.preventDefault();
114
+ let n = a(t(r(e), o));
115
+ i.shiftKey ? (X ??= W.value.has(e) ? "clear" : "set", Y([e, n], X)) : X = null, Z(n);
116
+ } else if (i.key === " " || i.key === "Enter") {
117
+ if (i.preventDefault(), U(e)) return;
118
+ let t = W.value.has(e) ? "clear" : "set";
119
+ Y([e], t), J.value = (t === "set" ? M.value.selected : M.value.cleared)(B.value.format(r(e)));
120
+ } else if (i.key === "PageDown" || i.key === "PageUp") {
121
+ i.preventDefault();
122
+ let t = n(r(e), i.key === "PageDown" ? 1 : -1), o = new Date(t.getFullYear(), t.getMonth() + 1, 0).getDate();
123
+ Z(a(new Date(t.getFullYear(), t.getMonth(), Math.min(r(e).getDate(), o))));
124
+ } else if (i.key === "Home" || i.key === "End") {
125
+ i.preventDefault();
126
+ let n = (r(e).getDay() - k.weekStart + 7) % 7;
127
+ Z(a(t(r(e), i.key === "Home" ? -n : 6 - n)));
128
+ }
129
+ }
130
+ let _e = (e) => e.key === "Shift" && (X = null), Q = (e) => {
131
+ F.value && (F.value = n(F.value, e), L.value = R(F.value));
132
+ }, $ = u(() => s(A.value)), ve = u(() => M.value.summary(A.value.length, $.value.length)), ye = u(() => G.value.flat().includes(L.value) ? L.value : R(F.value ?? /* @__PURE__ */ new Date()));
133
+ return (t, n) => (v(), d("div", {
134
+ class: "bless-range",
135
+ role: "group",
136
+ "aria-label": h.label
137
+ }, [
138
+ f("div", ae, [
139
+ m(e, {
140
+ size: "sm",
141
+ variant: "ghost",
142
+ "aria-label": M.value.prev,
143
+ onClick: n[0] ||= (e) => Q(-1)
144
+ }, {
145
+ default: w(() => [...n[4] ||= [p("‹", -1)]]),
146
+ _: 1
147
+ }, 8, ["aria-label"]),
148
+ f("strong", oe, S(F.value ? z.value.format(F.value) : ""), 1),
149
+ m(e, {
150
+ size: "sm",
151
+ variant: "ghost",
152
+ "aria-label": M.value.next,
153
+ onClick: n[1] ||= (e) => Q(1)
154
+ }, {
155
+ default: w(() => [...n[5] ||= [p("›", -1)]]),
156
+ _: 1
157
+ }, 8, ["aria-label"])
158
+ ]),
159
+ F.value ? (v(), d("div", {
160
+ key: 0,
161
+ class: "bless-range__grid",
162
+ role: "grid",
163
+ "aria-label": `${h.label}, ${z.value.format(F.value)}`,
164
+ "aria-describedby": P,
165
+ "aria-multiselectable": "true",
166
+ onKeyup: _e
167
+ }, [f("div", ce, [(v(!0), d(l, null, b(H.value, (e) => (v(), d("span", {
168
+ key: e,
169
+ class: "bless-range__head",
170
+ role: "columnheader"
171
+ }, S(e), 1))), 128))]), (v(!0), d(l, null, b(G.value, (e, t) => (v(), d("div", {
172
+ key: t,
173
+ class: "bless-range__row",
174
+ role: "row"
175
+ }, [(v(!0), d(l, null, b(e, (e, t) => (v(), d(l, { key: t }, [e ? (v(), d("button", {
176
+ key: 1,
177
+ id: `${C(N)}-${e}`,
178
+ type: "button",
179
+ role: "gridcell",
180
+ class: ne(["bless-range__day", {
181
+ "bless-range__day--on": W.value.has(e),
182
+ "bless-range__day--set": K.value?.mode === "set" && q.value?.has(e),
183
+ "bless-range__day--clear": K.value?.mode === "clear" && q.value?.has(e),
184
+ "bless-range__day--today": e === I.value
185
+ }]),
186
+ "data-day": e,
187
+ "aria-selected": W.value.has(e),
188
+ "aria-disabled": U(e) || void 0,
189
+ "aria-label": B.value.format(C(r)(e)),
190
+ "aria-current": e === I.value ? "date" : void 0,
191
+ tabindex: ye.value === e ? 0 : -1,
192
+ onPointerdown: (t) => fe(e, t),
193
+ onPointermove: pe,
194
+ onPointerup: me,
195
+ onPointercancel: n[2] ||= (e) => K.value = null,
196
+ onKeydown: (t) => ge(e, t),
197
+ onFocus: (t) => L.value = e
198
+ }, S(Number(e.slice(8))), 43, ue)) : (v(), d("span", le))], 64))), 128))]))), 128))], 40, se)) : ee("", !0),
199
+ f("div", E, [f("span", D, [x(t.$slots, "summary", { blocks: $.value }, () => [p(S(ve.value), 1)])]), m(e, {
200
+ size: "sm",
201
+ variant: "outline",
202
+ disabled: !A.value.length,
203
+ onClick: n[3] ||= (e) => (A.value = [], j("change", []))
204
+ }, {
205
+ default: w(() => [p(S(M.value.clear), 1)]),
206
+ _: 1
207
+ }, 8, ["disabled"])]),
208
+ f("span", {
209
+ id: P,
210
+ hidden: ""
211
+ }, S(M.value.hint), 1),
212
+ f("span", O, S(J.value), 1)
213
+ ], 8, T));
214
+ }
215
+ });
216
+ //#endregion
217
+ export { k as default };
@@ -0,0 +1 @@
1
+ .bless-sched{gap:var(--bless-space-2);font-family:var(--bless-font-sans);font-size:var(--bless-text-sm);color:var(--bless-color-text);display:grid;position:relative}.bless-sched__bar{align-items:center;gap:var(--bless-space-2);flex-wrap:wrap;display:flex}.bless-sched__title{margin-inline-start:var(--bless-space-2)}.bless-sched__add{margin-inline-start:auto}.bless-sched__scroll{border:var(--bless-border-width) solid var(--bless-color-border);max-height:560px;overflow:auto}.bless-sched__head,.bless-sched__body{grid-template-columns:56px 1fr;min-width:560px;display:grid}.bless-sched__head{z-index:3;background:var(--bless-color-bg);border-bottom:var(--bless-border-width) solid var(--bless-color-border);grid-template-columns:56px repeat(var(--_n), minmax(0, 1fr));position:sticky;top:0}.bless-sched__day{padding:var(--bless-space-1) var(--bless-space-2);text-align:center;font-weight:var(--bless-font-weight-bold,700)}.bless-sched__day--today{color:var(--bless-color-accent-text)}.bless-sched__gutter{border-inline-end:var(--bless-border-width) solid var(--bless-color-border);color:var(--bless-color-text-muted);font-size:var(--bless-text-xs);position:relative}.bless-sched__hour{position:absolute;inset-inline-end:var(--bless-space-2);translate:0 -50%}.bless-sched__cols{grid-template-columns:repeat(var(--_n), minmax(0, 1fr));background-image:repeating-linear-gradient(to bottom, var(--bless-color-border) 0 1px, transparent 1px var(--_h));outline:none;display:grid;position:relative}.bless-sched__col{border-inline-start:var(--bless-border-width) solid var(--bless-color-border);touch-action:pan-y;cursor:crosshair;position:relative}.bless-sched__event{box-sizing:border-box;padding:2px var(--bless-space-2);background:color-mix(in srgb, var(--bless-color-accent) 20%, var(--bless-color-bg));border:var(--bless-border-width) solid var(--bless-color-accent);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-inline-start-width:4px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.bless-sched__event--sel{outline:2px solid var(--bless-color-text);outline-offset:1px;z-index:2}.bless-sched__event:focus-visible{outline:3px solid var(--bless-color-text);outline-offset:1px;z-index:2}.bless-sched__event--draft{pointer-events:none;border-style:dashed;left:1px;right:1px}.bless-sched__etitle{text-overflow:ellipsis;white-space:nowrap;font-weight:var(--bless-font-weight-bold,700);overflow:hidden}.bless-sched__etime{font-size:var(--bless-text-xs)}.bless-sched__foot{inset-inline:0;cursor:ns-resize;height:8px;position:absolute;bottom:0}.bless-sched__edit{align-items:center;gap:var(--bless-space-3);flex-wrap:wrap;display:flex}.bless-sched__field{align-items:center;gap:var(--bless-space-2);display:flex}.bless-sched__input{min-height:32px;padding:var(--bless-space-1) var(--bless-space-2);background:var(--bless-color-bg);border:var(--bless-border-width) solid var(--bless-color-border);color:inherit;font:inherit}.bless-sched__input:focus-visible{outline:2px solid var(--bless-color-accent);outline-offset:1px}.bless-sched__live{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}
@@ -0,0 +1,6 @@
1
+ import "./BlessScheduler.css";
2
+ import e from "./BlessScheduler.vue_vue_type_script_setup_true_lang.js";
3
+ //#region src/components/BlessScheduler.vue
4
+ var t = e;
5
+ //#endregion
6
+ export { t as default };
@@ -0,0 +1,95 @@
1
+ import { ScheduleEvent } from '../composables/schedule';
2
+ export type { ScheduleEvent as BlessScheduleEvent } from '../composables/schedule';
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;
5
+ declare const __VLS_export: import('vue').DefineComponent<{
6
+ view?: "day" | "week";
7
+ /** 0 = Sunday, 1 = Monday */
8
+ weekStart?: 0 | 1;
9
+ /** first and last hour shown (0–24) */
10
+ dayStart?: number;
11
+ dayEnd?: number;
12
+ /** minutes events snap to */
13
+ snap?: number;
14
+ /** px per hour */
15
+ hourHeight?: number;
16
+ locale?: string;
17
+ editable?: boolean;
18
+ label?: string;
19
+ labels?: Partial<{
20
+ prev: string;
21
+ next: string;
22
+ today: string;
23
+ add: string;
24
+ remove: string;
25
+ title: string;
26
+ newEvent: string;
27
+ eventName: (title: string, day: string, from: string, to: string) => string;
28
+ moved: (title: string, day: string, from: string, to: string) => string;
29
+ added: (title: string) => string;
30
+ removed: (title: string) => string;
31
+ hint: string;
32
+ }>;
33
+ } & {
34
+ modelValue?: ScheduleEvent[];
35
+ /** any day in the period shown */
36
+ date?: string | null;
37
+ selected?: string | null;
38
+ }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
39
+ change: (event: ScheduleEvent) => any;
40
+ "update:modelValue": (value: ScheduleEvent[]) => any;
41
+ create: (event: ScheduleEvent) => any;
42
+ remove: (event: ScheduleEvent) => any;
43
+ "update:selected": (value: string | null) => any;
44
+ "update:date": (value: string | null) => any;
45
+ }, string, import('vue').PublicProps, Readonly<{
46
+ view?: "day" | "week";
47
+ /** 0 = Sunday, 1 = Monday */
48
+ weekStart?: 0 | 1;
49
+ /** first and last hour shown (0–24) */
50
+ dayStart?: number;
51
+ dayEnd?: number;
52
+ /** minutes events snap to */
53
+ snap?: number;
54
+ /** px per hour */
55
+ hourHeight?: number;
56
+ locale?: string;
57
+ editable?: boolean;
58
+ label?: string;
59
+ labels?: Partial<{
60
+ prev: string;
61
+ next: string;
62
+ today: string;
63
+ add: string;
64
+ remove: string;
65
+ title: string;
66
+ newEvent: string;
67
+ eventName: (title: string, day: string, from: string, to: string) => string;
68
+ moved: (title: string, day: string, from: string, to: string) => string;
69
+ added: (title: string) => string;
70
+ removed: (title: string) => string;
71
+ hint: string;
72
+ }>;
73
+ } & {
74
+ modelValue?: ScheduleEvent[];
75
+ /** any day in the period shown */
76
+ date?: string | null;
77
+ selected?: string | null;
78
+ }> & Readonly<{
79
+ onChange?: ((event: ScheduleEvent) => any) | undefined;
80
+ "onUpdate:modelValue"?: ((value: ScheduleEvent[]) => any) | undefined;
81
+ onCreate?: ((event: ScheduleEvent) => any) | undefined;
82
+ onRemove?: ((event: ScheduleEvent) => any) | undefined;
83
+ "onUpdate:selected"?: ((value: string | null) => any) | undefined;
84
+ "onUpdate:date"?: ((value: string | null) => any) | undefined;
85
+ }>, {
86
+ label: string;
87
+ view: "day" | "week";
88
+ weekStart: 0 | 1;
89
+ locale: string;
90
+ editable: boolean;
91
+ snap: number;
92
+ dayStart: number;
93
+ dayEnd: number;
94
+ hourHeight: number;
95
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;