@fiestaboard/ui 3.1.0 → 3.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 (97) hide show
  1. package/dist/components/editor/color-picker-content.d.ts +25 -0
  2. package/dist/components/editor/color-picker-content.js +118 -0
  3. package/dist/components/editor/color-picker-content.js.map +1 -0
  4. package/dist/components/editor/constants.d.ts +87 -0
  5. package/dist/components/editor/constants.js +29 -0
  6. package/dist/components/editor/constants.js.map +1 -0
  7. package/dist/components/editor/draw-char-picker-content.d.ts +22 -0
  8. package/dist/components/editor/draw-char-picker-content.js +79 -0
  9. package/dist/components/editor/draw-char-picker-content.js.map +1 -0
  10. package/dist/components/editor/extensions/color-tile-node.d.ts +10 -0
  11. package/dist/components/editor/extensions/color-tile-node.js +43 -0
  12. package/dist/components/editor/extensions/color-tile-node.js.map +1 -0
  13. package/dist/components/editor/extensions/fill-space-node.d.ts +10 -0
  14. package/dist/components/editor/extensions/fill-space-node.js +40 -0
  15. package/dist/components/editor/extensions/fill-space-node.js.map +1 -0
  16. package/dist/components/editor/extensions/formula-node.d.ts +6 -0
  17. package/dist/components/editor/extensions/formula-node.js +40 -0
  18. package/dist/components/editor/extensions/formula-node.js.map +1 -0
  19. package/dist/components/editor/extensions/line-navigation.d.ts +18 -0
  20. package/dist/components/editor/extensions/line-navigation.js +16 -0
  21. package/dist/components/editor/extensions/line-navigation.js.map +1 -0
  22. package/dist/components/editor/extensions/single-paragraph-doc.d.ts +15 -0
  23. package/dist/components/editor/extensions/single-paragraph-doc.js +11 -0
  24. package/dist/components/editor/extensions/single-paragraph-doc.js.map +1 -0
  25. package/dist/components/editor/extensions/trailing-newline.d.ts +13 -0
  26. package/dist/components/editor/extensions/trailing-newline.js +27 -0
  27. package/dist/components/editor/extensions/trailing-newline.js.map +1 -0
  28. package/dist/components/editor/extensions/variable-node.d.ts +15 -0
  29. package/dist/components/editor/extensions/variable-node.js +56 -0
  30. package/dist/components/editor/extensions/variable-node.js.map +1 -0
  31. package/dist/components/editor/extensions/wrapped-text-node.d.ts +9 -0
  32. package/dist/components/editor/extensions/wrapped-text-node.js +31 -0
  33. package/dist/components/editor/extensions/wrapped-text-node.js.map +1 -0
  34. package/dist/components/editor/filter-picker-content.d.ts +24 -0
  35. package/dist/components/editor/filter-picker-content.js +146 -0
  36. package/dist/components/editor/filter-picker-content.js.map +1 -0
  37. package/dist/components/editor/formatting-picker-content.d.ts +30 -0
  38. package/dist/components/editor/formatting-picker-content.js +154 -0
  39. package/dist/components/editor/formatting-picker-content.js.map +1 -0
  40. package/dist/components/editor/formula/formula-editor-panel.d.ts +102 -0
  41. package/dist/components/editor/formula/formula-editor-panel.js +527 -0
  42. package/dist/components/editor/formula/formula-editor-panel.js.map +1 -0
  43. package/dist/components/editor/node-views/color-tile-node-view.d.ts +21 -0
  44. package/dist/components/editor/node-views/color-tile-node-view.js +66 -0
  45. package/dist/components/editor/node-views/color-tile-node-view.js.map +1 -0
  46. package/dist/components/editor/node-views/fill-space-node-view.d.ts +16 -0
  47. package/dist/components/editor/node-views/fill-space-node-view.js +43 -0
  48. package/dist/components/editor/node-views/fill-space-node-view.js.map +1 -0
  49. package/dist/components/editor/node-views/formula-node-view.d.ts +39 -0
  50. package/dist/components/editor/node-views/formula-node-view.js +109 -0
  51. package/dist/components/editor/node-views/formula-node-view.js.map +1 -0
  52. package/dist/components/editor/node-views/node-view-context.d.ts +58 -0
  53. package/dist/components/editor/node-views/node-view-context.js +22 -0
  54. package/dist/components/editor/node-views/node-view-context.js.map +1 -0
  55. package/dist/components/editor/node-views/variable-node-view.d.ts +16 -0
  56. package/dist/components/editor/node-views/variable-node-view.js +63 -0
  57. package/dist/components/editor/node-views/variable-node-view.js.map +1 -0
  58. package/dist/components/editor/node-views/wrapped-text-view.d.ts +14 -0
  59. package/dist/components/editor/node-views/wrapped-text-view.js +46 -0
  60. package/dist/components/editor/node-views/wrapped-text-view.js.map +1 -0
  61. package/dist/components/editor/template-editor-toolbar.d.ts +146 -0
  62. package/dist/components/editor/template-editor-toolbar.js +434 -0
  63. package/dist/components/editor/template-editor-toolbar.js.map +1 -0
  64. package/dist/components/editor/template-editor.d.ts +109 -0
  65. package/dist/components/editor/template-editor.js +662 -0
  66. package/dist/components/editor/template-editor.js.map +1 -0
  67. package/dist/components/editor/toolbar-dropdown.d.ts +20 -0
  68. package/dist/components/editor/toolbar-dropdown.js +88 -0
  69. package/dist/components/editor/toolbar-dropdown.js.map +1 -0
  70. package/dist/components/editor/utils/draw-mode.d.ts +55 -0
  71. package/dist/components/editor/utils/draw-mode.js +79 -0
  72. package/dist/components/editor/utils/draw-mode.js.map +1 -0
  73. package/dist/components/editor/utils/insertion.d.ts +11 -0
  74. package/dist/components/editor/utils/insertion.js +26 -0
  75. package/dist/components/editor/utils/insertion.js.map +1 -0
  76. package/dist/components/editor/utils/length-calculator.d.ts +36 -0
  77. package/dist/components/editor/utils/length-calculator.js +32 -0
  78. package/dist/components/editor/utils/length-calculator.js.map +1 -0
  79. package/dist/components/editor/utils/serialization.d.ts +34 -0
  80. package/dist/components/editor/utils/serialization.js +184 -0
  81. package/dist/components/editor/utils/serialization.js.map +1 -0
  82. package/dist/components/editor/utils/stroke-transaction.d.ts +36 -0
  83. package/dist/components/editor/utils/stroke-transaction.js +57 -0
  84. package/dist/components/editor/utils/stroke-transaction.js.map +1 -0
  85. package/dist/components/editor/variable-picker-content.d.ts +130 -0
  86. package/dist/components/editor/variable-picker-content.js +422 -0
  87. package/dist/components/editor/variable-picker-content.js.map +1 -0
  88. package/dist/editor.css +164 -0
  89. package/dist/index.d.ts +28 -0
  90. package/dist/index.js +41 -13
  91. package/dist/lib/board-colors.d.ts +16 -0
  92. package/dist/lib/board-colors.js +14 -14
  93. package/dist/lib/board-colors.js.map +1 -1
  94. package/dist/lib/use-deps-changed.d.ts +33 -0
  95. package/dist/lib/use-deps-changed.js +11 -0
  96. package/dist/lib/use-deps-changed.js.map +1 -0
  97. package/package.json +50 -2
