@inkbar/vue 0.3.0 → 0.4.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 (91) hide show
  1. package/README.md +16 -9
  2. package/dist/components/InkColorMenu.js +7 -0
  3. package/dist/components/InkColorMenu.js.map +1 -0
  4. package/dist/components/InkColorMenu.vue.d.ts +32 -0
  5. package/dist/components/InkColorMenu.vue.d.ts.map +1 -0
  6. package/dist/components/InkColorMenu.vue_vue_type_script_setup_true_lang.js +152 -0
  7. package/dist/components/InkColorMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  8. package/dist/components/InkHighlightMenu.js +7 -0
  9. package/dist/components/InkHighlightMenu.js.map +1 -0
  10. package/dist/components/InkHighlightMenu.vue.d.ts +17 -0
  11. package/dist/components/InkHighlightMenu.vue.d.ts.map +1 -0
  12. package/dist/components/InkHighlightMenu.vue_vue_type_script_setup_true_lang.js +140 -0
  13. package/dist/components/InkHighlightMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  14. package/dist/components/InkLineStyleMenu.js +7 -0
  15. package/dist/components/InkLineStyleMenu.js.map +1 -0
  16. package/dist/components/InkLineStyleMenu.vue.d.ts +14 -0
  17. package/dist/components/InkLineStyleMenu.vue.d.ts.map +1 -0
  18. package/dist/components/InkLineStyleMenu.vue_vue_type_script_setup_true_lang.js +109 -0
  19. package/dist/components/InkLineStyleMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  20. package/dist/components/InkRoot.js.map +1 -1
  21. package/dist/components/InkRoot.vue.d.ts +573 -29
  22. package/dist/components/InkRoot.vue.d.ts.map +1 -1
  23. package/dist/components/InkRoot.vue_vue_type_script_setup_true_lang.js +117 -88
  24. package/dist/components/InkRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/InkShapeMenu.js +7 -0
  26. package/dist/components/InkShapeMenu.js.map +1 -0
  27. package/dist/components/InkShapeMenu.vue.d.ts +18 -0
  28. package/dist/components/InkShapeMenu.vue.d.ts.map +1 -0
  29. package/dist/components/InkShapeMenu.vue_vue_type_script_setup_true_lang.js +118 -0
  30. package/dist/components/InkShapeMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  31. package/dist/components/InkSignatureDialog.js +7 -0
  32. package/dist/components/InkSignatureDialog.js.map +1 -0
  33. package/dist/components/InkSignatureDialog.vue.d.ts +21 -0
  34. package/dist/components/InkSignatureDialog.vue.d.ts.map +1 -0
  35. package/dist/components/InkSignatureDialog.vue_vue_type_script_setup_true_lang.js +58 -0
  36. package/dist/components/InkSignatureDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  37. package/dist/components/InkSignatureMenu.js +7 -0
  38. package/dist/components/InkSignatureMenu.js.map +1 -0
  39. package/dist/components/InkSignatureMenu.vue.d.ts +20 -0
  40. package/dist/components/InkSignatureMenu.vue.d.ts.map +1 -0
  41. package/dist/components/InkSignatureMenu.vue_vue_type_script_setup_true_lang.js +213 -0
  42. package/dist/components/InkSignatureMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  43. package/dist/components/InkTextStyleMenu.js +7 -0
  44. package/dist/components/InkTextStyleMenu.js.map +1 -0
  45. package/dist/components/InkTextStyleMenu.vue.d.ts +14 -0
  46. package/dist/components/InkTextStyleMenu.vue.d.ts.map +1 -0
  47. package/dist/components/InkTextStyleMenu.vue_vue_type_script_setup_true_lang.js +200 -0
  48. package/dist/components/InkTextStyleMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  49. package/dist/components/InkThreadPopover.js +7 -0
  50. package/dist/components/InkThreadPopover.js.map +1 -0
  51. package/dist/components/{InkNotePopover.vue.d.ts → InkThreadPopover.vue.d.ts} +4 -4
  52. package/dist/components/InkThreadPopover.vue.d.ts.map +1 -0
  53. package/dist/components/{InkNotePopover.vue_vue_type_script_setup_true_lang.js → InkThreadPopover.vue_vue_type_script_setup_true_lang.js} +44 -42
  54. package/dist/components/InkThreadPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
  55. package/dist/components/InkToolButton.js.map +1 -1
  56. package/dist/components/InkToolButton.vue.d.ts.map +1 -1
  57. package/dist/components/InkToolButton.vue_vue_type_script_setup_true_lang.js +27 -20
  58. package/dist/components/InkToolButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/components/InkViewport.js.map +1 -1
  60. package/dist/components/InkViewport.vue.d.ts +1 -1
  61. package/dist/components/InkViewport.vue.d.ts.map +1 -1
  62. package/dist/components/InkViewport.vue_vue_type_script_setup_true_lang.js +6 -0
  63. package/dist/components/InkViewport.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/SignatureForm.js +7 -0
  65. package/dist/components/SignatureForm.js.map +1 -0
  66. package/dist/components/SignatureForm.vue.d.ts +14 -0
  67. package/dist/components/SignatureForm.vue.d.ts.map +1 -0
  68. package/dist/components/SignatureForm.vue_vue_type_script_setup_true_lang.js +181 -0
  69. package/dist/components/SignatureForm.vue_vue_type_script_setup_true_lang.js.map +1 -0
  70. package/dist/composables/useAnnotations.d.ts +1523 -131
  71. package/dist/composables/useAnnotations.d.ts.map +1 -1
  72. package/dist/composables/useAnnotations.js.map +1 -1
  73. package/dist/composables/useToolOptions.d.ts +11 -0
  74. package/dist/composables/useToolOptions.d.ts.map +1 -0
  75. package/dist/composables/useToolOptions.js +16 -0
  76. package/dist/composables/useToolOptions.js.map +1 -0
  77. package/dist/composables/useToolStyle.d.ts +32 -0
  78. package/dist/composables/useToolStyle.d.ts.map +1 -0
  79. package/dist/composables/useToolStyle.js +24 -0
  80. package/dist/composables/useToolStyle.js.map +1 -0
  81. package/dist/context.d.ts +14 -2
  82. package/dist/context.d.ts.map +1 -1
  83. package/dist/context.js.map +1 -1
  84. package/dist/index.d.ts +12 -2
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +33 -24
  87. package/package.json +5 -5
  88. package/dist/components/InkNotePopover.js +0 -7
  89. package/dist/components/InkNotePopover.js.map +0 -1
  90. package/dist/components/InkNotePopover.vue.d.ts.map +0 -1
  91. package/dist/components/InkNotePopover.vue_vue_type_script_setup_true_lang.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureForm.js","names":["_sfc_main","SignatureForm_vue_vue_type_script_setup_true_lang_default","SignatureForm_default"],"sources":["../../src/components/SignatureForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/*\n * The body of `InkSignatureDialog`, mounted while it is open: one draft per opening. Draw,\n * Type and Image tabs, then Cancel and Save.\n */\nimport {\n createSignatureDraft,\n fontFamilyValue,\n handleRadioKeys,\n handleTabKeys,\n SIGNATURE_LABELS,\n SIGNATURE_TABS,\n type SignatureDraftState,\n type SignatureTab,\n} from '@inkbar/core/dom'\nimport { DialogClose } from 'reka-ui'\nimport { computed, onBeforeUnmount, onMounted, useId, useTemplateRef } from 'vue'\n\nimport { useTool } from '../composables/useTool'\nimport { useToolOptions } from '../composables/useToolOptions'\nimport { useInkContext } from '../context'\nimport { useReadable } from '../use-readable'\n\nimport type { SignatureOptions, SignatureTemplate } from '@inkbar/core'\n\nconst props = defineProps<{ fonts?: readonly string[] | undefined }>()\nconst emit = defineEmits<{ saved: [template: SignatureTemplate]; close: [] }>()\n\nconst ctx = useInkContext('InkSignatureDialog')\nconst { setTool } = useTool()\nconst { setOptions } = useToolOptions<SignatureOptions>('signature')\nconst draft = createSignatureDraft({ fonts: props.fonts ?? ctx.signatureFonts.value })\nconst IDLE: SignatureDraftState = draft.state.get()\nconst s = useReadable(draft.state, IDLE)\nconst uid = useId()\nconst padHost = useTemplateRef<HTMLDivElement>('pad')\n\nlet detach: (() => void) | undefined\nonMounted(() => {\n if (padHost.value) detach = draft.attachPad(padHost.value)\n})\nonBeforeUnmount(() => {\n detach?.()\n draft.destroy()\n})\n\nfunction save(): void {\n draft.save(ctx.signatures.value).then(\n (t) => {\n if (!t) return\n setOptions({ templateId: t.id })\n setTool('signature')\n emit('saved', t)\n emit('close')\n },\n () => {\n // The host's store refused it: the dialog stays open to try again.\n }\n )\n}\n\nconst tabId = (tab: SignatureTab) => `${uid}-tab-${tab}`\nconst panelId = (tab: SignatureTab) => `${uid}-panel-${tab}`\nconst shown = computed(() => s.value.name.trim() || SIGNATURE_LABELS.namePlaceholder)\nconst onTabKeydown = (e: KeyboardEvent) =>\n handleTabKeys(e, e.currentTarget as HTMLElement)\nconst onRadioKeydown = (e: KeyboardEvent) =>\n handleRadioKeys(e, e.currentTarget as HTMLElement)\nconst onName = (e: Event) => draft.setName((e.target as HTMLInputElement).value)\nconst onFile = (e: Event) =>\n void draft.chooseFile((e.target as HTMLInputElement).files?.[0])\n</script>\n\n<template>\n <div\n role=\"tablist\"\n :aria-label=\"SIGNATURE_LABELS.tabs\"\n class=\"ink-tabs\"\n @keydown=\"onTabKeydown\"\n >\n <button\n v-for=\"tab in SIGNATURE_TABS\"\n :id=\"tabId(tab)\"\n :key=\"tab\"\n type=\"button\"\n role=\"tab\"\n :aria-controls=\"panelId(tab)\"\n :aria-selected=\"s.tab === tab\"\n :tabindex=\"s.tab === tab ? 0 : -1\"\n class=\"ink-tab\"\n :data-key=\"tab\"\n :data-state=\"s.tab === tab ? 'active' : 'inactive'\"\n @click=\"draft.setTab(tab)\"\n >\n {{ SIGNATURE_LABELS[tab] }}\n </button>\n </div>\n <div\n :id=\"panelId('draw')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('draw')\"\n class=\"ink-tab-panel\"\n data-key=\"draw\"\n :hidden=\"s.tab !== 'draw'\"\n >\n <div\n ref=\"pad\"\n class=\"ink-signature-pad-host\"\n data-ink-signature-pad-host\n role=\"img\"\n :aria-label=\"SIGNATURE_LABELS.pad\"\n />\n <div class=\"ink-dialog-row\">\n <button\n type=\"button\"\n class=\"ink-button\"\n data-ink-signature-clear\n :disabled=\"s.padEmpty\"\n @click=\"draft.clearPad()\"\n >\n {{ SIGNATURE_LABELS.clear }}\n </button>\n </div>\n </div>\n <div\n :id=\"panelId('type')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('type')\"\n class=\"ink-tab-panel\"\n data-key=\"type\"\n :hidden=\"s.tab !== 'type'\"\n >\n <label class=\"ink-field\">\n <span>{{ SIGNATURE_LABELS.name }}</span>\n <input\n type=\"text\"\n class=\"ink-input\"\n data-ink-signature-name\n autocomplete=\"name\"\n :placeholder=\"SIGNATURE_LABELS.namePlaceholder\"\n :value=\"s.name\"\n @input=\"onName\"\n />\n </label>\n <div\n role=\"radiogroup\"\n :aria-label=\"SIGNATURE_LABELS.fonts\"\n class=\"ink-signature-fonts\"\n @keydown=\"onRadioKeydown\"\n >\n <button\n v-for=\"font in draft.fonts\"\n :key=\"font\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"s.font === font\"\n :aria-label=\"font\"\n :tabindex=\"s.font === font ? 0 : -1\"\n class=\"ink-signature-font\"\n :data-key=\"font\"\n :data-state=\"s.font === font ? 'checked' : 'unchecked'\"\n @click=\"draft.setFont(font)\"\n >\n <!-- The font is the option itself, so it is set here, not left to the theme. -->\n <span\n class=\"ink-signature-font-sample\"\n :style=\"{ fontFamily: fontFamilyValue(font) }\"\n >\n {{ shown }}\n </span>\n </button>\n </div>\n </div>\n <div\n :id=\"panelId('image')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('image')\"\n class=\"ink-tab-panel\"\n data-key=\"image\"\n :hidden=\"s.tab !== 'image'\"\n >\n <label class=\"ink-field\">\n <span>{{ SIGNATURE_LABELS.file }}</span>\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg\"\n class=\"ink-input\"\n data-ink-signature-file\n @change=\"onFile\"\n />\n </label>\n <img\n v-if=\"s.image?.kind === 'image'\"\n class=\"ink-signature-image\"\n :src=\"s.image.imagedata\"\n alt=\"\"\n />\n <p v-if=\"s.imageError\" class=\"ink-field-error\" role=\"alert\">{{ s.imageError }}</p>\n </div>\n <p\n v-if=\"s.saveError\"\n class=\"ink-field-error\"\n role=\"alert\"\n data-ink-signature-save-error\n >\n {{ s.saveError }}\n </p>\n <div class=\"ink-dialog-actions\">\n <DialogClose as-child>\n <button type=\"button\" class=\"ink-button\" data-ink-signature-cancel>\n {{ SIGNATURE_LABELS.cancel }}\n </button>\n </DialogClose>\n <button\n type=\"button\"\n class=\"ink-button\"\n data-variant=\"primary\"\n data-ink-signature-save\n :disabled=\"!s.canSave\"\n @click=\"save\"\n >\n {{ SIGNATURE_LABELS.save }}\n </button>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { SignatureTemplate } from '@inkbar/core';
2
+ type __VLS_Props = {
3
+ fonts?: readonly string[] | undefined;
4
+ };
5
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
6
+ saved: (template: SignatureTemplate) => any;
7
+ close: () => any;
8
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
9
+ onSaved?: (template: SignatureTemplate) => any;
10
+ onClose?: () => any;
11
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ //# sourceMappingURL=SignatureForm.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureForm.vue.d.ts","sourceRoot":"","sources":["../../src/components/SignatureForm.vue"],"names":[],"mappings":"AAyPA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAGvE,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC;AAsR7D,QAAA,MAAM,YAAY;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,181 @@
1
+ import { useInkContext as e } from "../context.js";
2
+ import { useReadable as t } from "../use-readable.js";
3
+ import { useTool as n } from "../composables/useTool.js";
4
+ import { useToolOptions as ee } from "../composables/useToolOptions.js";
5
+ import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as te, defineComponent as c, normalizeStyle as ne, onBeforeUnmount as l, onMounted as re, openBlock as u, renderList as d, toDisplayString as f, unref as p, useId as m, useTemplateRef as h, withCtx as ie } from "vue";
6
+ import { SIGNATURE_LABELS as g, SIGNATURE_TABS as ae, createSignatureDraft as _, fontFamilyValue as v, handleRadioKeys as y, handleTabKeys as b } from "@inkbar/core/dom";
7
+ import { DialogClose as x } from "reka-ui";
8
+ //#region src/components/SignatureForm.vue?vue&type=script&setup=true&lang.ts
9
+ var S = ["aria-label"], C = [
10
+ "id",
11
+ "aria-controls",
12
+ "aria-selected",
13
+ "tabindex",
14
+ "data-key",
15
+ "data-state",
16
+ "onClick"
17
+ ], w = [
18
+ "id",
19
+ "aria-labelledby",
20
+ "hidden"
21
+ ], T = ["aria-label"], E = { class: "ink-dialog-row" }, D = ["disabled"], O = [
22
+ "id",
23
+ "aria-labelledby",
24
+ "hidden"
25
+ ], k = { class: "ink-field" }, A = ["placeholder", "value"], j = ["aria-label"], M = [
26
+ "aria-checked",
27
+ "aria-label",
28
+ "tabindex",
29
+ "data-key",
30
+ "data-state",
31
+ "onClick"
32
+ ], N = [
33
+ "id",
34
+ "aria-labelledby",
35
+ "hidden"
36
+ ], P = { class: "ink-field" }, F = ["src"], I = {
37
+ key: 1,
38
+ class: "ink-field-error",
39
+ role: "alert"
40
+ }, oe = {
41
+ key: 0,
42
+ class: "ink-field-error",
43
+ role: "alert",
44
+ "data-ink-signature-save-error": ""
45
+ }, L = { class: "ink-dialog-actions" }, R = {
46
+ type: "button",
47
+ class: "ink-button",
48
+ "data-ink-signature-cancel": ""
49
+ }, z = ["disabled"], B = /*@__PURE__*/ c({
50
+ __name: "SignatureForm",
51
+ props: { fonts: {} },
52
+ emits: ["saved", "close"],
53
+ setup(c, { emit: B }) {
54
+ let V = c, H = B, U = e("InkSignatureDialog"), { setTool: W } = n(), { setOptions: G } = ee("signature"), K = _({ fonts: V.fonts ?? U.signatureFonts.value }), q = K.state.get(), J = t(K.state, q), Y = m(), X = h("pad"), Z;
55
+ re(() => {
56
+ X.value && (Z = K.attachPad(X.value));
57
+ }), l(() => {
58
+ Z?.(), K.destroy();
59
+ });
60
+ function se() {
61
+ K.save(U.signatures.value).then((e) => {
62
+ e && (G({ templateId: e.id }), W("signature"), H("saved", e), H("close"));
63
+ }, () => {});
64
+ }
65
+ let Q = (e) => `${Y}-tab-${e}`, $ = (e) => `${Y}-panel-${e}`, ce = i(() => J.value.name.trim() || g.namePlaceholder), le = (e) => b(e, e.currentTarget), ue = (e) => y(e, e.currentTarget), de = (e) => K.setName(e.target.value), fe = (e) => void K.chooseFile(e.target.files?.[0]);
66
+ return (e, t) => (u(), o(r, null, [
67
+ s("div", {
68
+ role: "tablist",
69
+ "aria-label": p(g).tabs,
70
+ class: "ink-tabs",
71
+ onKeydown: le
72
+ }, [(u(!0), o(r, null, d(p(ae), (e) => (u(), o("button", {
73
+ id: Q(e),
74
+ key: e,
75
+ type: "button",
76
+ role: "tab",
77
+ "aria-controls": $(e),
78
+ "aria-selected": p(J).tab === e,
79
+ tabindex: p(J).tab === e ? 0 : -1,
80
+ class: "ink-tab",
81
+ "data-key": e,
82
+ "data-state": p(J).tab === e ? "active" : "inactive",
83
+ onClick: (t) => p(K).setTab(e)
84
+ }, f(p(g)[e]), 9, C))), 128))], 40, S),
85
+ s("div", {
86
+ id: $("draw"),
87
+ role: "tabpanel",
88
+ "aria-labelledby": Q("draw"),
89
+ class: "ink-tab-panel",
90
+ "data-key": "draw",
91
+ hidden: p(J).tab !== "draw"
92
+ }, [s("div", {
93
+ ref: "pad",
94
+ class: "ink-signature-pad-host",
95
+ "data-ink-signature-pad-host": "",
96
+ role: "img",
97
+ "aria-label": p(g).pad
98
+ }, null, 8, T), s("div", E, [s("button", {
99
+ type: "button",
100
+ class: "ink-button",
101
+ "data-ink-signature-clear": "",
102
+ disabled: p(J).padEmpty,
103
+ onClick: t[0] ||= (e) => p(K).clearPad()
104
+ }, f(p(g).clear), 9, D)])], 8, w),
105
+ s("div", {
106
+ id: $("type"),
107
+ role: "tabpanel",
108
+ "aria-labelledby": Q("type"),
109
+ class: "ink-tab-panel",
110
+ "data-key": "type",
111
+ hidden: p(J).tab !== "type"
112
+ }, [s("label", k, [s("span", null, f(p(g).name), 1), s("input", {
113
+ type: "text",
114
+ class: "ink-input",
115
+ "data-ink-signature-name": "",
116
+ autocomplete: "name",
117
+ placeholder: p(g).namePlaceholder,
118
+ value: p(J).name,
119
+ onInput: de
120
+ }, null, 40, A)]), s("div", {
121
+ role: "radiogroup",
122
+ "aria-label": p(g).fonts,
123
+ class: "ink-signature-fonts",
124
+ onKeydown: ue
125
+ }, [(u(!0), o(r, null, d(p(K).fonts, (e) => (u(), o("button", {
126
+ key: e,
127
+ type: "button",
128
+ role: "radio",
129
+ "aria-checked": p(J).font === e,
130
+ "aria-label": e,
131
+ tabindex: p(J).font === e ? 0 : -1,
132
+ class: "ink-signature-font",
133
+ "data-key": e,
134
+ "data-state": p(J).font === e ? "checked" : "unchecked",
135
+ onClick: (t) => p(K).setFont(e)
136
+ }, [s("span", {
137
+ class: "ink-signature-font-sample",
138
+ style: ne({ fontFamily: p(v)(e) })
139
+ }, f(ce.value), 5)], 8, M))), 128))], 40, j)], 8, O),
140
+ s("div", {
141
+ id: $("image"),
142
+ role: "tabpanel",
143
+ "aria-labelledby": Q("image"),
144
+ class: "ink-tab-panel",
145
+ "data-key": "image",
146
+ hidden: p(J).tab !== "image"
147
+ }, [
148
+ s("label", P, [s("span", null, f(p(g).file), 1), s("input", {
149
+ type: "file",
150
+ accept: "image/png,image/jpeg",
151
+ class: "ink-input",
152
+ "data-ink-signature-file": "",
153
+ onChange: fe
154
+ }, null, 32)]),
155
+ p(J).image?.kind === "image" ? (u(), o("img", {
156
+ key: 0,
157
+ class: "ink-signature-image",
158
+ src: p(J).image.imagedata,
159
+ alt: ""
160
+ }, null, 8, F)) : a("", !0),
161
+ p(J).imageError ? (u(), o("p", I, f(p(J).imageError), 1)) : a("", !0)
162
+ ], 8, N),
163
+ p(J).saveError ? (u(), o("p", oe, f(p(J).saveError), 1)) : a("", !0),
164
+ s("div", L, [te(p(x), { "as-child": "" }, {
165
+ default: ie(() => [s("button", R, f(p(g).cancel), 1)]),
166
+ _: 1
167
+ }), s("button", {
168
+ type: "button",
169
+ class: "ink-button",
170
+ "data-variant": "primary",
171
+ "data-ink-signature-save": "",
172
+ disabled: !p(J).canSave,
173
+ onClick: se
174
+ }, f(p(g).save), 9, z)])
175
+ ], 64));
176
+ }
177
+ });
178
+ //#endregion
179
+ export { B as default };
180
+
181
+ //# sourceMappingURL=SignatureForm.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureForm.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createElementVNode","_unref","_renderList","_toDisplayString","_normalizeStyle","_createCommentVNode","_createVNode","_withCtx","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","SignatureForm_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","ctx","useInkContext","useTool","useToolOptions","draft","createSignatureDraft","IDLE","s","useReadable","uid","useId","padHost","useTemplateRef","detach","onMounted","onBeforeUnmount","save","t","setOptions","setTool","tabId","tab","panelId","shown","computed","SIGNATURE_LABELS","onTabKeydown","handleTabKeys","onRadioKeydown","handleRadioKeys","onName","onFile","openBlock","createElementBlock","Fragment","createElementVNode","unref","renderList","SIGNATURE_TABS","toDisplayString","_cache","font","normalizeStyle","fontFamilyValue","createCommentVNode","createVNode","DialogClose","withCtx"],"sources":["../../src/components/SignatureForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/*\n * The body of `InkSignatureDialog`, mounted while it is open: one draft per opening. Draw,\n * Type and Image tabs, then Cancel and Save.\n */\nimport {\n createSignatureDraft,\n fontFamilyValue,\n handleRadioKeys,\n handleTabKeys,\n SIGNATURE_LABELS,\n SIGNATURE_TABS,\n type SignatureDraftState,\n type SignatureTab,\n} from '@inkbar/core/dom'\nimport { DialogClose } from 'reka-ui'\nimport { computed, onBeforeUnmount, onMounted, useId, useTemplateRef } from 'vue'\n\nimport { useTool } from '../composables/useTool'\nimport { useToolOptions } from '../composables/useToolOptions'\nimport { useInkContext } from '../context'\nimport { useReadable } from '../use-readable'\n\nimport type { SignatureOptions, SignatureTemplate } from '@inkbar/core'\n\nconst props = defineProps<{ fonts?: readonly string[] | undefined }>()\nconst emit = defineEmits<{ saved: [template: SignatureTemplate]; close: [] }>()\n\nconst ctx = useInkContext('InkSignatureDialog')\nconst { setTool } = useTool()\nconst { setOptions } = useToolOptions<SignatureOptions>('signature')\nconst draft = createSignatureDraft({ fonts: props.fonts ?? ctx.signatureFonts.value })\nconst IDLE: SignatureDraftState = draft.state.get()\nconst s = useReadable(draft.state, IDLE)\nconst uid = useId()\nconst padHost = useTemplateRef<HTMLDivElement>('pad')\n\nlet detach: (() => void) | undefined\nonMounted(() => {\n if (padHost.value) detach = draft.attachPad(padHost.value)\n})\nonBeforeUnmount(() => {\n detach?.()\n draft.destroy()\n})\n\nfunction save(): void {\n draft.save(ctx.signatures.value).then(\n (t) => {\n if (!t) return\n setOptions({ templateId: t.id })\n setTool('signature')\n emit('saved', t)\n emit('close')\n },\n () => {\n // The host's store refused it: the dialog stays open to try again.\n }\n )\n}\n\nconst tabId = (tab: SignatureTab) => `${uid}-tab-${tab}`\nconst panelId = (tab: SignatureTab) => `${uid}-panel-${tab}`\nconst shown = computed(() => s.value.name.trim() || SIGNATURE_LABELS.namePlaceholder)\nconst onTabKeydown = (e: KeyboardEvent) =>\n handleTabKeys(e, e.currentTarget as HTMLElement)\nconst onRadioKeydown = (e: KeyboardEvent) =>\n handleRadioKeys(e, e.currentTarget as HTMLElement)\nconst onName = (e: Event) => draft.setName((e.target as HTMLInputElement).value)\nconst onFile = (e: Event) =>\n void draft.chooseFile((e.target as HTMLInputElement).files?.[0])\n</script>\n\n<template>\n <div\n role=\"tablist\"\n :aria-label=\"SIGNATURE_LABELS.tabs\"\n class=\"ink-tabs\"\n @keydown=\"onTabKeydown\"\n >\n <button\n v-for=\"tab in SIGNATURE_TABS\"\n :id=\"tabId(tab)\"\n :key=\"tab\"\n type=\"button\"\n role=\"tab\"\n :aria-controls=\"panelId(tab)\"\n :aria-selected=\"s.tab === tab\"\n :tabindex=\"s.tab === tab ? 0 : -1\"\n class=\"ink-tab\"\n :data-key=\"tab\"\n :data-state=\"s.tab === tab ? 'active' : 'inactive'\"\n @click=\"draft.setTab(tab)\"\n >\n {{ SIGNATURE_LABELS[tab] }}\n </button>\n </div>\n <div\n :id=\"panelId('draw')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('draw')\"\n class=\"ink-tab-panel\"\n data-key=\"draw\"\n :hidden=\"s.tab !== 'draw'\"\n >\n <div\n ref=\"pad\"\n class=\"ink-signature-pad-host\"\n data-ink-signature-pad-host\n role=\"img\"\n :aria-label=\"SIGNATURE_LABELS.pad\"\n />\n <div class=\"ink-dialog-row\">\n <button\n type=\"button\"\n class=\"ink-button\"\n data-ink-signature-clear\n :disabled=\"s.padEmpty\"\n @click=\"draft.clearPad()\"\n >\n {{ SIGNATURE_LABELS.clear }}\n </button>\n </div>\n </div>\n <div\n :id=\"panelId('type')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('type')\"\n class=\"ink-tab-panel\"\n data-key=\"type\"\n :hidden=\"s.tab !== 'type'\"\n >\n <label class=\"ink-field\">\n <span>{{ SIGNATURE_LABELS.name }}</span>\n <input\n type=\"text\"\n class=\"ink-input\"\n data-ink-signature-name\n autocomplete=\"name\"\n :placeholder=\"SIGNATURE_LABELS.namePlaceholder\"\n :value=\"s.name\"\n @input=\"onName\"\n />\n </label>\n <div\n role=\"radiogroup\"\n :aria-label=\"SIGNATURE_LABELS.fonts\"\n class=\"ink-signature-fonts\"\n @keydown=\"onRadioKeydown\"\n >\n <button\n v-for=\"font in draft.fonts\"\n :key=\"font\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"s.font === font\"\n :aria-label=\"font\"\n :tabindex=\"s.font === font ? 0 : -1\"\n class=\"ink-signature-font\"\n :data-key=\"font\"\n :data-state=\"s.font === font ? 'checked' : 'unchecked'\"\n @click=\"draft.setFont(font)\"\n >\n <!-- The font is the option itself, so it is set here, not left to the theme. -->\n <span\n class=\"ink-signature-font-sample\"\n :style=\"{ fontFamily: fontFamilyValue(font) }\"\n >\n {{ shown }}\n </span>\n </button>\n </div>\n </div>\n <div\n :id=\"panelId('image')\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId('image')\"\n class=\"ink-tab-panel\"\n data-key=\"image\"\n :hidden=\"s.tab !== 'image'\"\n >\n <label class=\"ink-field\">\n <span>{{ SIGNATURE_LABELS.file }}</span>\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg\"\n class=\"ink-input\"\n data-ink-signature-file\n @change=\"onFile\"\n />\n </label>\n <img\n v-if=\"s.image?.kind === 'image'\"\n class=\"ink-signature-image\"\n :src=\"s.image.imagedata\"\n alt=\"\"\n />\n <p v-if=\"s.imageError\" class=\"ink-field-error\" role=\"alert\">{{ s.imageError }}</p>\n </div>\n <p\n v-if=\"s.saveError\"\n class=\"ink-field-error\"\n role=\"alert\"\n data-ink-signature-save-error\n >\n {{ s.saveError }}\n </p>\n <div class=\"ink-dialog-actions\">\n <DialogClose as-child>\n <button type=\"button\" class=\"ink-button\" data-ink-signature-cancel>\n {{ SIGNATURE_LABELS.cancel }}\n </button>\n </DialogClose>\n <button\n type=\"button\"\n class=\"ink-button\"\n data-variant=\"primary\"\n data-ink-signature-save\n :disabled=\"!s.canSave\"\n @click=\"save\"\n >\n {{ SIGNATURE_LABELS.save }}\n </button>\n </div>\n</template>\n"],"mappings":"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"}