@fiestaboard/ui 1.6.3

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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/components/board/board-display.d.ts +35 -0
  4. package/dist/components/board/board-display.js +514 -0
  5. package/dist/components/board/board-display.js.map +1 -0
  6. package/dist/components/board/board-teaser.d.ts +10 -0
  7. package/dist/components/board/board-teaser.js +110 -0
  8. package/dist/components/board/board-teaser.js.map +1 -0
  9. package/dist/components/board/scaled-board-display.d.ts +37 -0
  10. package/dist/components/board/scaled-board-display.js +118 -0
  11. package/dist/components/board/scaled-board-display.js.map +1 -0
  12. package/dist/components/board/static-board-display.d.ts +17 -0
  13. package/dist/components/board/static-board-display.js +140 -0
  14. package/dist/components/board/static-board-display.js.map +1 -0
  15. package/dist/components/chrome/board-icon.d.ts +11 -0
  16. package/dist/components/chrome/board-icon.js +31 -0
  17. package/dist/components/chrome/board-icon.js.map +1 -0
  18. package/dist/components/chrome/board-selector.d.ts +30 -0
  19. package/dist/components/chrome/board-selector.js +37 -0
  20. package/dist/components/chrome/board-selector.js.map +1 -0
  21. package/dist/components/chrome/fiesta-icon.d.ts +28 -0
  22. package/dist/components/chrome/fiesta-icon.js +129 -0
  23. package/dist/components/chrome/fiesta-icon.js.map +1 -0
  24. package/dist/components/chrome/fiesta-logo.d.ts +6 -0
  25. package/dist/components/chrome/fiesta-logo.js +20 -0
  26. package/dist/components/chrome/fiesta-logo.js.map +1 -0
  27. package/dist/components/chrome/language-selector.d.ts +21 -0
  28. package/dist/components/chrome/language-selector.js +29 -0
  29. package/dist/components/chrome/language-selector.js.map +1 -0
  30. package/dist/components/chrome/main-content.d.ts +28 -0
  31. package/dist/components/chrome/main-content.js +33 -0
  32. package/dist/components/chrome/main-content.js.map +1 -0
  33. package/dist/components/chrome/page-header.d.ts +23 -0
  34. package/dist/components/chrome/page-header.js +69 -0
  35. package/dist/components/chrome/page-header.js.map +1 -0
  36. package/dist/components/chrome/page-layout.d.ts +10 -0
  37. package/dist/components/chrome/page-layout.js +17 -0
  38. package/dist/components/chrome/page-layout.js.map +1 -0
  39. package/dist/components/chrome/page-toolbar.d.ts +7 -0
  40. package/dist/components/chrome/page-toolbar.js +21 -0
  41. package/dist/components/chrome/page-toolbar.js.map +1 -0
  42. package/dist/components/chrome/sidebar.d.ts +83 -0
  43. package/dist/components/chrome/sidebar.js +318 -0
  44. package/dist/components/chrome/sidebar.js.map +1 -0
  45. package/dist/components/chrome/skip-to-content.d.ts +8 -0
  46. package/dist/components/chrome/skip-to-content.js +15 -0
  47. package/dist/components/chrome/skip-to-content.js.map +1 -0
  48. package/dist/components/chrome/theme-toggle.d.ts +22 -0
  49. package/dist/components/chrome/theme-toggle.js +28 -0
  50. package/dist/components/chrome/theme-toggle.js.map +1 -0
  51. package/dist/components/seasons/aurora-canvas.d.ts +22 -0
  52. package/dist/components/seasons/aurora-canvas.js +88 -0
  53. package/dist/components/seasons/aurora-canvas.js.map +1 -0
  54. package/dist/components/seasons/sidebar-aurora-horizontal.d.ts +3 -0
  55. package/dist/components/seasons/sidebar-aurora-horizontal.js +47 -0
  56. package/dist/components/seasons/sidebar-aurora-horizontal.js.map +1 -0
  57. package/dist/components/seasons/sidebar-aurora.d.ts +3 -0
  58. package/dist/components/seasons/sidebar-aurora.js +57 -0
  59. package/dist/components/seasons/sidebar-aurora.js.map +1 -0
  60. package/dist/components/ui/accordion.d.ts +16 -0
  61. package/dist/components/ui/accordion.js +55 -0
  62. package/dist/components/ui/accordion.js.map +1 -0
  63. package/dist/components/ui/alert-dialog.d.ts +16 -0
  64. package/dist/components/ui/alert-dialog.js +78 -0
  65. package/dist/components/ui/alert-dialog.js.map +1 -0
  66. package/dist/components/ui/alert.d.ts +9 -0
  67. package/dist/components/ui/alert.js +41 -0
  68. package/dist/components/ui/alert.js.map +1 -0
  69. package/dist/components/ui/aurora.d.ts +9 -0
  70. package/dist/components/ui/aurora.js +105 -0
  71. package/dist/components/ui/aurora.js.map +1 -0
  72. package/dist/components/ui/badge.d.ts +9 -0
  73. package/dist/components/ui/badge.js +35 -0
  74. package/dist/components/ui/badge.js.map +1 -0
  75. package/dist/components/ui/box.d.ts +20 -0
  76. package/dist/components/ui/box.js +14 -0
  77. package/dist/components/ui/box.js.map +1 -0
  78. package/dist/components/ui/button.d.ts +10 -0
  79. package/dist/components/ui/button.js +52 -0
  80. package/dist/components/ui/button.js.map +1 -0
  81. package/dist/components/ui/card.d.ts +11 -0
  82. package/dist/components/ui/card.js +57 -0
  83. package/dist/components/ui/card.js.map +1 -0
  84. package/dist/components/ui/checkbox.d.ts +4 -0
  85. package/dist/components/ui/checkbox.js +16 -0
  86. package/dist/components/ui/checkbox.js.map +1 -0
  87. package/dist/components/ui/code.d.ts +8 -0
  88. package/dist/components/ui/code.js +15 -0
  89. package/dist/components/ui/code.js.map +1 -0
  90. package/dist/components/ui/collapsible.d.ts +8 -0
  91. package/dist/components/ui/collapsible.js +28 -0
  92. package/dist/components/ui/collapsible.js.map +1 -0
  93. package/dist/components/ui/dialog.d.ts +17 -0
  94. package/dist/components/ui/dialog.js +77 -0
  95. package/dist/components/ui/dialog.js.map +1 -0
  96. package/dist/components/ui/dropdown-menu.d.ts +32 -0
  97. package/dist/components/ui/dropdown-menu.js +129 -0
  98. package/dist/components/ui/dropdown-menu.js.map +1 -0
  99. package/dist/components/ui/empty-state.d.ts +23 -0
  100. package/dist/components/ui/empty-state.js +49 -0
  101. package/dist/components/ui/empty-state.js.map +1 -0
  102. package/dist/components/ui/flex.d.ts +24 -0
  103. package/dist/components/ui/flex.js +61 -0
  104. package/dist/components/ui/flex.js.map +1 -0
  105. package/dist/components/ui/grid.d.ts +20 -0
  106. package/dist/components/ui/grid.js +77 -0
  107. package/dist/components/ui/grid.js.map +1 -0
  108. package/dist/components/ui/heading.d.ts +18 -0
  109. package/dist/components/ui/heading.js +26 -0
  110. package/dist/components/ui/heading.js.map +1 -0
  111. package/dist/components/ui/input.d.ts +4 -0
  112. package/dist/components/ui/input.js +16 -0
  113. package/dist/components/ui/input.js.map +1 -0
  114. package/dist/components/ui/label.d.ts +4 -0
  115. package/dist/components/ui/label.js +15 -0
  116. package/dist/components/ui/label.js.map +1 -0
  117. package/dist/components/ui/list.d.ts +25 -0
  118. package/dist/components/ui/list.js +46 -0
  119. package/dist/components/ui/list.js.map +1 -0
  120. package/dist/components/ui/react-bits/decrypted-text.d.ts +14 -0
  121. package/dist/components/ui/react-bits/decrypted-text.js +88 -0
  122. package/dist/components/ui/react-bits/decrypted-text.js.map +1 -0
  123. package/dist/components/ui/react-bits/fade-content.d.ts +11 -0
  124. package/dist/components/ui/react-bits/fade-content.js +48 -0
  125. package/dist/components/ui/react-bits/fade-content.js.map +1 -0
  126. package/dist/components/ui/scroll-area.d.ts +5 -0
  127. package/dist/components/ui/scroll-area.js +39 -0
  128. package/dist/components/ui/scroll-area.js.map +1 -0
  129. package/dist/components/ui/select.d.ts +26 -0
  130. package/dist/components/ui/select.js +132 -0
  131. package/dist/components/ui/select.js.map +1 -0
  132. package/dist/components/ui/sheet.d.ts +29 -0
  133. package/dist/components/ui/sheet.js +114 -0
  134. package/dist/components/ui/sheet.js.map +1 -0
  135. package/dist/components/ui/skeleton.d.ts +2 -0
  136. package/dist/components/ui/skeleton.js +14 -0
  137. package/dist/components/ui/skeleton.js.map +1 -0
  138. package/dist/components/ui/slider.d.ts +9 -0
  139. package/dist/components/ui/slider.js +39 -0
  140. package/dist/components/ui/slider.js.map +1 -0
  141. package/dist/components/ui/stack.d.ts +16 -0
  142. package/dist/components/ui/stack.js +44 -0
  143. package/dist/components/ui/stack.js.map +1 -0
  144. package/dist/components/ui/switch.d.ts +4 -0
  145. package/dist/components/ui/switch.js +24 -0
  146. package/dist/components/ui/switch.js.map +1 -0
  147. package/dist/components/ui/table.d.ts +13 -0
  148. package/dist/components/ui/table.js +54 -0
  149. package/dist/components/ui/table.js.map +1 -0
  150. package/dist/components/ui/tabs.d.ts +7 -0
  151. package/dist/components/ui/tabs.js +37 -0
  152. package/dist/components/ui/tabs.js.map +1 -0
  153. package/dist/components/ui/text-link.d.ts +9 -0
  154. package/dist/components/ui/text-link.js +15 -0
  155. package/dist/components/ui/text-link.js.map +1 -0
  156. package/dist/components/ui/text.d.ts +22 -0
  157. package/dist/components/ui/text.js +48 -0
  158. package/dist/components/ui/text.js.map +1 -0
  159. package/dist/components/ui/textarea.d.ts +3 -0
  160. package/dist/components/ui/textarea.js +15 -0
  161. package/dist/components/ui/textarea.js.map +1 -0
  162. package/dist/components/ui/tooltip.d.ts +16 -0
  163. package/dist/components/ui/tooltip.js +38 -0
  164. package/dist/components/ui/tooltip.js.map +1 -0
  165. package/dist/fonts.css +16 -0
  166. package/dist/index.d.ts +66 -0
  167. package/dist/index.js +59 -0
  168. package/dist/lib/board-characters.d.ts +55 -0
  169. package/dist/lib/board-characters.js +151 -0
  170. package/dist/lib/board-characters.js.map +1 -0
  171. package/dist/lib/board-colors.d.ts +48 -0
  172. package/dist/lib/board-colors.js +93 -0
  173. package/dist/lib/board-colors.js.map +1 -0
  174. package/dist/lib/board-dimensions.d.ts +41 -0
  175. package/dist/lib/board-dimensions.js +38 -0
  176. package/dist/lib/board-dimensions.js.map +1 -0
  177. package/dist/lib/board-metrics.d.ts +19 -0
  178. package/dist/lib/board-metrics.js +22 -0
  179. package/dist/lib/board-metrics.js.map +1 -0
  180. package/dist/lib/seasons-drafts.d.ts +26 -0
  181. package/dist/lib/seasons-drafts.js +106 -0
  182. package/dist/lib/seasons-drafts.js.map +1 -0
  183. package/dist/lib/seasons.d.ts +52 -0
  184. package/dist/lib/seasons.js +59 -0
  185. package/dist/lib/seasons.js.map +1 -0
  186. package/dist/lib/select-items.d.ts +29 -0
  187. package/dist/lib/select-items.js +35 -0
  188. package/dist/lib/select-items.js.map +1 -0
  189. package/dist/lib/utils.d.ts +2 -0
  190. package/dist/lib/utils.js +11 -0
  191. package/dist/lib/utils.js.map +1 -0
  192. package/dist/seasons/christmas.css +64 -0
  193. package/dist/seasons/easter.css +62 -0
  194. package/dist/seasons/fathers-day.css +62 -0
  195. package/dist/seasons/halloween.css +69 -0
  196. package/dist/seasons/mothers-day.css +63 -0
  197. package/dist/seasons/new-year.css +66 -0
  198. package/dist/seasons/pride.css +68 -0
  199. package/dist/seasons/thanksgiving.css +64 -0
  200. package/dist/theme.css +1174 -0
  201. package/package.json +108 -0
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { cn as e } from "../../lib/utils.js";
3
+ import * as t from "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ import { Tooltip as r } from "@base-ui/react/tooltip";
6
+ //#region src/components/ui/tooltip.tsx
7
+ function i({ delayDuration: e, skipDelayDuration: t, ...i }) {
8
+ return /* @__PURE__ */ n(r.Provider, {
9
+ delay: e,
10
+ timeout: t,
11
+ ...i
12
+ });
13
+ }
14
+ var a = r.Root;
15
+ function o({ asChild: e = !1, children: i, ...a }) {
16
+ return /* @__PURE__ */ n(r.Trigger, {
17
+ "data-slot": "tooltip-trigger",
18
+ ...e ? { render: t.Children.only(i) } : { children: i },
19
+ ...a
20
+ });
21
+ }
22
+ function s({ className: t, side: i = "top", align: a = "center", sideOffset: o = 4, ...s }) {
23
+ return /* @__PURE__ */ n(r.Portal, { children: /* @__PURE__ */ n(r.Positioner, {
24
+ side: i,
25
+ align: a,
26
+ sideOffset: o,
27
+ className: "z-[var(--z-tooltip)]",
28
+ children: /* @__PURE__ */ n(r.Popup, {
29
+ "data-slot": "tooltip-content",
30
+ className: e("overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md", t),
31
+ ...s
32
+ })
33
+ }) });
34
+ }
35
+ //#endregion
36
+ export { a as Tooltip, s as TooltipContent, i as TooltipProvider, o as TooltipTrigger };
37
+
38
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../../../src/components/ui/tooltip.tsx"],"mappings":";;;;;;AAOA,SAAS,EAAgB,EACvB,kBACA,sBACA,GAAG,KAIF;CACD,OAAO,kBAAC,EAAiB,UAAlB;EAA2B,OAAO;EAAe,SAAS;EAAmB,GAAI;CAAQ,CAAA;AAClG;AAEA,IAAM,IAAU,EAAiB;AAEjC,SAAS,EAAe,EACtB,aAAU,IACV,aACA,GAAG,KAC6E;CAChF,OACE,kBAAC,EAAiB,SAAlB;EACE,aAAU;EACV,GAAK,IAAU,EAAE,QAAQ,EAAM,SAAS,KAAK,CAAQ,EAAwB,IAAI,EAAE,YAAS;EAC5F,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAe,EACtB,cACA,UAAO,OACP,WAAQ,UACR,gBAAa,GACb,GAAG,KAKF;CACD,OACE,kBAAC,EAAiB,QAAlB,EAAA,UACE,kBAAC,EAAiB,YAAlB;EAAmC;EAAa;EAAmB;EAAY,WAAU;EACvF,UAAA,kBAAC,EAAiB,OAAlB;GACE,aAAU;GACV,WAAW,EACT,sGACA,CACF;GACA,GAAI;EACL,CAAA;CAC0B,CAAA,EACN,CAAA;AAE7B"}
package/dist/fonts.css ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * FiestaUI self-hosted Geist fonts — opt-in subpath export.
3
+ *
4
+ * Registers the "Geist Variable" and "Geist Mono Variable" @font-face
5
+ * declarations that theme.css's --font-geist-sans / --font-geist-mono
6
+ * tokens reference. Import it alongside theme.css:
7
+ *
8
+ * @import "@fiestaboard/ui/fonts.css";
9
+ * @import "@fiestaboard/ui/theme.css";
10
+ *
11
+ * Skip this import if your app supplies Geist itself (next/font, CDN,
12
+ * self-hosted subset) — the theme tokens degrade gracefully to the
13
+ * system font stack when these faces are not registered.
14
+ */
15
+ @import "@fontsource-variable/geist";
16
+ @import "@fontsource-variable/geist-mono";
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @fiestaboard/ui — the FiestaBoard design system.
3
+ *
4
+ * Styling contract (Tailwind v4 consumers):
5
+ * @import "tailwindcss";
6
+ * @import "@fiestaboard/ui/theme.css";
7
+ * @source "../node_modules/@fiestaboard/ui/dist";
8
+ */
9
+ export * from "./components/ui/accordion";
10
+ export * from "./components/ui/alert";
11
+ export * from "./components/ui/alert-dialog";
12
+ export * from "./components/ui/aurora";
13
+ export * from "./components/ui/badge";
14
+ export * from "./components/ui/box";
15
+ export * from "./components/ui/button";
16
+ export * from "./components/ui/card";
17
+ export * from "./components/ui/checkbox";
18
+ export * from "./components/ui/code";
19
+ export * from "./components/ui/collapsible";
20
+ export * from "./components/ui/dialog";
21
+ export * from "./components/ui/dropdown-menu";
22
+ export * from "./components/ui/empty-state";
23
+ export * from "./components/ui/flex";
24
+ export * from "./components/ui/grid";
25
+ export * from "./components/ui/heading";
26
+ export * from "./components/ui/input";
27
+ export * from "./components/ui/label";
28
+ export * from "./components/ui/list";
29
+ export { default as DecryptedText } from "./components/ui/react-bits/decrypted-text";
30
+ export { default as FadeContent } from "./components/ui/react-bits/fade-content";
31
+ export * from "./components/ui/scroll-area";
32
+ export * from "./components/ui/select";
33
+ export * from "./components/ui/sheet";
34
+ export * from "./components/ui/skeleton";
35
+ export * from "./components/ui/slider";
36
+ export * from "./components/ui/stack";
37
+ export * from "./components/ui/switch";
38
+ export * from "./components/ui/table";
39
+ export * from "./components/ui/tabs";
40
+ export * from "./components/ui/text";
41
+ export * from "./components/ui/text-link";
42
+ export * from "./components/ui/textarea";
43
+ export * from "./components/ui/tooltip";
44
+ export * from "./components/chrome/board-icon";
45
+ export * from "./components/chrome/board-selector";
46
+ export * from "./components/chrome/fiesta-icon";
47
+ export * from "./components/chrome/fiesta-logo";
48
+ export * from "./components/chrome/language-selector";
49
+ export * from "./components/chrome/main-content";
50
+ export * from "./components/chrome/page-header";
51
+ export * from "./components/chrome/page-layout";
52
+ export * from "./components/chrome/page-toolbar";
53
+ export * from "./components/chrome/sidebar";
54
+ export * from "./components/chrome/skip-to-content";
55
+ export * from "./components/chrome/theme-toggle";
56
+ export * from "./components/seasons/sidebar-aurora";
57
+ export * from "./components/seasons/sidebar-aurora-horizontal";
58
+ export * from "./lib/seasons";
59
+ export { cn } from "./lib/utils";
60
+ export * from "./components/board/board-display";
61
+ export * from "./components/board/board-teaser";
62
+ export * from "./components/board/scaled-board-display";
63
+ export * from "./components/board/static-board-display";
64
+ export * from "./lib/board-characters";
65
+ export * from "./lib/board-colors";
66
+ export * from "./lib/board-dimensions";
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ import { cn as e } from "./lib/utils.js";
2
+ import { Accordion as t, AccordionContent as n, AccordionItem as r, AccordionTrigger as i } from "./components/ui/accordion.js";
3
+ import { Alert as a, AlertDescription as o, AlertTitle as s } from "./components/ui/alert.js";
4
+ import { Button as c, buttonVariants as l } from "./components/ui/button.js";
5
+ import { AlertDialog as u, AlertDialogAction as d, AlertDialogCancel as f, AlertDialogContent as p, AlertDialogDescription as m, AlertDialogFooter as h, AlertDialogHeader as g, AlertDialogOverlay as _, AlertDialogPortal as v, AlertDialogTitle as y, AlertDialogTrigger as b } from "./components/ui/alert-dialog.js";
6
+ import { Aurora as x } from "./components/ui/aurora.js";
7
+ import { Badge as S, badgeVariants as C } from "./components/ui/badge.js";
8
+ import { Box as w } from "./components/ui/box.js";
9
+ import { Card as T, CardAction as E, CardContent as D, CardDescription as O, CardFooter as k, CardHeader as A, CardTitle as j } from "./components/ui/card.js";
10
+ import { Checkbox as M } from "./components/ui/checkbox.js";
11
+ import { Code as N } from "./components/ui/code.js";
12
+ import { Collapsible as P, CollapsibleContent as F, CollapsibleTrigger as I } from "./components/ui/collapsible.js";
13
+ import { Dialog as L, DialogClose as R, DialogContent as z, DialogDescription as B, DialogFooter as V, DialogHeader as H, DialogOverlay as U, DialogPortal as W, DialogTitle as G, DialogTrigger as K } from "./components/ui/dialog.js";
14
+ import { DropdownMenu as q, DropdownMenuCheckboxItem as J, DropdownMenuContent as Y, DropdownMenuGroup as X, DropdownMenuItem as Z, DropdownMenuLabel as Q, DropdownMenuPortal as $, DropdownMenuRadioGroup as ee, DropdownMenuRadioItem as te, DropdownMenuSeparator as ne, DropdownMenuShortcut as re, DropdownMenuSub as ie, DropdownMenuSubContent as ae, DropdownMenuSubTrigger as oe, DropdownMenuTrigger as se } from "./components/ui/dropdown-menu.js";
15
+ import { EmptyState as ce } from "./components/ui/empty-state.js";
16
+ import { Flex as le, flexVariants as ue } from "./components/ui/flex.js";
17
+ import { Grid as de, gridVariants as fe } from "./components/ui/grid.js";
18
+ import { Heading as pe, headingVariants as me } from "./components/ui/heading.js";
19
+ import { Input as he } from "./components/ui/input.js";
20
+ import { Label as ge } from "./components/ui/label.js";
21
+ import { List as _e, ListItem as ve, listVariants as ye } from "./components/ui/list.js";
22
+ import be from "./components/ui/react-bits/decrypted-text.js";
23
+ import xe from "./components/ui/react-bits/fade-content.js";
24
+ import { ScrollArea as Se, ScrollBar as Ce } from "./components/ui/scroll-area.js";
25
+ import { Select as we, SelectContent as Te, SelectGroup as Ee, SelectItem as De, SelectLabel as Oe, SelectScrollDownButton as ke, SelectScrollUpButton as Ae, SelectSeparator as je, SelectTrigger as Me, SelectValue as Ne } from "./components/ui/select.js";
26
+ import { Sheet as Pe, SheetClose as Fe, SheetContent as Ie, SheetDescription as Le, SheetFooter as Re, SheetHeader as ze, SheetOverlay as Be, SheetPortal as Ve, SheetTitle as He, SheetTrigger as Ue } from "./components/ui/sheet.js";
27
+ import { Skeleton as We } from "./components/ui/skeleton.js";
28
+ import { Slider as Ge } from "./components/ui/slider.js";
29
+ import { Stack as Ke, stackVariants as qe } from "./components/ui/stack.js";
30
+ import { Switch as Je } from "./components/ui/switch.js";
31
+ import { Table as Ye, TableBody as Xe, TableCell as Ze, TableHead as Qe, TableHeader as $e, TableRow as et } from "./components/ui/table.js";
32
+ import { Tabs as tt, TabsContent as nt, TabsList as rt, TabsTrigger as it } from "./components/ui/tabs.js";
33
+ import { Text as at, textVariants as ot } from "./components/ui/text.js";
34
+ import { TextLink as st } from "./components/ui/text-link.js";
35
+ import { Textarea as ct } from "./components/ui/textarea.js";
36
+ import { Tooltip as lt, TooltipContent as ut, TooltipProvider as dt, TooltipTrigger as ft } from "./components/ui/tooltip.js";
37
+ import { BoardIcon as pt } from "./components/chrome/board-icon.js";
38
+ import { BoardSelector as mt } from "./components/chrome/board-selector.js";
39
+ import { FIESTA_ICON_DATA_URI as ht, FIESTA_ICON_PALETTE as gt, FIESTA_ICON_SVG as _t, FiestaIcon as vt } from "./components/chrome/fiesta-icon.js";
40
+ import { FiestaLogo as yt } from "./components/chrome/fiesta-logo.js";
41
+ import { LanguageSelector as bt } from "./components/chrome/language-selector.js";
42
+ import { MainContent as xt } from "./components/chrome/main-content.js";
43
+ import { PageHeader as St, PageIconGradientDefs as Ct } from "./components/chrome/page-header.js";
44
+ import { PageLayout as wt } from "./components/chrome/page-layout.js";
45
+ import { PageToolbar as Tt } from "./components/chrome/page-toolbar.js";
46
+ import { SidebarAurora as Et } from "./components/seasons/sidebar-aurora.js";
47
+ import { SidebarAuroraHorizontal as Dt } from "./components/seasons/sidebar-aurora-horizontal.js";
48
+ import { Sidebar as Ot } from "./components/chrome/sidebar.js";
49
+ import { SkipToContent as kt } from "./components/chrome/skip-to-content.js";
50
+ import { ThemeToggle as At } from "./components/chrome/theme-toggle.js";
51
+ import { HIDE_FESTIVE_COOKIE as jt, PRIDE_SEASON as Mt, SEASONS as Nt, fireSeasonBurst as Pt, getActiveSeason as Ft, readCookieString as It, shouldShowPride as Lt, useActiveSeason as Rt, usePrideActive as zt } from "./lib/seasons.js";
52
+ import { ALL_COLOR_CODES as Bt, AVAILABLE_COLORS as Vt, BOARD_COLORS as Ht, COLOR_CODE_MAP as Ut, COLOR_DISPLAY as Wt, getBoardColor as Gt, isValidBoardColor as Kt, resolveColorCode as qt } from "./lib/board-colors.js";
53
+ import { BOARD_CHARS as Jt, EXTRA_CHARS as Yt, getCharFromToken as Xt, getCharIndex as Zt, isColorTile as Qt, messageToGrid as $t, parseLine as en, tokensEqual as tn } from "./lib/board-characters.js";
54
+ import { DEVICE_DIMENSIONS as nn, MAX_NOTES_PER_AXIS as rn, NOTE_COLS as an, NOTE_ROWS as on, isNoteArray as sn, noteArrayDimensions as cn, resolveDimensions as ln } from "./lib/board-dimensions.js";
55
+ import { BoardDisplay as un } from "./components/board/board-display.js";
56
+ import { BoardTeaser as dn } from "./components/board/board-teaser.js";
57
+ import { ScaledBoardDisplay as fn } from "./components/board/scaled-board-display.js";
58
+ import { StaticBoardDisplay as pn } from "./components/board/static-board-display.js";
59
+ export { Bt as ALL_COLOR_CODES, Vt as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, a as Alert, o as AlertDescription, u as AlertDialog, d as AlertDialogAction, f as AlertDialogCancel, p as AlertDialogContent, m as AlertDialogDescription, h as AlertDialogFooter, g as AlertDialogHeader, _ as AlertDialogOverlay, v as AlertDialogPortal, y as AlertDialogTitle, b as AlertDialogTrigger, s as AlertTitle, x as Aurora, Jt as BOARD_CHARS, Ht as BOARD_COLORS, S as Badge, un as BoardDisplay, pt as BoardIcon, mt as BoardSelector, dn as BoardTeaser, w as Box, c as Button, Ut as COLOR_CODE_MAP, Wt as COLOR_DISPLAY, T as Card, E as CardAction, D as CardContent, O as CardDescription, k as CardFooter, A as CardHeader, j as CardTitle, M as Checkbox, N as Code, P as Collapsible, F as CollapsibleContent, I as CollapsibleTrigger, nn as DEVICE_DIMENSIONS, be as DecryptedText, L as Dialog, R as DialogClose, z as DialogContent, B as DialogDescription, V as DialogFooter, H as DialogHeader, U as DialogOverlay, W as DialogPortal, G as DialogTitle, K as DialogTrigger, q as DropdownMenu, J as DropdownMenuCheckboxItem, Y as DropdownMenuContent, X as DropdownMenuGroup, Z as DropdownMenuItem, Q as DropdownMenuLabel, $ as DropdownMenuPortal, ee as DropdownMenuRadioGroup, te as DropdownMenuRadioItem, ne as DropdownMenuSeparator, re as DropdownMenuShortcut, ie as DropdownMenuSub, ae as DropdownMenuSubContent, oe as DropdownMenuSubTrigger, se as DropdownMenuTrigger, Yt as EXTRA_CHARS, ce as EmptyState, ht as FIESTA_ICON_DATA_URI, gt as FIESTA_ICON_PALETTE, _t as FIESTA_ICON_SVG, xe as FadeContent, vt as FiestaIcon, yt as FiestaLogo, le as Flex, de as Grid, jt as HIDE_FESTIVE_COOKIE, pe as Heading, he as Input, ge as Label, bt as LanguageSelector, _e as List, ve as ListItem, rn as MAX_NOTES_PER_AXIS, xt as MainContent, an as NOTE_COLS, on as NOTE_ROWS, Mt as PRIDE_SEASON, St as PageHeader, Ct as PageIconGradientDefs, wt as PageLayout, Tt as PageToolbar, Nt as SEASONS, fn as ScaledBoardDisplay, Se as ScrollArea, Ce as ScrollBar, we as Select, Te as SelectContent, Ee as SelectGroup, De as SelectItem, Oe as SelectLabel, ke as SelectScrollDownButton, Ae as SelectScrollUpButton, je as SelectSeparator, Me as SelectTrigger, Ne as SelectValue, Pe as Sheet, Fe as SheetClose, Ie as SheetContent, Le as SheetDescription, Re as SheetFooter, ze as SheetHeader, Be as SheetOverlay, Ve as SheetPortal, He as SheetTitle, Ue as SheetTrigger, Ot as Sidebar, Et as SidebarAurora, Dt as SidebarAuroraHorizontal, We as Skeleton, kt as SkipToContent, Ge as Slider, Ke as Stack, pn as StaticBoardDisplay, Je as Switch, Ye as Table, Xe as TableBody, Ze as TableCell, Qe as TableHead, $e as TableHeader, et as TableRow, tt as Tabs, nt as TabsContent, rt as TabsList, it as TabsTrigger, at as Text, st as TextLink, ct as Textarea, At as ThemeToggle, lt as Tooltip, ut as TooltipContent, dt as TooltipProvider, ft as TooltipTrigger, C as badgeVariants, l as buttonVariants, e as cn, Pt as fireSeasonBurst, ue as flexVariants, Ft as getActiveSeason, Gt as getBoardColor, Xt as getCharFromToken, Zt as getCharIndex, fe as gridVariants, me as headingVariants, Qt as isColorTile, sn as isNoteArray, Kt as isValidBoardColor, ye as listVariants, $t as messageToGrid, cn as noteArrayDimensions, en as parseLine, It as readCookieString, qt as resolveColorCode, ln as resolveDimensions, Lt as shouldShowPride, qe as stackVariants, ot as textVariants, tn as tokensEqual, Rt as useActiveSeason, zt as usePrideActive };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The Vestaboard split-flap character set and message parsing.
3
+ *
4
+ * Extracted verbatim from FiestaBoard's board-display.tsx — the values and
5
+ * parsing behavior are a parity contract with the app (and, transitively,
6
+ * with the physical board hardware). Do not "improve" them here.
7
+ *
8
+ * The board addresses characters by numeric code 0–71:
9
+ * 0 blank
10
+ * 1–26 A–Z
11
+ * 27–36 1–9, 0
12
+ * 37–62 punctuation (some codes undefined on hardware)
13
+ * 63–71 color tiles (red, orange, yellow, green, blue, violet, white,
14
+ * black, filled)
15
+ */
16
+ /**
17
+ * All displayable board characters indexed by character code (0-71).
18
+ * Undefined codes (43, 45, 51, 57, 58, 61) use ' ' as placeholder so
19
+ * array indices stay aligned with Vestaboard character codes.
20
+ */
21
+ export declare const BOARD_CHARS: string[];
22
+ /** Extended characters that are not in BOARD_CHARS but can appear from device substitutions.
23
+ * Null-prototype object so inherited keys (`toString`, `constructor`, …) cannot pass the
24
+ * `EXTRA_CHARS[token.value]` truthiness guard in board-display and be treated as printable. */
25
+ export declare const EXTRA_CHARS: Record<string, boolean>;
26
+ /** A parsed board cell: either a printable character or a color-tile code. */
27
+ export type BoardToken = {
28
+ type: "char";
29
+ value: string;
30
+ } | {
31
+ type: "color";
32
+ code: string;
33
+ };
34
+ /** Structural equality for tokens (used by the memoized tile comparators). */
35
+ export declare function tokensEqual(a: BoardToken, b: BoardToken): boolean;
36
+ /** Check if a character is a color tile (codes 63–71 rendered as strings). */
37
+ export declare const isColorTile: (char: string) => boolean;
38
+ /** Find a character's index in BOARD_CHARS; unknown characters map to blank (0). */
39
+ export declare function getCharIndex(char: string): number;
40
+ /** Get the display character from a token (color tiles are represented by their code). */
41
+ export declare function getCharFromToken(token: BoardToken): string;
42
+ /**
43
+ * Parse a line into tokens (characters and color codes).
44
+ *
45
+ * Color markers use single brackets — `{63}`, `{red}` — because by the time
46
+ * a message reaches the preview, template rendering has normalized colors to
47
+ * single brackets. End tags (`{/red}`, `{/}`) render nothing.
48
+ */
49
+ export declare function parseLine(line: string, maxTokens?: number): BoardToken[];
50
+ /**
51
+ * 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.
54
+ */
55
+ export declare function messageToGrid(message: string, rows: number, cols: number, deviceType?: string): BoardToken[][];
@@ -0,0 +1,151 @@
1
+ import { ALL_COLOR_CODES as e } from "./board-colors.js";
2
+ //#region src/lib/board-characters.ts
3
+ var t = [
4
+ " ",
5
+ "A",
6
+ "B",
7
+ "C",
8
+ "D",
9
+ "E",
10
+ "F",
11
+ "G",
12
+ "H",
13
+ "I",
14
+ "J",
15
+ "K",
16
+ "L",
17
+ "M",
18
+ "N",
19
+ "O",
20
+ "P",
21
+ "Q",
22
+ "R",
23
+ "S",
24
+ "T",
25
+ "U",
26
+ "V",
27
+ "W",
28
+ "X",
29
+ "Y",
30
+ "Z",
31
+ "1",
32
+ "2",
33
+ "3",
34
+ "4",
35
+ "5",
36
+ "6",
37
+ "7",
38
+ "8",
39
+ "9",
40
+ "0",
41
+ "!",
42
+ "@",
43
+ "#",
44
+ "$",
45
+ "(",
46
+ ")",
47
+ " ",
48
+ "-",
49
+ " ",
50
+ "+",
51
+ "&",
52
+ "=",
53
+ ";",
54
+ ":",
55
+ " ",
56
+ "'",
57
+ "\"",
58
+ "%",
59
+ ",",
60
+ ".",
61
+ " ",
62
+ " ",
63
+ "/",
64
+ "?",
65
+ " ",
66
+ "°",
67
+ "63",
68
+ "64",
69
+ "65",
70
+ "66",
71
+ "67",
72
+ "68",
73
+ "69",
74
+ "70",
75
+ "71"
76
+ ], n = Object.assign(Object.create(null), { "♥": !0 }), r = Object.freeze({
77
+ type: "char",
78
+ value: " "
79
+ });
80
+ function i(e, t) {
81
+ return e.type === t.type ? e.type === "char" && t.type === "char" ? e.value === t.value : e.type === "color" && t.type === "color" && e.code === t.code : !1;
82
+ }
83
+ var a = /* @__PURE__ */ new Set([
84
+ "63",
85
+ "64",
86
+ "65",
87
+ "66",
88
+ "67",
89
+ "68",
90
+ "69",
91
+ "70",
92
+ "71"
93
+ ]), o = (e) => a.has(e), s = /* @__PURE__ */ new Map();
94
+ for (let e = 0; e < t.length; e++) {
95
+ let n = t[e];
96
+ s.has(n) || s.set(n, e);
97
+ }
98
+ function c(e) {
99
+ let t = s.get(e);
100
+ return t === void 0 ? 0 : t;
101
+ }
102
+ function l(e) {
103
+ return e.type === "color" ? e.code : e.value;
104
+ }
105
+ function u(t, n = Infinity) {
106
+ let r = [], i = 0;
107
+ for (; i < t.length && r.length < n;) {
108
+ if (t[i] === "{") {
109
+ let n = t.indexOf("}", i);
110
+ if (n !== -1) {
111
+ let a = t.substring(i + 1, n);
112
+ if (a.startsWith("/")) {
113
+ i = n + 1;
114
+ continue;
115
+ }
116
+ let o = a.toLowerCase(), s = null;
117
+ if (e[a] ? s = a : e[o] && (s = o), s) {
118
+ r.push({
119
+ type: "color",
120
+ code: s
121
+ }), i = n + 1;
122
+ continue;
123
+ }
124
+ }
125
+ }
126
+ r.push({
127
+ type: "char",
128
+ value: t[i].toUpperCase()
129
+ }), i++;
130
+ }
131
+ return r;
132
+ }
133
+ function d(e, t, n, i = "flagship") {
134
+ let a = e.split("\n"), o = [], s = i === "note";
135
+ for (let e = 0; e < t; e++) {
136
+ let t = u(a[e] || "", n), i = [];
137
+ for (let e = 0; e < n; e++) if (e < t.length) {
138
+ let n = t[e];
139
+ s && n.type === "char" && n.value === "°" ? i.push({
140
+ type: "char",
141
+ value: "♥"
142
+ }) : i.push(n);
143
+ } else i.push(r);
144
+ o.push(i);
145
+ }
146
+ return o;
147
+ }
148
+ //#endregion
149
+ export { t as BOARD_CHARS, n as EXTRA_CHARS, l as getCharFromToken, c as getCharIndex, o as isColorTile, d as messageToGrid, u as parseLine, i as tokensEqual };
150
+
151
+ //# sourceMappingURL=board-characters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-characters.js","names":[],"sources":["../../src/lib/board-characters.ts"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * FiestaBoard Official Color Palette
3
+ *
4
+ * These are the 8 official colors supported by the board hardware.
5
+ * All UI components should use these colors for consistency between
6
+ * the preview display and status indicators.
7
+ *
8
+ * The hex values here are the same values published as `--color-board-*`
9
+ * tokens in theme.css — the tokens and this module are two views of the
10
+ * one palette contract. Keep them in lockstep.
11
+ *
12
+ * Reference: https://fiestaboard.app/docs/reference/color-guide
13
+ *
14
+ * Color Codes:
15
+ * - 63: Red - Alerts, hot temperatures, errors
16
+ * - 64: Orange - Warm temperatures, warnings
17
+ * - 65: Yellow - Comfortable temperatures, cautions
18
+ * - 66: Green - Good status, success, cool temperatures
19
+ * - 67: Blue - Information, cold temperatures
20
+ * - 68: Violet - Very cold, secondary info
21
+ * - 69: White - Reserved
22
+ * - 70: Black - Reserved (same as tile background)
23
+ */
24
+ export declare const BOARD_COLORS: {
25
+ readonly red: "#eb4034";
26
+ readonly orange: "#f5a623";
27
+ readonly yellow: "#f8e71c";
28
+ readonly green: "#7ed321";
29
+ readonly blue: "#4a90d9";
30
+ readonly violet: "#9b59b6";
31
+ readonly white: "#ffffff";
32
+ readonly black: "#1a1a1a";
33
+ };
34
+ export type BoardColorName = keyof typeof BOARD_COLORS;
35
+ export declare const COLOR_CODE_MAP: Record<string, string>;
36
+ export declare const ALL_COLOR_CODES: Record<string, string>;
37
+ export declare const AVAILABLE_COLORS: BoardColorName[];
38
+ export declare const COLOR_DISPLAY: Record<BoardColorName, {
39
+ bg: string;
40
+ text: string;
41
+ }>;
42
+ export declare function getBoardColor(nameOrCode: string): string;
43
+ export declare function isValidBoardColor(value: string): boolean;
44
+ /**
45
+ * Resolve color code to hex value, accounting for white board inversion.
46
+ * On white Vestaboard hardware, white (69) and black (70) tiles are swapped.
47
+ */
48
+ export declare function resolveColorCode(code: string, isWhiteBoard: boolean): string;
@@ -0,0 +1,93 @@
1
+ //#region src/lib/board-colors.ts
2
+ var e = {
3
+ red: "#eb4034",
4
+ orange: "#f5a623",
5
+ yellow: "#f8e71c",
6
+ green: "#7ed321",
7
+ blue: "#4a90d9",
8
+ violet: "#9b59b6",
9
+ white: "#ffffff",
10
+ black: "#1a1a1a"
11
+ }, t = {
12
+ 63: e.red,
13
+ 64: e.orange,
14
+ 65: e.yellow,
15
+ 66: e.green,
16
+ 67: e.blue,
17
+ 68: e.violet,
18
+ 69: e.white,
19
+ 70: e.black,
20
+ 71: e.black
21
+ }, n = Object.assign(Object.create(null), {
22
+ ...t,
23
+ red: e.red,
24
+ orange: e.orange,
25
+ yellow: e.yellow,
26
+ green: e.green,
27
+ blue: e.blue,
28
+ violet: e.violet,
29
+ purple: e.violet,
30
+ white: e.white,
31
+ black: e.black
32
+ }), r = [
33
+ "red",
34
+ "orange",
35
+ "yellow",
36
+ "green",
37
+ "blue",
38
+ "violet",
39
+ "white",
40
+ "black"
41
+ ], i = {
42
+ red: {
43
+ bg: "bg-board-red",
44
+ text: "text-board-black"
45
+ },
46
+ orange: {
47
+ bg: "bg-board-orange",
48
+ text: "text-board-black"
49
+ },
50
+ yellow: {
51
+ bg: "bg-board-yellow",
52
+ text: "text-board-black"
53
+ },
54
+ green: {
55
+ bg: "bg-board-green",
56
+ text: "text-board-black"
57
+ },
58
+ blue: {
59
+ bg: "bg-board-blue",
60
+ text: "text-board-black"
61
+ },
62
+ violet: {
63
+ bg: "bg-board-violet",
64
+ text: "text-board-white"
65
+ },
66
+ white: {
67
+ bg: "bg-board-white border",
68
+ text: "text-board-black"
69
+ },
70
+ black: {
71
+ bg: "bg-board-black",
72
+ text: "text-board-white"
73
+ }
74
+ };
75
+ function a(t) {
76
+ let r = t.toLowerCase();
77
+ return n[t] || n[r] || e.black;
78
+ }
79
+ function o(e) {
80
+ let t = e.toLowerCase();
81
+ return Object.hasOwn(n, e) || Object.hasOwn(n, t);
82
+ }
83
+ function s(t, r) {
84
+ if (r) {
85
+ if (t === "69" || t === "white") return e.black;
86
+ if (t === "70" || t === "black") return e.white;
87
+ }
88
+ return n[t] || e.black;
89
+ }
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 };
92
+
93
+ //# sourceMappingURL=board-colors.js.map
@@ -0,0 +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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Board device geometry — flagship, Note, and note-array grids.
3
+ *
4
+ * Extracted from FiestaBoard's board-dimensions.ts (presentational subset:
5
+ * the app keeps its page/board compatibility helpers, which mirror Python
6
+ * platform code). Values are a parity contract with the hardware.
7
+ */
8
+ export declare const NOTE_ROWS = 3;
9
+ export declare const NOTE_COLS = 15;
10
+ export declare const MAX_NOTES_PER_AXIS = 8;
11
+ /** The board hardware families a preview can render. */
12
+ export type DeviceType = "flagship" | "note" | "note_array";
13
+ export interface BoardDimensions {
14
+ rows: number;
15
+ cols: number;
16
+ }
17
+ export declare const DEVICE_DIMENSIONS: Record<string, BoardDimensions>;
18
+ /**
19
+ * Compute dimensions for a note-array grid. Does NOT validate inputs.
20
+ */
21
+ export declare function noteArrayDimensions(notes_wide: number, notes_tall: number): BoardDimensions;
22
+ /** Return true if device_type is "note_array". */
23
+ export declare function isNoteArray(deviceType: string): boolean;
24
+ /**
25
+ * Resolve board dimensions for any device type.
26
+ *
27
+ * - "flagship" | "note" → looks up DEVICE_DIMENSIONS (w/h ignored)
28
+ * - "note_array" → computes from notes_wide × notes_tall (cached)
29
+ * - unknown → falls back to flagship
30
+ *
31
+ * The returned object identity is stable for a given (deviceType, notes_wide,
32
+ * notes_tall): the same reference is returned on every call. For "note_array",
33
+ * notes_wide/notes_tall are clamped to integers in [1, MAX_NOTES_PER_AXIS]
34
+ * (NaN → 1) before computing and caching.
35
+ *
36
+ * @param deviceType "flagship" | "note" | "note_array"
37
+ * @param notes_wide Number of notes wide (only used for "note_array"; default 1)
38
+ * @param notes_tall Number of notes tall (only used for "note_array"; default 1)
39
+ * @returns { rows, cols }
40
+ */
41
+ export declare function resolveDimensions(deviceType: string, notes_wide?: number, notes_tall?: number): BoardDimensions;
@@ -0,0 +1,38 @@
1
+ //#region src/lib/board-dimensions.ts
2
+ var e = 3, t = 15, n = 8, r = {
3
+ flagship: {
4
+ rows: 6,
5
+ cols: 22
6
+ },
7
+ note: {
8
+ rows: 3,
9
+ cols: 15
10
+ }
11
+ };
12
+ function i(e, t) {
13
+ return {
14
+ rows: t * 3,
15
+ cols: e * 15
16
+ };
17
+ }
18
+ function a(e) {
19
+ return e === "note_array";
20
+ }
21
+ var o = /* @__PURE__ */ new Map();
22
+ function s(e) {
23
+ if (Number.isNaN(e)) return 1;
24
+ let t = Math.floor(e);
25
+ return t < 1 ? 1 : t > 8 ? 8 : t;
26
+ }
27
+ function c(e, t = 1, n = 1) {
28
+ if (Object.hasOwn(r, e)) return r[e];
29
+ if (e === "note_array") {
30
+ let e = s(t), r = s(n), a = `${e}×${r}`, c = o.get(a);
31
+ return c === void 0 && (c = i(e, r), o.set(a, c)), c;
32
+ }
33
+ return r.flagship;
34
+ }
35
+ //#endregion
36
+ export { r as DEVICE_DIMENSIONS, n as MAX_NOTES_PER_AXIS, t as NOTE_COLS, e as NOTE_ROWS, a as isNoteArray, i as noteArrayDimensions, c as resolveDimensions };
37
+
38
+ //# sourceMappingURL=board-dimensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-dimensions.js","names":[],"sources":["../../src/lib/board-dimensions.ts"],"mappings":";AASA,IAAa,IAAY,GACZ,IAAY,IACZ,IAAqB,GAYrB,IAAqD;CAChE,UAAU;EAAE,MAAM;EAAG,MAAM;CAAG;CAC9B,MAAM;EAAE,MAAA;EAAiB,MAAA;CAAgB;AAC3C;AAOA,SAAgB,EAAoB,GAAoB,GAAqC;CAC3F,OAAO;EACL,MAAM,IAAA;EACN,MAAM,IAAA;CACR;AACF;AAGA,SAAgB,EAAY,GAA6B;CACvD,OAAO,MAAe;AACxB;AAcA,IAAM,oBAAiB,IAAI,IAA6B;AAGxD,SAAS,EAAkB,GAAmB;CAC5C,IAAI,OAAO,MAAM,CAAC,GAAG,OAAO;CAC5B,IAAM,IAAI,KAAK,MAAM,CAAC;CAEtB,OADI,IAAI,IAAU,IACX,IAAA,IAAA,IAA8C;AACvD;AAmBA,SAAgB,EAAkB,GAAoB,IAAa,GAAG,IAAa,GAAoB;CACrG,IAAI,OAAO,OAAO,GAAmB,CAAU,GAC7C,OAAO,EAAkB;CAE3B,IAAI,MAAe,cAAc;EAC/B,IAAM,IAAO,EAAkB,CAAU,GACnC,IAAO,EAAkB,CAAU,GACnC,IAAM,GAAG,EAAK,GAAG,KACnB,IAAO,EAAe,IAAI,CAAG;EAKjC,OAJI,MAAS,KAAA,MACX,IAAO,EAAoB,GAAM,CAAI,GACrC,EAAe,IAAI,GAAK,CAAI,IAEvB;CACT;CAEA,OAAO,EAAkB;AAC3B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Render-invariant Tailwind class maps keyed by board size ("sm" | "md" | "lg").
3
+ *
4
+ * These are a single shared source for BoardDisplay, StaticBoardDisplay, and
5
+ * BoardTeaser so a teaser strip and a static preview match a full animated
6
+ * board row rendered at the same size. Keeping one copy here means the three
7
+ * renderers can't drift apart.
8
+ *
9
+ * They live at module scope (imported once) rather than inside a component body
10
+ * so they are allocated a single time at import instead of on every render.
11
+ * BoardDisplay originally hoisted its own copies for this reason (PR #31 /
12
+ * issue #24); StaticBoardDisplay and BoardTeaser re-allocated equivalents per
13
+ * render until they were consolidated here (issue #68).
14
+ */
15
+ export type BoardSize = "sm" | "md" | "lg";
16
+ export declare const sizeClasses: Record<BoardSize, string>;
17
+ export declare const textSizeClasses: Record<BoardSize, string>;
18
+ export declare const paddingClasses: Record<BoardSize, string>;
19
+ export declare const gapClasses: Record<BoardSize, string>;