@@ -0,0 +1,434 @@
1
+ "use client";
2
+ import { cn as e } from "../../lib/utils.js";
3
+ import { Box as t } from "../layout/box.js";
4
+ import { Flex as n } from "../layout/flex.js";
5
+ import { Skeleton as r } from "../feedback/skeleton.js";
6
+ import { Text as i } from "../typography/text.js";
7
+ import { Tooltip as a, TooltipContent as o, TooltipProvider as ee, TooltipTrigger as s } from "../overlays/tooltip.js";
8
+ import { AVAILABLE_COLORS as te, getBoardColor as ne } from "../../lib/board-colors.js";
9
+ import { useDepsChanged as re } from "../../lib/use-deps-changed.js";
10
+ import { ColorPickerContent as ie } from "./color-picker-content.js";
11
+ import { DrawCharPickerContent as ae } from "./draw-char-picker-content.js";
12
+ import { FormattingPickerContent as c } from "./formatting-picker-content.js";
13
+ import { ToolbarDropdown as l } from "./toolbar-dropdown.js";
14
+ import { insertTemplateContent as oe } from "./utils/insertion.js";
15
+ import { AlignCenter as se, AlignLeft as ce, AlignRight as le, ClipboardPaste as ue, Code2 as u, Copy as de, Download as fe, Eraser as d, House as pe, Palette as me, Pencil as he, Redo2 as ge, Scissors as _e, SquareFunction as ve, Type as f, Undo2 as p, WrapText as m } from "lucide-react";
16
+ import { Suspense as ye, lazy as h, useCallback as g, useEffect as _, useRef as be, useState as v } from "react";
17
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
18
+ //#region src/components/editor/template-editor-toolbar.tsx
19
+ var xe = h(() => import("./variable-picker-content.js").then((e) => ({ default: e.VariablePickerContent }))), S = {
20
+ drawMode: "Draw on board",
21
+ drawModeActive: "Exit drawing mode",
22
+ undo: "Undo (Ctrl+Z)",
23
+ undoAriaLabel: "Undo",
24
+ redo: "Redo (Ctrl+Shift+Z)",
25
+ redoAriaLabel: "Redo",
26
+ drawColors: {
27
+ red: "Red",
28
+ orange: "Orange",
29
+ yellow: "Yellow",
30
+ green: "Green",
31
+ blue: "Blue",
32
+ violet: "Violet",
33
+ white: "White",
34
+ black: "Black"
35
+ },
36
+ drawEraser: "Eraser",
37
+ drawCharacter: "Stamp character",
38
+ cut: "Cut (Ctrl+X)",
39
+ cutAriaLabel: "Cut",
40
+ copy: "Copy (Ctrl+C)",
41
+ copyAriaLabel: "Copy",
42
+ paste: "Paste (Ctrl+V)",
43
+ pasteAriaLabel: "Paste",
44
+ variables: "Variables",
45
+ variablesNoVarsAvailable: "Variables (no variables available)",
46
+ noVariablesAvailable: "No template variables available. Configure plugins in Settings.",
47
+ homeAssistantEntities: "Home Assistant entities",
48
+ colors: "Colors",
49
+ formatting: "Formatting",
50
+ insertFormula: "Insert formula",
51
+ toggleWrap: "Toggle wrap for current line",
52
+ enableWrap: "Enable wrap. Long text flows into empty or wrap-enabled lines below.",
53
+ disableWrap: "Disable wrap for this line",
54
+ alignLeft: "Align left",
55
+ alignCenter: "Align center",
56
+ alignRight: "Align right",
57
+ syncFromBoard: "Sync from current board display",
58
+ syncFromBoardTooltip: "Populate template from what's currently displayed on the board"
59
+ };
60
+ function C({ editor: h, currentAlignment: C = "left", currentWrapEnabled: w = !1, onAlignmentChange: T, onWrapToggle: Se, className: E, deviceType: D, onSyncFromBoard: O, syncFromBoardPending: k = !1, drawMode: A = !1, onDrawModeToggle: j, drawBrush: Ce, onDrawBrushChange: M, templateVariables: N, isLoadingVariables: we, pluginManifests: Te, isLoadingManifests: Ee, pluginDisplayData: De, resolveIcon: P, entityPickerSlot: F, labels: Oe, variablePickerLabels: ke, colorPickerLabels: Ae, formattingPickerLabels: je }) {
61
+ let I = {
62
+ ...S,
63
+ ...Oe
64
+ }, L = (e) => I.drawColors?.[e] ?? S.drawColors[e], R = Ce ?? {
65
+ kind: "color",
66
+ color: "red"
67
+ }, z = (e) => {
68
+ h && oe(h, e);
69
+ }, B = (e) => {
70
+ T && T(e);
71
+ }, V = N?.variables && Object.keys(N.variables).length > 0, H = N?.colors && Object.keys(N.colors).length > 0, U = N?.formatting && Object.keys(N.formatting).length > 0, Me = !!F && !!N?.variables?.home_assistant, [W, G] = v(!1), [K, q] = v(!1), [J, Y] = v(!1), [X, Z] = v(!0), [Ne, Q] = v(!1), $ = be(null), Pe = (e) => {
72
+ $.current !== null && cancelAnimationFrame($.current), $.current = requestAnimationFrame(() => {
73
+ $.current = null, z(e);
74
+ });
75
+ };
76
+ _(() => () => {
77
+ $.current !== null && (cancelAnimationFrame($.current), $.current = null);
78
+ }, []), re([h]) && !h && (G(!1), q(!1), Y(!1)), _(() => {
79
+ if (!h) return;
80
+ let e = () => {
81
+ G(h.can().undo()), q(h.can().redo());
82
+ let { from: e, to: t } = h.state.selection;
83
+ Y(e !== t);
84
+ };
85
+ return e(), h.on("update", e), h.on("selectionUpdate", e), () => {
86
+ h.off("update", e), h.off("selectionUpdate", e);
87
+ };
88
+ }, [h]), _(() => {
89
+ let e = () => {
90
+ Z(!0);
91
+ };
92
+ return document.addEventListener("copy", e), document.addEventListener("cut", e), () => {
93
+ document.removeEventListener("copy", e), document.removeEventListener("cut", e);
94
+ };
95
+ }, []);
96
+ let Fe = () => {
97
+ h && W && h.chain().focus().undo().run();
98
+ }, Ie = () => {
99
+ h && K && h.chain().focus().redo().run();
100
+ }, Le = g(async () => {
101
+ if (h && J) {
102
+ h.view.focus();
103
+ let { from: e, to: t } = h.state.selection, n = h.state.doc.textBetween(e, t, "\n");
104
+ try {
105
+ await navigator.clipboard.writeText(n), h.chain().focus().deleteSelection().run();
106
+ } catch {
107
+ document.execCommand("cut");
108
+ }
109
+ Z(!0);
110
+ }
111
+ }, [h, J]), Re = g(async () => {
112
+ if (h && J) {
113
+ h.view.focus();
114
+ let { from: e, to: t } = h.state.selection, n = h.state.doc.textBetween(e, t, "\n");
115
+ try {
116
+ await navigator.clipboard.writeText(n);
117
+ } catch {
118
+ document.execCommand("copy");
119
+ }
120
+ Z(!0);
121
+ }
122
+ }, [h, J]), ze = g(async () => {
123
+ if (h) try {
124
+ let e = await navigator.clipboard.readText();
125
+ e && h.chain().focus().insertContent(e).run();
126
+ } catch {
127
+ h.commands.focus();
128
+ }
129
+ }, [h]);
130
+ return /* @__PURE__ */ b(ee, {
131
+ skipDelayDuration: 0,
132
+ children: /* @__PURE__ */ x(n, {
133
+ align: "center",
134
+ gap: "1",
135
+ wrap: !0,
136
+ className: e("p-2 border rounded-t-md bg-background", E),
137
+ children: [
138
+ j && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(n, {
139
+ align: "center",
140
+ gap: "0.5",
141
+ className: "rounded-md border border-border overflow-hidden bg-background",
142
+ children: /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
143
+ asChild: !0,
144
+ children: /* @__PURE__ */ b("button", {
145
+ type: "button",
146
+ onClick: j,
147
+ "data-testid": "draw-mode-toggle",
148
+ "aria-pressed": A,
149
+ className: e("px-2 py-1.5 transition-colors", A ? "bg-primary text-primary-foreground" : "hover:bg-muted/50"),
150
+ "aria-label": A ? I.drawModeActive : I.drawMode,
151
+ children: /* @__PURE__ */ b(he, { className: "w-4 h-4" })
152
+ })
153
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: A ? I.drawModeActive : I.drawMode }) })] })
154
+ }), /* @__PURE__ */ b(t, { className: "h-6 w-px bg-border mx-1" })] }),
155
+ /* @__PURE__ */ x(n, {
156
+ align: "center",
157
+ gap: "0.5",
158
+ className: "rounded-md border border-border overflow-hidden bg-background",
159
+ children: [/* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
160
+ asChild: !0,
161
+ children: /* @__PURE__ */ b("button", {
162
+ type: "button",
163
+ onClick: Fe,
164
+ disabled: !W,
165
+ className: e("px-2 py-1.5 transition-colors", W ? "hover:bg-muted/50" : "opacity-60 cursor-not-allowed", "border-r border-border"),
166
+ "aria-label": I.undoAriaLabel,
167
+ children: /* @__PURE__ */ b(p, { className: "w-4 h-4" })
168
+ })
169
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.undo }) })] }), /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
170
+ asChild: !0,
171
+ children: /* @__PURE__ */ b("button", {
172
+ type: "button",
173
+ onClick: Ie,
174
+ disabled: !K,
175
+ className: e("px-2 py-1.5 transition-colors", K ? "hover:bg-muted/50" : "opacity-60 cursor-not-allowed"),
176
+ "aria-label": I.redoAriaLabel,
177
+ children: /* @__PURE__ */ b(ge, { className: "w-4 h-4" })
178
+ })
179
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.redo }) })] })]
180
+ }),
181
+ /* @__PURE__ */ b(t, { className: "h-6 w-px bg-border mx-1" }),
182
+ A && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ x(n, {
183
+ align: "center",
184
+ gap: "0.5",
185
+ children: [te.map((t) => {
186
+ let n = R.kind === "color" && R.color === t;
187
+ return /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
188
+ asChild: !0,
189
+ children: /* @__PURE__ */ b("button", {
190
+ type: "button",
191
+ "data-testid": `draw-color-${t}`,
192
+ "aria-pressed": n,
193
+ "aria-label": L(t),
194
+ onClick: () => M?.({
195
+ kind: "color",
196
+ color: t
197
+ }),
198
+ className: e("flex items-center justify-center p-1.5 rounded-md transition-colors", "border border-transparent", n ? "ring-2 ring-primary" : "hover:bg-muted/50"),
199
+ children: /* @__PURE__ */ b(i, {
200
+ as: "span",
201
+ className: "block h-4 w-4 rounded-sm border border-border/50",
202
+ style: { backgroundColor: ne(t) }
203
+ })
204
+ })
205
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: L(t) }) })] }, t);
206
+ }), /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
207
+ asChild: !0,
208
+ children: /* @__PURE__ */ b("button", {
209
+ type: "button",
210
+ "data-testid": "draw-color-eraser",
211
+ "aria-pressed": R.kind === "eraser",
212
+ "aria-label": I.drawEraser,
213
+ onClick: () => M?.({ kind: "eraser" }),
214
+ className: e("flex items-center justify-center p-1.5 rounded-md transition-colors", "border border-transparent", R.kind === "eraser" ? "ring-2 ring-primary bg-muted/70" : "hover:bg-muted/50"),
215
+ children: /* @__PURE__ */ b(d, { className: "w-4 h-4" })
216
+ })
217
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.drawEraser }) })] })]
218
+ }), /* @__PURE__ */ b(l, {
219
+ label: I.drawCharacter,
220
+ "data-testid": "draw-char-dropdown",
221
+ className: e(R.kind === "char" && "ring-2 ring-primary"),
222
+ icon: R.kind === "char" ? /* @__PURE__ */ b(i, {
223
+ as: "span",
224
+ size: "xs",
225
+ className: "flex h-4 w-4 items-center justify-center rounded-sm border border-border font-mono leading-none",
226
+ children: R.char
227
+ }) : /* @__PURE__ */ b(f, { className: "w-4 h-4" }),
228
+ children: (e) => /* @__PURE__ */ b(ae, {
229
+ current: R,
230
+ onSelect: (t) => {
231
+ M?.(t), e();
232
+ }
233
+ })
234
+ })] }),
235
+ !A && /* @__PURE__ */ x(y, { children: [
236
+ /* @__PURE__ */ x(n, {
237
+ align: "center",
238
+ gap: "0.5",
239
+ className: "rounded-md border border-border overflow-hidden bg-background",
240
+ children: [
241
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
242
+ asChild: !0,
243
+ children: /* @__PURE__ */ b("button", {
244
+ type: "button",
245
+ onClick: Le,
246
+ disabled: !J,
247
+ className: e("px-2 py-1.5 transition-colors", J ? "hover:bg-muted/50" : "opacity-60 cursor-not-allowed", "border-r border-border"),
248
+ "aria-label": I.cutAriaLabel,
249
+ children: /* @__PURE__ */ b(_e, { className: "w-4 h-4" })
250
+ })
251
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.cut }) })] }),
252
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
253
+ asChild: !0,
254
+ children: /* @__PURE__ */ b("button", {
255
+ type: "button",
256
+ onClick: Re,
257
+ disabled: !J,
258
+ className: e("px-2 py-1.5 transition-colors", J ? "hover:bg-muted/50" : "opacity-60 cursor-not-allowed", "border-r border-border"),
259
+ "aria-label": I.copyAriaLabel,
260
+ children: /* @__PURE__ */ b(de, { className: "w-4 h-4" })
261
+ })
262
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.copy }) })] }),
263
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
264
+ asChild: !0,
265
+ children: /* @__PURE__ */ b("button", {
266
+ type: "button",
267
+ onClick: ze,
268
+ disabled: !X,
269
+ className: e("px-2 py-1.5 transition-colors", X ? "hover:bg-muted/50" : "opacity-60 cursor-not-allowed"),
270
+ "aria-label": I.pasteAriaLabel,
271
+ children: /* @__PURE__ */ b(ue, { className: "w-4 h-4" })
272
+ })
273
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.paste }) })] })
274
+ ]
275
+ }),
276
+ /* @__PURE__ */ b(t, { className: "h-6 w-px bg-border mx-1" }),
277
+ V ? /* @__PURE__ */ b(l, {
278
+ label: I.variables,
279
+ icon: /* @__PURE__ */ b(u, { className: "w-4 h-4" }),
280
+ children: (e) => /* @__PURE__ */ b(ye, {
281
+ fallback: /* @__PURE__ */ x(t, {
282
+ className: "p-3 min-w-[300px]",
283
+ children: [
284
+ /* @__PURE__ */ b(r, { className: "h-4 w-full mb-2" }),
285
+ /* @__PURE__ */ b(r, { className: "h-4 w-3/4 mb-2" }),
286
+ /* @__PURE__ */ b(r, { className: "h-4 w-1/2" })
287
+ ]
288
+ }),
289
+ children: /* @__PURE__ */ b(xe, {
290
+ templateVariables: N,
291
+ isLoadingVariables: we,
292
+ pluginManifests: Te,
293
+ isLoadingManifests: Ee,
294
+ pluginDisplayData: De,
295
+ resolveIcon: P,
296
+ labels: ke,
297
+ onInsert: (t) => {
298
+ z(t), e();
299
+ }
300
+ })
301
+ })
302
+ }) : /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
303
+ asChild: !0,
304
+ children: /* @__PURE__ */ b("button", {
305
+ type: "button",
306
+ disabled: !0,
307
+ className: e("flex items-center justify-center p-1.5 rounded-md", "text-muted-foreground cursor-not-allowed opacity-60", "border border-transparent"),
308
+ "aria-label": I.variablesNoVarsAvailable,
309
+ children: /* @__PURE__ */ b(u, { className: "w-4 h-4" })
310
+ })
311
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.noVariablesAvailable }) })] }),
312
+ Me && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
313
+ asChild: !0,
314
+ children: /* @__PURE__ */ b("button", {
315
+ type: "button",
316
+ "data-testid": "home-assistant-entity-button",
317
+ onClick: () => Q(!0),
318
+ className: e("flex items-center justify-center p-1.5 rounded-md transition-colors", "border border-transparent hover:bg-muted/50"),
319
+ "aria-label": I.homeAssistantEntities,
320
+ children: /* @__PURE__ */ b(pe, { className: "w-4 h-4" })
321
+ })
322
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.homeAssistantEntities }) })] }), F?.({
323
+ open: Ne,
324
+ onClose: () => Q(!1),
325
+ onSelect: Pe
326
+ })] }),
327
+ H && /* @__PURE__ */ b(l, {
328
+ label: I.colors,
329
+ icon: /* @__PURE__ */ b(me, { className: "w-4 h-4" }),
330
+ children: (e) => /* @__PURE__ */ b(ie, {
331
+ onInsert: (t) => {
332
+ z(t), e();
333
+ },
334
+ deviceType: D,
335
+ labels: Ae
336
+ })
337
+ }),
338
+ U && /* @__PURE__ */ b(l, {
339
+ label: I.formatting,
340
+ icon: /* @__PURE__ */ b(f, { className: "w-4 h-4" }),
341
+ children: (e) => /* @__PURE__ */ b(c, {
342
+ formatting: N?.formatting,
343
+ labels: je,
344
+ onInsert: (t) => {
345
+ z(t), e();
346
+ }
347
+ })
348
+ }),
349
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
350
+ asChild: !0,
351
+ children: /* @__PURE__ */ b("button", {
352
+ type: "button",
353
+ onClick: () => {
354
+ h?.chain().focus().insertContent({
355
+ type: "formula",
356
+ attrs: {
357
+ expression: "",
358
+ autoOpen: !0
359
+ }
360
+ }).run();
361
+ },
362
+ className: e("flex items-center gap-1 px-2 py-1.5 rounded-md text-sm font-medium", "hover:bg-muted/50 transition-colors"),
363
+ "aria-label": I.insertFormula,
364
+ children: /* @__PURE__ */ b(ve, { className: "w-4 h-4" })
365
+ })
366
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.insertFormula }) })] }),
367
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
368
+ asChild: !0,
369
+ children: /* @__PURE__ */ b("button", {
370
+ type: "button",
371
+ onClick: Se,
372
+ className: e("flex items-center justify-center p-1.5 rounded-md transition-colors", "border border-transparent", w ? "bg-primary text-primary-foreground" : "hover:bg-muted/50"),
373
+ "aria-label": I.toggleWrap,
374
+ children: /* @__PURE__ */ b(m, { className: "w-4 h-4" })
375
+ })
376
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: w ? I.disableWrap : I.enableWrap }) })] }),
377
+ (V || H || U) && /* @__PURE__ */ b(t, { className: "h-6 w-px bg-border mx-1" }),
378
+ /* @__PURE__ */ x(n, {
379
+ align: "center",
380
+ gap: "0.5",
381
+ className: "rounded-md border border-border overflow-hidden bg-background",
382
+ children: [
383
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
384
+ asChild: !0,
385
+ children: /* @__PURE__ */ b("button", {
386
+ type: "button",
387
+ onClick: () => B("left"),
388
+ className: e("px-2 py-1.5 transition-colors", C === "left" ? "bg-primary text-primary-foreground" : "hover:bg-muted/50"),
389
+ "aria-label": I.alignLeft,
390
+ children: /* @__PURE__ */ b(ce, { className: "w-4 h-4" })
391
+ })
392
+ }), /* @__PURE__ */ b(o, { children: I.alignLeft })] }),
393
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
394
+ asChild: !0,
395
+ children: /* @__PURE__ */ b("button", {
396
+ type: "button",
397
+ onClick: () => B("center"),
398
+ className: e("px-2 py-1.5 border-x border-border transition-colors", C === "center" ? "bg-primary text-primary-foreground" : "hover:bg-muted/50"),
399
+ "aria-label": I.alignCenter,
400
+ children: /* @__PURE__ */ b(se, { className: "w-4 h-4" })
401
+ })
402
+ }), /* @__PURE__ */ b(o, { children: I.alignCenter })] }),
403
+ /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
404
+ asChild: !0,
405
+ children: /* @__PURE__ */ b("button", {
406
+ type: "button",
407
+ onClick: () => B("right"),
408
+ className: e("px-2 py-1.5 transition-colors", C === "right" ? "bg-primary text-primary-foreground" : "hover:bg-muted/50"),
409
+ "aria-label": I.alignRight,
410
+ children: /* @__PURE__ */ b(le, { className: "w-4 h-4" })
411
+ })
412
+ }), /* @__PURE__ */ b(o, { children: I.alignRight })] })
413
+ ]
414
+ }),
415
+ O && /* @__PURE__ */ x(a, { children: [/* @__PURE__ */ b(s, {
416
+ asChild: !0,
417
+ children: /* @__PURE__ */ b("button", {
418
+ type: "button",
419
+ onClick: O,
420
+ disabled: k,
421
+ className: e("flex items-center justify-center p-1.5 rounded-md transition-colors", "hover:bg-muted/50 border border-transparent", k && "opacity-60 cursor-not-allowed"),
422
+ "aria-label": I.syncFromBoard,
423
+ children: /* @__PURE__ */ b(fe, { className: e("w-4 h-4", k && "animate-pulse") })
424
+ })
425
+ }), /* @__PURE__ */ b(o, { children: /* @__PURE__ */ b(i, { children: I.syncFromBoardTooltip }) })] })
426
+ ] })
427
+ ]
428
+ })
429
+ });
430
+ }
431
+ //#endregion
432
+ export { S as DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS, C as TemplateEditorToolbar };
433
+
434
+ //# sourceMappingURL=template-editor-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-editor-toolbar.js","names":[],"sources":["../../../src/components/editor/template-editor-toolbar.tsx"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import type { ComponentProps } from "react";
2
+ import type { DeviceType } from "./constants";
3
+ import { TemplateEditorToolbar } from "./template-editor-toolbar";
4
+ import type { DrawBrush } from "./utils/draw-mode";
5
+ export type LineAlignment = "left" | "center" | "right";
6
+ /** A single painted board cell within a stroke, in row/col board coordinates. */
7
+ export interface StrokePaint {
8
+ row: number;
9
+ col: number;
10
+ }
11
+ /** Imperative handle exposed via ref for draw-mode's cell-painting flow. */
12
+ export interface TemplateEditorHandle {
13
+ /** Applies one stroke as ONE undo step. Returns affected row indices. */
14
+ applyStroke(paints: StrokePaint[], brush: DrawBrush): number[];
15
+ undo(): void;
16
+ redo(): void;
17
+ }
18
+ /**
19
+ * Reported through onDrawHistoryEvent whenever an undo/redo crosses a
20
+ * history step, on any path (imperative handle, keyboard, toolbar).
21
+ * `stroke` is true when the step crossed was a draw-mode paint stroke
22
+ * (applyStroke), so the host can restore/re-force per-row metadata that
23
+ * lives outside the ProseMirror document.
24
+ */
25
+ export interface DrawHistoryEvent {
26
+ action: "undo" | "redo";
27
+ stroke: boolean;
28
+ }
29
+ /**
30
+ * User-visible strings, all optional with English defaults.
31
+ *
32
+ * Replaces the app's `useTranslations("templateEditor")`. Keys match that
33
+ * namespace 1:1 so FiestaBoard can map its message catalog across
34
+ * mechanically; interpolated messages (`t("lineCount", { used, max })`)
35
+ * become function-valued labels rather than fragments concatenated in JSX,
36
+ * so a translation can reorder its placeholders.
37
+ *
38
+ * This is the editor's own slice of that namespace. The toolbar and the
39
+ * pickers own theirs (`TemplateEditorToolbarLabels`, …) and receive them
40
+ * through `toolbarProps`, so each component's strings arrive with it.
41
+ */
42
+ export interface TemplateEditorLabels {
43
+ /** `{used} / {max} lines` */
44
+ lineCount: (used: number, max: number) => string;
45
+ /** Appended to lineCount when the template has more lines than the board. */
46
+ overLineLimit: (max: number) => string;
47
+ /** `(Line {line})` — 1-based. */
48
+ currentLine: (line: number) => string;
49
+ alignment: string;
50
+ alignLeft: string;
51
+ alignCenter: string;
52
+ alignRight: string;
53
+ /**
54
+ * Accessible name of the editing surface. Not in the app's catalog — the
55
+ * app hard-coded an English `aria-label`, which is exactly the kind of
56
+ * string a localizing consumer needs to be able to reach.
57
+ */
58
+ editorAriaLabel: string;
59
+ }
60
+ export declare const DEFAULT_TEMPLATE_EDITOR_LABELS: TemplateEditorLabels;
61
+ /**
62
+ * Toolbar props the editor does not own itself: resolved data
63
+ * (`templateVariables`, `pluginManifests`…), `isLoading*` flags, the entity
64
+ * picker slot, and the toolbar's own `labels` plus the nested pickers'.
65
+ * Forwarded verbatim, so the toolbar's data contract stays the toolbar's
66
+ * business and this component never learns how to fetch anything.
67
+ *
68
+ * Derived from the toolbar's props rather than restated, so it cannot drift.
69
+ * The editor-owned props (`editor`, alignment/wrap state, device, draw mode)
70
+ * are omitted — the editor passes those itself, from its own state.
71
+ */
72
+ export type TemplateEditorToolbarSlotProps = Omit<ComponentProps<typeof TemplateEditorToolbar>, "editor" | "currentAlignment" | "currentWrapEnabled" | "onAlignmentChange" | "onWrapToggle" | "deviceType" | "onSyncFromBoard" | "syncFromBoardPending" | "drawMode" | "onDrawModeToggle" | "drawBrush" | "onDrawBrushChange">;
73
+ export interface TemplateEditorProps {
74
+ value: string;
75
+ onChange: (value: string) => void;
76
+ onFocus?: () => void;
77
+ placeholder?: string;
78
+ className?: string;
79
+ showAlignmentControls?: boolean;
80
+ onLineAlignmentChange?: (lineIndex: number, alignment: LineAlignment) => void;
81
+ lineAlignments?: LineAlignment[];
82
+ onLineWrapChange?: (lineIndex: number, wrapEnabled: boolean) => void;
83
+ lineWrapEnabled?: boolean[];
84
+ showToolbar?: boolean;
85
+ /** Characters per line. Defaults to the `deviceType` grid, else 22 (flagship). */
86
+ boardWidth?: number;
87
+ /** Total lines. Defaults to the `deviceType` grid, else 6 (flagship). */
88
+ boardLines?: number;
89
+ onLineCountChange?: (lineCount: number) => void;
90
+ deviceType?: DeviceType;
91
+ onSyncFromBoard?: () => void;
92
+ syncFromBoardPending?: boolean;
93
+ drawMode?: boolean;
94
+ onDrawModeToggle?: () => void;
95
+ drawBrush?: DrawBrush;
96
+ onDrawBrushChange?: (brush: DrawBrush) => void;
97
+ onDrawHistoryEvent?: (event: DrawHistoryEvent) => void;
98
+ /** The editor's own user-visible strings; merged over English defaults. */
99
+ labels?: Partial<TemplateEditorLabels>;
100
+ /**
101
+ * Data, slots and labels forwarded to the built-in toolbar (including the
102
+ * pickers it nests). Ignored when `showToolbar` is false.
103
+ */
104
+ toolbarProps?: TemplateEditorToolbarSlotProps;
105
+ }
106
+ /**
107
+ * Single TipTap editor for template lines
108
+ */
109
+ export declare const TemplateEditor: import("react").ForwardRefExoticComponent<TemplateEditorProps & import("react").RefAttributes<TemplateEditorHandle>>;