@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,164 @@
1
+ /**
2
+ * Template editor stylesheet — ProseMirror surface rules for
3
+ * `components/editor/template-editor.tsx`.
4
+ *
5
+ * Opt-in subpath, exactly like `fonts.css`: nothing in the package imports it,
6
+ * so an app that never renders the editor never pays for it. Consumers of
7
+ * `TemplateEditor` MUST import it once, alongside `theme.css`:
8
+ *
9
+ * import "@fiestaboard/ui/theme.css";
10
+ * import "@fiestaboard/ui/editor.css";
11
+ *
12
+ * Ported verbatim from the FiestaBoard app, where these rules lived in an
13
+ * inline `<style>` element rendered inside the editor component — i.e. the
14
+ * whole sheet was re-parsed on every mount, duplicated per instance, and could
15
+ * not be treeshaken, cached, or overridden by app CSS with predictable
16
+ * ordering. They are global on purpose: ProseMirror owns the DOM inside
17
+ * `.ProseMirror` and Tailwind utilities cannot reach nodes it creates
18
+ * (`<br>`, node-view wrappers, the `::before` placeholder). Tailwind
19
+ * arbitrary-variant classes that CAN reach their target stay inline on the
20
+ * component.
21
+ *
22
+ * `var(--primary)`, `var(--muted-foreground)` come from theme.css.
23
+ */
24
+
25
+ /* Ensure ProseMirror container looks like a single textarea */
26
+ .ProseMirror {
27
+ margin: 0;
28
+ padding: 0;
29
+ width: 100%;
30
+ max-width: 100%;
31
+ overflow: visible;
32
+ outline: none;
33
+ }
34
+
35
+ /* Placeholder for first empty line only - textarea-like */
36
+ .ProseMirror[data-placeholder] > p:first-child:empty::before {
37
+ content: attr(data-placeholder);
38
+ color: var(--muted-foreground);
39
+ pointer-events: none;
40
+ position: absolute;
41
+ }
42
+
43
+ .ProseMirror:focus[data-placeholder] > p:first-child:empty::before {
44
+ opacity: 0.5;
45
+ }
46
+
47
+ /* Standard paragraph - no wrapping, fixed line height */
48
+ .ProseMirror > p {
49
+ margin: 0;
50
+ padding: 0;
51
+ text-transform: uppercase;
52
+ font-family: "Courier New", "Courier", monospace;
53
+ font-size: 0.875rem;
54
+ letter-spacing: 0;
55
+ line-height: 1.5rem;
56
+ white-space: nowrap;
57
+ overflow: visible; /* Let content flow naturally, limit via input handling */
58
+ display: block;
59
+ }
60
+
61
+ /* Hard breaks create line breaks naturally */
62
+ .ProseMirror br {
63
+ display: block;
64
+ content: "";
65
+ margin: 0;
66
+ padding: 0;
67
+ line-height: 0;
68
+ }
69
+
70
+ /* Prevent any extra spacing around hard breaks */
71
+ .ProseMirror br::before,
72
+ .ProseMirror br::after {
73
+ content: none;
74
+ }
75
+
76
+ /* Empty paragraph minimum height */
77
+ .ProseMirror > p:empty {
78
+ min-height: 1.5rem;
79
+ }
80
+
81
+ /* Cursor styling */
82
+ .ProseMirror {
83
+ caret-color: var(--primary);
84
+ }
85
+
86
+ .ProseMirror:focus {
87
+ outline: none;
88
+ }
89
+
90
+ /* Inline nodes - keep them truly inline, no wrapping */
91
+ .ProseMirror [data-type="variable"],
92
+ .ProseMirror [data-type="color-tile"],
93
+ .ProseMirror [data-type="fill-space"],
94
+ .ProseMirror [data-type="wrapped-text"] {
95
+ display: inline-block !important;
96
+ vertical-align: middle;
97
+ white-space: nowrap;
98
+ }
99
+
100
+ /* Node view wrappers - prevent wrapping */
101
+ .ProseMirror [data-node-view-wrapper] {
102
+ display: inline-block !important;
103
+ vertical-align: middle;
104
+ white-space: nowrap;
105
+ }
106
+
107
+ /* Ensure text nodes also don't wrap */
108
+ .ProseMirror p > span {
109
+ white-space: nowrap;
110
+ }
111
+
112
+ /* All inline nodes must not exceed line height */
113
+ .ProseMirror [data-type="variable"],
114
+ .ProseMirror [data-type="color-tile"],
115
+ .ProseMirror [data-type="fill-space"],
116
+ .ProseMirror [data-type="wrapped-text"] {
117
+ max-height: 1.4rem !important;
118
+ height: auto !important;
119
+ line-height: 1.4rem;
120
+ vertical-align: middle;
121
+ }
122
+
123
+ /* Text should be monospace and equal width - each character is exactly 1ch */
124
+ .ProseMirror {
125
+ font-family: "Courier New", "Courier", monospace;
126
+ font-variant-numeric: tabular-nums;
127
+ }
128
+
129
+ /* Don't transform node views (they handle their own display) */
130
+ .ProseMirror [data-type="variable"],
131
+ .ProseMirror [data-type="color-tile"],
132
+ .ProseMirror [data-type="fill-space"],
133
+ .ProseMirror [data-type="wrapped-text"] {
134
+ text-transform: none;
135
+ }
136
+
137
+ /* Enable dragging for nodes with data-drag-handle */
138
+ .ProseMirror [data-drag-handle] {
139
+ cursor: grab;
140
+ }
141
+
142
+ .ProseMirror [data-drag-handle]:active {
143
+ cursor: grabbing;
144
+ }
145
+
146
+ /* Ensure no weird spacing around inline nodes */
147
+ .ProseMirror [data-type="variable"]::before,
148
+ .ProseMirror [data-type="variable"]::after,
149
+ .ProseMirror [data-type="color-tile"]::before,
150
+ .ProseMirror [data-type="color-tile"]::after {
151
+ content: none;
152
+ }
153
+
154
+ /* Range-selection highlight for inline atom nodes (color tiles,
155
+ variables, fill-space). onSelectionUpdate adds this
156
+ class to any atom node DOM element inside the selection range,
157
+ giving shift+arrow and click-drag a visible highlight without
158
+ needing user-select: all (which made Safari treat clicks on a
159
+ tag as selecting the entire line). */
160
+ .ProseMirror .selected-inline {
161
+ outline: 2px solid var(--primary);
162
+ outline-offset: 1px;
163
+ border-radius: 3px;
164
+ }
package/dist/index.d.ts CHANGED
@@ -76,3 +76,31 @@ export * from "./components/plugin/board-showcase";
76
76
  export * from "./components/plugin/plugin-card";
