@fiestaboard/ui 5.2.0 → 5.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 (69) hide show
  1. package/README.md +18 -0
  2. package/dist/components/board/board-display.d.ts +13 -1
  3. package/dist/components/board/board-display.js +103 -101
  4. package/dist/components/board/board-display.js.map +1 -1
  5. package/dist/components/board/static-board-display.d.ts +6 -1
  6. package/dist/components/board/static-board-display.js +36 -34
  7. package/dist/components/board/static-board-display.js.map +1 -1
  8. package/dist/components/chrome/nav-list.d.ts +53 -0
  9. package/dist/components/chrome/nav-list.js +84 -0
  10. package/dist/components/chrome/nav-list.js.map +1 -0
  11. package/dist/components/containment/icon-tile.d.ts +67 -0
  12. package/dist/components/containment/icon-tile.js +44 -0
  13. package/dist/components/containment/icon-tile.js.map +1 -0
  14. package/dist/components/containment/json-tree.js +1 -1
  15. package/dist/components/containment/json-tree.js.map +1 -1
  16. package/dist/components/containment/media-frame.d.ts +28 -0
  17. package/dist/components/containment/media-frame.js +40 -0
  18. package/dist/components/containment/media-frame.js.map +1 -0
  19. package/dist/components/containment/scroll-area.d.ts +17 -0
  20. package/dist/components/containment/scroll-area.js +2 -2
  21. package/dist/components/containment/scroll-area.js.map +1 -1
  22. package/dist/components/containment/tabs.js +2 -2
  23. package/dist/components/containment/tabs.js.map +1 -1
  24. package/dist/components/editor/formula/formula-editor-panel.js +2 -2
  25. package/dist/components/editor/formula/formula-editor-panel.js.map +1 -1
  26. package/dist/components/editor/template-editor-toolbar.d.ts +27 -3
  27. package/dist/components/editor/template-editor-toolbar.js +99 -96
  28. package/dist/components/editor/template-editor-toolbar.js.map +1 -1
  29. package/dist/components/forms/button.d.ts +1 -1
  30. package/dist/components/forms/button.js +2 -0
  31. package/dist/components/forms/button.js.map +1 -1
  32. package/dist/components/forms/selection-group.d.ts +82 -0
  33. package/dist/components/forms/selection-group.js +51 -0
  34. package/dist/components/forms/selection-group.js.map +1 -0
  35. package/dist/components/forms/swatch.d.ts +81 -0
  36. package/dist/components/forms/swatch.js +91 -0
  37. package/dist/components/forms/swatch.js.map +1 -0
  38. package/dist/components/forms/timezone-picker.d.ts +163 -0
  39. package/dist/components/forms/timezone-picker.js +158 -0
  40. package/dist/components/forms/timezone-picker.js.map +1 -0
  41. package/dist/components/forms/toggle-card.d.ts +45 -35
  42. package/dist/components/forms/toggle-card.js +187 -122
  43. package/dist/components/forms/toggle-card.js.map +1 -1
  44. package/dist/components/forms/toggle.d.ts +1 -1
  45. package/dist/components/layout/flex.d.ts +1 -1
  46. package/dist/components/layout/grid.d.ts +1 -1
  47. package/dist/components/layout/stack.d.ts +1 -1
  48. package/dist/components/overlays/lightbox.d.ts +37 -0
  49. package/dist/components/overlays/lightbox.js +54 -0
  50. package/dist/components/overlays/lightbox.js.map +1 -0
  51. package/dist/components/overlays/overlay-close.js +1 -1
  52. package/dist/components/overlays/overlay-close.js.map +1 -1
  53. package/dist/components/plugin/board-showcase.js +1 -1
  54. package/dist/components/plugin/board-showcase.js.map +1 -1
  55. package/dist/components/typography/heading.d.ts +1 -1
  56. package/dist/components/typography/text-link.d.ts +27 -3
  57. package/dist/components/typography/text-link.js +1 -1
  58. package/dist/components/typography/text-link.js.map +1 -1
  59. package/dist/components/typography/text.d.ts +1 -1
  60. package/dist/components/wizard/wizard-shell.d.ts +6 -1
  61. package/dist/components/wizard/wizard-shell.js +38 -35
  62. package/dist/components/wizard/wizard-shell.js.map +1 -1
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.js +104 -98
  65. package/dist/lib/board-characters.d.ts +33 -7
  66. package/dist/lib/board-characters.js +14 -11
  67. package/dist/lib/board-characters.js.map +1 -1
  68. package/dist/theme.css +85 -4
  69. package/package.json +9 -2
package/dist/index.js CHANGED
@@ -2,101 +2,107 @@ import { cn as e } from "./lib/utils.js";
2
2
  import { Accordion as t, AccordionContent as n, AccordionItem as r, AccordionTrigger as i } from "./components/containment/accordion.js";
3
3
  import { Card as a, CardAction as o, CardContent as s, CardDescription as c, CardFooter as l, CardHeader as u, CardTitle as d } from "./components/containment/card.js";
4
4
  import { Collapsible as f, CollapsibleContent as p, CollapsibleTrigger as m } from "./components/containment/collapsible.js";
