@fiestaboard/ui 5.7.0 → 5.9.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.
- package/README.md +2 -2
- package/dist/components/forms/combobox.d.ts +161 -0
- package/dist/components/forms/combobox.js +153 -0
- package/dist/components/forms/combobox.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +97 -96
- package/dist/theme.css +54 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,10 +32,10 @@ FiestaUI ships **no compiled utility CSS**. The consuming app runs Tailwind v4 a
|
|
|
32
32
|
@source "../node_modules/@fiestaboard/ui/dist";
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- `theme.css` carries the design tokens (`@theme inline`, `:root` / `.dark` custom properties), the base layer, the component animation keyframes, and the `dark` custom variant.
|
|
35
|
+
- `theme.css` carries the design tokens (`@theme inline`, `:root` / `.dark, [data-theme="dark"]` custom properties), the base layer, the component animation keyframes, and the `dark` custom variant.
|
|
36
36
|
- `fonts.css` is the **opt-in** font registration (`@fontsource-variable/archivo` + `@fontsource-variable/spline-sans-mono` `@font-face` rules, ~70 KB fetched for a Latin-only page). Import it alongside `theme.css` unless your app supplies the faces itself — e.g. via `next/font`, a CDN, or a self-hosted subset. If you self-host, skip `fonts.css` and register faces named `"Archivo Variable"` / `"Spline Sans Mono Variable"` (the names `theme.css`'s `--font-sans-stack` / `--font-mono-stack` tokens reference); without either, the tokens degrade gracefully to the system font stack.
|
|
37
37
|
- The `@source` line is **mandatory** — Tailwind v4 does not scan `node_modules` by default, and without it component styles silently vanish. Adjust the relative path to wherever your CSS file lives.
|
|
38
|
-
- Dark mode
|
|
38
|
+
- Dark mode responds to **either** signal, and they are equivalent: the `dark` **class** or a `data-theme="dark"` **attribute**. Put whichever your host already toggles on `<html>` — or on any ancestor, to theme just that subtree. FiestaUI only defines the variant; your app owns the toggle. Hosts that stamp the attribute natively (Docusaurus, Astro, Nuxt Color Mode) therefore need no adapter. The pair is left unqualified, at specificity 0-1-0, so a pipeline that appends its own `:root` blocks after `theme.css` (Docusaurus's wide-gamut P3 pass does) still has to raise specificity on its side.
|
|
39
39
|
|
|
40
40
|
### Typeface
|
|
41
41
|
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { Combobox as ComboboxPrimitive } from "@base-ui/react/combobox";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/** One row of the list. */
|
|
4
|
+
export interface ComboboxOption {
|
|
5
|
+
/**
|
|
6
|
+
* The identity of the option: what `value` carries and what
|
|
7
|
+
* `onValueChange` reports. Also part of the default search haystack.
|
|
8
|
+
*/
|
|
9
|
+
value: string;
|
|
10
|
+
/**
|
|
11
|
+
* What the row renders. A plain string is also what fills the input on
|
|
12
|
+
* selection and what the default filter matches; a rich node cannot be
|
|
13
|
+
* either, so a node-labelled option falls back to its `value` for both.
|
|
14
|
+
* Give such an option `keywords` if it must stay findable by its text.
|
|
15
|
+
*/
|
|
16
|
+
label: React.ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* Right-aligned secondary text — a UTC offset, a current reading, a
|
|
19
|
+
* friendly name. Deliberately NOT searched; see the file header.
|
|
20
|
+
*/
|
|
21
|
+
meta?: React.ReactNode;
|
|
22
|
+
/** Matched against the query in addition to `value` and a string `label`. */
|
|
23
|
+
keywords?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Rendered and announced as `aria-disabled`, still reachable by the arrow
|
|
26
|
+
* keys, and not committable. Kept in the list rather than filtered out so
|
|
27
|
+
* the user can see the option exists — see the file header.
|
|
28
|
+
*/
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Every string the component renders on its own. All optional with English
|
|
33
|
+
* defaults — the package never resolves i18n, the app passes copy in.
|
|
34
|
+
*/
|
|
35
|
+
export interface ComboboxLabels {
|
|
36
|
+
/** Input placeholder. Default `"Search"`. */
|
|
37
|
+
placeholder: string;
|
|
38
|
+
/** Accessible name of the popup-toggle button. Default `"Show options"`. */
|
|
39
|
+
trigger: string;
|
|
40
|
+
/** Accessible name of the results listbox. Default `"Options"`. */
|
|
41
|
+
list: string;
|
|
42
|
+
/** Shown and announced politely when nothing matches. Default `"No matches"`. */
|
|
43
|
+
empty: string;
|
|
44
|
+
/**
|
|
45
|
+
* Announced politely and shown under the list when `maxVisible` truncates
|
|
46
|
+
* the matches. Interpolated as a function rather than concatenated from
|
|
47
|
+
* fragments, so a translation can reorder it.
|
|
48
|
+
* Default: ``(shown, total) => `Showing first ${shown} of ${total}` ``.
|
|
49
|
+
*/
|
|
50
|
+
showingFirst: (shown: number, total: number) => string;
|
|
51
|
+
}
|
|
52
|
+
export declare const DEFAULT_COMBOBOX_LABELS: ComboboxLabels;
|
|
53
|
+
/**
|
|
54
|
+
* The default match: every whitespace-separated token must appear somewhere
|
|
55
|
+
* in the option's haystack, and the caller's order is preserved.
|
|
56
|
+
*
|
|
57
|
+
* Exported so a custom `filter` can narrow first and then re-rank, instead of
|
|
58
|
+
* having to restate the matching rule to change the ordering.
|
|
59
|
+
*/
|
|
60
|
+
export declare function defaultComboboxFilter(options: readonly ComboboxOption[], query: string): ComboboxOption[];
|
|
61
|
+
export interface ComboboxProps {
|
|
62
|
+
/** The rows to offer, in the order they should appear when nothing is typed. */
|
|
63
|
+
options: readonly ComboboxOption[];
|
|
64
|
+
/**
|
|
65
|
+
* Selected option value, controlled. `""` means unset. Pair with
|
|
66
|
+
* `onValueChange`; omit both for the uncontrolled form seeded by
|
|
67
|
+
* `defaultValue`. Resolved with `??`, so a controlled `""` still means
|
|
68
|
+
* "unset" rather than falling through to internal state.
|
|
69
|
+
*/
|
|
70
|
+
value?: string;
|
|
71
|
+
/** Initial selected value (uncontrolled). Default `""`. */
|
|
72
|
+
defaultValue?: string;
|
|
73
|
+
/** Fired with the new value. One argument, never Base UI's event-details pair. */
|
|
74
|
+
onValueChange?: (value: string) => void;
|
|
75
|
+
/**
|
|
76
|
+
* Controlled query text, for callers that own the input — the caret-token
|
|
77
|
+
* case, where the query is a slice of a `<textarea>` rather than the whole
|
|
78
|
+
* field. Pair with `onQueryChange`.
|
|
79
|
+
*/
|
|
80
|
+
query?: string;
|
|
81
|
+
onQueryChange?: (query: string) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Replace {@link defaultComboboxFilter}. Return the options to show, ALREADY
|
|
84
|
+
* ORDERED — the return value is rendered as given, which is what lets a
|
|
85
|
+
* caller rank exact matches first or match on something the row does not
|
|
86
|
+
* render (a UTC offset, a plugin id).
|
|
87
|
+
*/
|
|
88
|
+
filter?: (options: readonly ComboboxOption[], query: string) => ComboboxOption[];
|
|
89
|
+
/**
|
|
90
|
+
* Cap on rendered rows; the overflow is reported through
|
|
91
|
+
* `labels.showingFirst`. Default `100` — an unfiltered open over a
|
|
92
|
+
* four-hundred-option list would otherwise mount four hundred rows, and
|
|
93
|
+
* nobody scrolls past the first screen, they type. `-1` renders every match.
|
|
94
|
+
*/
|
|
95
|
+
maxVisible?: number;
|
|
96
|
+
/**
|
|
97
|
+
* Render the panel into `document.body` so it escapes an ancestor's
|
|
98
|
+
* `overflow: hidden`. Default `true`; turn it off only when the panel must
|
|
99
|
+
* stay inside a container that manages its own stacking — a full-screen
|
|
100
|
+
* dialog, a shadow root, a print view.
|
|
101
|
+
*/
|
|
102
|
+
portal?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* What the panel is positioned against. Defaults to the field. Accepts an
|
|
105
|
+
* element, a ref, or a virtual element — `{ getBoundingClientRect() }` — so
|
|
106
|
+
* a panel can follow the caret inside a textarea.
|
|
107
|
+
*/
|
|
108
|
+
anchor?: React.ComponentProps<typeof ComboboxPrimitive.Positioner>["anchor"];
|
|
109
|
+
/**
|
|
110
|
+
* Rich empty state — an icon, a "create it" action. Plain copy belongs in
|
|
111
|
+
* `labels.empty`, which is what renders when this is omitted.
|
|
112
|
+
*/
|
|
113
|
+
emptyMessage?: React.ReactNode;
|
|
114
|
+
labels?: Partial<ComboboxLabels>;
|
|
115
|
+
disabled?: boolean;
|
|
116
|
+
readOnly?: boolean;
|
|
117
|
+
required?: boolean;
|
|
118
|
+
/** Submits the selected value under this name when inside a form. */
|
|
119
|
+
name?: string;
|
|
120
|
+
/** Forwarded to the input so an external `<Label htmlFor>` can name it. */
|
|
121
|
+
id?: string;
|
|
122
|
+
"aria-label"?: string;
|
|
123
|
+
"aria-labelledby"?: string;
|
|
124
|
+
"aria-describedby"?: string;
|
|
125
|
+
/**
|
|
126
|
+
* Passed straight through, never derived. A combobox that flips itself to
|
|
127
|
+
* "invalid" mid-word announces an error the user is still in the middle of
|
|
128
|
+
* fixing; when to escalate is the form's call.
|
|
129
|
+
*/
|
|
130
|
+
"aria-invalid"?: React.AriaAttributes["aria-invalid"];
|
|
131
|
+
/** Classes for the input. */
|
|
132
|
+
className?: string;
|
|
133
|
+
/** Classes for the popup surface. */
|
|
134
|
+
contentClassName?: string;
|
|
135
|
+
/** Open the list on first render (uncontrolled). */
|
|
136
|
+
defaultOpen?: boolean;
|
|
137
|
+
/** Controlled open state; pair with `onOpenChange`. */
|
|
138
|
+
open?: boolean;
|
|
139
|
+
onOpenChange?: (open: boolean) => void;
|
|
140
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* A text input that filters {@link ComboboxOption}s and a listbox of matches.
|
|
144
|
+
*
|
|
145
|
+
* ```tsx
|
|
146
|
+
* <Combobox
|
|
147
|
+
* aria-label="Entity"
|
|
148
|
+
* options={entities}
|
|
149
|
+
* value={entityId}
|
|
150
|
+
* onValueChange={setEntityId}
|
|
151
|
+
* />
|
|
152
|
+
* ```
|
|
153
|
+
*
|
|
154
|
+
* The keyboard model is the WAI-ARIA APG's editable combobox: Up/Down move an
|
|
155
|
+
* `aria-activedescendant` highlight through the list and loop through the
|
|
156
|
+
* input, Enter commits, Escape closes and then clears, and Home/End stay with
|
|
157
|
+
* the text caret where an editable combobox owes them. See the file header for
|
|
158
|
+
* why that last one is a decision rather than an omission.
|
|
159
|
+
*/
|
|
160
|
+
declare function Combobox({ options, value: valueProp, defaultValue, onValueChange, query: queryProp, onQueryChange, filter, maxVisible, portal, anchor, emptyMessage, labels, disabled, readOnly, required, name, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, className, contentClassName, defaultOpen, open, onOpenChange, ref, }: ComboboxProps): React.JSX.Element;
|
|
161
|
+
export { Combobox };
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../../lib/utils.js";
|
|
3
|
+
import { Check as t, ChevronsUpDown as n } from "lucide-react";
|
|
4
|
+
import * as r from "react";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
+
import { Combobox as o } from "@base-ui/react/combobox";
|
|
7
|
+
//#region src/components/forms/combobox.tsx
|
|
8
|
+
var s = {
|
|
9
|
+
placeholder: "Search",
|
|
10
|
+
trigger: "Show options",
|
|
11
|
+
list: "Options",
|
|
12
|
+
empty: "No matches",
|
|
13
|
+
showingFirst: (e, t) => `Showing first ${e} of ${t}`
|
|
14
|
+
};
|
|
15
|
+
function c(e) {
|
|
16
|
+
return typeof e.label == "string" ? e.label : e.value;
|
|
17
|
+
}
|
|
18
|
+
function l(e) {
|
|
19
|
+
let t = typeof e.label == "string" ? e.label : "";
|
|
20
|
+
return `${e.value} ${t} ${e.keywords?.join(" ") ?? ""}`.toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
function u(e, t) {
|
|
23
|
+
let n = t.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
24
|
+
return n.length === 0 ? e.slice() : e.filter((e) => {
|
|
25
|
+
let t = l(e);
|
|
26
|
+
return n.every((e) => t.includes(e));
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function d({ options: l, value: d, defaultValue: f = "", onValueChange: p, query: m, onQueryChange: h, filter: g, maxVisible: _ = 100, portal: v = !0, anchor: y, emptyMessage: b, labels: x, disabled: S, readOnly: C, required: w, name: T, id: E, "aria-label": D, "aria-labelledby": O, "aria-describedby": k, "aria-invalid": A, className: j, contentClassName: M, defaultOpen: N, open: P, onOpenChange: F, ref: I }) {
|
|
30
|
+
let L = {
|
|
31
|
+
...s,
|
|
32
|
+
...x
|
|
33
|
+
}, R = r.useRef(null), [z, B] = r.useState(f), V = d ?? z, H = r.useMemo(() => l.find((e) => e.value === V) ?? null, [l, V]), [U, W] = r.useState(() => H === null ? "" : c(H)), G = m ?? U, [K, q] = r.useState(V);
|
|
34
|
+
K !== V && (q(V), m === void 0 && W(H === null ? "" : c(H)));
|
|
35
|
+
let J = H === null ? "" : c(H), Y = J !== "" && G.trim().toLowerCase() === J.toLowerCase() ? "" : G, X = r.useMemo(() => (g ?? u)(l, Y), [
|
|
36
|
+
g,
|
|
37
|
+
l,
|
|
38
|
+
Y
|
|
39
|
+
]), Z = r.useMemo(() => _ < 0 ? X : X.slice(0, _), [X, _]), Q = X.length > Z.length, $ = (e) => {
|
|
40
|
+
let t = e?.value ?? "";
|
|
41
|
+
d === void 0 && B(t), p?.(t);
|
|
42
|
+
}, ee = (e) => {
|
|
43
|
+
m === void 0 && W(e), h?.(e);
|
|
44
|
+
}, te = /* @__PURE__ */ i(o.Positioner, {
|
|
45
|
+
side: "bottom",
|
|
46
|
+
align: "start",
|
|
47
|
+
sideOffset: 4,
|
|
48
|
+
anchor: y,
|
|
49
|
+
className: "z-[var(--z-select)]",
|
|
50
|
+
children: /* @__PURE__ */ a(o.Popup, {
|
|
51
|
+
"data-slot": "combobox-popup",
|
|
52
|
+
className: e("max-h-[min(18rem,var(--available-height))] w-[var(--anchor-width)] min-w-[12rem] overflow-y-auto", "rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-hidden", "origin-[var(--transform-origin)] data-[ending-style]:animate-out data-[ending-style]:fade-out-0 data-[open]:animate-in data-[open]:fade-in-0", M),
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ i(o.Empty, {
|
|
55
|
+
"data-slot": "combobox-empty",
|
|
56
|
+
className: "px-2 py-1.5 text-sm text-muted-foreground empty:hidden",
|
|
57
|
+
children: b ?? L.empty
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ i(o.List, {
|
|
60
|
+
"data-slot": "combobox-list",
|
|
61
|
+
"aria-label": L.list,
|
|
62
|
+
children: (n) => /* @__PURE__ */ a(o.Item, {
|
|
63
|
+
value: n,
|
|
64
|
+
disabled: n.disabled,
|
|
65
|
+
"data-slot": "combobox-option",
|
|
66
|
+
className: e("flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none", "data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground", "data-[selected]:font-medium", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"),
|
|
67
|
+
children: [/* @__PURE__ */ i("span", {
|
|
68
|
+
"data-slot": "combobox-option-label",
|
|
69
|
+
className: "truncate",
|
|
70
|
+
children: n.label
|
|
71
|
+
}), /* @__PURE__ */ a("span", {
|
|
72
|
+
className: "ml-auto flex shrink-0 items-center gap-2",
|
|
73
|
+
children: [n.meta === void 0 ? null : /* @__PURE__ */ i("span", {
|
|
74
|
+
"data-slot": "combobox-option-meta",
|
|
75
|
+
className: "text-xs text-muted-foreground",
|
|
76
|
+
children: n.meta
|
|
77
|
+
}), /* @__PURE__ */ i("span", {
|
|
78
|
+
"data-slot": "combobox-option-indicator",
|
|
79
|
+
className: "flex size-4 items-center justify-center",
|
|
80
|
+
children: /* @__PURE__ */ i(o.ItemIndicator, { children: /* @__PURE__ */ i(t, {
|
|
81
|
+
"aria-hidden": "true",
|
|
82
|
+
className: "size-4"
|
|
83
|
+
}) })
|
|
84
|
+
})]
|
|
85
|
+
})]
|
|
86
|
+
}, n.value)
|
|
87
|
+
}),
|
|
88
|
+
/* @__PURE__ */ i(o.Status, {
|
|
89
|
+
"data-slot": "combobox-status",
|
|
90
|
+
className: "px-2 py-1.5 text-xs text-muted-foreground empty:hidden",
|
|
91
|
+
children: Q ? L.showingFirst(Z.length, X.length) : null
|
|
92
|
+
})
|
|
93
|
+
]
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
return /* @__PURE__ */ a(o.Root, {
|
|
97
|
+
items: l,
|
|
98
|
+
filteredItems: Z,
|
|
99
|
+
limit: _,
|
|
100
|
+
value: H,
|
|
101
|
+
onValueChange: $,
|
|
102
|
+
inputValue: G,
|
|
103
|
+
onInputValueChange: (e) => ee(e),
|
|
104
|
+
itemToStringLabel: c,
|
|
105
|
+
itemToStringValue: (e) => e.value,
|
|
106
|
+
isItemEqualToValue: (e, t) => e.value === t.value,
|
|
107
|
+
disabled: S,
|
|
108
|
+
readOnly: C,
|
|
109
|
+
required: w,
|
|
110
|
+
name: T,
|
|
111
|
+
defaultOpen: N,
|
|
112
|
+
open: P,
|
|
113
|
+
onOpenChange: (e) => F?.(e),
|
|
114
|
+
children: [/* @__PURE__ */ a("div", {
|
|
115
|
+
"data-slot": "combobox",
|
|
116
|
+
className: "relative w-full",
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ i(o.Input, {
|
|
119
|
+
ref: I,
|
|
120
|
+
id: E,
|
|
121
|
+
"data-slot": "combobox-input",
|
|
122
|
+
placeholder: L.placeholder,
|
|
123
|
+
"aria-label": D,
|
|
124
|
+
"aria-labelledby": O,
|
|
125
|
+
"aria-describedby": k,
|
|
126
|
+
"aria-invalid": A,
|
|
127
|
+
className: e("flex h-9 w-full rounded-md border border-input bg-transparent py-1 pl-3 pr-9 text-sm shadow-sm", "transition-[color,background-color,border-color,box-shadow] duration-control", "placeholder:text-muted-foreground hover:border-ring/60", "focus-ring", "aria-invalid:border-destructive", "disabled:cursor-not-allowed disabled:opacity-50", j)
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ i(o.Trigger, {
|
|
130
|
+
"data-slot": "combobox-trigger",
|
|
131
|
+
"aria-label": L.trigger,
|
|
132
|
+
disabled: S,
|
|
133
|
+
className: e("absolute right-1 top-1/2 flex size-7 -translate-y-1/2 items-center justify-center rounded-sm", "text-muted-foreground transition-colors duration-control hover:text-foreground", "disabled:pointer-events-none disabled:opacity-50"),
|
|
134
|
+
children: /* @__PURE__ */ i(n, {
|
|
135
|
+
"aria-hidden": "true",
|
|
136
|
+
className: "size-4"
|
|
137
|
+
})
|
|
138
|
+
}),
|
|
139
|
+
v ? null : /* @__PURE__ */ i("div", {
|
|
140
|
+
ref: R,
|
|
141
|
+
"data-slot": "combobox-panel-host"
|
|
142
|
+
})
|
|
143
|
+
]
|
|
144
|
+
}), /* @__PURE__ */ i(o.Portal, {
|
|
145
|
+
container: v ? void 0 : R,
|
|
146
|
+
children: te
|
|
147
|
+
})]
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//#endregion
|
|
151
|
+
export { d as Combobox, s as DEFAULT_COMBOBOX_LABELS, u as defaultComboboxFilter };
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","names":[],"sources":["../../../src/components/forms/combobox.tsx"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export * from "./components/feedback/chip";
|
|
|
18
18
|
export * from "./components/feedback/empty-state";
|
|
19
19
|
export * from "./components/forms/button";
|
|
20
20
|
export * from "./components/forms/checkbox";
|
|
21
|
+
export * from "./components/forms/combobox";
|
|
21
22
|
export * from "./components/forms/copy-button";
|
|
22
23
|
export * from "./components/forms/input";
|
|
23
24
|
export * from "./components/forms/label";
|
package/dist/index.js
CHANGED
|
@@ -12,99 +12,100 @@ import { Badge as k, badgeVariants as A } from "./components/feedback/badge.js";
|
|
|
12
12
|
import { Chip as j, chipVariants as M } from "./components/feedback/chip.js";
|
|
13
13
|
import { EmptyState as N } from "./components/feedback/empty-state.js";
|
|
14
14
|
import { Checkbox as P } from "./components/forms/checkbox.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import it from "./components/
|
|
34
|
-
import
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
59
|
-
import {
|
|
60
|
-
import {
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
-
import {
|
|
64
|
-
import {
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
67
|
-
import {
|
|
68
|
-
import {
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import {
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import {
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
|
|
15
|
+
import { Combobox as F, DEFAULT_COMBOBOX_LABELS as I, defaultComboboxFilter as L } from "./components/forms/combobox.js";
|
|
16
|
+
import { CopyButton as R } from "./components/forms/copy-button.js";
|
|
17
|
+
import { Input as z } from "./components/forms/input.js";
|
|
18
|
+
import { Label as B } from "./components/forms/label.js";
|
|
19
|
+
import { SecretInput as V } from "./components/forms/secret-input.js";
|
|
20
|
+
import { Box as H } from "./components/layout/box.js";
|
|
21
|
+
import { Flex as U, flexVariants as W } from "./components/layout/flex.js";
|
|
22
|
+
import { Grid as G, gridVariants as K } from "./components/layout/grid.js";
|
|
23
|
+
import { AlertDialog as q, AlertDialogAction as J, AlertDialogCancel as Y, AlertDialogContent as X, AlertDialogDescription as Z, AlertDialogFooter as Q, AlertDialogHeader as $, AlertDialogOverlay as ee, AlertDialogPortal as te, AlertDialogTitle as ne, AlertDialogTrigger as re } from "./components/overlays/alert-dialog.js";
|
|
24
|
+
import { Dialog as ie, DialogClose as ae, DialogContent as oe, DialogDescription as se, DialogFooter as ce, DialogHeader as le, DialogOverlay as ue, DialogPortal as de, DialogTitle as fe, DialogTrigger as pe } from "./components/overlays/dialog.js";
|
|
25
|
+
import { DropdownMenu as me, DropdownMenuCheckboxItem as he, DropdownMenuContent as ge, DropdownMenuGroup as _e, DropdownMenuItem as ve, DropdownMenuLabel as ye, DropdownMenuPortal as be, DropdownMenuRadioGroup as xe, DropdownMenuRadioItem as Se, DropdownMenuSeparator as Ce, DropdownMenuShortcut as we, DropdownMenuSub as Te, DropdownMenuSubContent as Ee, DropdownMenuSubTrigger as De, DropdownMenuTrigger as Oe } from "./components/overlays/dropdown-menu.js";
|
|
26
|
+
import { Lightbox as ke, LightboxClose as Ae, LightboxContent as je, LightboxFooter as Me, LightboxOverlay as Ne, LightboxPortal as Pe, LightboxTrigger as Fe } from "./components/overlays/lightbox.js";
|
|
27
|
+
import { Popover as Ie, PopoverClose as Le, PopoverContent as Re, PopoverDescription as ze, PopoverTitle as Be, PopoverTrigger as Ve, usePopoverClose as He } from "./components/overlays/popover.js";
|
|
28
|
+
import { Code as Ue } from "./components/typography/code.js";
|
|
29
|
+
import { Heading as We, headingVariants as Ge } from "./components/typography/heading.js";
|
|
30
|
+
import { List as Ke, ListItem as qe, listVariants as Je } from "./components/typography/list.js";
|
|
31
|
+
import { ScrollArea as Ye, ScrollBar as Xe } from "./components/containment/scroll-area.js";
|
|
32
|
+
import { Table as Ze, TableBody as Qe, TableCell as $e, TableHead as et, TableHeader as tt, TableRow as nt } from "./components/containment/table.js";
|
|
33
|
+
import { Tabs as rt, TabsContent as it, TabsList as at, TabsTrigger as ot } from "./components/containment/tabs.js";
|
|
34
|
+
import st from "./components/effects/react-bits/fade-content.js";
|
|
35
|
+
import { Skeleton as ct } from "./components/feedback/skeleton.js";
|
|
36
|
+
import { StatusDot as lt, statusDotVariants as ut } from "./components/feedback/status-dot.js";
|
|
37
|
+
import { Select as dt, SelectContent as ft, SelectGroup as pt, SelectItem as mt, SelectLabel as ht, SelectScrollDownButton as gt, SelectScrollUpButton as _t, SelectSeparator as vt, SelectTrigger as yt, SelectValue as bt } from "./components/forms/select.js";
|
|
38
|
+
import { Slider as xt } from "./components/forms/slider.js";
|
|
39
|
+
import { Swatch as St, SwatchGroup as Ct, swatchFillVariants as wt, swatchGlyphVariants as Tt, swatchGroupVariants as Et, swatchIndicatorVariants as Dt, swatchVariants as Ot } from "./components/forms/swatch.js";
|
|
40
|
+
import { Switch as kt } from "./components/forms/switch.js";
|
|
41
|
+
import { Textarea as At } from "./components/forms/textarea.js";
|
|
42
|
+
import { Text as jt, textVariants as Mt } from "./components/typography/text.js";
|
|
43
|
+
import { TimePicker as Nt } from "./components/forms/time-picker.js";
|
|
44
|
+
import { TimezonePicker as Pt, listTimezones as Ft } from "./components/forms/timezone-picker.js";
|
|
45
|
+
import { Toggle as It, ToggleGroup as Lt, toggleGroupVariants as Rt, toggleVariants as zt } from "./components/forms/toggle.js";
|
|
46
|
+
import { SegmentedControl as Bt, SegmentedControlItem as Vt, ToggleCard as Ht, ToggleCardGroup as Ut, segmentedControlItemVariants as Wt, segmentedControlVariants as Gt, toggleCardGroupVariants as Kt, toggleCardVariants as qt } from "./components/forms/toggle-card.js";
|
|
47
|
+
import { Stack as Jt, stackVariants as Yt } from "./components/layout/stack.js";
|
|
48
|
+
import { Sheet as Xt, SheetClose as Zt, SheetContent as Qt, SheetDescription as $t, SheetFooter as en, SheetHeader as tn, SheetOverlay as nn, SheetPortal as rn, SheetTitle as an, SheetTrigger as on } from "./components/overlays/sheet.js";
|
|
49
|
+
import { Tooltip as sn, TooltipContent as cn, TooltipProvider as ln, TooltipTrigger as un } from "./components/overlays/tooltip.js";
|
|
50
|
+
import { TextLink as dn } from "./components/typography/text-link.js";
|
|
51
|
+
import { BoardIcon as fn } from "./components/chrome/board-icon.js";
|
|
52
|
+
import { BoardSelector as pn } from "./components/chrome/board-selector.js";
|
|
53
|
+
import { Breadcrumb as mn, BreadcrumbEllipsis as hn, BreadcrumbItem as gn, BreadcrumbLink as _n, BreadcrumbList as vn, BreadcrumbPage as yn, BreadcrumbSeparator as bn } from "./components/chrome/breadcrumb.js";
|
|
54
|
+
import { FIESTA_ICON_DATA_URI as xn, FIESTA_ICON_PALETTE as Sn, FIESTA_ICON_SVG as Cn, FiestaIcon as wn } from "./components/chrome/fiesta-icon.js";
|
|
55
|
+
import { FiestaLogo as Tn } from "./components/chrome/fiesta-logo.js";
|
|
56
|
+
import { LanguageSelector as En } from "./components/chrome/language-selector.js";
|
|
57
|
+
import { MainContent as Dn } from "./components/chrome/main-content.js";
|
|
58
|
+
import { NavList as On, NavListItem as kn, NavListLink as An, NavListSection as jn, NavListSectionContent as Mn, NavListSectionTrigger as Nn } from "./components/chrome/nav-list.js";
|
|
59
|
+
import { PAGE_HUES as Pn, PageHeader as Fn, PageIconGradientDefs as In, pageHue as Ln } from "./components/chrome/page-header.js";
|
|
60
|
+
import { PageInset as Rn } from "./components/chrome/page-inset.js";
|
|
61
|
+
import { PageLayout as zn } from "./components/chrome/page-layout.js";
|
|
62
|
+
import { PageToolbar as Bn } from "./components/chrome/page-toolbar.js";
|
|
63
|
+
import { Sidebar as Vn } from "./components/chrome/sidebar.js";
|
|
64
|
+
import { SkipToContent as Hn } from "./components/chrome/skip-to-content.js";
|
|
65
|
+
import { ThemeToggle as Un } from "./components/chrome/theme-toggle.js";
|
|
66
|
+
import { WizardProgress as Wn } from "./components/wizard/wizard-progress.js";
|
|
67
|
+
import { ALL_COLOR_CODES as Gn, AVAILABLE_COLORS as Kn, BOARD_COLORS as qn, COLOR_CODE_MAP as Jn, COLOR_DISPLAY as Yn, FIESTABOARD_COLORS as Xn, getBoardColor as Zn, isValidBoardColor as Qn, resolveColorCode as $n } from "./lib/board-colors.js";
|
|
68
|
+
import { BOARD_CHARS as er, EXTRA_CHARS as tr, applyCode62Glyph as nr, getCharFromToken as rr, getCharIndex as ir, isColorTile as ar, messageToGrid as or, messageToText as sr, parseLine as cr, resolveCode62Glyph as lr, tokensEqual as ur } from "./lib/board-characters.js";
|
|
69
|
+
import { BoardTeaser as dr } from "./components/board/board-teaser.js";
|
|
70
|
+
import { BoardBackdrop as fr } from "./components/board/board-backdrop.js";
|
|
71
|
+
import { WizardShell as pr } from "./components/wizard/wizard-shell.js";
|
|
72
|
+
import { DEVICE_DIMENSIONS as mr, MAX_NOTES_PER_AXIS as hr, NOTE_COLS as gr, NOTE_ROWS as _r, isNoteArray as vr, noteArrayDimensions as yr, resolveDimensions as br } from "./lib/board-dimensions.js";
|
|
73
|
+
import { BoardDisplay as xr, FLAP_SPEED_PRESETS as Sr, deriveFlapTiming as Cr, resolveFlapSpeed as wr } from "./components/board/board-display.js";
|
|
74
|
+
import { ScaledBoardDisplay as Tr } from "./components/board/scaled-board-display.js";
|
|
75
|
+
import { StaticBoardDisplay as Er } from "./components/board/static-board-display.js";
|
|
76
|
+
import { DEFAULT_SHAPE_LABELS as Dr, previewLabel as Or, previewLabels as kr, previewMessage as Ar } from "./lib/board-previews.js";
|
|
77
|
+
import { BarList as jr } from "./components/data/bar-list.js";
|
|
78
|
+
import { StatStrip as Mr, StatStripItem as Nr } from "./components/data/stat-strip.js";
|
|
79
|
+
import { BoardShowcase as Pr, DEFAULT_SHOWCASE_LABELS as Fr } from "./components/plugin/board-showcase.js";
|
|
80
|
+
import { PLUGIN_CATEGORIES as Ir, PluginCategoryBadge as Lr } from "./components/plugin/plugin-category-badge.js";
|
|
81
|
+
import { ScaledBoardTeaser as Rr } from "./components/plugin/scaled-board-teaser.js";
|
|
82
|
+
import { PluginCard as zr } from "./components/plugin/plugin-card.js";
|
|
83
|
+
import { BOARD_CODE_TO_COLOR as Br, BOARD_COLOR_CODES as Vr, CURSOR_ANCHOR as Hr, DEFAULT_BOARD_LINES as Ur, DEFAULT_BOARD_WIDTH as Wr, FILL_SPACE_REPEAT_VAR as Gr, FILL_SPACE_VAR as Kr } from "./components/editor/constants.js";
|
|
84
|
+
import { NodeViewInjectionProvider as qr, useNodeViewInjection as Jr } from "./components/editor/node-views/node-view-context.js";
|
|
85
|
+
import { ColorTileNodeView as Yr, DEFAULT_COLOR_TILE_NODE_VIEW_LABELS as Xr } from "./components/editor/node-views/color-tile-node-view.js";
|
|
86
|
+
import { ColorTileNode as Zr } from "./components/editor/extensions/color-tile-node.js";
|
|
87
|
+
import { DEFAULT_FILL_SPACE_NODE_VIEW_LABELS as Qr, FillSpaceNodeView as $r } from "./components/editor/node-views/fill-space-node-view.js";
|
|
88
|
+
import { FillSpaceNode as ei } from "./components/editor/extensions/fill-space-node.js";
|
|
89
|
+
import { DEFAULT_FORMULA_NODE_VIEW_LABELS as ti, FormulaNodeView as ni } from "./components/editor/node-views/formula-node-view.js";
|
|
90
|
+
import { FormulaNode as ri } from "./components/editor/extensions/formula-node.js";
|
|
91
|
+
import { LineNavigation as ii } from "./components/editor/extensions/line-navigation.js";
|
|
92
|
+
import { SingleParagraphDoc as ai } from "./components/editor/extensions/single-paragraph-doc.js";
|
|
93
|
+
import { TrailingNewline as oi } from "./components/editor/extensions/trailing-newline.js";
|
|
94
|
+
import { DEFAULT_VARIABLE_NODE_VIEW_LABELS as si, VariableNodeView as ci } from "./components/editor/node-views/variable-node-view.js";
|
|
95
|
+
import { VariableNode as li } from "./components/editor/extensions/variable-node.js";
|
|
96
|
+
import { DEFAULT_WRAPPED_TEXT_VIEW_LABELS as ui, WrappedTextView as di } from "./components/editor/node-views/wrapped-text-view.js";
|
|
97
|
+
import { WrappedTextNode as fi } from "./components/editor/extensions/wrapped-text-node.js";
|
|
98
|
+
import { ColorPickerContent as pi, DEFAULT_COLOR_PICKER_LABELS as mi } from "./components/editor/color-picker-content.js";
|
|
99
|
+
import { DRAW_CHARS as hi, brushToCell as gi, cellsToLine as _i, isPositionalLine as vi, lineToCells as yi, paintLine as bi, renderPositionalLine as xi } from "./components/editor/utils/draw-mode.js";
|
|
100
|
+
import { DEFAULT_DRAW_CHAR_PICKER_LABELS as Si, DrawCharPickerContent as Ci } from "./components/editor/draw-char-picker-content.js";
|
|
101
|
+
import { DEFAULT_FORMATTING_PICKER_LABELS as wi, FormattingPickerContent as Ti } from "./components/editor/formatting-picker-content.js";
|
|
102
|
+
import { DEFAULT_TOOLBAR_DROPDOWN_LABELS as Ei, ToolbarDropdown as Di } from "./components/editor/toolbar-dropdown.js";
|
|
103
|
+
import { parseLineContent as Oi, parseTemplateSimple as ki, serializeTemplateSimple as Ai } from "./components/editor/utils/serialization.js";
|
|
104
|
+
import { insertTemplateContent as ji } from "./components/editor/utils/insertion.js";
|
|
105
|
+
import { DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS as Mi, TemplateEditorToolbar as Ni } from "./components/editor/template-editor-toolbar.js";
|
|
106
|
+
import { buildStrokeTransaction as Pi, lineRanges as Fi } from "./components/editor/utils/stroke-transaction.js";
|
|
107
|
+
import { DEFAULT_TEMPLATE_EDITOR_LABELS as Ii, TemplateEditor as Li } from "./components/editor/template-editor.js";
|
|
108
|
+
import { DEFAULT_FILTER_PICKER_LABELS as Ri, FilterPickerContent as zi } from "./components/editor/filter-picker-content.js";
|
|
109
|
+
import { DEFAULT_VARIABLE_PICKER_LABELS as Bi, VariablePickerContent as Vi, createLucideIconResolver as Hi, getPluginsWithNestedArrays as Ui } from "./components/editor/variable-picker-content.js";
|
|
110
|
+
import { calculateLineLength as Wi, getOverflowAmount as Gi, willOverflow as Ki } from "./components/editor/utils/length-calculator.js";
|
|
111
|
+
export { Gn as ALL_COLOR_CODES, Kn as AVAILABLE_COLORS, t as Accordion, n as AccordionContent, r as AccordionItem, i as AccordionTrigger, x as Alert, S as AlertDescription, q as AlertDialog, J as AlertDialogAction, Y as AlertDialogCancel, X as AlertDialogContent, Z as AlertDialogDescription, Q as AlertDialogFooter, $ as AlertDialogHeader, ee as AlertDialogOverlay, te as AlertDialogPortal, ne as AlertDialogTitle, re as AlertDialogTrigger, C as AlertTitle, er as BOARD_CHARS, Br as BOARD_CODE_TO_COLOR, qn as BOARD_COLORS, Vr as BOARD_COLOR_CODES, k as Badge, jr as BarList, fr as BoardBackdrop, xr as BoardDisplay, fn as BoardIcon, pn as BoardSelector, Pr as BoardShowcase, dr as BoardTeaser, H as Box, mn as Breadcrumb, hn as BreadcrumbEllipsis, gn as BreadcrumbItem, _n as BreadcrumbLink, vn as BreadcrumbList, yn as BreadcrumbPage, bn as BreadcrumbSeparator, D as Button, Jn as COLOR_CODE_MAP, Yn as COLOR_DISPLAY, Hr 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, j as Chip, Ue as Code, f as Collapsible, p as CollapsibleContent, m as CollapsibleTrigger, pi as ColorPickerContent, Zr as ColorTileNode, Yr as ColorTileNodeView, F as Combobox, R as CopyButton, Ur as DEFAULT_BOARD_LINES, Wr as DEFAULT_BOARD_WIDTH, mi as DEFAULT_COLOR_PICKER_LABELS, Xr as DEFAULT_COLOR_TILE_NODE_VIEW_LABELS, I as DEFAULT_COMBOBOX_LABELS, Si as DEFAULT_DRAW_CHAR_PICKER_LABELS, Qr as DEFAULT_FILL_SPACE_NODE_VIEW_LABELS, Ri as DEFAULT_FILTER_PICKER_LABELS, wi as DEFAULT_FORMATTING_PICKER_LABELS, ti as DEFAULT_FORMULA_NODE_VIEW_LABELS, Dr as DEFAULT_SHAPE_LABELS, Fr as DEFAULT_SHOWCASE_LABELS, Ii as DEFAULT_TEMPLATE_EDITOR_LABELS, Mi as DEFAULT_TEMPLATE_EDITOR_TOOLBAR_LABELS, Ei as DEFAULT_TOOLBAR_DROPDOWN_LABELS, si as DEFAULT_VARIABLE_NODE_VIEW_LABELS, Bi as DEFAULT_VARIABLE_PICKER_LABELS, ui as DEFAULT_WRAPPED_TEXT_VIEW_LABELS, mr as DEVICE_DIMENSIONS, hi as DRAW_CHARS, ie as Dialog, ae as DialogClose, oe as DialogContent, se as DialogDescription, ce as DialogFooter, le as DialogHeader, ue as DialogOverlay, de as DialogPortal, fe as DialogTitle, pe as DialogTrigger, Ci as DrawCharPickerContent, me as DropdownMenu, he as DropdownMenuCheckboxItem, ge as DropdownMenuContent, _e as DropdownMenuGroup, ve as DropdownMenuItem, ye as DropdownMenuLabel, be as DropdownMenuPortal, xe as DropdownMenuRadioGroup, Se as DropdownMenuRadioItem, Ce as DropdownMenuSeparator, we as DropdownMenuShortcut, Te as DropdownMenuSub, Ee as DropdownMenuSubContent, De as DropdownMenuSubTrigger, Oe as DropdownMenuTrigger, tr as EXTRA_CHARS, N as EmptyState, Xn as FIESTABOARD_COLORS, xn as FIESTA_ICON_DATA_URI, Sn as FIESTA_ICON_PALETTE, Cn as FIESTA_ICON_SVG, Gr as FILL_SPACE_REPEAT_VAR, Kr as FILL_SPACE_VAR, Sr as FLAP_SPEED_PRESETS, st as FadeContent, wn as FiestaIcon, Tn as FiestaLogo, ei as FillSpaceNode, $r as FillSpaceNodeView, zi as FilterPickerContent, U as Flex, Ti as FormattingPickerContent, ri as FormulaNode, ni as FormulaNodeView, G as Grid, We as Heading, h as IconTile, z as Input, _ as JsonTree, B as Label, En as LanguageSelector, ke as Lightbox, Ae as LightboxClose, je as LightboxContent, Me as LightboxFooter, Ne as LightboxOverlay, Pe as LightboxPortal, Fe as LightboxTrigger, ii as LineNavigation, Ke as List, qe as ListItem, hr as MAX_NOTES_PER_AXIS, Dn as MainContent, v as MediaFrame, y as MediaFrameBar, b as MediaFrameMedia, gr as NOTE_COLS, _r as NOTE_ROWS, On as NavList, kn as NavListItem, An as NavListLink, jn as NavListSection, Mn as NavListSectionContent, Nn as NavListSectionTrigger, qr as NodeViewInjectionProvider, Pn as PAGE_HUES, Ir as PLUGIN_CATEGORIES, Fn as PageHeader, In as PageIconGradientDefs, Rn as PageInset, zn as PageLayout, Bn as PageToolbar, zr as PluginCard, Lr as PluginCategoryBadge, Ie as Popover, Le as PopoverClose, Re as PopoverContent, ze as PopoverDescription, Be as PopoverTitle, Ve as PopoverTrigger, Tr as ScaledBoardDisplay, Rr as ScaledBoardTeaser, Ye as ScrollArea, Xe as ScrollBar, V as SecretInput, Bt as SegmentedControl, Vt as SegmentedControlItem, dt as Select, ft as SelectContent, pt as SelectGroup, mt as SelectItem, ht as SelectLabel, gt as SelectScrollDownButton, _t as SelectScrollUpButton, vt as SelectSeparator, yt as SelectTrigger, bt as SelectValue, Xt as Sheet, Zt as SheetClose, Qt as SheetContent, $t as SheetDescription, en as SheetFooter, tn as SheetHeader, nn as SheetOverlay, rn as SheetPortal, an as SheetTitle, on as SheetTrigger, Vn as Sidebar, ai as SingleParagraphDoc, ct as Skeleton, Hn as SkipToContent, xt as Slider, T as Spinner, Jt as Stack, Mr as StatStrip, Nr as StatStripItem, Er as StaticBoardDisplay, lt as StatusDot, St as Swatch, Ct as SwatchGroup, kt as Switch, Ze as Table, Qe as TableBody, $e as TableCell, et as TableHead, tt as TableHeader, nt as TableRow, rt as Tabs, it as TabsContent, at as TabsList, ot as TabsTrigger, Li as TemplateEditor, Ni as TemplateEditorToolbar, jt as Text, dn as TextLink, At as Textarea, Un as ThemeToggle, Nt as TimePicker, Pt as TimezonePicker, It as Toggle, Ht as ToggleCard, Ut as ToggleCardGroup, Lt as ToggleGroup, Di as ToolbarDropdown, sn as Tooltip, cn as TooltipContent, ln as TooltipProvider, un as TooltipTrigger, oi as TrailingNewline, li as VariableNode, ci as VariableNodeView, Vi as VariablePickerContent, Wn as WizardProgress, pr as WizardShell, fi as WrappedTextNode, di as WrappedTextView, w as alertVariants, nr as applyCode62Glyph, A as badgeVariants, gi as brushToCell, Pi as buildStrokeTransaction, O as buttonVariants, Wi as calculateLineLength, _i as cellsToLine, M as chipVariants, e as cn, Hi as createLucideIconResolver, L as defaultComboboxFilter, Cr as deriveFlapTiming, W as flexVariants, Zn as getBoardColor, rr as getCharFromToken, ir as getCharIndex, Gi as getOverflowAmount, Ui as getPluginsWithNestedArrays, K as gridVariants, Ge as headingVariants, g as iconTileVariants, ji as insertTemplateContent, ar as isColorTile, vr as isNoteArray, vi as isPositionalLine, Qn as isValidBoardColor, Fi as lineRanges, yi as lineToCells, Ft as listTimezones, Je as listVariants, or as messageToGrid, sr as messageToText, yr as noteArrayDimensions, Ln as pageHue, bi as paintLine, cr as parseLine, Oi as parseLineContent, ki as parseTemplateSimple, Or as previewLabel, kr as previewLabels, Ar as previewMessage, xi as renderPositionalLine, lr as resolveCode62Glyph, $n as resolveColorCode, br as resolveDimensions, wr as resolveFlapSpeed, Wt as segmentedControlItemVariants, Gt as segmentedControlVariants, Ai as serializeTemplateSimple, E as spinnerVariants, Yt as stackVariants, ut as statusDotVariants, wt as swatchFillVariants, Tt as swatchGlyphVariants, Et as swatchGroupVariants, Dt as swatchIndicatorVariants, Ot as swatchVariants, Mt as textVariants, Kt as toggleCardGroupVariants, qt as toggleCardVariants, Rt as toggleGroupVariants, zt as toggleVariants, ur as tokensEqual, Jr as useNodeViewInjection, He as usePopoverClose, Ki as willOverflow };
|
package/dist/theme.css
CHANGED
|
@@ -9,14 +9,55 @@
|
|
|
9
9
|
* @import "@fiestaboard/ui/theme.css"; skip fonts.css if you self-host
|
|
10
10
|
* @source "../node_modules/@fiestaboard/ui/dist";
|
|
11
11
|
*
|
|
12
|
-
* Dark mode is
|
|
12
|
+
* Dark mode is signalled two ways, and they are equivalent: the `dark` CLASS
|
|
13
|
+
* or a `data-theme="dark"` ATTRIBUTE, on <html> or on any ancestor of the
|
|
14
|
+
* subtree you want themed. Toggle whichever your host already toggles.
|
|
15
|
+
*
|
|
13
16
|
* Values are copied verbatim from FiestaBoard app/globals.css — visual
|
|
14
17
|
* parity with the app is the contract; do not reformat or "improve"
|
|
15
18
|
* token values here without a parity check on the consumer side.
|
|
16
19
|
*/
|
|
17
20
|
@import "tw-animate-css";
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
/* ============================================================
|
|
23
|
+
* DARK MODE HAS TWO SPELLINGS (#228 item 6).
|
|
24
|
+
*
|
|
25
|
+
* `.dark` is what a Tailwind/shadcn host stamps; `[data-theme="dark"]` is
|
|
26
|
+
* what Docusaurus, Astro, Nuxt Color Mode and several static-site themes
|
|
27
|
+
* stamp natively. Matching both means a host that already has a theme
|
|
28
|
+
* switcher needs no adapter — no class to mirror, no JS to sync.
|
|
29
|
+
*
|
|
30
|
+
* fiestaboard.github.io is the consumer that forced this. It could not stamp
|
|
31
|
+
* `.dark` (Docusaurus owns the attribute and re-stamps it pre-paint), so its
|
|
32
|
+
* `scripts/build-fiestaui-css.mjs` regex-rewrote every compiled `.dark`
|
|
33
|
+
* selector in this file into the attribute form after Tailwind ran — a
|
|
34
|
+
* rewrite that has to track how Tailwind chooses to compile us. 4.0.0 already
|
|
35
|
+
* broke it once: `color-mix()` token values made Tailwind hoist part of the
|
|
36
|
+
* block below into an `@supports` fragment, and a rewrite that assumed one
|
|
37
|
+
* block left `--brand-hover` silently stuck on its fallback.
|
|
38
|
+
*
|
|
39
|
+
* THE PAIRING IS ALL-OR-NOTHING. A half-applied change is worse than none: a
|
|
40
|
+
* consumer's rewrite would then be transforming one half of this file and
|
|
41
|
+
* leaving the other half alone, which reads as working right up until the
|
|
42
|
+
* unpaired half is the one that matters. `dark-selector-pairing.test.mjs`
|
|
43
|
+
* asserts that every dark-scoped selector here carries both spellings.
|
|
44
|
+
*
|
|
45
|
+
* Two things this deliberately does NOT do:
|
|
46
|
+
*
|
|
47
|
+
* - It does not qualify with `html`. `.dark`/`[data-theme="dark"]` are
|
|
48
|
+
* 0-1-0, the same as `:root`, so source order decides — which is correct
|
|
49
|
+
* for a scoped subtree (a dark card on a light page) and is the reason
|
|
50
|
+
* the pair is written unqualified. A consumer whose pipeline APPENDS
|
|
51
|
+
* `:root` blocks after this file (Docusaurus's wide-gamut P3 pass does
|
|
52
|
+
* exactly that) still has to raise specificity itself. Matching the
|
|
53
|
+
* attribute shrinks that consumer's rewrite; it does not delete it.
|
|
54
|
+
* - It does not make the selector configurable. CSS has no parameter to
|
|
55
|
+
* configure, so "configurable" would mean a build step and a config file
|
|
56
|
+
* for what is otherwise a `cp`. Matching both spellings covers the hosts
|
|
57
|
+
* that exist at zero cost to every consumer; a third spelling can join
|
|
58
|
+
* this list the day something needs it.
|
|
59
|
+
* ============================================================ */
|
|
60
|
+
@custom-variant dark (&:is(.dark *, [data-theme="dark"] *));
|
|
20
61
|
|
|
21
62
|
@theme inline {
|
|
22
63
|
--color-background: var(--background);
|
|
@@ -465,10 +506,10 @@
|
|
|
465
506
|
* pins the "New" badge to hexes with `!important`, which is a hex fork of
|
|
466
507
|
* a token pair and a real maintenance defect — a fork stops tracking a
|
|
467
508
|
* retune here — but it is theme-AWARE (`.newBadge` plus a
|
|
468
|
-
* `[data-theme="dark"] .newBadge`,
|
|
469
|
-
*
|
|
470
|
-
* a dark fill. Both halves clear AA on their own fills:
|
|
471
|
-
* 7.52:1 dark. It is redundant, not broken. Dropping it downstream is a
|
|
509
|
+
* `[data-theme="dark"] .newBadge`, an attribute this file now matches
|
|
510
|
+
* directly — see the @custom-variant note at the top), so the light pigment
|
|
511
|
+
* never lands on a dark fill. Both halves clear AA on their own fills:
|
|
512
|
+
* 6.49:1 light, 7.52:1 dark. It is redundant, not broken. Dropping it downstream is a
|
|
472
513
|
* cleanup, not a fix, and it does not close #231.
|
|
473
514
|
*
|
|
474
515
|
* Opaque fills (mixing the tint into --background instead of compositing
|
|
@@ -817,7 +858,9 @@
|
|
|
817
858
|
--z-confetti: 9999;
|
|
818
859
|
}
|
|
819
860
|
|
|
820
|
-
|
|
861
|
+
/* Both dark spellings — see the @custom-variant note at the top (#228). */
|
|
862
|
+
.dark,
|
|
863
|
+
[data-theme="dark"] {
|
|
821
864
|
color-scheme: dark; /* see the note in :root (#160) */
|
|
822
865
|
/* Hue lock applies here too: same six hues, same hue angles as :root.
|
|
823
866
|
Only lightness moves. Surfaces carry the same warm cast at hue 73, and
|
|
@@ -1337,7 +1380,8 @@ html[data-board-switch="backward"]::view-transition-new(board-page) {
|
|
|
1337
1380
|
--accent-foreground: var(--sidebar-foreground);
|
|
1338
1381
|
--border: color-mix(in oklch, var(--sidebar-foreground) 16%, transparent);
|
|
1339
1382
|
}
|
|
1340
|
-
.dark .sidebar-gradient-horizontal
|
|
1383
|
+
.dark .sidebar-gradient-horizontal,
|
|
1384
|
+
[data-theme="dark"] .sidebar-gradient-horizontal {
|
|
1341
1385
|
color: oklch(1 0 0);
|
|
1342
1386
|
--foreground: oklch(1 0 0);
|
|
1343
1387
|
--sidebar-accent: oklch(1 0 0 / 24%);
|
|
@@ -1496,7 +1540,8 @@ html[data-board-switch="backward"]::view-transition-new(board-page) {
|
|
|
1496
1540
|
The hover keeps the same recipe as its resting form, lifted 14% -> 24%
|
|
1497
1541
|
(4.54:1 dark rail, 5.05:1 dark page, 1.29:1 light page). */
|
|
1498
1542
|
@media (prefers-contrast: more) {
|
|
1499
|
-
.dark
|
|
1543
|
+
.dark,
|
|
1544
|
+
[data-theme="dark"] {
|
|
1500
1545
|
--nav-active: oklch(0.86 0.115 73);
|
|
1501
1546
|
}
|
|
1502
1547
|
:root {
|