77
77
  export * from "./components/plugin/plugin-category-badge";
78
78
  export * from "./components/plugin/scaled-board-teaser";
79
+ export * from "./components/editor/constants";
80
+ export * from "./components/editor/template-editor";
81
+ export * from "./components/editor/template-editor-toolbar";
82
+ export * from "./components/editor/toolbar-dropdown";
83
+ export * from "./components/editor/color-picker-content";
84
+ export * from "./components/editor/draw-char-picker-content";
85
+ export * from "./components/editor/filter-picker-content";
86
+ export * from "./components/editor/formatting-picker-content";
87
+ export * from "./components/editor/variable-picker-content";
88
+ export * from "./components/editor/extensions/color-tile-node";
89
+ export * from "./components/editor/extensions/fill-space-node";
90
+ export * from "./components/editor/extensions/formula-node";
91
+ export * from "./components/editor/extensions/line-navigation";
92
+ export * from "./components/editor/extensions/single-paragraph-doc";
93
+ export * from "./components/editor/extensions/trailing-newline";
94
+ export * from "./components/editor/extensions/variable-node";
95
+ export * from "./components/editor/extensions/wrapped-text-node";
96
+ export * from "./components/editor/node-views/color-tile-node-view";
97
+ export * from "./components/editor/node-views/fill-space-node-view";
98
+ export * from "./components/editor/node-views/formula-node-view";
99
+ export * from "./components/editor/node-views/node-view-context";
100
+ export * from "./components/editor/node-views/variable-node-view";
101
+ export * from "./components/editor/node-views/wrapped-text-view";
102
+ export * from "./components/editor/utils/draw-mode";
103
+ export * from "./components/editor/utils/insertion";
104
+ export * from "./components/editor/utils/length-calculator";
105
+ export * from "./components/editor/utils/serialization";
106
+ export * from "./components/editor/utils/stroke-transaction";
package/dist/index.js CHANGED
@@ -56,16 +56,44 @@ import { Sidebar as Zt } from "./components/chrome/sidebar.js";
56
56
  import { SkipToContent as Qt } from "./components/chrome/skip-to-content.js";
57
57
  import { ThemeToggle as $t } from "./components/chrome/theme-toggle.js";
58
58
  import { HIDE_FESTIVE_COOKIE as en, PRIDE_SEASON as tn, SEASONS as nn, fireSeasonBurst as rn, getActiveSeason as an, readCookieString as on, shouldShowPride as sn, useActiveSeason as cn, usePrideActive as ln } from "./lib/seasons.js";