5
- import { JsonTree as h } from "./components/containment/json-tree.js";
6
- import { Alert as g, AlertDescription as _, AlertTitle as v, alertVariants as y } from "./components/feedback/alert.js";
7
- import { Badge as b, badgeVariants as x } from "./components/feedback/badge.js";
8
- import { Chip as S, chipVariants as C } from "./components/feedback/chip.js";
9
- import { EmptyState as w } from "./components/feedback/empty-state.js";
10
- import { Spinner as T, spinnerVariants as E } from "./components/feedback/spinner.js";
11
- import { Button as D, buttonVariants as O } from "./components/forms/button.js";
12
- import { Checkbox as k } from "./components/forms/checkbox.js";
13
- import { Input as A } from "./components/forms/input.js";
14
- import { Label as j } from "./components/forms/label.js";
15
- import { SecretInput as M } from "./components/forms/secret-input.js";
16
- import { Box as N } from "./components/layout/box.js";
17
- import { Flex as P, flexVariants as F } from "./components/layout/flex.js";
18
- import { Grid as I, gridVariants as L } from "./components/layout/grid.js";
19
- import { AlertDialog as R, AlertDialogAction as z, AlertDialogCancel as B, AlertDialogContent as V, AlertDialogDescription as H, AlertDialogFooter as U, AlertDialogHeader as W, AlertDialogOverlay as G, AlertDialogPortal as K, AlertDialogTitle as q, AlertDialogTrigger as J } from "./components/overlays/alert-dialog.js";
20
- import { Dialog as Y, DialogClose as X, DialogContent as Z, DialogDescription as Q, DialogFooter as $, DialogHeader as ee, DialogOverlay as te, DialogPortal as ne, DialogTitle as re, DialogTrigger as ie } from "./components/overlays/dialog.js";
21
- import { DropdownMenu as ae, DropdownMenuCheckboxItem as oe, DropdownMenuContent as se, DropdownMenuGroup as ce, DropdownMenuItem as le, DropdownMenuLabel as ue, DropdownMenuPortal as de, DropdownMenuRadioGroup as fe, DropdownMenuRadioItem as pe, DropdownMenuSeparator as me, DropdownMenuShortcut as he, DropdownMenuSub as ge, DropdownMenuSubContent as _e, DropdownMenuSubTrigger as ve, DropdownMenuTrigger as ye } from "./components/overlays/dropdown-menu.js";
22
- import { Popover as be, PopoverClose as xe, PopoverContent as Se, PopoverDescription as Ce, PopoverTitle as we, PopoverTrigger as Te, usePopoverClose as Ee } from "./components/overlays/popover.js";
23
- import { Code as De } from "./components/typography/code.js";
24
- import { Heading as Oe, headingVariants as ke } from "./components/typography/heading.js";
25
- import { List as Ae, ListItem as je, listVariants as Me } from "./components/typography/list.js";
26
- import { ScrollArea as Ne, ScrollBar as Pe } from "./components/containment/scroll-area.js";
27
- import { Table as Fe, TableBody as Ie, TableCell as Le, TableHead as Re, TableHeader as ze, TableRow as Be } from "./components/containment/table.js";
28
- import { Tabs as Ve, TabsContent as He, TabsList as Ue, TabsTrigger as We } from "./components/containment/tabs.js";
29
- import Ge from "./components/effects/react-bits/fade-content.js";
30
- import { Skeleton as Ke } from "./components/feedback/skeleton.js";
31
- import { StatusDot as qe, statusDotVariants as Je } from "./components/feedback/status-dot.js";
32
- import { Select as Ye, SelectContent as Xe, SelectGroup as Ze, SelectItem as Qe, SelectLabel as $e, SelectScrollDownButton as et, SelectScrollUpButton as tt, SelectSeparator as nt, SelectTrigger as rt, SelectValue as it } from "./components/forms/select.js";
33
- import { Slider as at } from "./components/forms/slider.js";
34
- import { Switch as ot } from "./components/forms/switch.js";
35
- import { Textarea as st } from "./components/forms/textarea.js";
36
- import { Text as ct, textVariants as lt } from "./components/typography/text.js";
37
- import { TimePicker as ut } from "./components/forms/time-picker.js";
38
- import { Toggle as dt, ToggleGroup as ft, toggleGroupVariants as pt, toggleVariants as mt } from "./components/forms/toggle.js";
39
- import { SegmentedControl as ht, SegmentedControlItem as gt, ToggleCard as _t, ToggleCardGroup as vt, segmentedControlItemVariants as yt, segmentedControlVariants as bt, toggleCardGroupVariants as xt, toggleCardVariants as St } from "./components/forms/toggle-card.js";
40
- import { Stack as Ct, stackVariants as wt } from "./components/layout/stack.js";
41
- import { Sheet as Tt, SheetClose as Et, SheetContent as Dt, SheetDescription as Ot, SheetFooter as kt, SheetHeader as At, SheetOverlay as jt, SheetPortal as Mt, SheetTitle as Nt, SheetTrigger as Pt } from "./components/overlays/sheet.js";
42
- import { Tooltip as Ft, TooltipContent as It, TooltipProvider as Lt, TooltipTrigger as Rt } from "./components/overlays/tooltip.js";
43
- import { TextLink as zt } from "./components/typography/text-link.js";
44
- import { BoardIcon as Bt } from "./components/chrome/board-icon.js";
45
- import { BoardSelector as Vt } from "./components/chrome/board-selector.js";
46
- import { Breadcrumb as Ht, BreadcrumbEllipsis as Ut, BreadcrumbItem as Wt, BreadcrumbLink as Gt, BreadcrumbList as Kt, BreadcrumbPage as qt, BreadcrumbSeparator as Jt } from "./components/chrome/breadcrumb.js";
47
- import { FIESTA_ICON_DATA_URI as Yt, FIESTA_ICON_PALETTE as Xt, FIESTA_ICON_SVG as Zt, FiestaIcon as Qt } from "./components/chrome/fiesta-icon.js";
48
- import { FiestaLogo as $t } from "./components/chrome/fiesta-logo.js";
49
- import { LanguageSelector as en } from "./components/chrome/language-selector.js";
50
- import { MainContent as tn } from "./components/chrome/main-content.js";
51
- import { PAGE_HUES as nn, PageHeader as rn, PageIconGradientDefs as an, pageHue as on } from "./components/chrome/page-header.js";
52
- import { PageLayout as sn } from "./components/chrome/page-layout.js";
53
- import { PageToolbar as cn } from "./components/chrome/page-toolbar.js";
54
- import { Sidebar as ln } from "./components/chrome/sidebar.js";
55
- import { SkipToContent as un } from "./components/chrome/skip-to-content.js";
56
- import { ThemeToggle as dn } from "./components/chrome/theme-toggle.js";
57
- import { WizardProgress as fn } from "./components/wizard/wizard-progress.js";
58
- import { ALL_COLOR_CODES as pn, AVAILABLE_COLORS as mn, BOARD_COLORS as hn, COLOR_CODE_MAP as gn, COLOR_DISPLAY as _n, FIESTABOARD_COLORS as vn, getBoardColor as yn, isValidBoardColor as bn, resolveColorCode as xn } from "./lib/board-colors.js";
59
- import { BOARD_CHARS as Sn, EXTRA_CHARS as Cn, getCharFromToken as wn, getCharIndex as Tn, isColorTile as En, messageToGrid as Dn, messageToText as On, parseLine as kn, tokensEqual as An } from "./lib/board-characters.js";
60
- import { BoardTeaser as jn } from "./components/board/board-teaser.js";
61
- import { BoardBackdrop as Mn } from "./components/board/board-backdrop.js";
62
- import { WizardShell as Nn } from "./components/wizard/wizard-shell.js";
63
- import { DEVICE_DIMENSIONS as Pn, MAX_NOTES_PER_AXIS as Fn, NOTE_COLS as In, NOTE_ROWS as Ln, isNoteArray as Rn, noteArrayDimensions as zn, resolveDimensions as Bn } from "./lib/board-dimensions.js";
64
- import { BoardDisplay as Vn, FLAP_SPEED_PRESETS as Hn, deriveFlapTiming as Un, resolveFlapSpeed as Wn } from "./components/board/board-display.js";
65
- import { ScaledBoardDisplay as Gn } from "./components/board/scaled-board-display.js";
66
- import { StaticBoardDisplay as Kn } from "./components/board/static-board-display.js";
67
- import { DEFAULT_SHAPE_LABELS as qn, previewLabel as Jn, previewLabels as Yn, previewMessage as Xn } from "./lib/board-previews.js";
68
- import { BarList as Zn } from "./components/data/bar-list.js";
69
- import { StatStrip as Qn, StatStripItem as $n } from "./components/data/stat-strip.js";
70
- import { BoardShowcase as er, DEFAULT_SHOWCASE_LABELS as tr } from "./components/plugin/board-showcase.js";
71
- import { PLUGIN_CATEGORIES as nr, PluginCategoryBadge as rr } from "./components/plugin/plugin-category-badge.js";
72
- import { ScaledBoardTeaser as ir } from "./components/plugin/scaled-board-teaser.js";
73
- import { PluginCard as ar } from "./components/plugin/plugin-card.js";
74
- import { BOARD_CODE_TO_COLOR as or, BOARD_COLOR_CODES as sr, CURSOR_ANCHOR as cr, DEFAULT_BOARD_LINES as lr, DEFAULT_BOARD_WIDTH as ur, FILL_SPACE_REPEAT_VAR as dr, FILL_SPACE_VAR as fr } from "./components/editor/constants.js";
75
- import { NodeViewInjectionProvider as pr, useNodeViewInjection as mr } from "./components/editor/node-views/node-view-context.js";
76
- import { ColorTileNodeView as hr, DEFAULT_COLOR_TILE_NODE_VIEW_LABELS as gr } from "./components/editor/node-views/color-tile-node-view.js";
77
- import { ColorTileNode as _r } from "./components/editor/extensions/color-tile-node.js";
78
- import { DEFAULT_FILL_SPACE_NODE_VIEW_LABELS as vr, FillSpaceNodeView as yr } from "./components/editor/node-views/fill-space-node-view.js";
79
- import { FillSpaceNode as br } from "./components/editor/extensions/fill-space-node.js";
80
- import { DEFAULT_FORMULA_NODE_VIEW_LABELS as xr, FormulaNodeView as Sr } from "./components/editor/node-views/formula-node-view.js";
81
- import { FormulaNode as Cr } from "./components/editor/extensions/formula-node.js";
82
- import { LineNavigation as wr } from "./components/editor/extensions/line-navigation.js";
83
- import { SingleParagraphDoc as Tr } from "./components/editor/extensions/single-paragraph-doc.js";
84
- import { TrailingNewline as Er } from "./components/editor/extensions/trailing-newline.js";
85
- import { DEFAULT_VARIABLE_NODE_VIEW_LABELS as Dr, VariableNodeView as Or } from "./components/editor/node-views/variable-node-view.js";
86
- import { VariableNode as kr } from "./components/editor/extensions/variable-node.js";
87
- import { DEFAULT_WRAPPED_TEXT_VIEW_LABELS as Ar, WrappedTextView as jr } from "./components/editor/node-views/wrapped-text-view.js";
88
- import { WrappedTextNode as Mr } from "./components/editor/extensions/wrapped-text-node.js";
89
- import { ColorPickerContent as Nr, DEFAULT_COLOR_PICKER_LABELS as Pr } from "./components/editor/color-picker-content.js";
90
- import { DRAW_CHARS as Fr, brushToCell as Ir, cellsToLine as Lr, isPositionalLine as Rr, lineToCells as zr, paintLine as Br, renderPositionalLine as Vr } from "./components/editor/utils/draw-mode.js";
91
- import { DEFAULT_DRAW_CHAR_PICKER_LABELS as Hr, DrawCharPickerContent as Ur } from "./components/editor/draw-char-picker-content.js";
92
- import { DEFAULT_FORMATTING_PICKER_LABELS as Wr, FormattingPickerContent as Gr } from "./components/editor/formatting-picker-content.js";
93
- import { DEFAULT_TOOLBAR_DROPDOWN_LABELS as Kr, ToolbarDropdown as qr } from "./components/editor/toolbar-dropdown.js";
94
- import { parseLineContent as Jr, parseTemplateSimple as Yr, serializeTemplateSimple as Xr } from "./components/editor/utils/serialization.js";
95
- import { insertTemplateContent as Zr } from "./components/editor/utils/insertion.js";
96
- import { DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS as Qr, TemplateEditorToolbar as $r } from "./components/editor/template-editor-toolbar.js";
97
- import { buildStrokeTransaction as ei, lineRanges as ti } from "./components/editor/utils/stroke-transaction.js";
98
- import { DEFAULT_TEMPLATE_EDITOR_LABELS as ni, TemplateEditor as ri } from "./components/editor/template-editor.js";
99
- import { DEFAULT_FILTER_PICKER_LABELS as ii, FilterPickerContent as ai } from "./components/editor/filter-picker-content.js";
100
- import { DEFAULT_VARIABLE_PICKER_LABELS as oi, VariablePickerContent as si, createLucideIconResolver as ci, getPluginsWithNestedArrays as li } from "./components/editor/variable-picker-content.js";
101
- import { calculateLineLength as ui, getOverflowAmount as di, willOverflow as fi } from "./components/editor/utils/length-calculator.js";
102
- export { pn as ALL_COLOR_CODES, mn as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, g as Alert, _ as AlertDescription, R as AlertDialog, z as AlertDialogAction, B as AlertDialogCancel, V as AlertDialogContent, H as AlertDialogDescription, U as AlertDialogFooter, W as AlertDialogHeader, G as AlertDialogOverlay, K as AlertDialogPortal, q as AlertDialogTitle, J as AlertDialogTrigger, v as AlertTitle, Sn as BOARD_CHARS, or as BOARD_CODE_TO_COLOR, hn as BOARD_COLORS, sr as BOARD_COLOR_CODES, b as Badge, Zn as BarList, Mn as BoardBackdrop, Vn as BoardDisplay, Bt as BoardIcon, Vt as BoardSelector, er as BoardShowcase, jn as BoardTeaser, N as Box, Ht as Breadcrumb, Ut as BreadcrumbEllipsis, Wt as BreadcrumbItem, Gt as BreadcrumbLink, Kt as BreadcrumbList, qt as BreadcrumbPage, Jt as BreadcrumbSeparator, D as Button, gn as COLOR_CODE_MAP, _n as COLOR_DISPLAY, cr as CURSOR_ANCHOR, a as Card, o as CardAction, s as CardContent, c as CardDescription, l as CardFooter, u as CardHeader, d as CardTitle, k as Checkbox, S as Chip, De as Code, f as Collapsible, p as CollapsibleContent, m as CollapsibleTrigger, Nr as ColorPickerContent, _r as ColorTileNode, hr as ColorTileNodeView, lr as DEFAULT_BOARD_LINES, ur as DEFAULT_BOARD_WIDTH, Pr as DEFAULT_COLOR_PICKER_LABELS, gr as DEFAULT_COLOR_TILE_NODE_VIEW_LABELS, Hr as DEFAULT_DRAW_CHAR_PICKER_LABELS, vr as DEFAULT_FILL_SPACE_NODE_VIEW_LABELS, ii as DEFAULT_FILTER_PICKER_LABELS, Wr as DEFAULT_FORMATTING_PICKER_LABELS, xr as DEFAULT_FORMULA_NODE_VIEW_LABELS, qn as DEFAULT_SHAPE_LABELS, tr as DEFAULT_SHOWCASE_LABELS, ni as DEFAULT_TEMPLATE_EDITOR_LABELS, Qr as DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS, Kr as DEFAULT_TOOLBAR_DROPDOWN_LABELS, Dr as DEFAULT_VARIABLE_NODE_VIEW_LABELS, oi as DEFAULT_VARIABLE_PICKER_LABELS, Ar as DEFAULT_WRAPPED_TEXT_VIEW_LABELS, Pn as DEVICE_DIMENSIONS, Fr as DRAW_CHARS, Y as Dialog, X as DialogClose, Z as DialogContent, Q as DialogDescription, $ as DialogFooter, ee as DialogHeader, te as DialogOverlay, ne as DialogPortal, re as DialogTitle, ie as DialogTrigger, Ur as DrawCharPickerContent, ae as DropdownMenu, oe as DropdownMenuCheckboxItem, se as DropdownMenuContent, ce as DropdownMenuGroup, le as DropdownMenuItem, ue as DropdownMenuLabel, de as DropdownMenuPortal, fe as DropdownMenuRadioGroup, pe as DropdownMenuRadioItem, me as DropdownMenuSeparator, he as DropdownMenuShortcut, ge as DropdownMenuSub, _e as DropdownMenuSubContent, ve as DropdownMenuSubTrigger, ye as DropdownMenuTrigger, Cn as EXTRA_CHARS, w as EmptyState, vn as FIESTABOARD_COLORS, Yt as FIESTA_ICON_DATA_URI, Xt as FIESTA_ICON_PALETTE, Zt as FIESTA_ICON_SVG, dr as FILL_SPACE_REPEAT_VAR, fr as FILL_SPACE_VAR, Hn as FLAP_SPEED_PRESETS, Ge as FadeContent, Qt as FiestaIcon, $t as FiestaLogo, br as FillSpaceNode, yr as FillSpaceNodeView, ai as FilterPickerContent, P as Flex, Gr as FormattingPickerContent, Cr as FormulaNode, Sr as FormulaNodeView, I as Grid, Oe as Heading, A as Input, h as JsonTree, j as Label, en as LanguageSelector, wr as LineNavigation, Ae as List, je as ListItem, Fn as MAX_NOTES_PER_AXIS, tn as MainContent, In as NOTE_COLS, Ln as NOTE_ROWS, pr as NodeViewInjectionProvider, nn as PAGE_HUES, nr as PLUGIN_CATEGORIES, rn as PageHeader, an as PageIconGradientDefs, sn as PageLayout, cn as PageToolbar, ar as PluginCard, rr as PluginCategoryBadge, be as Popover, xe as PopoverClose, Se as PopoverContent, Ce as PopoverDescription, we as PopoverTitle, Te as PopoverTrigger, Gn as ScaledBoardDisplay, ir as ScaledBoardTeaser, Ne as ScrollArea, Pe as ScrollBar, M as SecretInput, ht as SegmentedControl, gt 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, Tt as Sheet, Et as SheetClose, Dt as SheetContent, Ot as SheetDescription, kt as SheetFooter, At as SheetHeader, jt as SheetOverlay, Mt as SheetPortal, Nt as SheetTitle, Pt as SheetTrigger, ln as Sidebar, Tr as SingleParagraphDoc, Ke as Skeleton, un as SkipToContent, at as Slider, T as Spinner, Ct as Stack, Qn as StatStrip, $n as StatStripItem, Kn as StaticBoardDisplay, qe as StatusDot, ot as Switch, Fe as Table, Ie as TableBody, Le as TableCell, Re as TableHead, ze as TableHeader, Be as TableRow, Ve as Tabs, He as TabsContent, Ue as TabsList, We as TabsTrigger, ri as TemplateEditor, $r as TemplateEditorToolbar, ct as Text, zt as TextLink, st as Textarea, dn as ThemeToggle, ut as TimePicker, dt as Toggle, _t as ToggleCard, vt as ToggleCardGroup, ft as ToggleGroup, qr as ToolbarDropdown, Ft as Tooltip, It as TooltipContent, Lt as TooltipProvider, Rt as TooltipTrigger, Er as TrailingNewline, kr as VariableNode, Or as VariableNodeView, si as VariablePickerContent, fn as WizardProgress, Nn as WizardShell, Mr as WrappedTextNode, jr as WrappedTextView, y as alertVariants, x as badgeVariants, Ir as brushToCell, ei as buildStrokeTransaction, O as buttonVariants, ui as calculateLineLength, Lr as cellsToLine, C as chipVariants, e as cn, ci as createLucideIconResolver, Un as deriveFlapTiming, F as flexVariants, yn as getBoardColor, wn as getCharFromToken, Tn as getCharIndex, di as getOverflowAmount, li as getPluginsWithNestedArrays, L as gridVariants, ke as headingVariants, Zr as insertTemplateContent, En as isColorTile, Rn as isNoteArray, Rr as isPositionalLine, bn as isValidBoardColor, ti as lineRanges, zr as lineToCells, Me as listVariants, Dn as messageToGrid, On as messageToText, zn as noteArrayDimensions, on as pageHue, Br as paintLine, kn as parseLine, Jr as parseLineContent, Yr as parseTemplateSimple, Jn as previewLabel, Yn as previewLabels, Xn as previewMessage, Vr as renderPositionalLine, xn as resolveColorCode, Bn as resolveDimensions, Wn as resolveFlapSpeed, yt as segmentedControlItemVariants, bt as segmentedControlVariants, Xr as serializeTemplateSimple, E as spinnerVariants, wt as stackVariants, Je as statusDotVariants, lt as textVariants, xt as toggleCardGroupVariants, St as toggleCardVariants, pt as toggleGroupVariants, mt as toggleVariants, An as tokensEqual, mr as useNodeViewInjection, Ee as usePopoverClose, fi as willOverflow };
5
+ import { IconTile as h, iconTileVariants as g } from "./components/containment/icon-tile.js";
6
+ import { JsonTree as _ } from "./components/containment/json-tree.js";
7
+ import { MediaFrame as v, MediaFrameBar as y, MediaFrameMedia as b } from "./components/containment/media-frame.js";
8
+ import { Alert as x, AlertDescription as S, AlertTitle as C, alertVariants as w } from "./components/feedback/alert.js";
9
+ import { Badge as T, badgeVariants as E } from "./components/feedback/badge.js";
10
+ import { Chip as D, chipVariants as O } from "./components/feedback/chip.js";
11
+ import { EmptyState as k } from "./components/feedback/empty-state.js";
12
+ import { Spinner as A, spinnerVariants as j } from "./components/feedback/spinner.js";
13
+ import { Button as M, buttonVariants as N } from "./components/forms/button.js";
14
+ import { Checkbox as P } from "./components/forms/checkbox.js";
15
+ import { Input as F } from "./components/forms/input.js";
16
+ import { Label as I } from "./components/forms/label.js";
17
+ import { SecretInput as L } from "./components/forms/secret-input.js";
18
+ import { Box as R } from "./components/layout/box.js";
19
+ import { Flex as z, flexVariants as B } from "./components/layout/flex.js";
20
+ import { Grid as V, gridVariants as H } from "./components/layout/grid.js";
21
+ import { AlertDialog as U, AlertDialogAction as W, AlertDialogCancel as G, AlertDialogContent as K, AlertDialogDescription as q, AlertDialogFooter as J, AlertDialogHeader as Y, AlertDialogOverlay as X, AlertDialogPortal as Z, AlertDialogTitle as Q, AlertDialogTrigger as $ } from "./components/overlays/alert-dialog.js";
22
+ import { Dialog as ee, DialogClose as te, DialogContent as ne, DialogDescription as re, DialogFooter as ie, DialogHeader as ae, DialogOverlay as oe, DialogPortal as se, DialogTitle as ce, DialogTrigger as le } from "./components/overlays/dialog.js";
23
+ import { DropdownMenu as ue, DropdownMenuCheckboxItem as de, DropdownMenuContent as fe, DropdownMenuGroup as pe, DropdownMenuItem as me, DropdownMenuLabel as he, DropdownMenuPortal as ge, DropdownMenuRadioGroup as _e, DropdownMenuRadioItem as ve, DropdownMenuSeparator as ye, DropdownMenuShortcut as be, DropdownMenuSub as xe, DropdownMenuSubContent as Se, DropdownMenuSubTrigger as Ce, DropdownMenuTrigger as we } from "./components/overlays/dropdown-menu.js";
24
+ import { Lightbox as Te, LightboxClose as Ee, LightboxContent as De, LightboxFooter as Oe, LightboxOverlay as ke, LightboxPortal as Ae, LightboxTrigger as je } from "./components/overlays/lightbox.js";
25
+ import { Popover as Me, PopoverClose as Ne, PopoverContent as Pe, PopoverDescription as Fe, PopoverTitle as Ie, PopoverTrigger as Le, usePopoverClose as Re } from "./components/overlays/popover.js";
26
+ import { Code as ze } from "./components/typography/code.js";
27
+ import { Heading as Be, headingVariants as Ve } from "./components/typography/heading.js";
28
+ import { List as He, ListItem as Ue, listVariants as We } from "./components/typography/list.js";
29
+ import { ScrollArea as Ge, ScrollBar as Ke } from "./components/containment/scroll-area.js";
30
+ import { Table as qe, TableBody as Je, TableCell as Ye, TableHead as Xe, TableHeader as Ze, TableRow as Qe } from "./components/containment/table.js";
31
+ import { Tabs as $e, TabsContent as et, TabsList as tt, TabsTrigger as nt } from "./components/containment/tabs.js";
32
+ import rt from "./components/effects/react-bits/fade-content.js";
33
+ import { Skeleton as it } from "./components/feedback/skeleton.js";
34
+ import { StatusDot as at, statusDotVariants as ot } from "./components/feedback/status-dot.js";
35
+ import { Select as st, SelectContent as ct, SelectGroup as lt, SelectItem as ut, SelectLabel as dt, SelectScrollDownButton as ft, SelectScrollUpButton as pt, SelectSeparator as mt, SelectTrigger as ht, SelectValue as gt } from "./components/forms/select.js";
36
+ import { Slider as _t } from "./components/forms/slider.js";
37
+ import { Swatch as vt, SwatchGroup as yt, swatchFillVariants as bt, swatchGroupVariants as xt, swatchIndicatorVariants as St, swatchVariants as Ct } from "./components/forms/swatch.js";
38
+ import { Switch as wt } from "./components/forms/switch.js";
39
+ import { Textarea as Tt } from "./components/forms/textarea.js";
40
+ import { Text as Et, textVariants as Dt } from "./components/typography/text.js";
41
+ import { TimePicker as Ot } from "./components/forms/time-picker.js";
42
+ import { TimezonePicker as kt, listTimezones as At } from "./components/forms/timezone-picker.js";
43
+ import { Toggle as jt, ToggleGroup as Mt, toggleGroupVariants as Nt, toggleVariants as Pt } from "./components/forms/toggle.js";
44
+ import { SegmentedControl as Ft, SegmentedControlItem as It, ToggleCard as Lt, ToggleCardGroup as Rt, segmentedControlItemVariants as zt, segmentedControlVariants as Bt, toggleCardGroupVariants as Vt, toggleCardVariants as Ht } from "./components/forms/toggle-card.js";
45
+ import { Stack as Ut, stackVariants as Wt } from "./components/layout/stack.js";
46
+ import { Sheet as Gt, SheetClose as Kt, SheetContent as qt, SheetDescription as Jt, SheetFooter as Yt, SheetHeader as Xt, SheetOverlay as Zt, SheetPortal as Qt, SheetTitle as $t, SheetTrigger as en } from "./components/overlays/sheet.js";
47
+ import { Tooltip as tn, TooltipContent as nn, TooltipProvider as rn, TooltipTrigger as an } from "./components/overlays/tooltip.js";
48
+ import { TextLink as on } from "./components/typography/text-link.js";
49
+ import { BoardIcon as sn } from "./components/chrome/board-icon.js";
50
+ import { BoardSelector as cn } from "./components/chrome/board-selector.js";
51
+ import { Breadcrumb as ln, BreadcrumbEllipsis as un, BreadcrumbItem as dn, BreadcrumbLink as fn, BreadcrumbList as pn, BreadcrumbPage as mn, BreadcrumbSeparator as hn } from "./components/chrome/breadcrumb.js";
52
+ import { FIESTA_ICON_DATA_URI as gn, FIESTA_ICON_PALETTE as _n, FIESTA_ICON_SVG as vn, FiestaIcon as yn } from "./components/chrome/fiesta-icon.js";
53
+ import { FiestaLogo as bn } from "./components/chrome/fiesta-logo.js";
54
+ import { LanguageSelector as xn } from "./components/chrome/language-selector.js";
55
+ import { MainContent as Sn } from "./components/chrome/main-content.js";
56
+ import { NavList as Cn, NavListItem as wn, NavListLink as Tn, NavListSection as En, NavListSectionContent as Dn, NavListSectionTrigger as On } from "./components/chrome/nav-list.js";
57
+ import { PAGE_HUES as kn, PageHeader as An, PageIconGradientDefs as jn, pageHue as Mn } from "./components/chrome/page-header.js";
58
+ import { PageLayout as Nn } from "./components/chrome/page-layout.js";
59
+ import { PageToolbar as Pn } from "./components/chrome/page-toolbar.js";
60
+ import { Sidebar as Fn } from "./components/chrome/sidebar.js";
61
+ import { SkipToContent as In } from "./components/chrome/skip-to-content.js";
62
+ import { ThemeToggle as Ln } from "./components/chrome/theme-toggle.js";
63
+ import { WizardProgress as Rn } from "./components/wizard/wizard-progress.js";
64
+ import { ALL_COLOR_CODES as zn, AVAILABLE_COLORS as Bn, BOARD_COLORS as Vn, COLOR_CODE_MAP as Hn, COLOR_DISPLAY as Un, FIESTABOARD_COLORS as Wn, getBoardColor as Gn, isValidBoardColor as Kn, resolveColorCode as qn } from "./lib/board-colors.js";
65
+ import { BOARD_CHARS as Jn, EXTRA_CHARS as Yn, getCharFromToken as Xn, getCharIndex as Zn, isColorTile as Qn, messageToGrid as $n, messageToText as er, parseLine as tr, resolveCode62Glyph as nr, tokensEqual as rr } from "./lib/board-characters.js";
66
+ import { BoardTeaser as ir } from "./components/board/board-teaser.js";
67
+ import { BoardBackdrop as ar } from "./components/board/board-backdrop.js";
68
+ import { WizardShell as or } from "./components/wizard/wizard-shell.js";
69
+ import { DEVICE_DIMENSIONS as sr, MAX_NOTES_PER_AXIS as cr, NOTE_COLS as lr, NOTE_ROWS as ur, isNoteArray as dr, noteArrayDimensions as fr, resolveDimensions as pr } from "./lib/board-dimensions.js";
70
+ import { BoardDisplay as mr, FLAP_SPEED_PRESETS as hr, deriveFlapTiming as gr, resolveFlapSpeed as _r } from "./components/board/board-display.js";
71
+ import { ScaledBoardDisplay as vr } from "./components/board/scaled-board-display.js";
72
+ import { StaticBoardDisplay as yr } from "./components/board/static-board-display.js";
73
+ import { DEFAULT_SHAPE_LABELS as br, previewLabel as xr, previewLabels as Sr, previewMessage as Cr } from "./lib/board-previews.js";
74
+ import { BarList as wr } from "./components/data/bar-list.js";
75
+ import { StatStrip as Tr, StatStripItem as Er } from "./components/data/stat-strip.js";
76
+ import { BoardShowcase as Dr, DEFAULT_SHOWCASE_LABELS as Or } from "./components/plugin/board-showcase.js";
77
+ import { PLUGIN_CATEGORIES as kr, PluginCategoryBadge as Ar } from "./components/plugin/plugin-category-badge.js";
78
+ import { ScaledBoardTeaser as jr } from "./components/plugin/scaled-board-teaser.js";
79
+ import { PluginCard as Mr } from "./components/plugin/plugin-card.js";
80
+ import { BOARD_CODE_TO_COLOR as Nr, BOARD_COLOR_CODES as Pr, CURSOR_ANCHOR as Fr, DEFAULT_BOARD_LINES as Ir, DEFAULT_BOARD_WIDTH as Lr, FILL_SPACE_REPEAT_VAR as Rr, FILL_SPACE_VAR as zr } from "./components/editor/constants.js";
81
+ import { NodeViewInjectionProvider as Br, useNodeViewInjection as Vr } from "./components/editor/node-views/node-view-context.js";
82
+ import { ColorTileNodeView as Hr, DEFAULT_COLOR_TILE_NODE_VIEW_LABELS as Ur } from "./components/editor/node-views/color-tile-node-view.js";
83
+ import { ColorTileNode as Wr } from "./components/editor/extensions/color-tile-node.js";
84
+ import { DEFAULT_FILL_SPACE_NODE_VIEW_LABELS as Gr, FillSpaceNodeView as Kr } from "./components/editor/node-views/fill-space-node-view.js";
85
+ import { FillSpaceNode as qr } from "./components/editor/extensions/fill-space-node.js";
86
+ import { DEFAULT_FORMULA_NODE_VIEW_LABELS as Jr, FormulaNodeView as Yr } from "./components/editor/node-views/formula-node-view.js";
87
+ import { FormulaNode as Xr } from "./components/editor/extensions/formula-node.js";
88
+ import { LineNavigation as Zr } from "./components/editor/extensions/line-navigation.js";
89
+ import { SingleParagraphDoc as Qr } from "./components/editor/extensions/single-paragraph-doc.js";
90
+ import { TrailingNewline as $r } from "./components/editor/extensions/trailing-newline.js";
91
+ import { DEFAULT_VARIABLE_NODE_VIEW_LABELS as ei, VariableNodeView as ti } from "./components/editor/node-views/variable-node-view.js";
92
+ import { VariableNode as ni } from "./components/editor/extensions/variable-node.js";
93
+ import { DEFAULT_WRAPPED_TEXT_VIEW_LABELS as ri, WrappedTextView as ii } from "./components/editor/node-views/wrapped-text-view.js";
94
+ import { WrappedTextNode as ai } from "./components/editor/extensions/wrapped-text-node.js";
95
+ import { ColorPickerContent as oi, DEFAULT_COLOR_PICKER_LABELS as si } from "./components/editor/color-picker-content.js";
96
+ import { DRAW_CHARS as ci, brushToCell as li, cellsToLine as ui, isPositionalLine as di, lineToCells as fi, paintLine as pi, renderPositionalLine as mi } from "./components/editor/utils/draw-mode.js";
97
+ import { DEFAULT_DRAW_CHAR_PICKER_LABELS as hi, DrawCharPickerContent as gi } from "./components/editor/draw-char-picker-content.js";
98
+ import { DEFAULT_FORMATTING_PICKER_LABELS as _i, FormattingPickerContent as vi } from "./components/editor/formatting-picker-content.js";
99
+ import { DEFAULT_TOOLBAR_DROPDOWN_LABELS as yi, ToolbarDropdown as bi } from "./components/editor/toolbar-dropdown.js";
100
+ import { parseLineContent as xi, parseTemplateSimple as Si, serializeTemplateSimple as Ci } from "./components/editor/utils/serialization.js";
101
+ import { insertTemplateContent as wi } from "./components/editor/utils/insertion.js";
102
+ import { DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS as Ti, TemplateEditorToolbar as Ei } from "./components/editor/template-editor-toolbar.js";
103
+ import { buildStrokeTransaction as Di, lineRanges as Oi } from "./components/editor/utils/stroke-transaction.js";
104
+ import { DEFAULT_TEMPLATE_EDITOR_LABELS as ki, TemplateEditor as Ai } from "./components/editor/template-editor.js";
105
+ import { DEFAULT_FILTER_PICKER_LABELS as ji, FilterPickerContent as Mi } from "./components/editor/filter-picker-content.js";
106
+ import { DEFAULT_VARIABLE_PICKER_LABELS as Ni, VariablePickerContent as Pi, createLucideIconResolver as Fi, getPluginsWithNestedArrays as Ii } from "./components/editor/variable-picker-content.js";
107
+ import { calculateLineLength as Li, getOverflowAmount as Ri, willOverflow as zi } from "./components/editor/utils/length-calculator.js";
108
+ export { zn as ALL_COLOR_CODES, Bn as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, x as Alert, S as AlertDescription, U as AlertDialog, W as AlertDialogAction, G as AlertDialogCancel, K as AlertDialogContent, q as AlertDialogDescription, J as AlertDialogFooter, Y as AlertDialogHeader, X as AlertDialogOverlay, Z as AlertDialogPortal, Q as AlertDialogTitle, $ as AlertDialogTrigger, C as AlertTitle, Jn as BOARD_CHARS, Nr as BOARD_CODE_TO_COLOR, Vn as BOARD_COLORS, Pr as BOARD_COLOR_CODES, T as Badge, wr as BarList, ar as BoardBackdrop, mr as BoardDisplay, sn as BoardIcon, cn as BoardSelector, Dr as BoardShowcase, ir as BoardTeaser, R as Box, ln as Breadcrumb, un as BreadcrumbEllipsis, dn as BreadcrumbItem, fn as BreadcrumbLink, pn as BreadcrumbList, mn as BreadcrumbPage, hn as BreadcrumbSeparator, M as Button, Hn as COLOR_CODE_MAP, Un as COLOR_DISPLAY, Fr as CURSOR_ANCHOR, a as Card, o as CardAction, s as CardContent, c as CardDescription, l as CardFooter, u as CardHeader, d as CardTitle, P as Checkbox, D as Chip, ze as Code, f as Collapsible, p as CollapsibleContent, m as CollapsibleTrigger, oi as ColorPickerContent, Wr as ColorTileNode, Hr as ColorTileNodeView, Ir as DEFAULT_BOARD_LINES, Lr as DEFAULT_BOARD_WIDTH, si as DEFAULT_COLOR_PICKER_LABELS, Ur as DEFAULT_COLOR_TILE_NODE_VIEW_LABELS, hi as DEFAULT_DRAW_CHAR_PICKER_LABELS, Gr as DEFAULT_FILL_SPACE_NODE_VIEW_LABELS, ji as DEFAULT_FILTER_PICKER_LABELS, _i as DEFAULT_FORMATTING_PICKER_LABELS, Jr as DEFAULT_FORMULA_NODE_VIEW_LABELS, br as DEFAULT_SHAPE_LABELS, Or as DEFAULT_SHOWCASE_LABELS, ki as DEFAULT_TEMPLATE_EDITOR_LABELS, Ti as DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS, yi as DEFAULT_TOOLBAR_DROPDOWN_LABELS, ei as DEFAULT_VARIABLE_NODE_VIEW_LABELS, Ni as DEFAULT_VARIABLE_PICKER_LABELS, ri as DEFAULT_WRAPPED_TEXT_VIEW_LABELS, sr as DEVICE_DIMENSIONS, ci as DRAW_CHARS, ee as Dialog, te as DialogClose, ne as DialogContent, re as DialogDescription, ie as DialogFooter, ae as DialogHeader, oe as DialogOverlay, se as DialogPortal, ce as DialogTitle, le as DialogTrigger, gi as DrawCharPickerContent, ue as DropdownMenu, de as DropdownMenuCheckboxItem, fe as DropdownMenuContent, pe as DropdownMenuGroup, me as DropdownMenuItem, he as DropdownMenuLabel, ge as DropdownMenuPortal, _e as DropdownMenuRadioGroup, ve as DropdownMenuRadioItem, ye as DropdownMenuSeparator, be as DropdownMenuShortcut, xe as DropdownMenuSub, Se as DropdownMenuSubContent, Ce as DropdownMenuSubTrigger, we as DropdownMenuTrigger, Yn as EXTRA_CHARS, k as EmptyState, Wn as FIESTABOARD_COLORS, gn as FIESTA_ICON_DATA_URI, _n as FIESTA_ICON_PALETTE, vn as FIESTA_ICON_SVG, Rr as FILL_SPACE_REPEAT_VAR, zr as FILL_SPACE_VAR, hr as FLAP_SPEED_PRESETS, rt as FadeContent, yn as FiestaIcon, bn as FiestaLogo, qr as FillSpaceNode, Kr as FillSpaceNodeView, Mi as FilterPickerContent, z as Flex, vi as FormattingPickerContent, Xr as FormulaNode, Yr as FormulaNodeView, V as Grid, Be as Heading, h as IconTile, F as Input, _ as JsonTree, I as Label, xn as LanguageSelector, Te as Lightbox, Ee as LightboxClose, De as LightboxContent, Oe as LightboxFooter, ke as LightboxOverlay, Ae as LightboxPortal, je as LightboxTrigger, Zr as LineNavigation, He as List, Ue as ListItem, cr as MAX_NOTES_PER_AXIS, Sn as MainContent, v as MediaFrame, y as MediaFrameBar, b as MediaFrameMedia, lr as NOTE_COLS, ur as NOTE_ROWS, Cn as NavList, wn as NavListItem, Tn as NavListLink, En as NavListSection, Dn as NavListSectionContent, On as NavListSectionTrigger, Br as NodeViewInjectionProvider, kn as PAGE_HUES, kr as PLUGIN_CATEGORIES, An as PageHeader, jn as PageIconGradientDefs, Nn as PageLayout, Pn as PageToolbar, Mr as PluginCard, Ar as PluginCategoryBadge, Me as Popover, Ne as PopoverClose, Pe as PopoverContent, Fe as PopoverDescription, Ie as PopoverTitle, Le as PopoverTrigger, vr as ScaledBoardDisplay, jr as ScaledBoardTeaser, Ge as ScrollArea, Ke as ScrollBar, L as SecretInput, Ft as SegmentedControl, It as SegmentedControlItem, st as Select, ct as SelectContent, lt as SelectGroup, ut as SelectItem, dt as SelectLabel, ft as SelectScrollDownButton, pt as SelectScrollUpButton, mt as SelectSeparator, ht as SelectTrigger, gt as SelectValue, Gt as Sheet, Kt as SheetClose, qt as SheetContent, Jt as SheetDescription, Yt as SheetFooter, Xt as SheetHeader, Zt as SheetOverlay, Qt as SheetPortal, $t as SheetTitle, en as SheetTrigger, Fn as Sidebar, Qr as SingleParagraphDoc, it as Skeleton, In as SkipToContent, _t as Slider, A as Spinner, Ut as Stack, Tr as StatStrip, Er as StatStripItem, yr as StaticBoardDisplay, at as StatusDot, vt as Swatch, yt as SwatchGroup, wt as Switch, qe as Table, Je as TableBody, Ye as TableCell, Xe as TableHead, Ze as TableHeader, Qe as TableRow, $e as Tabs, et as TabsContent, tt as TabsList, nt as TabsTrigger, Ai as TemplateEditor, Ei as TemplateEditorToolbar, Et as Text, on as TextLink, Tt as Textarea, Ln as ThemeToggle, Ot as TimePicker, kt as TimezonePicker, jt as Toggle, Lt as ToggleCard, Rt as ToggleCardGroup, Mt as ToggleGroup, bi as ToolbarDropdown, tn as Tooltip, nn as TooltipContent, rn as TooltipProvider, an as TooltipTrigger, $r as TrailingNewline, ni as VariableNode, ti as VariableNodeView, Pi as VariablePickerContent, Rn as WizardProgress, or as WizardShell, ai as WrappedTextNode, ii as WrappedTextView, w as alertVariants, E as badgeVariants, li as brushToCell, Di as buildStrokeTransaction, N as buttonVariants, Li as calculateLineLength, ui as cellsToLine, O as chipVariants, e as cn, Fi as createLucideIconResolver, gr as deriveFlapTiming, B as flexVariants, Gn as getBoardColor, Xn as getCharFromToken, Zn as getCharIndex, Ri as getOverflowAmount, Ii as getPluginsWithNestedArrays, H as gridVariants, Ve as headingVariants, g as iconTileVariants, wi as insertTemplateContent, Qn as isColorTile, dr as isNoteArray, di as isPositionalLine, Kn as isValidBoardColor, Oi as lineRanges, fi as lineToCells, At as listTimezones, We as listVariants, $n as messageToGrid, er as messageToText, fr as noteArrayDimensions, Mn as pageHue, pi as paintLine, tr as parseLine, xi as parseLineContent, Si as parseTemplateSimple, xr as previewLabel, Sr as previewLabels, Cr as previewMessage, mi as renderPositionalLine, nr as resolveCode62Glyph, qn as resolveColorCode, pr as resolveDimensions, _r as resolveFlapSpeed, zt as segmentedControlItemVariants, Bt as segmentedControlVariants, Ci as serializeTemplateSimple, j as spinnerVariants, Wt as stackVariants, ot as statusDotVariants, bt as swatchFillVariants, xt as swatchGroupVariants, St as swatchIndicatorVariants, Ct as swatchVariants, Dt as textVariants, Vt as toggleCardGroupVariants, Ht as toggleCardVariants, Nt as toggleGroupVariants, Pt as toggleVariants, rr as tokensEqual, Vr as useNodeViewInjection, Re as usePopoverClose, zi as willOverflow };
@@ -47,12 +47,37 @@ export declare function getCharFromToken(token: BoardToken): string;
47
47
  * single brackets. End tags (`{/red}`, `{/}`) render nothing.
48
48
  */
49
49
  export declare function parseLine(line: string, maxTokens?: number): BoardToken[];
50
+ /**
51
+ * Which glyph a board's code-62 flap physically carries.
52
+ *
53
+ * Code 62 is one character code with two possible flaps. Vestaboard shipped
54
+ * every Flagship with a degree flap until 2026, when they replaced it with a
55
+ * heart on newly-manufactured units ("Every new Vestaboard purchased will ship
56
+ * with the heart in place of the degree symbol"). Note has always carried the
57
+ * heart. So `deviceType` alone no longer says what a board draws, and nothing
58
+ * queryable distinguishes a degree-era Flagship from a heart-era one — only the
59
+ * owner knows. See FiestaBoard#1657.
60
+ *
61
+ * This is display-only. Both glyphs encode to code 62 on the wire; nothing here
62
+ * changes what is sent to a board.
63
+ */
64
+ export type Code62Glyph = "degree" | "heart";
65
+ /**
66
+ * Decide which glyph a board draws for code 62.
67
+ *
68
+ * Note and note-array hardware only ever shipped the heart flap, so their glyph
69
+ * is a property of the device and `code62Glyph` is ignored for them. Flagship is
70
+ * the ambiguous one, and the caller has to say: unset means `"degree"`, the
71
+ * glyph every Flagship carried before the hardware change, so a caller that has
72
+ * not been taught about the new flap keeps rendering exactly as it did.
73
+ */
74
+ export declare function resolveCode62Glyph(deviceType: string, code62Glyph?: Code62Glyph): Code62Glyph;
50
75
  /**
51
76
  * Convert a message string to a rows×cols grid of tokens.
52
- * Lines are split on `\n`, truncated/padded to the grid, and on the Note
53
- * device the degree symbol (code 62) displays as a heart.
77
+ * Lines are split on `\n`, truncated/padded to the grid, and code 62 draws as
78
+ * the glyph {@link resolveCode62Glyph} picks for this board.
54
79
  */