59
- import { ALL_COLOR_CODES as un, AVAILABLE_COLORS as dn, BOARD_COLORS as fn, COLOR_CODE_MAP as pn, COLOR_DISPLAY as mn, getBoardColor as hn, isValidBoardColor as gn, resolveColorCode as _n } from "./lib/board-colors.js";
60
- import { BOARD_CHARS as vn, EXTRA_CHARS as yn, getCharFromToken as bn, getCharIndex as xn, isColorTile as Sn, messageToGrid as Cn, messageToText as wn, parseLine as Tn, tokensEqual as En } from "./lib/board-characters.js";
61
- import { DEVICE_DIMENSIONS as Dn, MAX_NOTES_PER_AXIS as On, NOTE_COLS as kn, NOTE_ROWS as An, isNoteArray as jn, noteArrayDimensions as Mn, resolveDimensions as Nn } from "./lib/board-dimensions.js";
62
- import { BoardDisplay as Pn, FLAP_SPEED_PRESETS as Fn, deriveFlapTiming as In, resolveFlapSpeed as Ln } from "./components/board/board-display.js";
63
- import { BoardTeaser as Rn } from "./components/board/board-teaser.js";
64
- import { ScaledBoardDisplay as zn } from "./components/board/scaled-board-display.js";
65
- import { StaticBoardDisplay as Bn } from "./components/board/static-board-display.js";
66
- import { DEFAULT_SHAPE_LABELS as Vn, previewLabel as Hn, previewLabels as Un, previewMessage as Wn } from "./lib/board-previews.js";
67
- import { BoardShowcase as Gn, DEFAULT_SHOWCASE_LABELS as Kn } from "./components/plugin/board-showcase.js";
68
- import { PLUGIN_CATEGORIES as qn, PluginCategoryBadge as Jn } from "./components/plugin/plugin-category-badge.js";
69
- import { ScaledBoardTeaser as Yn } from "./components/plugin/scaled-board-teaser.js";
70
- import { PluginCard as Xn } from "./components/plugin/plugin-card.js";
71
- export { un as ALL_COLOR_CODES, dn as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, _ as Alert, v as AlertDescription, L as AlertDialog, R as AlertDialogAction, z as AlertDialogCancel, B as AlertDialogContent, V as AlertDialogDescription, H as AlertDialogFooter, U as AlertDialogHeader, W as AlertDialogOverlay, G as AlertDialogPortal, K as AlertDialogTitle, q as AlertDialogTrigger, y as AlertTitle, g as Aurora, vn as BOARD_CHARS, fn as BOARD_COLORS, x as Badge, Pn as BoardDisplay, It as BoardIcon, Lt as BoardSelector, Gn as BoardShowcase, Rn as BoardTeaser, M as Box, E as Button, pn as COLOR_CODE_MAP, mn as COLOR_DISPLAY, a as Card, o as CardAction, s as CardContent, c as CardDescription, l as CardFooter, u as CardHeader, d as CardTitle, O as Checkbox, Ee as Code, f as Collapsible, p as CollapsibleContent, m as CollapsibleTrigger, Vn as DEFAULT_SHAPE_LABELS, Kn as DEFAULT_SHOWCASE_LABELS, Dn as DEVICE_DIMENSIONS, We as DecryptedText, J as Dialog, Y as DialogClose, X as DialogContent, Z as DialogDescription, Q as DialogFooter, $ as DialogHeader, ee as DialogOverlay, te as DialogPortal, ne as DialogTitle, re as DialogTrigger, ie as DropdownMenu, ae as DropdownMenuCheckboxItem, oe as DropdownMenuContent, se as DropdownMenuGroup, ce as DropdownMenuItem, le as DropdownMenuLabel, ue as DropdownMenuPortal, de as DropdownMenuRadioGroup, fe as DropdownMenuRadioItem, pe as DropdownMenuSeparator, me as DropdownMenuShortcut, he as DropdownMenuSub, ge as DropdownMenuSubContent, _e as DropdownMenuSubTrigger, ve as DropdownMenuTrigger, yn as EXTRA_CHARS, C as EmptyState, Rt as FIESTA_ICON_DATA_URI, zt as FIESTA_ICON_PALETTE, Bt as FIESTA_ICON_SVG, Fn as FLAP_SPEED_PRESETS, Ge as FadeContent, Vt as FiestaIcon, Ht as FiestaLogo, N as Flex, F as Grid, en as HIDE_FESTIVE_COOKIE, De as Heading, k as Input, h as JsonTree, A as Label, Ut as LanguageSelector, ke as List, Ae as ListItem, On as MAX_NOTES_PER_AXIS, Wt as MainContent, kn as NOTE_COLS, An as NOTE_ROWS, qn as PLUGIN_CATEGORIES, tn as PRIDE_SEASON, Gt as PageHeader, Kt as PageIconGradientDefs, qt as PageLayout, Jt as PageToolbar, Xn as PluginCard, Jn as PluginCategoryBadge, ye as Popover, be as PopoverClose, xe as PopoverContent, Se as PopoverDescription, Ce as PopoverTitle, we as PopoverTrigger, nn as SEASONS, zn as ScaledBoardDisplay, Yn as ScaledBoardTeaser, Me as ScrollArea, Ne as ScrollBar, j as SecretInput, dt as SegmentedControl, ft as SegmentedControlItem, Ye as Select, Xe as SelectContent, Ze as SelectGroup, Qe as SelectItem, $e as SelectLabel, et as SelectScrollDownButton, tt as SelectScrollUpButton, nt as SelectSeparator, rt as SelectTrigger, it as SelectValue, xt as Sheet, St as SheetClose, Ct as SheetContent, wt as SheetDescription, Tt as SheetFooter, Et as SheetHeader, Dt as SheetOverlay, Ot as SheetPortal, kt as SheetTitle, At as SheetTrigger, Zt as Sidebar, Yt as SidebarAurora, Xt as SidebarAuroraHorizontal, Ke as Skeleton, Qt as SkipToContent, at as Slider, w as Spinner, yt as Stack, Bn as StaticBoardDisplay, qe as StatusDot, ot as Switch, Pe as Table, Fe as TableBody, Ie as TableCell, Le as TableHead, Re as TableHeader, ze as TableRow, Be as Tabs, Ve as TabsContent, He as TabsList, Ue as TabsTrigger, ct as Text, Ft as TextLink, st as Textarea, $t as ThemeToggle, ut as TimePicker, pt as ToggleCard, mt as ToggleCardGroup, jt as Tooltip, Mt as TooltipContent, Nt as TooltipProvider, Pt as TooltipTrigger, b as alertVariants, S as badgeVariants, D as buttonVariants, e as cn, In as deriveFlapTiming, rn as fireSeasonBurst, P as flexVariants, an as getActiveSeason, hn as getBoardColor, bn as getCharFromToken, xn as getCharIndex, I as gridVariants, Oe as headingVariants, Sn as isColorTile, jn as isNoteArray, gn as isValidBoardColor, je as listVariants, Cn as messageToGrid, wn as messageToText, Mn as noteArrayDimensions, Tn as parseLine, Hn as previewLabel, Un as previewLabels, Wn as previewMessage, on as readCookieString, _n as resolveColorCode, Nn as resolveDimensions, Ln as resolveFlapSpeed, ht as segmentedControlItemVariants, gt as segmentedControlVariants, sn as shouldShowPride, T as spinnerVariants, bt as stackVariants, Je as statusDotVariants, lt as textVariants, _t as toggleCardGroupVariants, vt as toggleCardVariants, En as tokensEqual, cn as useActiveSeason, Te as usePopoverClose, ln as usePrideActive };
59
+ import { ALL_COLOR_CODES as un, AVAILABLE_COLORS as dn, BOARD_COLORS as fn, COLOR_CODE_MAP as pn, COLOR_DISPLAY as mn, FIESTABOARD_COLORS as hn, getBoardColor as gn, isValidBoardColor as _n, resolveColorCode as vn } from "./lib/board-colors.js";
60
+ import { BOARD_CHARS as yn, EXTRA_CHARS as bn, getCharFromToken as xn, getCharIndex as Sn, isColorTile as Cn, messageToGrid as wn, messageToText as Tn, parseLine as En, tokensEqual as Dn } from "./lib/board-characters.js";
61
+ import { DEVICE_DIMENSIONS as On, MAX_NOTES_PER_AXIS as kn, NOTE_COLS as An, NOTE_ROWS as jn, isNoteArray as Mn, noteArrayDimensions as Nn, resolveDimensions as Pn } from "./lib/board-dimensions.js";
62
+ import { BoardDisplay as Fn, FLAP_SPEED_PRESETS as In, deriveFlapTiming as Ln, resolveFlapSpeed as Rn } from "./components/board/board-display.js";
63
+ import { BoardTeaser as zn } from "./components/board/board-teaser.js";
64
+ import { ScaledBoardDisplay as Bn } from "./components/board/scaled-board-display.js";
65
+ import { StaticBoardDisplay as Vn } from "./components/board/static-board-display.js";
66
+ import { DEFAULT_SHAPE_LABELS as Hn, previewLabel as Un, previewLabels as Wn, previewMessage as Gn } from "./lib/board-previews.js";
67
+ import { BoardShowcase as Kn, DEFAULT_SHOWCASE_LABELS as qn } from "./components/plugin/board-showcase.js";
68
+ import { PLUGIN_CATEGORIES as Jn, PluginCategoryBadge as Yn } from "./components/plugin/plugin-category-badge.js";
69
+ import { ScaledBoardTeaser as Xn } from "./components/plugin/scaled-board-teaser.js";
70
+ import { PluginCard as Zn } from "./components/plugin/plugin-card.js";
71
+ import { BOARD_CODE_TO_COLOR as Qn, BOARD_COLOR_CODES as $n, CURSOR_ANCHOR as er, DEFAULT_BOARD_LINES as tr, DEFAULT_BOARD_WIDTH as nr, FILL_SPACE_REPEAT_VAR as rr, FILL_SPACE_VAR as ir } from "./components/editor/constants.js";
72
+ import { NodeViewInjectionProvider as ar, useNodeViewInjection as or } from "./components/editor/node-views/node-view-context.js";
73
+ import { ColorTileNodeView as sr, DEFAULT_COLOR_TILE_NODE_VIEW_LABELS as cr } from "./components/editor/node-views/color-tile-node-view.js";
74
+ import { ColorTileNode as lr } from "./components/editor/extensions/color-tile-node.js";
75
+ import { DEFAULT_FILL_SPACE_NODE_VIEW_LABELS as ur, FillSpaceNodeView as dr } from "./components/editor/node-views/fill-space-node-view.js";
76
+ import { FillSpaceNode as fr } from "./components/editor/extensions/fill-space-node.js";
77
+ import { DEFAULT_FORMULA_NODE_VIEW_LABELS as pr, FormulaNodeView as mr } from "./components/editor/node-views/formula-node-view.js";
78
+ import { FormulaNode as hr } from "./components/editor/extensions/formula-node.js";
79
+ import { LineNavigation as gr } from "./components/editor/extensions/line-navigation.js";
80
+ import { SingleParagraphDoc as _r } from "./components/editor/extensions/single-paragraph-doc.js";
81
+ import { TrailingNewline as vr } from "./components/editor/extensions/trailing-newline.js";
82
+ import { DEFAULT_VARIABLE_NODE_VIEW_LABELS as yr, VariableNodeView as br } from "./components/editor/node-views/variable-node-view.js";
83
+ import { VariableNode as xr } from "./components/editor/extensions/variable-node.js";
84
+ import { DEFAULT_WRAPPED_TEXT_VIEW_LABELS as Sr, WrappedTextView as Cr } from "./components/editor/node-views/wrapped-text-view.js";
85
+ import { WrappedTextNode as wr } from "./components/editor/extensions/wrapped-text-node.js";
86
+ import { ColorPickerContent as Tr, DEFAULT_COLOR_PICKER_LABELS as Er } from "./components/editor/color-picker-content.js";
87
+ import { DRAW_CHARS as Dr, brushToCell as Or, cellsToLine as kr, isPositionalLine as Ar, lineToCells as jr, paintLine as Mr, renderPositionalLine as Nr } from "./components/editor/utils/draw-mode.js";
88
+ import { DEFAULT_DRAW_CHAR_PICKER_LABELS as Pr, DrawCharPickerContent as Fr } from "./components/editor/draw-char-picker-content.js";
89
+ import { DEFAULT_FORMATTING_PICKER_LABELS as Ir, FormattingPickerContent as Lr } from "./components/editor/formatting-picker-content.js";
90
+ import { DEFAULT_TOOLBAR_DROPDOWN_LABELS as Rr, ToolbarDropdown as zr } from "./components/editor/toolbar-dropdown.js";
91
+ import { parseLineContent as Br, parseTemplateSimple as Vr, serializeTemplateSimple as Hr } from "./components/editor/utils/serialization.js";
92
+ import { insertTemplateContent as Ur } from "./components/editor/utils/insertion.js";
93
+ import { DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS as Wr, TemplateEditorToolbar as Gr } from "./components/editor/template-editor-toolbar.js";
94
+ import { buildStrokeTransaction as Kr, lineRanges as qr } from "./components/editor/utils/stroke-transaction.js";
95
+ import { DEFAULT_TEMPLATE_EDITOR_LABELS as Jr, TemplateEditor as Yr } from "./components/editor/template-editor.js";
96
+ import { DEFAULT_FILTER_PICKER_LABELS as Xr, FilterPickerContent as Zr } from "./components/editor/filter-picker-content.js";
97
+ import { DEFAULT_VARIABLE_PICKER_LABELS as Qr, VariablePickerContent as $r, createLucideIconResolver as ei, getPluginsWithNestedArrays as ti } from "./components/editor/variable-picker-content.js";
98
+ import { calculateLineLength as ni, getOverflowAmount as ri, willOverflow as ii } from "./components/editor/utils/length-calculator.js";
99
+ export { un as ALL_COLOR_CODES, dn as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, _ as Alert, v as AlertDescription, L as AlertDialog, R as AlertDialogAction, z as AlertDialogCancel, B as AlertDialogContent, V as AlertDialogDescription, H as AlertDialogFooter, U as AlertDialogHeader, W as AlertDialogOverlay, G as AlertDialogPortal, K as AlertDialogTitle, q as AlertDialogTrigger, y as AlertTitle, g as Aurora, yn as BOARD_CHARS, Qn as BOARD_CODE_TO_COLOR, fn as BOARD_COLORS, $n as BOARD_COLOR_CODES, x as Badge, Fn as BoardDisplay, It as BoardIcon, Lt as BoardSelector, Kn as BoardShowcase, zn as BoardTeaser, M as Box, E as Button, pn as COLOR_CODE_MAP, mn as COLOR_DISPLAY, er as CURSOR_ANCHOR, a as Card, o as CardAction, s as CardContent, c as CardDescription, l as CardFooter, u as CardHeader, d as CardTitle, O as Checkbox, Ee as Code, f as Collapsible, p as CollapsibleContent, m as CollapsibleTrigger, Tr as ColorPickerContent, lr as ColorTileNode, sr as ColorTileNodeView, tr as DEFAULT_BOARD_LINES, nr as DEFAULT_BOARD_WIDTH, Er as DEFAULT_COLOR_PICKER_LABELS, cr as DEFAULT_COLOR_TILE_NODE_VIEW_LABELS, Pr as DEFAULT_DRAW_CHAR_PICKER_LABELS, ur as DEFAULT_FILL_SPACE_NODE_VIEW_LABELS, Xr as DEFAULT_FILTER_PICKER_LABELS, Ir as DEFAULT_FORMATTING_PICKER_LABELS, pr as DEFAULT_FORMULA_NODE_VIEW_LABELS, Hn as DEFAULT_SHAPE_LABELS, qn as DEFAULT_SHOWCASE_LABELS, Jr as DEFAULT_TEMPLATE_EDITOR_LABELS, Wr as DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS, Rr as DEFAULT_TOOLBAR_DROPDOWN_LABELS, yr as DEFAULT_VARIABLE_NODE_VIEW_LABELS, Qr as DEFAULT_VARIABLE_PICKER_LABELS, Sr as DEFAULT_WRAPPED_TEXT_VIEW_LABELS, On as DEVICE_DIMENSIONS, Dr as DRAW_CHARS, We as DecryptedText, J as Dialog, Y as DialogClose, X as DialogContent, Z as DialogDescription, Q as DialogFooter, $ as DialogHeader, ee as DialogOverlay, te as DialogPortal, ne as DialogTitle, re as DialogTrigger, Fr as DrawCharPickerContent, ie as DropdownMenu, ae as DropdownMenuCheckboxItem, oe as DropdownMenuContent, se as DropdownMenuGroup, ce as DropdownMenuItem, le as DropdownMenuLabel, ue as DropdownMenuPortal, de as DropdownMenuRadioGroup, fe as DropdownMenuRadioItem, pe as DropdownMenuSeparator, me as DropdownMenuShortcut, he as DropdownMenuSub, ge as DropdownMenuSubContent, _e as DropdownMenuSubTrigger, ve as DropdownMenuTrigger, bn as EXTRA_CHARS, C as EmptyState, hn as FIESTABOARD_COLORS, Rt as FIESTA_ICON_DATA_URI, zt as FIESTA_ICON_PALETTE, Bt as FIESTA_ICON_SVG, rr as FILL_SPACE_REPEAT_VAR, ir as FILL_SPACE_VAR, In as FLAP_SPEED_PRESETS, Ge as FadeContent, Vt as FiestaIcon, Ht as FiestaLogo, fr as FillSpaceNode, dr as FillSpaceNodeView, Zr as FilterPickerContent, N as Flex, Lr as FormattingPickerContent, hr as FormulaNode, mr as FormulaNodeView, F as Grid, en as HIDE_FESTIVE_COOKIE, De as Heading, k as Input, h as JsonTree, A as Label, Ut as LanguageSelector, gr as LineNavigation, ke as List, Ae as ListItem, kn as MAX_NOTES_PER_AXIS, Wt as MainContent, An as NOTE_COLS, jn as NOTE_ROWS, ar as NodeViewInjectionProvider, Jn as PLUGIN_CATEGORIES, tn as PRIDE_SEASON, Gt as PageHeader, Kt as PageIconGradientDefs, qt as PageLayout, Jt as PageToolbar, Zn as PluginCard, Yn as PluginCategoryBadge, ye as Popover, be as PopoverClose, xe as PopoverContent, Se as PopoverDescription, Ce as PopoverTitle, we as PopoverTrigger, nn as SEASONS, Bn as ScaledBoardDisplay, Xn as ScaledBoardTeaser, Me as ScrollArea, Ne as ScrollBar, j as SecretInput, dt as SegmentedControl, ft as SegmentedControlItem, Ye as Select, Xe as SelectContent, Ze as SelectGroup, Qe as SelectItem, $e as SelectLabel, et as SelectScrollDownButton, tt as SelectScrollUpButton, nt as SelectSeparator, rt as SelectTrigger, it as SelectValue, xt as Sheet, St as SheetClose, Ct as SheetContent, wt as SheetDescription, Tt as SheetFooter, Et as SheetHeader, Dt as SheetOverlay, Ot as SheetPortal, kt as SheetTitle, At as SheetTrigger, Zt as Sidebar, Yt as SidebarAurora, Xt as SidebarAuroraHorizontal, _r as SingleParagraphDoc, Ke as Skeleton, Qt as SkipToContent, at as Slider, w as Spinner, yt as Stack, Vn as StaticBoardDisplay, qe as StatusDot, ot as Switch, Pe as Table, Fe as TableBody, Ie as TableCell, Le as TableHead, Re as TableHeader, ze as TableRow, Be as Tabs, Ve as TabsContent, He as TabsList, Ue as TabsTrigger, Yr as TemplateEditor, Gr as TemplateEditorToolbar, ct as Text, Ft as TextLink, st as Textarea, $t as ThemeToggle, ut as TimePicker, pt as ToggleCard, mt as ToggleCardGroup, zr as ToolbarDropdown, jt as Tooltip, Mt as TooltipContent, Nt as TooltipProvider, Pt as TooltipTrigger, vr as TrailingNewline, xr as VariableNode, br as VariableNodeView, $r as VariablePickerContent, wr as WrappedTextNode, Cr as WrappedTextView, b as alertVariants, S as badgeVariants, Or as brushToCell, Kr as buildStrokeTransaction, D as buttonVariants, ni as calculateLineLength, kr as cellsToLine, e as cn, ei as createLucideIconResolver, Ln as deriveFlapTiming, rn as fireSeasonBurst, P as flexVariants, an as getActiveSeason, gn as getBoardColor, xn as getCharFromToken, Sn as getCharIndex, ri as getOverflowAmount, ti as getPluginsWithNestedArrays, I as gridVariants, Oe as headingVariants, Ur as insertTemplateContent, Cn as isColorTile, Mn as isNoteArray, Ar as isPositionalLine, _n as isValidBoardColor, qr as lineRanges, jr as lineToCells, je as listVariants, wn as messageToGrid, Tn as messageToText, Nn as noteArrayDimensions, Mr as paintLine, En as parseLine, Br as parseLineContent, Vr as parseTemplateSimple, Un as previewLabel, Wn as previewLabels, Gn as previewMessage, on as readCookieString, Nr as renderPositionalLine, vn as resolveColorCode, Pn as resolveDimensions, Rn as resolveFlapSpeed, ht as segmentedControlItemVariants, gt as segmentedControlVariants, Hr as serializeTemplateSimple, sn as shouldShowPride, T as spinnerVariants, bt as stackVariants, Je as statusDotVariants, lt as textVariants, _t as toggleCardGroupVariants, vt as toggleCardVariants, Dn as tokensEqual, cn as useActiveSeason, or as useNodeViewInjection, Te as usePopoverClose, ln as usePrideActive, ii as willOverflow };
@@ -31,6 +31,22 @@ export declare const BOARD_COLORS: {
31
31
  readonly white: "#ffffff";
32
32
  readonly black: "#1a1a1a";
33
33
  };
34
+ /**
35
+ * Legacy alias. The FiestaBoard app named this exact map `FIESTABOARD_COLORS`
36
+ * (`@/lib/board-colors`), and its template-editor components import it by that
37
+ * name. Same object, same name → hex contract — kept so the app can drop its
38
+ * local copy without a rename sweep. Prefer `BOARD_COLORS` in new code.
39
+ */
40
+ export declare const FIESTABOARD_COLORS: {
41
+ readonly red: "#eb4034";
42
+ readonly orange: "#f5a623";
43
+ readonly yellow: "#f8e71c";
44
+ readonly green: "#7ed321";
45
+ readonly blue: "#4a90d9";
46
+ readonly violet: "#9b59b6";
47
+ readonly white: "#ffffff";
48
+ readonly black: "#1a1a1a";
49
+ };
34
50
  export type BoardColorName = keyof typeof BOARD_COLORS;
35
51
  export declare const COLOR_CODE_MAP: Record<string, string>;
36
52
  export declare const ALL_COLOR_CODES: Record<string, string>;
@@ -8,7 +8,7 @@ var e = {
8
8
  violet: "#9b59b6",
9
9
  white: "#ffffff",
10
10
  black: "#1a1a1a"
11
- }, t = {
11
+ }, t = e, n = {
12
12
  63: e.red,
13
13
  64: e.orange,
14
14
  65: e.yellow,
@@ -18,8 +18,8 @@ var e = {
18
18
  69: e.white,
19
19
  70: e.black,
20
20
  71: e.black
21
- }, n = Object.assign(Object.create(null), {
22
- ...t,
21
+ }, r = Object.assign(Object.create(null), {
22
+ ...n,
23
23
  red: e.red,
24
24
  orange: e.orange,
25
25
  yellow: e.yellow,
@@ -29,7 +29,7 @@ var e = {
29
29
  purple: e.violet,
30
30
  white: e.white,
31
31
  black: e.black
32
- }), r = [
32
+ }), i = [
33
33
  "red",
34
34
  "orange",
35
35
  "yellow",
@@ -38,7 +38,7 @@ var e = {
38
38
  "violet",
39
39
  "white",
40
40
  "black"
41
- ], i = {
41
+ ], a = {
42
42
  red: {
43
43
  bg: "bg-board-red",
44
44
  text: "text-board-black"
@@ -72,22 +72,22 @@ var e = {
72
72
  text: "text-board-white"
73
73
  }
74
74
  };
75
- function a(t) {
76
- let r = t.toLowerCase();
77
- return n[t] || n[r] || e.black;
75
+ function o(t) {
76
+ let n = t.toLowerCase();
77
+ return r[t] || r[n] || e.black;
78
78
  }
79
- function o(e) {
79
+ function s(e) {
80
80
  let t = e.toLowerCase();
81
- return Object.hasOwn(n, e) || Object.hasOwn(n, t);
81
+ return Object.hasOwn(r, e) || Object.hasOwn(r, t);
82
82
  }
83
- function s(t, r) {
84
- if (r) {
83
+ function c(t, n) {
84
+ if (n) {
85
85
  if (t === "69" || t === "white") return e.black;
86
86
  if (t === "70" || t === "black") return e.white;
87
87
  }
88
- return n[t] || e.black;
88
+ return r[t] || e.black;
89
89
  }
90
90
  //#endregion
91
- export { n as ALL_COLOR_CODES, r as AVAILABLE_COLORS, e as BOARD_COLORS, t as COLOR_CODE_MAP, i as COLOR_DISPLAY, a as getBoardColor, o as isValidBoardColor, s as resolveColorCode };
91
+ export { r as ALL_COLOR_CODES, i as AVAILABLE_COLORS, e as BOARD_COLORS, n as COLOR_CODE_MAP, a as COLOR_DISPLAY, t as FIESTABOARD_COLORS, o as getBoardColor, s as isValidBoardColor, c as resolveColorCode };
92
92
 
93
93
  //# sourceMappingURL=board-colors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"board-colors.js","names":[],"sources":["../../src/lib/board-colors.ts"],"mappings":";AAyBA,IAAa,IAAe;CAC1B,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;AACT,GAMa,IAAyC;CACpD,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;AACrB,GAOa,IAA0C,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG;CAExF,GAAG;CAEH,KAAK,EAAa;CAClB,QAAQ,EAAa;CACrB,QAAQ,EAAa;CACrB,OAAO,EAAa;CACpB,MAAM,EAAa;CACnB,QAAQ,EAAa;CACrB,QAAQ,EAAa;CACrB,OAAO,EAAa;CACpB,OAAO,EAAa;AACtB,CAAC,GAGY,IAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAIa,IAAsE;CACjF,KAAK;EAAE,IAAI;EAAgB,MAAM;CAAmB;CACpD,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,OAAO;EAAE,IAAI;EAAkB,MAAM;CAAmB;CACxD,MAAM;EAAE,IAAI;EAAiB,MAAM;CAAmB;CACtD,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,OAAO;EAAE,IAAI;EAAyB,MAAM;CAAmB;CAC/D,OAAO;EAAE,IAAI;EAAkB,MAAM;CAAmB;AAC1D;AAGA,SAAgB,EAAc,GAA4B;CACxD,IAAM,IAAW,EAAW,YAAY;CACxC,OAAO,EAAgB,MAAe,EAAgB,MAAa,EAAa;AAClF;AAGA,SAAgB,EAAkB,GAAwB;CACxD,IAAM,IAAW,EAAM,YAAY;CACnC,OAAO,OAAO,OAAO,GAAiB,CAAK,KAAK,OAAO,OAAO,GAAiB,CAAQ;AACzF;AAMA,SAAgB,EAAiB,GAAc,GAA+B;CAC5E,IAAI,GAAc;EAChB,IAAI,MAAS,QAAQ,MAAS,SAAS,OAAO,EAAa;EAC3D,IAAI,MAAS,QAAQ,MAAS,SAAS,OAAO,EAAa;CAC7D;CACA,OAAO,EAAgB,MAAS,EAAa;AAC/C"}
1
+ {"version":3,"file":"board-colors.js","names":[],"sources":["../../src/lib/board-colors.ts"],"mappings":";AAyBA,IAAa,IAAe;CAC1B,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;AACT,GAQa,IAAqB,GAMrB,IAAyC;CACpD,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;CACnB,IAAM,EAAa;AACrB,GAOa,IAA0C,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG;CAExF,GAAG;CAEH,KAAK,EAAa;CAClB,QAAQ,EAAa;CACrB,QAAQ,EAAa;CACrB,OAAO,EAAa;CACpB,MAAM,EAAa;CACnB,QAAQ,EAAa;CACrB,QAAQ,EAAa;CACrB,OAAO,EAAa;CACpB,OAAO,EAAa;AACtB,CAAC,GAGY,IAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAIa,IAAsE;CACjF,KAAK;EAAE,IAAI;EAAgB,MAAM;CAAmB;CACpD,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,OAAO;EAAE,IAAI;EAAkB,MAAM;CAAmB;CACxD,MAAM;EAAE,IAAI;EAAiB,MAAM;CAAmB;CACtD,QAAQ;EAAE,IAAI;EAAmB,MAAM;CAAmB;CAC1D,OAAO;EAAE,IAAI;EAAyB,MAAM;CAAmB;CAC/D,OAAO;EAAE,IAAI;EAAkB,MAAM;CAAmB;AAC1D;AAGA,SAAgB,EAAc,GAA4B;CACxD,IAAM,IAAW,EAAW,YAAY;CACxC,OAAO,EAAgB,MAAe,EAAgB,MAAa,EAAa;AAClF;AAGA,SAAgB,EAAkB,GAAwB;CACxD,IAAM,IAAW,EAAM,YAAY;CACnC,OAAO,OAAO,OAAO,GAAiB,CAAK,KAAK,OAAO,OAAO,GAAiB,CAAQ;AACzF;AAMA,SAAgB,EAAiB,GAAc,GAA+B;CAC5E,IAAI,GAAc;EAChB,IAAI,MAAS,QAAQ,MAAS,SAAS,OAAO,EAAa;EAC3D,IAAI,MAAS,QAAQ,MAAS,SAAS,OAAO,EAAa;CAC7D;CACA,OAAO,EAAgB,MAAS,EAAa;AAC/C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Render-phase equivalent of `useEffect(fn, deps)` for the specific job of
3
+ * mirroring an external value (a query result, a prop) into local state.
4
+ *
5
+ * Returns `true` on the first render, and on any later render where one of
6
+ * `deps` changed identity — i.e. exactly the renders after which
7
+ * `useEffect(fn, deps)` would have fired. Callers do their `setState` calls
8
+ * inside that branch, during render, instead of in an effect:
9
+ *
10
+ * ```tsx
11
+ * const settingsChanged = useDepsChanged([data?.general]);
12
+ * if (settingsChanged && data?.general) {
13
+ * setTimezone(data.general.timezone ?? DEFAULT_TZ);
14
+ * }
15
+ * ```
16
+ *
17
+ * Why this is better than the effect it replaces: React restarts the render
18
+ * immediately when a component sets its own state during render, *before*
19
+ * committing — so the mirrored value is on screen in the first commit. The
20
+ * effect version commits the stale value, paints, then re-renders, which is
21
+ * the cascading render that `react-hooks/set-state-in-effect` warns about
22
+ * (and, per the React docs, a state update during render of the *same*
23
+ * component is the supported way to adjust state when a prop changes:
24
+ * https://react.dev/reference/react/useState#storing-information-from-previous-renders).
25
+ *
26
+ * Constraints, same as any render-phase update:
27
+ * - Only call `setState` for THIS component inside the branch. Calling a
28
+ * parent's setter (or a router/toast side effect) during render is illegal;
29
+ * those must stay in an effect.
30
+ * - The branch must be idempotent. It runs once per change because the deps
31
+ * snapshot is taken as soon as it fires.
32
+ */
33
+ export declare function useDepsChanged(deps: readonly unknown[]): boolean;
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { useState as e } from "react";
3
+ //#region src/lib/use-deps-changed.ts
4
+ function t(t) {
5
+ let [n, r] = e(null);
6
+ return n === null || n.length !== t.length || t.some((e, t) => !Object.is(e, n[t])) ? (r(t), !0) : !1;
7
+ }
8
+ //#endregion
9
+ export { t as useDepsChanged };
10
+
11
+ //# sourceMappingURL=use-deps-changed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-deps-changed.js","names":[],"sources":["../../src/lib/use-deps-changed.ts"],"mappings":";;;AAoCA,SAAgB,EAAe,GAAmC;CAChE,IAAM,CAAC,GAAM,KAAW,EAAoC,IAAI;CAOhE,OALI,MAAS,QAAQ,EAAK,WAAW,EAAK,UAAU,EAAK,MAAM,GAAK,MAAM,CAAC,OAAO,GAAG,GAAK,EAAK,EAAE,CAAC,KAChG,EAAQ,CAAI,GACL,MAGF;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiestaboard/ui",
3
- "version": "3.1.0",
3
+ "version": "3.3.0",
4
4
  "description": "FiestaUI — the FiestaBoard design system. React components on Base UI with Tailwind v4 design tokens.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,6 +28,7 @@
28
28
  },
29
29
  "./theme.css": "./dist/theme.css",
30
30
  "./fonts.css": "./dist/fonts.css",
31
+ "./editor.css": "./dist/editor.css",
31
32
  "./seasons/*.css": "./dist/seasons/*.css",
32
33
  "./package.json": "./package.json",
33
34
  "./*": {
@@ -36,7 +37,7 @@
36
37
  }
37
38
  },
38
39
  "scripts": {
39
- "build": "vite build && tsc -p tsconfig.build.json && cp src/styles/theme.css dist/theme.css && cp src/styles/fonts.css dist/fonts.css && cp -r src/styles/seasons dist/seasons",
40
+ "build": "vite build && tsc -p tsconfig.build.json && cp src/styles/theme.css dist/theme.css && cp src/styles/fonts.css dist/fonts.css && cp src/styles/editor.css dist/editor.css && cp -r src/styles/seasons dist/seasons",
40
41
  "typecheck": "tsc --noEmit",
41
42
  "lint": "eslint",
42
43
  "lint:fix": "eslint --fix",
@@ -66,16 +67,34 @@
66
67
  "tw-animate-css": "^1.4.0"
67
68
  },
68
69
  "peerDependencies": {
70
+ "@codemirror/commands": "^6.10.4",
71
+ "@codemirror/language": "^6.12.4",
72
+ "@codemirror/state": "^6.7.1",
73
+ "@codemirror/view": "^6.43.8",
74
+ "@lezer/highlight": "^1.2.3",
75
+ "@tiptap/core": "^3.29.2",
76
+ "@tiptap/pm": "^3.29.2",
77
+ "@tiptap/react": "^3.29.2",
78
+ "@tiptap/starter-kit": "^3.29.2",
69
79
  "lucide-react": ">=1.23.0",
70
80
  "react": "^19.0.0",
71
81
  "react-dom": "^19.0.0",
72
82
  "tailwindcss": "^4.0.0"
73
83
  },
74
84
  "devDependencies": {
85
+ "@codemirror/commands": "^6.10.4",
86
+ "@codemirror/language": "^6.12.4",
87
+ "@codemirror/state": "^6.7.1",
88
+ "@codemirror/view": "^6.43.8",
89
+ "@lezer/highlight": "^1.2.3",
75
90
  "@storybook/addon-a11y": "^10.5.5",
76
91
  "@storybook/react-vite": "^10.5.5",
77
92
  "@storybook/test-runner": "^0.24.4",
78
93
  "@tailwindcss/vite": "^4",
94
+ "@tiptap/core": "^3.29.2",
95
+ "@tiptap/pm": "^3.29.2",
96
+ "@tiptap/react": "^3.29.2",
97
+ "@tiptap/starter-kit": "^3.29.2",
79
98
  "@types/node": "^26",
80
99
  "@types/react": "^19",
81
100
  "@types/react-dom": "^19",
@@ -106,5 +125,34 @@
106
125
  "publishConfig": {
107
126
  "registry": "https://registry.npmjs.org",
108
127
  "access": "public"
128
+ },
129
+ "peerDependenciesMeta": {
130
+ "@codemirror/commands": {
131
+ "optional": true
132
+ },
133
+ "@codemirror/language": {
134
+ "optional": true
135
+ },
136
+ "@codemirror/state": {
137
+ "optional": true
138
+ },
139
+ "@codemirror/view": {
140
+ "optional": true
141
+ },
142
+ "@lezer/highlight": {
143
+ "optional": true
144
+ },
145
+ "@tiptap/core": {
146
+ "optional": true
147
+ },
148
+ "@tiptap/pm": {
149
+ "optional": true
150
+ },
151
+ "@tiptap/react": {
152
+ "optional": true
153
+ },
154
+ "@tiptap/starter-kit": {
155
+ "optional": true
156
+ }
109
157
  }
110
158
  }