55
- export declare function messageToGrid(message: string, rows: number, cols: number, deviceType?: string): BoardToken[][];
80
+ export declare function messageToGrid(message: string, rows: number, cols: number, deviceType?: string, code62Glyph?: Code62Glyph): BoardToken[][];
56
81
  /**
57
82
  * The plain text a board draws, for accessible names (issue #205).
58
83
  *
@@ -69,11 +94,12 @@ export declare function messageToGrid(message: string, rows: number, cols: numbe
69
94
  * (they occupy a cell but say nothing), lines join with a space, and runs of
70
95
  * whitespace collapse so a half-empty board does not announce a long silence.
71
96
  *
72
- * `deviceType` is taken for the same reason {@link messageToGrid} takes it: on
73
- * Note, `°` draws as a heart, and a name that said "degree" would describe
74
- * something the board is not showing.
97
+ * `deviceType` and `code62Glyph` are taken for the same reason
98
+ * {@link messageToGrid} takes them: they decide whether `°` draws as a heart,
99
+ * and a name that said "degree" would describe something the board is not
100
+ * showing.
75
101
  *
76
102
  * Returns `""` for a message that draws no text at all — a color-only board —
77
103
  * so callers can fall back to a generic name instead of a dangling prefix.
78
104
  */
79
- export declare function messageToText(message: string, deviceType?: string): string;
105
+ export declare function messageToText(message: string, deviceType?: string, code62Glyph?: Code62Glyph): string;
@@ -131,28 +131,31 @@ function u(t, n = Infinity) {
131
131
  return r;
132
132
  }
133
133
  function d(e, t) {
134
- return t && e.type === "char" && e.value === "°" ? {
134
+ return e === "note" || e === "note_array" ? "heart" : t ?? "degree";
135
+ }
136
+ function f(e, t) {
137
+ return t === "heart" && e.type === "char" && e.value === "°" ? {
135
138
  type: "char",
136
139
  value: "♥"
137
140
  } : e;
138
141
  }
139
- function f(e, t, n, i = "flagship") {
140
- let a = e.split("\n"), o = [], s = i === "note";
142
+ function p(e, t, n, i = "flagship", a) {
143
+ let o = e.split("\n"), s = [], c = d(i, a);
141
144
  for (let e = 0; e < t; e++) {
142
- let t = u(a[e] || "", n), i = [];
143
- for (let e = 0; e < n; e++) e < t.length ? i.push(d(t[e], s)) : i.push(r);
144
- o.push(i);
145
+ let t = u(o[e] || "", n), i = [];
146
+ for (let e = 0; e < n; e++) e < t.length ? i.push(f(t[e], c)) : i.push(r);
147
+ s.push(i);
145
148
  }
146
- return o;
149
+ return s;
147
150
  }
148
- function p(e, t = "flagship") {
149
- let n = t === "note";
151
+ function m(e, t = "flagship", n) {
152
+ let r = d(t, n);
150
153
  return e.split("\n").map((e) => u(e).map((e) => {
151
- let t = d(e, n);
154
+ let t = f(e, r);
152
155
  return t.type === "char" ? t.value : " ";
153
156
  }).join("")).join(" ").replace(/\s+/g, " ").trim();
154
157
  }
155
158
  //#endregion
156
- export { t as BOARD_CHARS, n as EXTRA_CHARS, l as getCharFromToken, c as getCharIndex, o as isColorTile, f as messageToGrid, p as messageToText, u as parseLine, i as tokensEqual };
159
+ export { t as BOARD_CHARS, n as EXTRA_CHARS, l as getCharFromToken, c as getCharIndex, o as isColorTile, p as messageToGrid, m as messageToText, u as parseLine, d as resolveCode62Glyph, i as tokensEqual };
157
160
 
158
161
  //# sourceMappingURL=board-characters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"board-characters.js","names":[],"sources":["../../src/lib/board-characters.ts"],"mappings":";;AAuBA,IAAa,IAAc;CACzB;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAKa,IAAuC,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG,EACrF,KAAK,GACP,CAAC,GAQK,IAA0B,OAAO,OAAO;CAAE,MAAM;CAAQ,OAAO;AAAI,CAAC;AAG1E,SAAgB,EAAY,GAAe,GAAwB;CAIjE,OAHI,EAAE,SAAS,EAAE,OACb,EAAE,SAAS,UAAU,EAAE,SAAS,SAAe,EAAE,UAAU,EAAE,QAC7D,EAAE,SAAS,WAAW,EAAE,SAAS,WAAgB,EAAE,SAAS,EAAE,OAFpC;AAIhC;AAKA,IAAM,oBAAsB,IAAI,IAAI;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;CAAM;CAAM;CAAM;AAAI,CAAC,GAG7E,KAAe,MACnB,EAAoB,IAAI,CAAI,GAO/B,oBAAa,IAAI,IAAoB;AAC3C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;CAC3C,IAAM,IAAO,EAAY;CACzB,AAAK,EAAW,IAAI,CAAI,KAAG,EAAW,IAAI,GAAM,CAAC;AACnD;AAGA,SAAgB,EAAa,GAAsB;CACjD,IAAM,IAAQ,EAAW,IAAI,CAAI;CACjC,OAAO,MAAU,KAAA,IAAoB,IAAR;AAC/B;AAGA,SAAgB,EAAiB,GAA2B;CAI1D,OAHI,EAAM,SAAS,UACV,EAAM,OAER,EAAM;AACf;AASA,SAAgB,EAAU,GAAc,IAAoB,UAAwB;CAClF,IAAM,IAAuB,CAAC,GAC1B,IAAI;CAER,OAAO,IAAI,EAAK,UAAU,EAAO,SAAS,IAAW;EAGnD,IAAI,EAAK,OAAO,KAAK;GACnB,IAAM,IAAe,EAAK,QAAQ,KAAK,CAAC;GACxC,IAAI,MAAiB,IAAI;IACvB,IAAM,IAAU,EAAK,UAAU,IAAI,GAAG,CAAY;IAGlD,IAAI,EAAQ,WAAW,GAAG,GAAG;KAE3B,IAAI,IAAe;KACnB;IACF;IAGA,IAAM,IAAe,EAAQ,YAAY,GAErC,IAA2B;IAO/B,IANI,EAAgB,KAClB,IAAY,IACH,EAAgB,OACzB,IAAY,IAGV,GAAW;KAEb,AADA,EAAO,KAAK;MAAE,MAAM;MAAS,MAAM;KAAU,CAAC,GAC9C,IAAI,IAAe;KACnB;IACF;GAEF;EACF;EAIA,AADA,EAAO,KAAK;GAAE,MAAM;GAAQ,OAAO,EAAK,EAAE,CAAC,YAAY;EAAE,CAAC,GAC1D;CACF;CAEA,OAAO;AACT;AASA,SAAS,EAAwB,GAAmB,GAA6B;CAE/E,OADI,KAAU,EAAM,SAAS,UAAU,EAAM,UAAU,MAAY;EAAE,MAAM;EAAQ,OAAO;CAAI,IACvF;AACT;AAOA,SAAgB,EACd,GACA,GACA,GACA,IAAqB,YACL;CAChB,IAAM,IAAQ,EAAQ,MAAM,IAAI,GAC1B,IAAuB,CAAC,GACxB,IAAS,MAAe;CAE9B,KAAK,IAAI,IAAM,GAAG,IAAM,GAAM,KAAO;EAInC,IAAM,IAAS,EAHF,EAAM,MAAQ,IAGI,CAAI,GAC7B,IAA0B,CAAC;EAGjC,KAAK,IAAI,IAAM,GAAG,IAAM,GAAM,KAC5B,AAAI,IAAM,EAAO,SACf,EAAU,KAAK,EAAwB,EAAO,IAAM,CAAM,CAAC,IAE3D,EAAU,KAAK,CAAW;EAG9B,EAAK,KAAK,CAAS;CACrB;CAEA,OAAO;AACT;AAyBA,SAAgB,EAAc,GAAiB,IAAqB,YAAoB;CACtF,IAAM,IAAS,MAAe;CAC9B,OAAO,EACJ,MAAM,IAAI,CAAC,CACX,KAAK,MACJ,EAAU,CAAI,CAAC,CACZ,KAAK,MAAU;EACd,IAAM,IAAQ,EAAwB,GAAO,CAAM;EACnD,OAAO,EAAM,SAAS,SAAS,EAAM,QAAQ;CAC/C,CAAC,CAAC,CACD,KAAK,EAAE,CACZ,CAAC,CACA,KAAK,GAAG,CAAC,CACT,QAAQ,QAAQ,GAAG,CAAC,CACpB,KAAK;AACV"}
1
+ {"version":3,"file":"board-characters.js","names":[],"sources":["../../src/lib/board-characters.ts"],"mappings":"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"}
package/dist/theme.css CHANGED
@@ -361,6 +361,28 @@
361
361
  --border: color-mix(in oklch, var(--foreground) 11%, transparent);
362
362
  --input: color-mix(in oklch, var(--foreground) 50%, transparent);
363
363
  --ring: var(--primary); /* = --primary, see the invariant above */
364
+ /* ============================================================
365
+ * THE FOCUS RING, AS A VALUE (#228 item 5).
366
+ *
367
+ * The recipe itself is argued at `.focus-ring` near the bottom of this
368
+ * file; this is the same three stops written ONCE, so that the class and
369
+ * every other caller are the same value rather than two copies of it.
370
+ *
371
+ * `.focus-ring` is a class, and a class needs a call site. MDX prose
372
+ * anchors do not have one — a docs pipeline styles them from a stylesheet
373
+ * it owns — so the docs site hand-mirrored the three stops and the copy
374
+ * has already gone stale once. With the recipe published as a property, a
375
+ * CSS-only consumer writes
376
+ *
377
+ * a:focus-visible { box-shadow: var(--focus-ring-shadow); outline: none; }
378
+ *
379
+ * and tracks a retune here by construction.
380
+ *
381
+ * Declared in :root only: both stops resolve through --ring and
382
+ * --ring-edge, which are already themed, so the value re-resolves per
383
+ * theme without a second declaration to keep in sync.
384
+ * ============================================================ */
385
+ --focus-ring-shadow: 0 0 0 1px var(--ring-edge), 0 0 0 3px var(--ring), 0 0 0 4px var(--ring-edge);
364
386
  /* ============================================================
365
387
  * THE RAIL FOLLOWS THE THEME (#231).
366
388
  *
@@ -406,6 +428,56 @@
406
428
  Alert enforces this — status color never touches a sentence. */
407
429
  --warning: oklch(0.62 0.131 104);
408
430
  --warning-foreground: oklch(0.205 0.008 73);
431
+ /* ============================================================
432
+ * TAG TINTS ARE A PAIR ACROSS AN UNKNOWN SURFACE (#231).
433
+ *
434
+ * badge.tsx paints the three tag variants as `bg-tag-x/15` with
435
+ * `text-tag-x-foreground` on top (and lifts the fill to 25% when the badge
436
+ * is an anchor being hovered). The fill is TRANSLUCENT, so the thing the
437
+ * text is actually measured against is not a token at all — it is the tint
438
+ * composited over whatever surface the badge landed on. Retuning either
439
+ * half without re-measuring the whole matrix is how this drifts.
440
+ *
441
+ * So the matrix is measured, and it is measured by CI rather than by
442
+ * comment: scripts/ci/tests/theme-contrast.test.mjs recomputes every
443
+ * variant x surface x theme x tint cell from this file and fails under
444
+ * 4.5:1. Worst cell in the palette today (SC 1.4.3, AA):
445
+ *
446
+ * --background --card/--popover worst surface
447
+ * variable light 7.09/6.11 7.68/6.59 6.35 (--secondary)
448
+ * success light 6.62/5.77 7.17/6.22 5.22 (--secondary)
449
+ * formula light 6.74/5.81 7.31/6.27 5.25 (--secondary)
450
+ * variable dark 9.95/7.92 8.83/7.02 5.98 (--secondary)
451
+ * success dark 10.39/8.11 9.20/7.18 6.11 (--secondary)
452
+ * formula dark 10.11/7.96 8.96/7.04 5.99 (--secondary)
453
+ * ^15% / ^25% (rest / anchor-hover fill)
454
+ *
455
+ * The pairs hold, and the ~1.5:1 in #231 IS NOT REPRODUCIBLE FROM THIS
456
+ * FILE. The issue's cell — dark `success` on `--card` — recomputes to
457
+ * 9.20:1 at the 15% fill and 7.18:1 at the 25% one, and the pre-4.0.0
458
+ * palette this replaced does not produce a sub-4.5:1 cell anywhere either,
459
+ * so it is not a number these tokens used to have. It is quoted here
460
+ * because #231 stays OPEN on it: the tokens are proven, the report is not
461
+ * explained, and inventing a cause for it would be the same mistake as
462
+ * inventing a ratio.
463
+ *
464
+ * In particular it is NOT the downstream override. fiestaboard.github.io
465
+ * pins the "New" badge to hexes with `!important`, which is a hex fork of
466
+ * a token pair and a real maintenance defect — a fork stops tracking a
467
+ * retune here — but it is theme-AWARE (`.newBadge` plus a
468
+ * `[data-theme="dark"] .newBadge`, and their build widens every compiled
469
+ * `.dark` selector to that attribute), so the light pigment never lands on
470
+ * a dark fill. Both halves clear AA on their own fills: 6.49:1 light,
471
+ * 7.52:1 dark. It is redundant, not broken. Dropping it downstream is a
472
+ * cleanup, not a fix, and it does not close #231.
473
+ *
474
+ * Opaque fills (mixing the tint into --background instead of compositing
475
+ * over the live surface) were prototyped and REJECTED: they make the pair
476
+ * surface-independent, but a fill baked from --background measures 1.01:1
477
+ * against --popover in dark, so the chip's field disappears on exactly the
478
+ * surface the variable picker uses. Alpha is what keeps the chip visible on
479
+ * every surface; the CI matrix is what keeps it legible.
480
+ * ============================================================ */
409
481
  --tag-variable: oklch(0.52 0.16 315);
410
482
  --tag-variable-foreground: oklch(0.4 0.1 315);
411
483
  --tag-success: oklch(0.52 0.147 133);
@@ -800,6 +872,10 @@
800
872
  13.05:1 on --background; board-ink label 11.81:1. */
801
873
  --warning: oklch(0.86 0.17 104);
802
874
  --warning-foreground: oklch(0.205 0.008 73);
875
+ /* The dark half of the #231 matrix — see the table in :root. These measure
876
+ 7.90-10.39:1 at the 15% fill on every surface a Badge can land on, which
877
+ includes the dark `--card` cell #231 reports as ~1.5:1 (9.20:1 here). The
878
+ reported figure is unexplained, not reproduced; #231 stays open on it. */
803
879
  --tag-variable: oklch(0.78 0.164 315);
804
880
  --tag-variable-foreground: oklch(0.86 0.1 315);
805
881
  --tag-success: oklch(0.78 0.17 133);
@@ -1435,16 +1511,21 @@ html[data-board-switch="backward"]::view-transition-new(board-page) {
1435
1511
  * merges into the page (1.11:1) and the orange band — 9.77:1 there — carries
1436
1512
  * the indicator directly, which is why the recipe is safe in both themes for
1437
1513
  * different reasons.
1514
+ *
1515
+ * The three stops themselves live in :root as --focus-ring-shadow (#228
1516
+ * item 5). This class is now one CALLER of that value rather than the place
1517
+ * it is defined, which is what lets a CSS-only consumer — MDX prose anchors
1518
+ * have no call site to add a class to — say `box-shadow:
1519
+ * var(--focus-ring-shadow)` and stay in sync instead of hand-mirroring the
1520
+ * geometry. The rendered output is byte-identical to the inline recipe it
1521
+ * replaces; if it were not, every VRT baseline in the repo would move.
1438
1522
  * ============================================================ */
1439
1523
  .focus-ring {
1440
1524
  outline: none;
1441
1525
  }
1442
1526
  .focus-ring:focus-visible {
1443
1527
  outline: none;
1444
- box-shadow:
1445
- 0 0 0 1px var(--ring-edge),
1446
- 0 0 0 3px var(--ring),
1447
- 0 0 0 4px var(--ring-edge);
1528
+ box-shadow: var(--focus-ring-shadow);
1448
1529
  }
1449
1530
 
1450
1531
  /* ============================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiestaboard/ui",
3
- "version": "5.2.0",
3
+ "version": "5.4.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": {
@@ -38,6 +38,8 @@
38
38
  "scripts": {
39
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 src/styles/editor.css dist/editor.css",
40
40
  "typecheck": "tsc --noEmit",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
41
43
  "lint": "eslint",
42
44
  "lint:fix": "eslint --fix",
43
45
  "format": "prettier --write .",
@@ -89,6 +91,10 @@
89
91
  "@storybook/react-vite": "^10.5.5",
90
92
  "@storybook/test-runner": "^0.24.4",
91
93
  "@tailwindcss/vite": "^4",
94
+ "@testing-library/dom": "^10.4.1",
95
+ "@testing-library/jest-dom": "^7.0.1",
96
+ "@testing-library/react": "^16.3.2",
97
+ "@testing-library/user-event": "^14.6.5",
92
98
  "@tiptap/core": "^3.29.2",
93
99
  "@tiptap/pm": "^3.29.2",
94
100
  "@tiptap/react": "^3.29.2",
@@ -118,7 +124,8 @@
118
124
  "tailwindcss": "^4",
119
125
  "typescript": "6.0.3",
120
126
  "typescript-eslint": "^8.65.0",
121
- "vite": "^8.1.5"
127
+ "vite": "^8.1.5",
128
+ "vitest": "^4.1.11"
122
129
  },
123
130
  "publishConfig": {
124
131
  "registry": "https://registry.npmjs.org",