@epilot/zenith-react 0.3.0-next.7 → 0.3.0-next.9
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/CHANGELOG.md +4 -1
- package/dist/components/command/command.js +21 -19
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +4 -1
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +13 -7
- package/dist/components/field/field-combobox.js.map +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,12 +5,15 @@ history belongs to the source project and remains available through Git.
|
|
|
5
5
|
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
-
## [0.3.0-next.
|
|
8
|
+
## [0.3.0-next.9] - 2026-10-30
|
|
9
9
|
|
|
10
10
|
- changed: **BREAKING**: FieldCombobox and Command, the search list inside it, run on Base UI's Autocomplete instead of `cmdk`. Options are data: pass them as `items` on `FieldComboboxContent` and render them with a function in `FieldComboboxList` (and in `FieldComboboxCollection` inside each `FieldComboboxGroup`, which takes its group's `items`). `FieldComboboxItem`'s `value` is the item, and `onClick`, which also runs on Enter, replaces `onSelect`. `items` is required on `FieldComboboxContent`. The search text moves from `FieldComboboxInput`'s `value`/`onValueChange` to `FieldComboboxContent`'s, `FieldComboboxGroupLabel` replaces `FieldComboboxGroup`'s `heading`, and filtering is a case-insensitive "contains" that keeps the items' order. The Combobox page's "Changed in this version" section shows the new form (#106) — @wmolinari ([!151](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)) (experiment: https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)
|
|
11
11
|
- removed: **BREAKING**: from FieldCombobox and Command: `FieldComboboxItem`'s `keywords` and `forceMount` (pass `filter={null}` for items the caller already filtered), `FieldComboboxLoading`'s `progress` and `label`, `FieldComboboxSeparator`'s `alwaysRender`, `FieldComboboxList`'s `label` (pass `aria-label`), `id` on `FieldComboboxList` and `FieldComboboxItem` (Base UI's ids are what `aria-controls` and `aria-activedescendant` point at), `asChild` on every search part, Label's props on `FieldComboboxGroupLabel` (now a `<div>`), cmdk's fuzzy ranking, Home/End, Ctrl+N/J/P/K and the Alt/Meta arrow jumps, the `cmdk-*` attributes, and the `cmdk` dependency, so `dist/` bundles no `@radix-ui` module (#106) — @wmolinari ([!151](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)) (experiment: https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)
|
|
12
12
|
- changed: `FieldLabel` inside a `Field` renders with an id (a caller's own `id` wins), and `FieldComboboxList` points its `aria-labelledby` at the Field's label that names the trigger (the one whose `htmlFor` is the trigger's id, else the first `FieldLabel`), so the list carries the trigger's name (#106) — @wmolinari ([!151](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)) (experiment: https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)
|
|
13
13
|
- added: `FieldComboboxCollection`, and `@epilot/zenith-runtime/v1` serves Base UI's `autocomplete`; publish the runtime before `@epilot/zenith-react` (#106) — @wmolinari ([!151](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)) (experiment: https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/151)
|
|
14
|
+
- fixed: `FieldComboboxContent` is capped to the height available on its side of the trigger and scrolls its list under the search input, so a combobox with many options no longer runs off screen — @josh.stewart.epilot ([!162](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/162))
|
|
15
|
+
- fixed: `FieldComboboxInput` draws its focus ring around the whole search row instead of inset on the input, so the placeholder and typed text no longer start under the ring — @josh.stewart.epilot ([!163](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/163))
|
|
16
|
+
- fixed: `DropdownMenuTrigger` with `asChild` keeps its child's own text colour, so a `Button` used as the trigger (a split button's chevron, say) no longer turns blue; a bare trigger keeps its accent colour — @josh.stewart.epilot ([!165](https://gitlab.com/e-pilot/product/frontend/zenith/-/merge_requests/165))
|
|
14
17
|
|
|
15
18
|
## [0.2.1] - 2026-10-30
|
|
16
19
|
|
|
@@ -37,7 +37,18 @@ const Q = (i) => /* @__PURE__ */ a(
|
|
|
37
37
|
...u.gap(m),
|
|
38
38
|
...u.borderBottom("1px", "solid", Z),
|
|
39
39
|
paddingLeft: f,
|
|
40
|
-
paddingRight: f
|
|
40
|
+
paddingRight: f,
|
|
41
|
+
// The input's focus ring, drawn on the whole search row: the row holds the inline padding, so a
|
|
42
|
+
// ring on the input itself ran through the first letter. `:focus-within` because the input is
|
|
43
|
+
// the row's only focusable element and a text input matches :focus-visible whenever it has
|
|
44
|
+
// focus. Inset (negative), not the outward +2px every other audited control uses: the row sits
|
|
45
|
+
// flush against the edges of the Command root, which clips overflow for its rounded corners.
|
|
46
|
+
"&:focus-within": {
|
|
47
|
+
outlineWidth: "2px",
|
|
48
|
+
outlineStyle: "solid",
|
|
49
|
+
outlineOffset: "-2px",
|
|
50
|
+
outlineColor: M
|
|
51
|
+
}
|
|
41
52
|
},
|
|
42
53
|
searchIcon: {
|
|
43
54
|
...s,
|
|
@@ -58,15 +69,6 @@ const Q = (i) => /* @__PURE__ */ a(
|
|
|
58
69
|
fontSize: I,
|
|
59
70
|
lineHeight: q,
|
|
60
71
|
outlineStyle: "none",
|
|
61
|
-
":focus-visible": {
|
|
62
|
-
outlineWidth: "2px",
|
|
63
|
-
outlineStyle: "solid",
|
|
64
|
-
// Inset (negative), not the outward +2px every other audited control uses: this input sits
|
|
65
|
-
// flush against the top edge of the Command root, which clips overflow for its rounded
|
|
66
|
-
// corners.
|
|
67
|
-
outlineOffset: "-2px",
|
|
68
|
-
outlineColor: M
|
|
69
|
-
},
|
|
70
72
|
"::placeholder": {
|
|
71
73
|
color: h
|
|
72
74
|
},
|
|
@@ -228,13 +230,13 @@ const Q = (i) => /* @__PURE__ */ a(
|
|
|
228
230
|
filter: n,
|
|
229
231
|
itemToStringValue: p,
|
|
230
232
|
limit: y,
|
|
231
|
-
value:
|
|
232
|
-
defaultValue:
|
|
233
|
+
value: S,
|
|
234
|
+
defaultValue: b,
|
|
233
235
|
onValueChange: w,
|
|
234
236
|
children: R,
|
|
235
237
|
...v
|
|
236
238
|
}, L) {
|
|
237
|
-
const T = c(), [k, C] = d.useState(
|
|
239
|
+
const T = c(), [k, C] = d.useState(b ?? ""), G = S ?? k;
|
|
238
240
|
return /* @__PURE__ */ a(
|
|
239
241
|
g.Root,
|
|
240
242
|
{
|
|
@@ -246,8 +248,8 @@ const Q = (i) => /* @__PURE__ */ a(
|
|
|
246
248
|
filter: n,
|
|
247
249
|
itemToStringValue: p,
|
|
248
250
|
limit: y,
|
|
249
|
-
value:
|
|
250
|
-
defaultValue:
|
|
251
|
+
value: S,
|
|
252
|
+
defaultValue: b,
|
|
251
253
|
onValueChange: (D) => {
|
|
252
254
|
C(D), w == null || w(D);
|
|
253
255
|
},
|
|
@@ -274,8 +276,8 @@ d.forwardRef(
|
|
|
274
276
|
className: n,
|
|
275
277
|
showCloseButton: p = !0,
|
|
276
278
|
items: y,
|
|
277
|
-
filter:
|
|
278
|
-
itemToStringValue:
|
|
279
|
+
filter: S,
|
|
280
|
+
itemToStringValue: b,
|
|
279
281
|
limit: w,
|
|
280
282
|
value: R,
|
|
281
283
|
defaultValue: v,
|
|
@@ -298,8 +300,8 @@ d.forwardRef(
|
|
|
298
300
|
{
|
|
299
301
|
className: C.dialogCommand,
|
|
300
302
|
items: y,
|
|
301
|
-
filter:
|
|
302
|
-
itemToStringValue:
|
|
303
|
+
filter: S,
|
|
304
|
+
itemToStringValue: b,
|
|
303
305
|
limit: w,
|
|
304
306
|
value: R,
|
|
305
307
|
defaultValue: v,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sources":["../../../src/components/command/command.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Autocomplete as AutocompletePrimitive } from \"@base-ui/react/autocomplete\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n type DialogProps,\n} from \"../dialog/dialog\"\n\nconst SearchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M380-320q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l224 224q11 11 11 28t-11 28q-11 11-28 11t-28-11L532-372q-30 24-69 38t-83 14Zm0-80q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n inputWrapper: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA3),\n paddingLeft: tokens.spacingElement3,\n paddingRight: tokens.spacingElement3,\n },\n searchIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n flexShrink: 0,\n opacity: 0.5,\n },\n input: {\n ...boxModel,\n height: \"3rem\",\n display: \"flex\",\n width: \"100%\",\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: \"transparent\",\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n // Inset (negative), not the outward +2px every other audited control uses: this input sits\n // flush against the top edge of the Command root, which clips overflow for its rounded\n // corners.\n outlineOffset: \"-2px\",\n outlineColor: tokens.focusRing,\n },\n \"::placeholder\": {\n color: tokens.grayA11,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollPaddingTop: tokens.spacingElement1,\n scrollPaddingBottom: tokens.spacingElement1,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA11,\n // Base UI keeps the empty state mounted as a live region and empties it while items match.\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n group: {\n ...boxModel,\n color: tokens.grayA12,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(tokens.spacingElement1),\n },\n groupLabel: {\n ...boxModel,\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n height: \"1px\",\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n color: tokens.grayA12,\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentA3,\n },\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n shortcut: {\n color: tokens.grayA11,\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n },\n loading: {\n color: tokens.grayA11,\n },\n dialogContent: {\n ...boxModel,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(0),\n },\n dialogCommand: {\n [`& [${SLOT_ATTR}=\"command-group-label\"]`]: {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n fontWeight: tokens.fontWeightMedium,\n },\n [`& [${SLOT_ATTR}=\"command-input-wrapper\"]`]: {\n height: \"3rem\",\n },\n [`& [${SLOT_ATTR}=\"command-group\"]`]: {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n },\n [`& [${SLOT_ATTR}=\"command-item\"]`]: {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n },\n [`& [${SLOT_ATTR}=\"command-item\"] svg`]: {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n [`& [${SLOT_ATTR}=\"command-input\"]`]: {\n height: \"3rem\",\n },\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n marginTop: \"-1px\",\n marginBottom: \"-1px\",\n marginLeft: \"-1px\",\n marginRight: \"-1px\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n ...shorthands.borderWidth(0),\n },\n})\n\n/**\n * Whether an item matches the search text. `itemToString` is the string Command matches an\n * object item by. Typed as a method so a filter written for the caller's own item type is accepted.\n */\nexport type CommandFilter = {\n bivarianceHack(\n item: unknown,\n query: string,\n itemToString?: (item: unknown) => string\n ): boolean\n}[\"bivarianceHack\"]\n\n/** Renders one item (or one group) of `items`; `index` is its position among the matches. */\nexport type CommandRenderItem = {\n bivarianceHack(item: unknown, index: number): React.ReactNode\n}[\"bivarianceHack\"]\n\n/** The string an object item is matched by and announced as. */\nexport type CommandItemToString = {\n bivarianceHack(item: unknown): string\n}[\"bivarianceHack\"]\n\n/**\n * Filtering, as Base UI's Autocomplete does it: the items are data, matched against the search\n * text, and the list renders the matches.\n */\nexport type CommandRootProps = {\n /**\n * The items to filter: a flat array, or groups shaped `{ items: [...] }` that the list renders\n * with CommandGroup and CommandCollection. Required: without it nothing would filter and the\n * empty state would show beside the options.\n */\n items: readonly unknown[]\n /**\n * Whether an item matches the search text. Defaults to a locale-aware, case-insensitive\n * \"contains\" on the item's string (`label` for `{ value, label }` objects). `null` turns\n * filtering off, for items the caller has already filtered (a server-side search).\n */\n filter?: CommandFilter | null\n /** The string an object item is matched by. `{ value, label }` items need none: `label` is used. */\n itemToStringValue?: CommandItemToString\n /** The most matches to render. All of them by default. */\n limit?: number\n /** The search text, when controlled. */\n value?: string\n /** The search text it starts with, when uncontrolled. */\n defaultValue?: string\n /** Called with the new search text as the user types. */\n onValueChange?: (value: string) => void\n}\n\n/**\n * never exported it and its only consumer is `field/field-combobox.tsx`, which builds its listbox\n * out of these pieces. This was a decision, not an oversight: a public Command is a surface nobody\n * has reviewed as public API, and exporting it after 0.1 is additive and non-breaking, whereas un-\n * exporting it would not be.\n * @internal not part of the 0.1 public API. Command is fully implemented and tested, but the barrel\n */\nexport type CommandProps = Omit<React.ComponentProps<\"div\">, \"defaultValue\"> &\n CommandRootProps & {\n \"data-slot\"?: string\n }\n\n/** The search text, for parts that change while a search is under way (the separators). */\nconst CommandSearchContext = React.createContext(\"\")\n\n/**\n * Base UI's Autocomplete, inline and always open: the search input filters the list in place.\n * The first match stays highlighted, so Enter runs it.\n */\nexport const Command = React.forwardRef<HTMLDivElement, CommandProps>(\n function Command(\n {\n className,\n \"data-slot\": dataSlot = \"command\",\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n // Base UI keeps the search text to itself; Command mirrors it for the separators.\n const [typed, setTyped] = React.useState(defaultValue ?? \"\")\n const search = value ?? typed\n\n return (\n <AutocompletePrimitive.Root\n inline\n open\n autoHighlight=\"always\"\n keepHighlight\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={(next: string) => {\n setTyped(next)\n onValueChange?.(next)\n }}\n >\n <CommandSearchContext.Provider value={search}>\n <div\n ref={ref}\n data-slot={dataSlot}\n {...{ [SLOT_ATTR]: dataSlot }}\n className={mergeClasses(styles.root, className)}\n {...props}\n >\n {children}\n </div>\n </CommandSearchContext.Provider>\n </AutocompletePrimitive.Root>\n )\n }\n)\n\nexport type CommandDialogProps = Omit<DialogProps, \"children\"> &\n CommandRootProps & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n }\n\nexport const CommandDialog = React.forwardRef<HTMLElement, CommandDialogProps>(\n function CommandDialog(\n {\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n _ref\n ) {\n const styles = useStyles()\n\n return (\n <Dialog {...props}>\n <DialogHeader className={styles.srOnly}>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={mergeClasses(styles.dialogContent, className)}\n showCloseButton={showCloseButton}\n >\n <Command\n className={styles.dialogCommand}\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n }\n)\n\nexport type CommandInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"value\" | \"defaultValue\" | \"type\"\n> & {\n wrapperClassName?: string\n}\n\nexport const CommandInput = React.forwardRef<\n HTMLInputElement,\n CommandInputProps\n>(function CommandInput({ className, wrapperClassName, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n data-slot=\"command-input-wrapper\"\n {...{ [SLOT_ATTR]: \"command-input-wrapper\" }}\n className={mergeClasses(styles.inputWrapper, wrapperClassName)}\n >\n <SearchIcon className={styles.searchIcon} />\n <AutocompletePrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n {...{ [SLOT_ATTR]: \"command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n </div>\n )\n})\n\n/** Base UI owns the list's and the options' ids: the input's `aria-controls` and\n * `aria-activedescendant` point at them. */\nexport type CommandListProps = Omit<\n React.ComponentProps<\"div\">,\n \"children\" | \"id\"\n> & {\n /** The items: a function of each match of the root's `items`, or static content. */\n children?: React.ReactNode | CommandRenderItem\n}\n\n/**\n * The listbox. It is named \"Suggestions\" unless the caller names it: a translated `aria-label`\n * for another locale, or `aria-labelledby`, which wins over both.\n */\nexport const CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n function CommandList(\n {\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.List\n ref={ref}\n data-slot=\"command-list\"\n {...{ [SLOT_ATTR]: \"command-list\" }}\n className={mergeClasses(styles.list, className)}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : \"Suggestions\")}\n {...props}\n />\n )\n }\n)\n\nexport type CommandEmptyProps = React.ComponentProps<\"div\">\n\n/** Shows its children while no item matches. It stays mounted (a live region) and is empty otherwise. */\nexport const CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n function CommandEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Empty\n ref={ref}\n data-slot=\"command-empty\"\n {...{ [SLOT_ATTR]: \"command-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandGroupProps = React.ComponentProps<\"div\"> & {\n /** This group's items, for its CommandCollection to render. */\n items?: readonly unknown[]\n}\n\nexport const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n function CommandGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Group\n ref={ref}\n data-slot=\"command-group\"\n {...{ [SLOT_ATTR]: \"command-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandGroupLabelProps = React.ComponentProps<\"div\">\n\n/** Names its CommandGroup for assistive technology. */\nexport const CommandGroupLabel = React.forwardRef<\n HTMLDivElement,\n CommandGroupLabelProps\n>(function CommandGroupLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.GroupLabel\n ref={ref}\n data-slot=\"command-group-label\"\n {...{ [SLOT_ATTR]: \"command-group-label\" }}\n className={mergeClasses(styles.groupLabel, className)}\n {...props}\n />\n )\n})\n\nexport type CommandCollectionProps = {\n /** Renders each match of the enclosing CommandGroup's `items`. */\n children: CommandRenderItem\n}\n\n/**\n * Renders a group's matching items.\n * @no-host-element Base UI's Collection renders only the items, so there is no element to take a ref.\n */\nexport const CommandCollection = ({ children }: CommandCollectionProps) => (\n <AutocompletePrimitive.Collection>\n {children}\n </AutocompletePrimitive.Collection>\n)\n\nexport type CommandSeparatorProps = React.ComponentProps<\"div\">\n\n/** A divider between groups. It steps aside while the search text is not empty, as matches regroup. */\nexport const CommandSeparator = React.forwardRef<\n HTMLDivElement,\n CommandSeparatorProps\n>(function CommandSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n const searching = React.useContext(CommandSearchContext).trim() !== \"\"\n\n if (searching) return null\n return (\n <AutocompletePrimitive.Separator\n ref={ref}\n data-slot=\"command-separator\"\n {...{ [SLOT_ATTR]: \"command-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\n/** No `onSelect`: the DOM's would never run on click or Enter; `onClick` does both. */\nexport type CommandItemProps = Omit<\n React.ComponentProps<\"div\">,\n \"id\" | \"onSelect\"\n> & {\n /** The item of `items` this option stands for. */\n value?: unknown\n /** Whether the option ignores pointer and keyboard selection. */\n disabled?: boolean\n /** The option's position among the matches, which spares a DOM lookup. */\n index?: number\n}\n\n/** One option. `onClick` runs on a click and on Enter while the option is highlighted. */\nexport const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n function CommandItem({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Item\n ref={ref}\n data-slot=\"command-item\"\n {...{ [SLOT_ATTR]: \"command-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandShortcutProps = React.ComponentProps<\"span\">\n\nexport const CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n CommandShortcutProps\n>(function CommandShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"command-shortcut\"\n {...{ [SLOT_ATTR]: \"command-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n\nexport type CommandLoadingProps = React.ComponentProps<\"div\">\n\n/**\n * A polite live region for the list's status, such as loading. Keep it mounted and change its\n * children: a region that mounts with its message is not announced everywhere.\n */\nexport const CommandLoading = React.forwardRef<\n HTMLDivElement,\n CommandLoadingProps\n>(function CommandLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Status\n ref={ref}\n data-slot=\"command-loading\"\n {...{ [SLOT_ATTR]: \"command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport { Command as CommandRoot }\n"],"names":["SearchIcon","props","jsx","useStyles","makeZenithStyles","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusMd","tokens.spacingElement2","tokens.grayA3","tokens.spacingElement3","tokens.textSm","tokens.leadingSm","tokens.focusRing","tokens.grayA11","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.graySoft","tokens.radiusSm","tokens.accentA3","SLOT_ATTR","CommandSearchContext","React","Command","className","dataSlot","items","filter","itemToStringValue","limit","value","defaultValue","onValueChange","children","ref","styles","typed","setTyped","search","AutocompletePrimitive","next","mergeClasses","title","description","showCloseButton","_ref","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","wrapperClassName","CommandList","ariaLabel","ariaLabelledBy","CommandEmpty","CommandGroup","CommandGroupLabel","CommandCollection","CommandSeparator","CommandItem","CommandLoading"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command.js","sources":["../../../src/components/command/command.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Autocomplete as AutocompletePrimitive } from \"@base-ui/react/autocomplete\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n type DialogProps,\n} from \"../dialog/dialog\"\n\nconst SearchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M380-320q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l224 224q11 11 11 28t-11 28q-11 11-28 11t-28-11L532-372q-30 24-69 38t-83 14Zm0-80q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n inputWrapper: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA3),\n paddingLeft: tokens.spacingElement3,\n paddingRight: tokens.spacingElement3,\n // The input's focus ring, drawn on the whole search row: the row holds the inline padding, so a\n // ring on the input itself ran through the first letter. `:focus-within` because the input is\n // the row's only focusable element and a text input matches :focus-visible whenever it has\n // focus. Inset (negative), not the outward +2px every other audited control uses: the row sits\n // flush against the edges of the Command root, which clips overflow for its rounded corners.\n \"&:focus-within\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"-2px\",\n outlineColor: tokens.focusRing,\n },\n },\n searchIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n flexShrink: 0,\n opacity: 0.5,\n },\n input: {\n ...boxModel,\n height: \"3rem\",\n display: \"flex\",\n width: \"100%\",\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: \"transparent\",\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n \"::placeholder\": {\n color: tokens.grayA11,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollPaddingTop: tokens.spacingElement1,\n scrollPaddingBottom: tokens.spacingElement1,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA11,\n // Base UI keeps the empty state mounted as a live region and empties it while items match.\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n group: {\n ...boxModel,\n color: tokens.grayA12,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(tokens.spacingElement1),\n },\n groupLabel: {\n ...boxModel,\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n height: \"1px\",\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n color: tokens.grayA12,\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentA3,\n },\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n shortcut: {\n color: tokens.grayA11,\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n },\n loading: {\n color: tokens.grayA11,\n },\n dialogContent: {\n ...boxModel,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(0),\n },\n dialogCommand: {\n [`& [${SLOT_ATTR}=\"command-group-label\"]`]: {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n fontWeight: tokens.fontWeightMedium,\n },\n [`& [${SLOT_ATTR}=\"command-input-wrapper\"]`]: {\n height: \"3rem\",\n },\n [`& [${SLOT_ATTR}=\"command-group\"]`]: {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n },\n [`& [${SLOT_ATTR}=\"command-item\"]`]: {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n },\n [`& [${SLOT_ATTR}=\"command-item\"] svg`]: {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n [`& [${SLOT_ATTR}=\"command-input\"]`]: {\n height: \"3rem\",\n },\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n marginTop: \"-1px\",\n marginBottom: \"-1px\",\n marginLeft: \"-1px\",\n marginRight: \"-1px\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n ...shorthands.borderWidth(0),\n },\n})\n\n/**\n * Whether an item matches the search text. `itemToString` is the string Command matches an\n * object item by. Typed as a method so a filter written for the caller's own item type is accepted.\n */\nexport type CommandFilter = {\n bivarianceHack(\n item: unknown,\n query: string,\n itemToString?: (item: unknown) => string\n ): boolean\n}[\"bivarianceHack\"]\n\n/** Renders one item (or one group) of `items`; `index` is its position among the matches. */\nexport type CommandRenderItem = {\n bivarianceHack(item: unknown, index: number): React.ReactNode\n}[\"bivarianceHack\"]\n\n/** The string an object item is matched by and announced as. */\nexport type CommandItemToString = {\n bivarianceHack(item: unknown): string\n}[\"bivarianceHack\"]\n\n/**\n * Filtering, as Base UI's Autocomplete does it: the items are data, matched against the search\n * text, and the list renders the matches.\n */\nexport type CommandRootProps = {\n /**\n * The items to filter: a flat array, or groups shaped `{ items: [...] }` that the list renders\n * with CommandGroup and CommandCollection. Required: without it nothing would filter and the\n * empty state would show beside the options.\n */\n items: readonly unknown[]\n /**\n * Whether an item matches the search text. Defaults to a locale-aware, case-insensitive\n * \"contains\" on the item's string (`label` for `{ value, label }` objects). `null` turns\n * filtering off, for items the caller has already filtered (a server-side search).\n */\n filter?: CommandFilter | null\n /** The string an object item is matched by. `{ value, label }` items need none: `label` is used. */\n itemToStringValue?: CommandItemToString\n /** The most matches to render. All of them by default. */\n limit?: number\n /** The search text, when controlled. */\n value?: string\n /** The search text it starts with, when uncontrolled. */\n defaultValue?: string\n /** Called with the new search text as the user types. */\n onValueChange?: (value: string) => void\n}\n\n/**\n * never exported it and its only consumer is `field/field-combobox.tsx`, which builds its listbox\n * out of these pieces. This was a decision, not an oversight: a public Command is a surface nobody\n * has reviewed as public API, and exporting it after 0.1 is additive and non-breaking, whereas un-\n * exporting it would not be.\n * @internal not part of the 0.1 public API. Command is fully implemented and tested, but the barrel\n */\nexport type CommandProps = Omit<React.ComponentProps<\"div\">, \"defaultValue\"> &\n CommandRootProps & {\n \"data-slot\"?: string\n }\n\n/** The search text, for parts that change while a search is under way (the separators). */\nconst CommandSearchContext = React.createContext(\"\")\n\n/**\n * Base UI's Autocomplete, inline and always open: the search input filters the list in place.\n * The first match stays highlighted, so Enter runs it.\n */\nexport const Command = React.forwardRef<HTMLDivElement, CommandProps>(\n function Command(\n {\n className,\n \"data-slot\": dataSlot = \"command\",\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n // Base UI keeps the search text to itself; Command mirrors it for the separators.\n const [typed, setTyped] = React.useState(defaultValue ?? \"\")\n const search = value ?? typed\n\n return (\n <AutocompletePrimitive.Root\n inline\n open\n autoHighlight=\"always\"\n keepHighlight\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={(next: string) => {\n setTyped(next)\n onValueChange?.(next)\n }}\n >\n <CommandSearchContext.Provider value={search}>\n <div\n ref={ref}\n data-slot={dataSlot}\n {...{ [SLOT_ATTR]: dataSlot }}\n className={mergeClasses(styles.root, className)}\n {...props}\n >\n {children}\n </div>\n </CommandSearchContext.Provider>\n </AutocompletePrimitive.Root>\n )\n }\n)\n\nexport type CommandDialogProps = Omit<DialogProps, \"children\"> &\n CommandRootProps & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n }\n\nexport const CommandDialog = React.forwardRef<HTMLElement, CommandDialogProps>(\n function CommandDialog(\n {\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n _ref\n ) {\n const styles = useStyles()\n\n return (\n <Dialog {...props}>\n <DialogHeader className={styles.srOnly}>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={mergeClasses(styles.dialogContent, className)}\n showCloseButton={showCloseButton}\n >\n <Command\n className={styles.dialogCommand}\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n }\n)\n\nexport type CommandInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"value\" | \"defaultValue\" | \"type\"\n> & {\n wrapperClassName?: string\n}\n\nexport const CommandInput = React.forwardRef<\n HTMLInputElement,\n CommandInputProps\n>(function CommandInput({ className, wrapperClassName, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n data-slot=\"command-input-wrapper\"\n {...{ [SLOT_ATTR]: \"command-input-wrapper\" }}\n className={mergeClasses(styles.inputWrapper, wrapperClassName)}\n >\n <SearchIcon className={styles.searchIcon} />\n <AutocompletePrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n {...{ [SLOT_ATTR]: \"command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n </div>\n )\n})\n\n/** Base UI owns the list's and the options' ids: the input's `aria-controls` and\n * `aria-activedescendant` point at them. */\nexport type CommandListProps = Omit<\n React.ComponentProps<\"div\">,\n \"children\" | \"id\"\n> & {\n /** The items: a function of each match of the root's `items`, or static content. */\n children?: React.ReactNode | CommandRenderItem\n}\n\n/**\n * The listbox. It is named \"Suggestions\" unless the caller names it: a translated `aria-label`\n * for another locale, or `aria-labelledby`, which wins over both.\n */\nexport const CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n function CommandList(\n {\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.List\n ref={ref}\n data-slot=\"command-list\"\n {...{ [SLOT_ATTR]: \"command-list\" }}\n className={mergeClasses(styles.list, className)}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : \"Suggestions\")}\n {...props}\n />\n )\n }\n)\n\nexport type CommandEmptyProps = React.ComponentProps<\"div\">\n\n/** Shows its children while no item matches. It stays mounted (a live region) and is empty otherwise. */\nexport const CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n function CommandEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Empty\n ref={ref}\n data-slot=\"command-empty\"\n {...{ [SLOT_ATTR]: \"command-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandGroupProps = React.ComponentProps<\"div\"> & {\n /** This group's items, for its CommandCollection to render. */\n items?: readonly unknown[]\n}\n\nexport const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n function CommandGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Group\n ref={ref}\n data-slot=\"command-group\"\n {...{ [SLOT_ATTR]: \"command-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandGroupLabelProps = React.ComponentProps<\"div\">\n\n/** Names its CommandGroup for assistive technology. */\nexport const CommandGroupLabel = React.forwardRef<\n HTMLDivElement,\n CommandGroupLabelProps\n>(function CommandGroupLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.GroupLabel\n ref={ref}\n data-slot=\"command-group-label\"\n {...{ [SLOT_ATTR]: \"command-group-label\" }}\n className={mergeClasses(styles.groupLabel, className)}\n {...props}\n />\n )\n})\n\nexport type CommandCollectionProps = {\n /** Renders each match of the enclosing CommandGroup's `items`. */\n children: CommandRenderItem\n}\n\n/**\n * Renders a group's matching items.\n * @no-host-element Base UI's Collection renders only the items, so there is no element to take a ref.\n */\nexport const CommandCollection = ({ children }: CommandCollectionProps) => (\n <AutocompletePrimitive.Collection>\n {children}\n </AutocompletePrimitive.Collection>\n)\n\nexport type CommandSeparatorProps = React.ComponentProps<\"div\">\n\n/** A divider between groups. It steps aside while the search text is not empty, as matches regroup. */\nexport const CommandSeparator = React.forwardRef<\n HTMLDivElement,\n CommandSeparatorProps\n>(function CommandSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n const searching = React.useContext(CommandSearchContext).trim() !== \"\"\n\n if (searching) return null\n return (\n <AutocompletePrimitive.Separator\n ref={ref}\n data-slot=\"command-separator\"\n {...{ [SLOT_ATTR]: \"command-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\n/** No `onSelect`: the DOM's would never run on click or Enter; `onClick` does both. */\nexport type CommandItemProps = Omit<\n React.ComponentProps<\"div\">,\n \"id\" | \"onSelect\"\n> & {\n /** The item of `items` this option stands for. */\n value?: unknown\n /** Whether the option ignores pointer and keyboard selection. */\n disabled?: boolean\n /** The option's position among the matches, which spares a DOM lookup. */\n index?: number\n}\n\n/** One option. `onClick` runs on a click and on Enter while the option is highlighted. */\nexport const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n function CommandItem({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Item\n ref={ref}\n data-slot=\"command-item\"\n {...{ [SLOT_ATTR]: \"command-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n />\n )\n }\n)\n\nexport type CommandShortcutProps = React.ComponentProps<\"span\">\n\nexport const CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n CommandShortcutProps\n>(function CommandShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"command-shortcut\"\n {...{ [SLOT_ATTR]: \"command-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n\nexport type CommandLoadingProps = React.ComponentProps<\"div\">\n\n/**\n * A polite live region for the list's status, such as loading. Keep it mounted and change its\n * children: a region that mounts with its message is not announced everywhere.\n */\nexport const CommandLoading = React.forwardRef<\n HTMLDivElement,\n CommandLoadingProps\n>(function CommandLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <AutocompletePrimitive.Status\n ref={ref}\n data-slot=\"command-loading\"\n {...{ [SLOT_ATTR]: \"command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport { Command as CommandRoot }\n"],"names":["SearchIcon","props","jsx","useStyles","makeZenithStyles","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusMd","tokens.spacingElement2","tokens.grayA3","tokens.spacingElement3","tokens.focusRing","tokens.textSm","tokens.leadingSm","tokens.grayA11","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.graySoft","tokens.radiusSm","tokens.accentA3","SLOT_ATTR","CommandSearchContext","React","Command","className","dataSlot","items","filter","itemToStringValue","limit","value","defaultValue","onValueChange","children","ref","styles","typed","setTyped","search","AutocompletePrimitive","next","mergeClasses","title","description","showCloseButton","_ref","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","wrapperClassName","CommandList","ariaLabel","ariaLabelledBy","CommandEmpty","CommandGroup","CommandGroupLabel","CommandCollection","CommandSeparator","CommandItem","CommandLoading"],"mappings":"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"}
|
|
@@ -51,6 +51,9 @@ const ye = (o) => /* @__PURE__ */ i(
|
|
|
51
51
|
triggerReset: {
|
|
52
52
|
...de
|
|
53
53
|
},
|
|
54
|
+
// The bare trigger's text colour, also skipped under `asChild`: there it reaches the child as a
|
|
55
|
+
// caller class, which a Zenith child such as Button merges last, so it would replace the
|
|
56
|
+
// child's own colour.
|
|
54
57
|
trigger: {
|
|
55
58
|
color: ve
|
|
56
59
|
},
|
|
@@ -292,7 +295,7 @@ const _e = a.forwardRef(
|
|
|
292
295
|
nativeButton: d,
|
|
293
296
|
className: w(
|
|
294
297
|
!e && c.triggerReset,
|
|
295
|
-
c.trigger,
|
|
298
|
+
!e && c.trigger,
|
|
296
299
|
t
|
|
297
300
|
),
|
|
298
301
|
...r,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu.js","sources":["../../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M504-480 348-636q-11-11-11-28t11-28q11-11 28-11t28 11l184 184q6 6 8.5 13t2.5 15q0 8-2.5 15t-8.5 13L404-268q-11 11-28 11t-28-11q-11-11-11-28t11-28l156-156Z\" />\n </svg>\n)\n\nconst CircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"8px\"\n viewBox=\"0 -960 960 960\"\n width=\"8px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\" />\n </svg>\n)\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n triggerReset: {\n ...nativeControl,\n },\n trigger: {\n color: tokens.accentA11,\n },\n // The positioner is what stacks against other layers, as Radix's popper wrapper did; it also\n // keeps that wrapper's `max-content` floor so the content wraps the same way.\n positioner: {\n zIndex: OVERLAY_Z_INDEX,\n minWidth: \"max-content\",\n outlineStyle: \"none\",\n },\n // Radix's `hideWhenDetached`: Base UI marks the positioner when its anchor scrolls out of view.\n positionerHideWhenDetached: {\n \"&[data-anchor-hidden]\": {\n visibility: \"hidden\",\n pointerEvents: \"none\",\n },\n },\n popup: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n minWidth: \"10rem\",\n overflow: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusXl),\n ...shorthands.padding(tokens.spacingElement1),\n // v1 shadow-lg\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n outlineStyle: \"none\",\n zIndex: OVERLAY_Z_INDEX,\n transformOrigin: \"var(--transform-origin)\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n },\n \"&[data-starting-style][data-side='bottom']\": {\n transform: `translateY(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='left']\": {\n transform: `translateX(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='right']\": {\n transform: `translateX(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='top']\": {\n transform: `translateY(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n transitionDuration: \"100ms\",\n transitionTimingFunction: easeIn,\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n \"&[data-ending-style]\": {\n transitionDuration: \"0.01ms\",\n },\n },\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"pointer\",\n userSelect: \"none\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n backgroundColor: tokens.accentSoft,\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentSoft,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n itemInset: {\n ...boxModel,\n paddingLeft: \"2rem\",\n },\n itemDestructive: {\n color: tokens.errorA11,\n \":hover\": {\n backgroundColor: tokens.errorSoft,\n },\n \":focus-visible\": {\n backgroundColor: tokens.errorSoft,\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineColor: tokens.errorA8,\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.errorSoft,\n },\n },\n itemCheckboxRadio: {\n ...boxModel,\n paddingLeft: \"2rem\",\n paddingRight: tokens.spacingElement2,\n },\n itemIndicatorWrapper: {\n ...boxModel,\n position: \"absolute\",\n left: tokens.spacingElement2,\n display: \"flex\",\n height: \"0.875rem\",\n width: \"0.875rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemIndicator: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n subTrigger: {\n \"&[data-popup-open]\": {\n backgroundColor: tokens.accentSoft,\n },\n },\n subTriggerChevron: {\n ...boxModel,\n marginLeft: \"auto\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n label: {\n ...boxModel,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n },\n separator: {\n ...boxModel,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement1,\n marginBottom: tokens.spacingElement1,\n height: \"1px\",\n backgroundColor: tokens.grayA3,\n },\n shortcut: {\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n color: tokens.grayA11,\n },\n})\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `finalFocus`. `preventDefault()` leaves focus\n * where it is; otherwise the default move happens, because Base UI reads a callback that returns\n * `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument, on the menu and on a submenu: Base UI's\n * change details, declared in Zenith. Base UI's own type drags its menu store into the published\n * declarations, and TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does\n * in Base UI.\n */\ntype DropdownMenuOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"trigger-hover\"; event: MouseEvent }\n | { reason: \"trigger-focus\"; event: FocusEvent }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"list-navigation\"; event: KeyboardEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"item-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"sibling-open\"; event: Event }\n | { reason: \"cancel-open\"; event: MouseEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the menu in its current state. */\n cancel: () => void\n /** Lets the event propagate where the menu would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the menu's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\ntype OpenChangeHandler = (\n open: boolean,\n eventDetails: DropdownMenuOpenChangeDetails\n) => void\n\n// The Escapes a submenu closed on, which then close the menu above it (`closeParentOnEsc`). Base\n// UI's submenu prevents the event before the parent menu hears of it, so the parent would read it\n// as handled by some other layer.\nconst escapesClosingASubmenu = new WeakSet<Event>()\n\n/**\n * A layer inside the menu (a Volt popover or tooltip, which run on Radix, or a control handling\n * the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so one Escape\n * would close both. Honour the handled event. Consumers still mix Zenith with Volt on one page,\n * so this stays after the Radix teardown (D12).\n */\nfunction honourHandledEscape(\n onOpenChange: OpenChangeHandler | undefined,\n { submenu = false } = {}\n) {\n return (open: boolean, eventDetails: DropdownMenuOpenChangeDetails) => {\n const escape =\n eventDetails.reason === \"escape-key\" ? eventDetails.event : undefined\n if (escape?.defaultPrevented && !escapesClosingASubmenu.has(escape)) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n if (submenu && escape && !eventDetails.isCanceled) {\n escapesClosingASubmenu.add(escape)\n }\n }\n}\n\n/**\n * What the content of a menu or submenu hands up to its root: Radix took `loop` on the content,\n * Base UI takes `loopFocus` on the root. Both roots start from `false`, Radix's default, where\n * Base UI's menus wrap.\n */\nconst MenuLoopContext = React.createContext<(loop: boolean) => void>(() => {})\n\ntype Direction = \"ltr\" | \"rtl\"\n\n/** The root's `dir`, which Radix also stamped on the content. */\nconst MenuDirContext = React.createContext<Direction | undefined>(undefined)\n\nfunction useLoopOnRoot(loop: boolean | undefined) {\n const setLoop = React.useContext(MenuLoopContext)\n React.useEffect(() => {\n setLoop(loop ?? false)\n }, [setLoop, loop])\n}\n\nexport type DropdownMenuProps = {\n children?: React.ReactNode\n /** The reading direction of the menu and its submenus. Inherits the document's when omitted. */\n dir?: Direction\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the menu opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `item-press`, `focus-out`, …) and `eventDetails.cancel()` keeps\n * the menu in its current state.\n */\n onOpenChange?: OpenChangeHandler\n /**\n * While open, the menu locks page scroll and blocks pointer interaction outside it.\n * @default true\n */\n modal?: boolean\n}\n\nexport const DropdownMenu = React.forwardRef<HTMLElement, DropdownMenuProps>(\n function DropdownMenu({ dir, onOpenChange, children, ...props }, _ref) {\n const [loop, setLoop] = React.useState(false)\n\n const root = (\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n loopFocus={loop}\n onOpenChange={honourHandledEscape(onOpenChange)}\n {...props}\n >\n <MenuLoopContext.Provider value={setLoop}>\n <MenuDirContext.Provider value={dir}>\n {children}\n </MenuDirContext.Provider>\n </MenuLoopContext.Provider>\n </MenuPrimitive.Root>\n )\n\n return dir ? (\n <DirectionProvider direction={dir}>{root}</DirectionProvider>\n ) : (\n root\n )\n }\n)\n\nexport type DropdownMenuTriggerProps = NativePartProps<\"button\">\n\nexport const DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuTriggerProps\n>(function DropdownMenuTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n const child = asChild ? onlySlotChild(children) : undefined\n // Base UI drives a native <button> unless told otherwise; a child that is another intrinsic\n // element gets the ARIA button behaviour Radix's Slot gave it.\n const nativeButton =\n !child || typeof child.type !== \"string\" || child.type === \"button\"\n\n return (\n <MenuPrimitive.Trigger\n ref={ref}\n data-slot=\"dropdown-menu-trigger\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-trigger\" }}\n nativeButton={nativeButton}\n className={mergeClasses(\n !asChild && styles.triggerReset,\n styles.trigger,\n className\n )}\n {...props}\n {...(child ? { render: child } : { children })}\n />\n )\n})\n\nexport type DropdownMenuGroupProps = NativePartProps<\"div\">\n\nexport const DropdownMenuGroup = React.forwardRef<\n HTMLDivElement,\n DropdownMenuGroupProps\n>(function DropdownMenuGroup({ asChild = false, children, ...props }, ref) {\n return (\n <MenuPrimitive.Group\n ref={ref}\n data-slot=\"dropdown-menu-group\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-group\" }}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets the content use an enclosing DropdownMenuPortal instead of portalling itself, as Base UI's\n// Popup needs exactly one Portal above it. Content resets it, so a submenu inside portals on its\n// own unless a DropdownMenuPortal of its own wraps it.\nconst DropdownMenuPortalPresenceContext = React.createContext(false)\n\n// The element the content portalled into, so a submenu portals next to it rather than into the\n// body; Radix rendered submenus inline in their parent's content.\nconst DropdownMenuContainerContext = React.createContext<\n HTMLElement | undefined\n>(undefined)\n\n/** Radix took any Element or DocumentFragment, null meaning the body; Base UI reads null as \"wait for one\". */\nfunction portalContainer(\n container: Element | DocumentFragment | null | undefined\n) {\n return (container ?? undefined) as HTMLElement | undefined\n}\n\nexport type DropdownMenuPortalProps = {\n children?: React.ReactNode\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the content mounted while the menu is closed. */\n forceMount?: true\n}\n\nexport const DropdownMenuPortal = React.forwardRef<\n HTMLElement,\n DropdownMenuPortalProps\n>(function DropdownMenuPortal({ container, forceMount, ...props }, ref) {\n return (\n <DropdownMenuPortalPresenceContext.Provider value={true}>\n <DropdownMenuContainerContext.Provider value={portalContainer(container)}>\n <MenuPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"dropdown-menu-portal\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-portal\" }}\n container={portalContainer(container)}\n keepMounted={forceMount}\n {...props}\n />\n </DropdownMenuContainerContext.Provider>\n </DropdownMenuPortalPresenceContext.Provider>\n )\n})\n\nexport type DropdownMenuSubProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the submenu opens or closes, with the same `eventDetails` as DropdownMenu's\n * `onOpenChange`.\n */\n onOpenChange?: OpenChangeHandler\n}\n\nexport const DropdownMenuSub = React.forwardRef<\n HTMLElement,\n DropdownMenuSubProps\n>(function DropdownMenuSub({ onOpenChange, children, ...props }, _ref) {\n const [loop, setLoop] = React.useState(false)\n\n return (\n <MenuPrimitive.SubmenuRoot\n data-slot=\"dropdown-menu-sub\"\n loopFocus={loop}\n // Escape inside a Radix submenu closed the whole menu.\n closeParentOnEsc\n onOpenChange={honourHandledEscape(onOpenChange, { submenu: true })}\n {...props}\n >\n <MenuLoopContext.Provider value={setLoop}>\n {children}\n </MenuLoopContext.Provider>\n </MenuPrimitive.SubmenuRoot>\n )\n})\n\ntype RadixItemProps = {\n disabled?: boolean\n /**\n * Called when the item is chosen by pointer or keyboard. Under Base UI the menu closes\n * regardless; `preventDefault()` no longer keeps it open.\n */\n onSelect?: (event: Event) => void\n /** The text typeahead matches, when the item's content is not plain text. */\n textValue?: string\n}\n\n/** Radix's `onSelect` over Base UI's click handling, which covers pointer and keyboard selection. */\nfunction selectOnClick<Element>(\n onClick: React.MouseEventHandler<Element> | undefined,\n onSelect: ((event: Event) => void) | undefined\n): React.MouseEventHandler<Element> {\n return (event) => {\n onClick?.(event)\n onSelect?.(event.nativeEvent)\n }\n}\n\nexport type DropdownMenuRadioGroupProps = NativePartProps<\"div\"> & {\n value?: string\n onValueChange?: (value: string) => void\n}\n\nexport const DropdownMenuRadioGroup = React.forwardRef<\n HTMLDivElement,\n DropdownMenuRadioGroupProps\n>(function DropdownMenuRadioGroup(\n { asChild = false, children, onValueChange, ...props },\n ref\n) {\n return (\n <MenuPrimitive.RadioGroup\n ref={ref}\n data-slot=\"dropdown-menu-radio-group\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-radio-group\" }}\n onValueChange={\n onValueChange ? (value: string) => onValueChange(value) : undefined\n }\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DropdownMenuSubTriggerProps = NativePartProps<\"div\"> &\n Omit<RadixItemProps, \"onSelect\"> & {\n inset?: boolean\n }\n\nexport const DropdownMenuSubTrigger = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSubTriggerProps\n>(function DropdownMenuSubTrigger(\n { asChild = false, className, inset, textValue, children, ...props },\n ref\n) {\n const styles = useStyles()\n const chevron = <ChevronRightIcon className={styles.subTriggerChevron} />\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the chevron joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n chevron\n ),\n }\n : {\n children: (\n <>\n {children}\n {chevron}\n </>\n ),\n }\n\n return (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-sub-trigger\" }}\n label={textValue}\n className={mergeClasses(\n styles.item,\n styles.subTrigger,\n inset && styles.itemInset,\n className\n )}\n {...props}\n {...content}\n />\n )\n})\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\"\ntype Boundary = Element | null\n\n/** Radix's popper props, translated onto Base UI's Positioner. */\ntype PositioningProps = {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n align?: \"start\" | \"center\" | \"end\"\n alignOffset?: number\n /** Flips and shifts the content to keep it inside the collision boundary. */\n avoidCollisions?: boolean\n collisionBoundary?: Boundary | Boundary[]\n /** Distance from the boundary's edges; `0` unless set. */\n collisionPadding?: number | Partial<Record<Side, number>>\n arrowPadding?: number\n /** `always` keeps the content in the boundary even when its trigger leaves it. */\n sticky?: \"partial\" | \"always\"\n /** Hides the content while its trigger is scrolled out of view. */\n hideWhenDetached?: boolean\n /**\n * Kept for compatibility; has no effect. Base UI repositions the content whenever its trigger\n * or the page moves, and has no per-frame mode.\n */\n updatePositionStrategy?: \"optimized\" | \"always\"\n}\n\nfunction positionerProps({\n side,\n sideOffset,\n align,\n alignOffset,\n avoidCollisions = true,\n collisionBoundary,\n collisionPadding = 0,\n arrowPadding,\n sticky = \"partial\",\n}: PositioningProps) {\n const boundary = (\n Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary]\n ).filter((element): element is Element => element != null)\n\n return {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionPadding,\n sticky: sticky === \"always\",\n ...(boundary.length > 0\n ? { collisionBoundary: boundary.length === 1 ? boundary[0] : boundary }\n : {}),\n ...(avoidCollisions\n ? {}\n : {\n collisionAvoidance: {\n side: \"none\",\n align: \"none\",\n fallbackAxisSide: \"none\",\n } as const,\n }),\n }\n}\n\n/** The menu's open content, nested the way Base UI needs it: Portal > Positioner > Popup. */\nfunction MenuPopupLayer({\n container,\n forceMount,\n hideWhenDetached,\n placement,\n popup,\n}: {\n container: Element | DocumentFragment | null | undefined\n forceMount: true | undefined\n hideWhenDetached: boolean | undefined\n placement: ReturnType<typeof positionerProps>\n popup: React.ReactElement\n}) {\n const styles = useStyles()\n const hasPortal = React.useContext(DropdownMenuPortalPresenceContext)\n const inheritedContainer = React.useContext(DropdownMenuContainerContext)\n const ownContainer =\n container === undefined ? inheritedContainer : portalContainer(container)\n\n const positioner = (\n <MenuPrimitive.Positioner\n className={mergeClasses(\n styles.positioner,\n hideWhenDetached && styles.positionerHideWhenDetached\n )}\n {...placement}\n >\n <DropdownMenuPortalPresenceContext.Provider value={false}>\n <DropdownMenuContainerContext.Provider value={ownContainer}>\n {popup}\n </DropdownMenuContainerContext.Provider>\n </DropdownMenuPortalPresenceContext.Provider>\n </MenuPrimitive.Positioner>\n )\n\n // Base UI's Popup requires a Portal ancestor. An enclosing DropdownMenuPortal is that portal\n // unless the content names a container of its own, as its own portal did under Radix.\n return hasPortal && container === undefined ? (\n positioner\n ) : (\n <MenuPrimitive.Portal container={ownContainer} keepMounted={forceMount}>\n {positioner}\n </MenuPrimitive.Portal>\n )\n}\n\n// Radix's content took no `dir`: the root's applies.\nexport type DropdownMenuSubContentProps = Omit<NativePartProps<\"div\">, \"dir\"> &\n Omit<PositioningProps, \"side\" | \"align\"> & {\n /** Keeps the submenu's content mounted while it is closed. */\n forceMount?: true\n /** Moves the highlight from the last item to the first and back with the arrow keys. */\n loop?: boolean\n }\n\nexport const DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSubContentProps\n>(function DropdownMenuSubContent(\n {\n asChild = false,\n className,\n children,\n forceMount,\n loop,\n hideWhenDetached,\n updatePositionStrategy: _updatePositionStrategy,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment. A submenu\n // portals on its own, so it needs the same independent stamp as the top-level content.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n const dir = React.useContext(MenuDirContext)\n useLoopOnRoot(loop)\n\n return (\n <MenuPopupLayer\n container={undefined}\n forceMount={forceMount}\n hideWhenDetached={hideWhenDetached}\n placement={positionerProps({\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n })}\n popup={\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-sub-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n }\n />\n )\n})\n\nexport type DropdownMenuContentProps = Omit<NativePartProps<\"div\">, \"dir\"> &\n PositioningProps & {\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the content mounted while the menu is closed. */\n forceMount?: true\n /** Moves the highlight from the last item to the first and back with the arrow keys. */\n loop?: boolean\n /** Called before focus returns to the trigger on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n }\n\nexport const DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuContentProps\n>(function DropdownMenuContent(\n {\n asChild = false,\n className,\n children,\n container,\n forceMount,\n loop,\n onCloseAutoFocus,\n hideWhenDetached,\n updatePositionStrategy: _updatePositionStrategy,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n const dir = React.useContext(MenuDirContext)\n useLoopOnRoot(loop)\n\n return (\n <MenuPopupLayer\n container={container}\n forceMount={forceMount}\n hideWhenDetached={hideWhenDetached}\n placement={positionerProps({\n side,\n sideOffset,\n align,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n })}\n popup={\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n }\n />\n )\n})\n\nexport type DropdownMenuItemProps = Omit<NativePartProps<\"div\">, \"onSelect\"> &\n RadixItemProps & {\n inset?: boolean\n destructive?: boolean\n }\n\nexport const DropdownMenuItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuItemProps\n>(function DropdownMenuItem(\n {\n asChild = false,\n children,\n className,\n inset,\n destructive,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n return (\n <MenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(\n styles.item,\n inset && styles.itemInset,\n destructive && styles.itemDestructive,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\ntype CheckedState = boolean | \"indeterminate\"\n\nexport type DropdownMenuCheckboxItemProps = Omit<\n NativePartProps<\"div\">,\n \"onSelect\"\n> &\n RadixItemProps & {\n /** `indeterminate` shows the check and reads as mixed; toggling it checks the item. */\n checked?: CheckedState\n /** Called with the new state. Under Base UI the menu stays open after a toggle. */\n onCheckedChange?: (checked: boolean) => void\n }\n\nexport const DropdownMenuCheckboxItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuCheckboxItemProps\n>(function DropdownMenuCheckboxItem(\n {\n asChild = false,\n className,\n children,\n checked,\n onCheckedChange,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const indeterminate = checked === \"indeterminate\"\n const indicator = (\n <span className={styles.itemIndicatorWrapper}>\n <MenuPrimitive.CheckboxItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n\n return (\n <MenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-checkbox-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(styles.item, styles.itemCheckboxRadio, className)}\n // Base UI's checkbox item has no mixed state: show it checked, announce it mixed, and check\n // it on toggle, as Radix did.\n checked={indeterminate ? true : checked}\n {...(indeterminate ? { \"aria-checked\": \"mixed\" as const } : {})}\n onCheckedChange={\n onCheckedChange\n ? (next: boolean) => onCheckedChange(indeterminate ? true : next)\n : undefined\n }\n {...props}\n {...(child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n indicator,\n (child.props as { children?: React.ReactNode }).children\n ),\n }\n : {\n children: (\n <>\n {indicator}\n {children}\n </>\n ),\n })}\n />\n )\n})\n\nexport type DropdownMenuRadioItemProps = Omit<\n NativePartProps<\"div\">,\n \"onSelect\"\n> &\n RadixItemProps & {\n value: string\n }\n\nexport const DropdownMenuRadioItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuRadioItemProps\n>(function DropdownMenuRadioItem(\n {\n asChild = false,\n className,\n children,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const indicator = (\n <span className={styles.itemIndicatorWrapper}>\n <MenuPrimitive.RadioItemIndicator className={styles.itemIndicator}>\n <CircleIcon />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n\n return (\n <MenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-radio-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(styles.item, styles.itemCheckboxRadio, className)}\n {...props}\n {...(child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n indicator,\n (child.props as { children?: React.ReactNode }).children\n ),\n }\n : {\n children: (\n <>\n {indicator}\n {children}\n </>\n ),\n })}\n />\n )\n})\n\nexport type DropdownMenuLabelProps = NativePartProps<\"div\"> & {\n inset?: boolean\n}\n\n// Base UI's GroupLabel throws outside a Group, and labels stand alone at most call sites (data-table\n// included), so the label stays the plain element Radix rendered.\nexport const DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n DropdownMenuLabelProps\n>(function DropdownMenuLabel(\n { asChild = false, children, className, inset, ...props },\n ref\n) {\n const styles = useStyles()\n const slot = slotProps(asChild, children)\n\n return useRender({\n render: \"render\" in slot ? slot.render : <div />,\n ref,\n props: mergeProps<\"div\">(\n {\n \"data-slot\": \"dropdown-menu-label\",\n [SLOT_ATTR]: \"dropdown-menu-label\",\n className: mergeClasses(\n styles.label,\n inset && styles.itemInset,\n className\n ),\n } as React.ComponentProps<\"div\">,\n props,\n \"children\" in slot ? { children: slot.children } : {}\n ),\n })\n})\n\nexport type DropdownMenuSeparatorProps = NativePartProps<\"div\">\n\nexport const DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSeparatorProps\n>(function DropdownMenuSeparator(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <SeparatorPrimitive\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DropdownMenuShortcutProps = React.ComponentProps<\"span\">\n\nexport const DropdownMenuShortcut = React.forwardRef<\n HTMLSpanElement,\n DropdownMenuShortcutProps\n>(function DropdownMenuShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"dropdown-menu-shortcut\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n"],"names":["CheckIcon","props","jsx","ChevronRightIcon","CircleIcon","easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","tokens.accentA11","OVERLAY_Z_INDEX","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusXl","tokens.spacingElement1","tokens.spacingElement2","tokens.radiusMd","tokens.textSm","tokens.leadingSm","tokens.accentSoft","tokens.errorA11","tokens.errorSoft","tokens.errorA8","tokens.fontWeightSemibold","tokens.grayA3","tokens.textXs","tokens.leadingXs","tokens.grayA11","onlySlotChild","children","elements","React","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","escapesClosingASubmenu","honourHandledEscape","onOpenChange","submenu","open","eventDetails","escape","MenuLoopContext","MenuDirContext","useLoopOnRoot","loop","setLoop","DropdownMenu","dir","_ref","root","MenuPrimitive","DirectionProvider","DropdownMenuTrigger","className","ref","styles","nativeButton","SLOT_ATTR","mergeClasses","DropdownMenuGroup","DropdownMenuPortalPresenceContext","DropdownMenuContainerContext","portalContainer","container","DropdownMenuPortal","forceMount","DropdownMenuSub","selectOnClick","onClick","onSelect","DropdownMenuRadioGroup","onValueChange","value","DropdownMenuSubTrigger","inset","textValue","chevron","content","jsxs","Fragment","positionerProps","side","sideOffset","align","alignOffset","avoidCollisions","collisionBoundary","collisionPadding","arrowPadding","sticky","boundary","element","MenuPopupLayer","hideWhenDetached","placement","popup","hasPortal","inheritedContainer","ownContainer","positioner","DropdownMenuSubContent","_updatePositionStrategy","override","useDensity","appearance","useAppearanceAttributes","DropdownMenuContent","onCloseAutoFocus","DropdownMenuItem","destructive","DropdownMenuCheckboxItem","checked","onCheckedChange","indeterminate","indicator","next","DropdownMenuRadioItem","DropdownMenuLabel","slot","useRender","mergeProps","DropdownMenuSeparator","SeparatorPrimitive","DropdownMenuShortcut"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","sources":["../../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M504-480 348-636q-11-11-11-28t11-28q11-11 28-11t28 11l184 184q6 6 8.5 13t2.5 15q0 8-2.5 15t-8.5 13L404-268q-11 11-28 11t-28-11q-11-11-11-28t11-28l156-156Z\" />\n </svg>\n)\n\nconst CircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"8px\"\n viewBox=\"0 -960 960 960\"\n width=\"8px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\" />\n </svg>\n)\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n triggerReset: {\n ...nativeControl,\n },\n // The bare trigger's text colour, also skipped under `asChild`: there it reaches the child as a\n // caller class, which a Zenith child such as Button merges last, so it would replace the\n // child's own colour.\n trigger: {\n color: tokens.accentA11,\n },\n // The positioner is what stacks against other layers, as Radix's popper wrapper did; it also\n // keeps that wrapper's `max-content` floor so the content wraps the same way.\n positioner: {\n zIndex: OVERLAY_Z_INDEX,\n minWidth: \"max-content\",\n outlineStyle: \"none\",\n },\n // Radix's `hideWhenDetached`: Base UI marks the positioner when its anchor scrolls out of view.\n positionerHideWhenDetached: {\n \"&[data-anchor-hidden]\": {\n visibility: \"hidden\",\n pointerEvents: \"none\",\n },\n },\n popup: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n minWidth: \"10rem\",\n overflow: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusXl),\n ...shorthands.padding(tokens.spacingElement1),\n // v1 shadow-lg\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n outlineStyle: \"none\",\n zIndex: OVERLAY_Z_INDEX,\n transformOrigin: \"var(--transform-origin)\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n },\n \"&[data-starting-style][data-side='bottom']\": {\n transform: `translateY(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='left']\": {\n transform: `translateX(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='right']\": {\n transform: `translateX(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='top']\": {\n transform: `translateY(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n transitionDuration: \"100ms\",\n transitionTimingFunction: easeIn,\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n \"&[data-ending-style]\": {\n transitionDuration: \"0.01ms\",\n },\n },\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"pointer\",\n userSelect: \"none\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n backgroundColor: tokens.accentSoft,\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentSoft,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n itemInset: {\n ...boxModel,\n paddingLeft: \"2rem\",\n },\n itemDestructive: {\n color: tokens.errorA11,\n \":hover\": {\n backgroundColor: tokens.errorSoft,\n },\n \":focus-visible\": {\n backgroundColor: tokens.errorSoft,\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineColor: tokens.errorA8,\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.errorSoft,\n },\n },\n itemCheckboxRadio: {\n ...boxModel,\n paddingLeft: \"2rem\",\n paddingRight: tokens.spacingElement2,\n },\n itemIndicatorWrapper: {\n ...boxModel,\n position: \"absolute\",\n left: tokens.spacingElement2,\n display: \"flex\",\n height: \"0.875rem\",\n width: \"0.875rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemIndicator: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n subTrigger: {\n \"&[data-popup-open]\": {\n backgroundColor: tokens.accentSoft,\n },\n },\n subTriggerChevron: {\n ...boxModel,\n marginLeft: \"auto\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n label: {\n ...boxModel,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n },\n separator: {\n ...boxModel,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement1,\n marginBottom: tokens.spacingElement1,\n height: \"1px\",\n backgroundColor: tokens.grayA3,\n },\n shortcut: {\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n color: tokens.grayA11,\n },\n})\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `finalFocus`. `preventDefault()` leaves focus\n * where it is; otherwise the default move happens, because Base UI reads a callback that returns\n * `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument, on the menu and on a submenu: Base UI's\n * change details, declared in Zenith. Base UI's own type drags its menu store into the published\n * declarations, and TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does\n * in Base UI.\n */\ntype DropdownMenuOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"trigger-hover\"; event: MouseEvent }\n | { reason: \"trigger-focus\"; event: FocusEvent }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"list-navigation\"; event: KeyboardEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"item-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"sibling-open\"; event: Event }\n | { reason: \"cancel-open\"; event: MouseEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the menu in its current state. */\n cancel: () => void\n /** Lets the event propagate where the menu would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the menu's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\ntype OpenChangeHandler = (\n open: boolean,\n eventDetails: DropdownMenuOpenChangeDetails\n) => void\n\n// The Escapes a submenu closed on, which then close the menu above it (`closeParentOnEsc`). Base\n// UI's submenu prevents the event before the parent menu hears of it, so the parent would read it\n// as handled by some other layer.\nconst escapesClosingASubmenu = new WeakSet<Event>()\n\n/**\n * A layer inside the menu (a Volt popover or tooltip, which run on Radix, or a control handling\n * the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so one Escape\n * would close both. Honour the handled event. Consumers still mix Zenith with Volt on one page,\n * so this stays after the Radix teardown (D12).\n */\nfunction honourHandledEscape(\n onOpenChange: OpenChangeHandler | undefined,\n { submenu = false } = {}\n) {\n return (open: boolean, eventDetails: DropdownMenuOpenChangeDetails) => {\n const escape =\n eventDetails.reason === \"escape-key\" ? eventDetails.event : undefined\n if (escape?.defaultPrevented && !escapesClosingASubmenu.has(escape)) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n if (submenu && escape && !eventDetails.isCanceled) {\n escapesClosingASubmenu.add(escape)\n }\n }\n}\n\n/**\n * What the content of a menu or submenu hands up to its root: Radix took `loop` on the content,\n * Base UI takes `loopFocus` on the root. Both roots start from `false`, Radix's default, where\n * Base UI's menus wrap.\n */\nconst MenuLoopContext = React.createContext<(loop: boolean) => void>(() => {})\n\ntype Direction = \"ltr\" | \"rtl\"\n\n/** The root's `dir`, which Radix also stamped on the content. */\nconst MenuDirContext = React.createContext<Direction | undefined>(undefined)\n\nfunction useLoopOnRoot(loop: boolean | undefined) {\n const setLoop = React.useContext(MenuLoopContext)\n React.useEffect(() => {\n setLoop(loop ?? false)\n }, [setLoop, loop])\n}\n\nexport type DropdownMenuProps = {\n children?: React.ReactNode\n /** The reading direction of the menu and its submenus. Inherits the document's when omitted. */\n dir?: Direction\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the menu opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `item-press`, `focus-out`, …) and `eventDetails.cancel()` keeps\n * the menu in its current state.\n */\n onOpenChange?: OpenChangeHandler\n /**\n * While open, the menu locks page scroll and blocks pointer interaction outside it.\n * @default true\n */\n modal?: boolean\n}\n\nexport const DropdownMenu = React.forwardRef<HTMLElement, DropdownMenuProps>(\n function DropdownMenu({ dir, onOpenChange, children, ...props }, _ref) {\n const [loop, setLoop] = React.useState(false)\n\n const root = (\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n loopFocus={loop}\n onOpenChange={honourHandledEscape(onOpenChange)}\n {...props}\n >\n <MenuLoopContext.Provider value={setLoop}>\n <MenuDirContext.Provider value={dir}>\n {children}\n </MenuDirContext.Provider>\n </MenuLoopContext.Provider>\n </MenuPrimitive.Root>\n )\n\n return dir ? (\n <DirectionProvider direction={dir}>{root}</DirectionProvider>\n ) : (\n root\n )\n }\n)\n\nexport type DropdownMenuTriggerProps = NativePartProps<\"button\">\n\nexport const DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n DropdownMenuTriggerProps\n>(function DropdownMenuTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n const child = asChild ? onlySlotChild(children) : undefined\n // Base UI drives a native <button> unless told otherwise; a child that is another intrinsic\n // element gets the ARIA button behaviour Radix's Slot gave it.\n const nativeButton =\n !child || typeof child.type !== \"string\" || child.type === \"button\"\n\n return (\n <MenuPrimitive.Trigger\n ref={ref}\n data-slot=\"dropdown-menu-trigger\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-trigger\" }}\n nativeButton={nativeButton}\n className={mergeClasses(\n !asChild && styles.triggerReset,\n !asChild && styles.trigger,\n className\n )}\n {...props}\n {...(child ? { render: child } : { children })}\n />\n )\n})\n\nexport type DropdownMenuGroupProps = NativePartProps<\"div\">\n\nexport const DropdownMenuGroup = React.forwardRef<\n HTMLDivElement,\n DropdownMenuGroupProps\n>(function DropdownMenuGroup({ asChild = false, children, ...props }, ref) {\n return (\n <MenuPrimitive.Group\n ref={ref}\n data-slot=\"dropdown-menu-group\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-group\" }}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets the content use an enclosing DropdownMenuPortal instead of portalling itself, as Base UI's\n// Popup needs exactly one Portal above it. Content resets it, so a submenu inside portals on its\n// own unless a DropdownMenuPortal of its own wraps it.\nconst DropdownMenuPortalPresenceContext = React.createContext(false)\n\n// The element the content portalled into, so a submenu portals next to it rather than into the\n// body; Radix rendered submenus inline in their parent's content.\nconst DropdownMenuContainerContext = React.createContext<\n HTMLElement | undefined\n>(undefined)\n\n/** Radix took any Element or DocumentFragment, null meaning the body; Base UI reads null as \"wait for one\". */\nfunction portalContainer(\n container: Element | DocumentFragment | null | undefined\n) {\n return (container ?? undefined) as HTMLElement | undefined\n}\n\nexport type DropdownMenuPortalProps = {\n children?: React.ReactNode\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the content mounted while the menu is closed. */\n forceMount?: true\n}\n\nexport const DropdownMenuPortal = React.forwardRef<\n HTMLElement,\n DropdownMenuPortalProps\n>(function DropdownMenuPortal({ container, forceMount, ...props }, ref) {\n return (\n <DropdownMenuPortalPresenceContext.Provider value={true}>\n <DropdownMenuContainerContext.Provider value={portalContainer(container)}>\n <MenuPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"dropdown-menu-portal\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-portal\" }}\n container={portalContainer(container)}\n keepMounted={forceMount}\n {...props}\n />\n </DropdownMenuContainerContext.Provider>\n </DropdownMenuPortalPresenceContext.Provider>\n )\n})\n\nexport type DropdownMenuSubProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the submenu opens or closes, with the same `eventDetails` as DropdownMenu's\n * `onOpenChange`.\n */\n onOpenChange?: OpenChangeHandler\n}\n\nexport const DropdownMenuSub = React.forwardRef<\n HTMLElement,\n DropdownMenuSubProps\n>(function DropdownMenuSub({ onOpenChange, children, ...props }, _ref) {\n const [loop, setLoop] = React.useState(false)\n\n return (\n <MenuPrimitive.SubmenuRoot\n data-slot=\"dropdown-menu-sub\"\n loopFocus={loop}\n // Escape inside a Radix submenu closed the whole menu.\n closeParentOnEsc\n onOpenChange={honourHandledEscape(onOpenChange, { submenu: true })}\n {...props}\n >\n <MenuLoopContext.Provider value={setLoop}>\n {children}\n </MenuLoopContext.Provider>\n </MenuPrimitive.SubmenuRoot>\n )\n})\n\ntype RadixItemProps = {\n disabled?: boolean\n /**\n * Called when the item is chosen by pointer or keyboard. Under Base UI the menu closes\n * regardless; `preventDefault()` no longer keeps it open.\n */\n onSelect?: (event: Event) => void\n /** The text typeahead matches, when the item's content is not plain text. */\n textValue?: string\n}\n\n/** Radix's `onSelect` over Base UI's click handling, which covers pointer and keyboard selection. */\nfunction selectOnClick<Element>(\n onClick: React.MouseEventHandler<Element> | undefined,\n onSelect: ((event: Event) => void) | undefined\n): React.MouseEventHandler<Element> {\n return (event) => {\n onClick?.(event)\n onSelect?.(event.nativeEvent)\n }\n}\n\nexport type DropdownMenuRadioGroupProps = NativePartProps<\"div\"> & {\n value?: string\n onValueChange?: (value: string) => void\n}\n\nexport const DropdownMenuRadioGroup = React.forwardRef<\n HTMLDivElement,\n DropdownMenuRadioGroupProps\n>(function DropdownMenuRadioGroup(\n { asChild = false, children, onValueChange, ...props },\n ref\n) {\n return (\n <MenuPrimitive.RadioGroup\n ref={ref}\n data-slot=\"dropdown-menu-radio-group\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-radio-group\" }}\n onValueChange={\n onValueChange ? (value: string) => onValueChange(value) : undefined\n }\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DropdownMenuSubTriggerProps = NativePartProps<\"div\"> &\n Omit<RadixItemProps, \"onSelect\"> & {\n inset?: boolean\n }\n\nexport const DropdownMenuSubTrigger = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSubTriggerProps\n>(function DropdownMenuSubTrigger(\n { asChild = false, className, inset, textValue, children, ...props },\n ref\n) {\n const styles = useStyles()\n const chevron = <ChevronRightIcon className={styles.subTriggerChevron} />\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the chevron joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n chevron\n ),\n }\n : {\n children: (\n <>\n {children}\n {chevron}\n </>\n ),\n }\n\n return (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-sub-trigger\" }}\n label={textValue}\n className={mergeClasses(\n styles.item,\n styles.subTrigger,\n inset && styles.itemInset,\n className\n )}\n {...props}\n {...content}\n />\n )\n})\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\"\ntype Boundary = Element | null\n\n/** Radix's popper props, translated onto Base UI's Positioner. */\ntype PositioningProps = {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n align?: \"start\" | \"center\" | \"end\"\n alignOffset?: number\n /** Flips and shifts the content to keep it inside the collision boundary. */\n avoidCollisions?: boolean\n collisionBoundary?: Boundary | Boundary[]\n /** Distance from the boundary's edges; `0` unless set. */\n collisionPadding?: number | Partial<Record<Side, number>>\n arrowPadding?: number\n /** `always` keeps the content in the boundary even when its trigger leaves it. */\n sticky?: \"partial\" | \"always\"\n /** Hides the content while its trigger is scrolled out of view. */\n hideWhenDetached?: boolean\n /**\n * Kept for compatibility; has no effect. Base UI repositions the content whenever its trigger\n * or the page moves, and has no per-frame mode.\n */\n updatePositionStrategy?: \"optimized\" | \"always\"\n}\n\nfunction positionerProps({\n side,\n sideOffset,\n align,\n alignOffset,\n avoidCollisions = true,\n collisionBoundary,\n collisionPadding = 0,\n arrowPadding,\n sticky = \"partial\",\n}: PositioningProps) {\n const boundary = (\n Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary]\n ).filter((element): element is Element => element != null)\n\n return {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionPadding,\n sticky: sticky === \"always\",\n ...(boundary.length > 0\n ? { collisionBoundary: boundary.length === 1 ? boundary[0] : boundary }\n : {}),\n ...(avoidCollisions\n ? {}\n : {\n collisionAvoidance: {\n side: \"none\",\n align: \"none\",\n fallbackAxisSide: \"none\",\n } as const,\n }),\n }\n}\n\n/** The menu's open content, nested the way Base UI needs it: Portal > Positioner > Popup. */\nfunction MenuPopupLayer({\n container,\n forceMount,\n hideWhenDetached,\n placement,\n popup,\n}: {\n container: Element | DocumentFragment | null | undefined\n forceMount: true | undefined\n hideWhenDetached: boolean | undefined\n placement: ReturnType<typeof positionerProps>\n popup: React.ReactElement\n}) {\n const styles = useStyles()\n const hasPortal = React.useContext(DropdownMenuPortalPresenceContext)\n const inheritedContainer = React.useContext(DropdownMenuContainerContext)\n const ownContainer =\n container === undefined ? inheritedContainer : portalContainer(container)\n\n const positioner = (\n <MenuPrimitive.Positioner\n className={mergeClasses(\n styles.positioner,\n hideWhenDetached && styles.positionerHideWhenDetached\n )}\n {...placement}\n >\n <DropdownMenuPortalPresenceContext.Provider value={false}>\n <DropdownMenuContainerContext.Provider value={ownContainer}>\n {popup}\n </DropdownMenuContainerContext.Provider>\n </DropdownMenuPortalPresenceContext.Provider>\n </MenuPrimitive.Positioner>\n )\n\n // Base UI's Popup requires a Portal ancestor. An enclosing DropdownMenuPortal is that portal\n // unless the content names a container of its own, as its own portal did under Radix.\n return hasPortal && container === undefined ? (\n positioner\n ) : (\n <MenuPrimitive.Portal container={ownContainer} keepMounted={forceMount}>\n {positioner}\n </MenuPrimitive.Portal>\n )\n}\n\n// Radix's content took no `dir`: the root's applies.\nexport type DropdownMenuSubContentProps = Omit<NativePartProps<\"div\">, \"dir\"> &\n Omit<PositioningProps, \"side\" | \"align\"> & {\n /** Keeps the submenu's content mounted while it is closed. */\n forceMount?: true\n /** Moves the highlight from the last item to the first and back with the arrow keys. */\n loop?: boolean\n }\n\nexport const DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSubContentProps\n>(function DropdownMenuSubContent(\n {\n asChild = false,\n className,\n children,\n forceMount,\n loop,\n hideWhenDetached,\n updatePositionStrategy: _updatePositionStrategy,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment. A submenu\n // portals on its own, so it needs the same independent stamp as the top-level content.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n const dir = React.useContext(MenuDirContext)\n useLoopOnRoot(loop)\n\n return (\n <MenuPopupLayer\n container={undefined}\n forceMount={forceMount}\n hideWhenDetached={hideWhenDetached}\n placement={positionerProps({\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n })}\n popup={\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-sub-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n }\n />\n )\n})\n\nexport type DropdownMenuContentProps = Omit<NativePartProps<\"div\">, \"dir\"> &\n PositioningProps & {\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the content mounted while the menu is closed. */\n forceMount?: true\n /** Moves the highlight from the last item to the first and back with the arrow keys. */\n loop?: boolean\n /** Called before focus returns to the trigger on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n }\n\nexport const DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n DropdownMenuContentProps\n>(function DropdownMenuContent(\n {\n asChild = false,\n className,\n children,\n container,\n forceMount,\n loop,\n onCloseAutoFocus,\n hideWhenDetached,\n updatePositionStrategy: _updatePositionStrategy,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n const dir = React.useContext(MenuDirContext)\n useLoopOnRoot(loop)\n\n return (\n <MenuPopupLayer\n container={container}\n forceMount={forceMount}\n hideWhenDetached={hideWhenDetached}\n placement={positionerProps({\n side,\n sideOffset,\n align,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n })}\n popup={\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n }\n />\n )\n})\n\nexport type DropdownMenuItemProps = Omit<NativePartProps<\"div\">, \"onSelect\"> &\n RadixItemProps & {\n inset?: boolean\n destructive?: boolean\n }\n\nexport const DropdownMenuItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuItemProps\n>(function DropdownMenuItem(\n {\n asChild = false,\n children,\n className,\n inset,\n destructive,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n return (\n <MenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(\n styles.item,\n inset && styles.itemInset,\n destructive && styles.itemDestructive,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\ntype CheckedState = boolean | \"indeterminate\"\n\nexport type DropdownMenuCheckboxItemProps = Omit<\n NativePartProps<\"div\">,\n \"onSelect\"\n> &\n RadixItemProps & {\n /** `indeterminate` shows the check and reads as mixed; toggling it checks the item. */\n checked?: CheckedState\n /** Called with the new state. Under Base UI the menu stays open after a toggle. */\n onCheckedChange?: (checked: boolean) => void\n }\n\nexport const DropdownMenuCheckboxItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuCheckboxItemProps\n>(function DropdownMenuCheckboxItem(\n {\n asChild = false,\n className,\n children,\n checked,\n onCheckedChange,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const indeterminate = checked === \"indeterminate\"\n const indicator = (\n <span className={styles.itemIndicatorWrapper}>\n <MenuPrimitive.CheckboxItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n\n return (\n <MenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-checkbox-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(styles.item, styles.itemCheckboxRadio, className)}\n // Base UI's checkbox item has no mixed state: show it checked, announce it mixed, and check\n // it on toggle, as Radix did.\n checked={indeterminate ? true : checked}\n {...(indeterminate ? { \"aria-checked\": \"mixed\" as const } : {})}\n onCheckedChange={\n onCheckedChange\n ? (next: boolean) => onCheckedChange(indeterminate ? true : next)\n : undefined\n }\n {...props}\n {...(child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n indicator,\n (child.props as { children?: React.ReactNode }).children\n ),\n }\n : {\n children: (\n <>\n {indicator}\n {children}\n </>\n ),\n })}\n />\n )\n})\n\nexport type DropdownMenuRadioItemProps = Omit<\n NativePartProps<\"div\">,\n \"onSelect\"\n> &\n RadixItemProps & {\n value: string\n }\n\nexport const DropdownMenuRadioItem = React.forwardRef<\n HTMLDivElement,\n DropdownMenuRadioItemProps\n>(function DropdownMenuRadioItem(\n {\n asChild = false,\n className,\n children,\n textValue,\n onClick,\n onSelect,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const indicator = (\n <span className={styles.itemIndicatorWrapper}>\n <MenuPrimitive.RadioItemIndicator className={styles.itemIndicator}>\n <CircleIcon />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n\n return (\n <MenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-radio-item\" }}\n label={textValue}\n onClick={selectOnClick(onClick, onSelect)}\n className={mergeClasses(styles.item, styles.itemCheckboxRadio, className)}\n {...props}\n {...(child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n indicator,\n (child.props as { children?: React.ReactNode }).children\n ),\n }\n : {\n children: (\n <>\n {indicator}\n {children}\n </>\n ),\n })}\n />\n )\n})\n\nexport type DropdownMenuLabelProps = NativePartProps<\"div\"> & {\n inset?: boolean\n}\n\n// Base UI's GroupLabel throws outside a Group, and labels stand alone at most call sites (data-table\n// included), so the label stays the plain element Radix rendered.\nexport const DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n DropdownMenuLabelProps\n>(function DropdownMenuLabel(\n { asChild = false, children, className, inset, ...props },\n ref\n) {\n const styles = useStyles()\n const slot = slotProps(asChild, children)\n\n return useRender({\n render: \"render\" in slot ? slot.render : <div />,\n ref,\n props: mergeProps<\"div\">(\n {\n \"data-slot\": \"dropdown-menu-label\",\n [SLOT_ATTR]: \"dropdown-menu-label\",\n className: mergeClasses(\n styles.label,\n inset && styles.itemInset,\n className\n ),\n } as React.ComponentProps<\"div\">,\n props,\n \"children\" in slot ? { children: slot.children } : {}\n ),\n })\n})\n\nexport type DropdownMenuSeparatorProps = NativePartProps<\"div\">\n\nexport const DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n DropdownMenuSeparatorProps\n>(function DropdownMenuSeparator(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <SeparatorPrimitive\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DropdownMenuShortcutProps = React.ComponentProps<\"span\">\n\nexport const DropdownMenuShortcut = React.forwardRef<\n HTMLSpanElement,\n DropdownMenuShortcutProps\n>(function DropdownMenuShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"dropdown-menu-shortcut\"\n {...{ [SLOT_ATTR]: \"dropdown-menu-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n"],"names":["CheckIcon","props","jsx","ChevronRightIcon","CircleIcon","easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","tokens.accentA11","OVERLAY_Z_INDEX","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusXl","tokens.spacingElement1","tokens.spacingElement2","tokens.radiusMd","tokens.textSm","tokens.leadingSm","tokens.accentSoft","tokens.errorA11","tokens.errorSoft","tokens.errorA8","tokens.fontWeightSemibold","tokens.grayA3","tokens.textXs","tokens.leadingXs","tokens.grayA11","onlySlotChild","children","elements","React","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","escapesClosingASubmenu","honourHandledEscape","onOpenChange","submenu","open","eventDetails","escape","MenuLoopContext","MenuDirContext","useLoopOnRoot","loop","setLoop","DropdownMenu","dir","_ref","root","MenuPrimitive","DirectionProvider","DropdownMenuTrigger","className","ref","styles","nativeButton","SLOT_ATTR","mergeClasses","DropdownMenuGroup","DropdownMenuPortalPresenceContext","DropdownMenuContainerContext","portalContainer","container","DropdownMenuPortal","forceMount","DropdownMenuSub","selectOnClick","onClick","onSelect","DropdownMenuRadioGroup","onValueChange","value","DropdownMenuSubTrigger","inset","textValue","chevron","content","jsxs","Fragment","positionerProps","side","sideOffset","align","alignOffset","avoidCollisions","collisionBoundary","collisionPadding","arrowPadding","sticky","boundary","element","MenuPopupLayer","hideWhenDetached","placement","popup","hasPortal","inheritedContainer","ownContainer","positioner","DropdownMenuSubContent","_updatePositionStrategy","override","useDensity","appearance","useAppearanceAttributes","DropdownMenuContent","onCloseAutoFocus","DropdownMenuItem","destructive","DropdownMenuCheckboxItem","checked","onCheckedChange","indeterminate","indicator","next","DropdownMenuRadioItem","DropdownMenuLabel","slot","useRender","mergeProps","DropdownMenuSeparator","SeparatorPrimitive","DropdownMenuShortcut"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import * as m from "react";
|
|
|
3
3
|
import { SLOT_ATTR as c, mergeClasses as b, shorthands as d } from "@epilot/zenith-runtime/v1";
|
|
4
4
|
import { makeZenithStyles as B } from "../../styles/make-styles.js";
|
|
5
5
|
import { boxModel as s, nativeControl as R } from "../../styles/host-reset.js";
|
|
6
|
-
import { grayA8 as
|
|
7
|
-
import { CommandCollection as
|
|
6
|
+
import { grayA8 as D, focusRing as S, accentA11 as V, spacingElement2 as u, spacingGroup1 as h, grayA11 as y, spacingElement1 as L, graySoft as G, leadingXs as k, textXs as A, fontWeightSemibold as E, leadingSm as w, textSm as F, grayA12 as C, radiusMd as j, radiusLg as H } from "../../tokens/index.js";
|
|
7
|
+
import { CommandCollection as z, Command as W, CommandEmpty as M, CommandGroup as O, CommandGroupLabel as Z, CommandInput as X, CommandItem as $, CommandList as _, CommandLoading as J, CommandSeparator as K } from "../command/command.js";
|
|
8
8
|
import { Popover as Q, PopoverPortal as U, PopoverContent as Y, PopoverTrigger as oo } from "../popover/popover.js";
|
|
9
9
|
import { useFieldLabelId as eo, useOptionalFieldContext as to, useReportFieldControlId as no } from "./field.js";
|
|
10
10
|
const ro = (a) => /* @__PURE__ */ r(
|
|
@@ -48,7 +48,7 @@ const ro = (a) => /* @__PURE__ */ r(
|
|
|
48
48
|
alignItems: "center",
|
|
49
49
|
justifyContent: "space-between",
|
|
50
50
|
...d.gap(u),
|
|
51
|
-
...d.borderRadius(
|
|
51
|
+
...d.borderRadius(H),
|
|
52
52
|
backgroundColor: "transparent",
|
|
53
53
|
fontSize: F,
|
|
54
54
|
lineHeight: w,
|
|
@@ -103,9 +103,15 @@ const ro = (a) => /* @__PURE__ */ r(
|
|
|
103
103
|
whiteSpace: "normal",
|
|
104
104
|
marginRight: "1.25rem"
|
|
105
105
|
},
|
|
106
|
+
// Capped to the room on the popup's side of the trigger, which the Base UI positioner measures
|
|
107
|
+
// into `--available-height` (seeded before its first pass, so no fallback). As a column, the
|
|
108
|
+
// command root shrinks to fit and its list scrolls, under a search input that stays in place.
|
|
106
109
|
content: {
|
|
107
110
|
...s,
|
|
108
|
-
...d.padding(0)
|
|
111
|
+
...d.padding(0),
|
|
112
|
+
display: "flex",
|
|
113
|
+
flexDirection: "column",
|
|
114
|
+
maxHeight: "var(--available-height)"
|
|
109
115
|
},
|
|
110
116
|
command: {
|
|
111
117
|
...s,
|
|
@@ -219,7 +225,7 @@ const ro = (a) => /* @__PURE__ */ r(
|
|
|
219
225
|
...d.borderRadius("9999px"),
|
|
220
226
|
backgroundColor: "transparent",
|
|
221
227
|
...d.border("0"),
|
|
222
|
-
color:
|
|
228
|
+
color: V,
|
|
223
229
|
":focus-visible": {
|
|
224
230
|
outlineWidth: "2px",
|
|
225
231
|
outlineStyle: "solid",
|
|
@@ -251,7 +257,7 @@ const ro = (a) => /* @__PURE__ */ r(
|
|
|
251
257
|
color: "currentColor"
|
|
252
258
|
},
|
|
253
259
|
placeholder: {
|
|
254
|
-
color:
|
|
260
|
+
color: D
|
|
255
261
|
}
|
|
256
262
|
}), go = m.forwardRef(
|
|
257
263
|
function(t, o) {
|
|
@@ -437,7 +443,7 @@ const ro = (a) => /* @__PURE__ */ r(
|
|
|
437
443
|
...o
|
|
438
444
|
}
|
|
439
445
|
);
|
|
440
|
-
}), So = (a) => /* @__PURE__ */ r(
|
|
446
|
+
}), So = (a) => /* @__PURE__ */ r(z, { ...a }), Lo = m.forwardRef(function({ className: t, ...o }, n) {
|
|
441
447
|
const e = p();
|
|
442
448
|
return /* @__PURE__ */ r(
|
|
443
449
|
K,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-combobox.js","sources":["../../../src/components/field/field-combobox.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Command,\n CommandCollection,\n CommandEmpty,\n CommandGroup,\n CommandGroupLabel,\n CommandInput,\n CommandItem,\n CommandList,\n CommandLoading,\n CommandSeparator,\n type CommandCollectionProps,\n type CommandEmptyProps,\n type CommandGroupLabelProps,\n type CommandGroupProps,\n type CommandInputProps,\n type CommandItemProps,\n type CommandListProps,\n type CommandLoadingProps,\n type CommandRootProps,\n type CommandSeparatorProps,\n} from \"../command/command\"\nimport {\n Popover,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n type PopoverContentProps,\n type PopoverPortalProps,\n type PopoverProps,\n type PopoverTriggerProps,\n} from \"../popover/popover\"\nimport {\n useFieldLabelId,\n useOptionalFieldContext,\n useReportFieldControlId,\n} from \"./field\"\n\nconst CheckIcon = (props: React.ComponentProps<\"svg\">) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M459-381 314-526q-3-3-4.5-6.5T308-540q0-8 5.5-14t14.5-6h304q9 0 14.5 6t5.5 14q0 2-6 14L501-381q-5 5-10 7t-11 2q-6 0-11-2t-10-7Z\" />\n </svg>\n)\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-424 284-228q-11 11-28 11t-28-11q-11-11-11-28t11-28l196-196-196-196q-11-11-11-28t11-28q11-11 28-11t28 11l196 196 196-196q11-11 28-11t28 11q11 11 11 28t-11 28L536-480l196 196q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-424Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n trigger: {\n ...nativeControl,\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: \"transparent\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n whiteSpace: \"nowrap\",\n outlineStyle: \"none\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n\n // The open-state chevron rotation is declared HERE, on the trigger that carries the state\n // attribute, reaching the chevron by SLOT_ATTR.\n [`&[data-popup-open] [${SLOT_ATTR}=\"combobox-icon\"]`]: {\n transform: \"rotate(180deg)\",\n },\n },\n triggerInField: {\n outlineStyle: \"none\",\n \":focus-visible\": {\n outlineStyle: \"none\",\n },\n },\n triggerChevron: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n flexShrink: 0,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n color: tokens.grayA11,\n },\n value: {\n ...boxModel,\n color: tokens.grayA12,\n width: \"100%\",\n textAlign: \"left\",\n flexWrap: \"wrap\",\n display: \"flex\",\n ...shorthands.gap(tokens.spacingElement2),\n position: \"relative\",\n whiteSpace: \"normal\",\n marginRight: \"1.25rem\",\n },\n content: {\n ...boxModel,\n ...shorthands.padding(0),\n },\n command: {\n ...boxModel,\n width: \"100%\",\n ...shorthands.borderRadius(0),\n },\n input: {\n ...nativeControl,\n width: \"100%\",\n },\n list: {\n ...boxModel,\n ...shorthands.padding(tokens.spacingElement2),\n },\n item: {\n ...boxModel,\n paddingLeft: tokens.spacingGroup1,\n paddingRight: \"2rem\",\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n color: tokens.grayA12,\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n },\n itemCheckIcon: {\n ...boxModel,\n position: \"absolute\",\n right: tokens.spacingElement2,\n display: \"flex\",\n width: \"1rem\",\n height: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n checkSvg: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.grayA12,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n color: tokens.grayA12,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n group: {\n ...boxModel,\n ...shorthands.padding(0),\n },\n groupLabel: {\n ...boxModel,\n color: tokens.grayA11,\n fontWeight: tokens.fontWeightSemibold,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement2,\n paddingBottom: tokens.spacingElement2,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n pointerEvents: \"none\",\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement2,\n marginBottom: tokens.spacingElement2,\n height: \"1px\",\n },\n loading: {\n ...boxModel,\n color: tokens.grayA11,\n paddingLeft: tokens.spacingGroup1,\n paddingRight: tokens.spacingGroup1,\n paddingTop: tokens.spacingElement2,\n paddingBottom: tokens.spacingElement2,\n // A status region stays mounted; it takes room only while it has something to say.\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n clear: {\n ...boxModel,\n position: \"absolute\",\n right: \"2.75rem\",\n cursor: \"pointer\",\n minHeight: \"auto\",\n ...shorthands.padding(\"0.125rem\"),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n color: tokens.accentA11,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n },\n clearSvg: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n clearValue: {\n ...boxModel,\n cursor: \"pointer\",\n \":hover\": {\n opacity: 0.7,\n },\n color: \"currentColor\",\n ...shorthands.borderRadius(\"9999px\"),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n clearValueSvg: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: \"currentColor\",\n },\n placeholder: {\n color: tokens.grayA8,\n },\n})\n\nexport type FieldComboboxProps = PopoverProps\n\nexport const FieldCombobox = React.forwardRef<HTMLElement, FieldComboboxProps>(\n function FieldCombobox(props, _ref) {\n return (\n <Popover\n data-slot=\"combobox\"\n {...{ [SLOT_ATTR]: \"combobox\" }}\n {...props}\n />\n )\n }\n)\n\nexport type FieldComboboxTriggerProps = PopoverTriggerProps\n\nexport const FieldComboboxTrigger = React.forwardRef<\n HTMLButtonElement,\n FieldComboboxTriggerProps\n>(function FieldComboboxTrigger(\n { className, children, ...props },\n forwardedRef\n) {\n const styles = useStyles()\n // Optional on purpose: this part is valid standalone and only picks up field wiring\n // when nested inside one. See useOptionalFieldContext.\n const fieldContext = useOptionalFieldContext()\n const inField = fieldContext !== null\n const inputRef = fieldContext?.inputRef ?? null\n // The Field names the list with the label whose `htmlFor` is this id, so it follows a change.\n useReportFieldControlId(props.id)\n\n const handleRef = (el: HTMLButtonElement | null) => {\n if (inputRef) {\n inputRef.current = el\n }\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el)\n } else if (forwardedRef) {\n forwardedRef.current = el\n }\n }\n\n return (\n <PopoverTrigger\n ref={handleRef}\n data-slot=\"select-trigger\"\n {...{ [SLOT_ATTR]: \"select-trigger\" }}\n className={mergeClasses(\n styles.trigger,\n inField && styles.triggerInField,\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n data-slot=\"combobox-icon\"\n {...{ [SLOT_ATTR]: \"combobox-icon\" }}\n className={styles.triggerChevron}\n />\n </PopoverTrigger>\n )\n})\n\n/**\n * The popover holding the search and the list, and the root of the search: `items` are filtered\n * against the input's text, and the list renders the matches.\n */\nexport type FieldComboboxContentProps = Omit<\n PopoverContentProps,\n \"defaultValue\"\n> &\n CommandRootProps & {\n container?: PopoverPortalProps[\"container\"]\n }\n\nexport const FieldComboboxContent = React.forwardRef<\n HTMLDivElement,\n FieldComboboxContentProps\n>(function FieldComboboxContent(\n {\n className,\n children,\n container,\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n return (\n <PopoverPortal container={container}>\n <PopoverContent\n ref={ref}\n data-slot=\"combobox-content\"\n {...{ [SLOT_ATTR]: \"combobox-content\" }}\n className={mergeClasses(styles.content, className)}\n {...props}\n >\n <Command\n data-slot=\"combobox-command\"\n {...{ [SLOT_ATTR]: \"combobox-command\" }}\n className={styles.command}\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Command>\n </PopoverContent>\n </PopoverPortal>\n )\n})\n\nexport type FieldComboboxValueProps = React.ComponentProps<\"div\">\n\nexport const FieldComboboxValue = React.forwardRef<\n HTMLDivElement,\n FieldComboboxValueProps\n>(function FieldComboboxValue({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"combobox-value\"\n {...{ [SLOT_ATTR]: \"combobox-value\" }}\n className={mergeClasses(styles.value, className)}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nexport type FieldComboboxInputProps = CommandInputProps\n\nexport const FieldComboboxInput = React.forwardRef<\n HTMLInputElement,\n FieldComboboxInputProps\n>(function FieldComboboxInput({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandInput\n ref={ref}\n data-slot=\"combobox-command-input\"\n {...{ [SLOT_ATTR]: \"combobox-command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxListProps = CommandListProps\n\n/** Inside a Field, the list is named by the Field's label, like the control; otherwise \"Suggestions\". */\nexport const FieldComboboxList = React.forwardRef<\n HTMLDivElement,\n FieldComboboxListProps\n>(function FieldComboboxList(\n {\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const fieldLabelId = useFieldLabelId()\n\n return (\n <CommandList\n ref={ref}\n data-slot=\"combobox-command-list\"\n {...{ [SLOT_ATTR]: \"combobox-command-list\" }}\n className={mergeClasses(styles.list, className)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy ?? (ariaLabel ? undefined : fieldLabelId)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxItemProps = CommandItemProps\n\nexport const FieldComboboxItem = React.forwardRef<\n HTMLDivElement,\n FieldComboboxItemProps\n>(function FieldComboboxItem({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandItem\n ref={ref}\n data-slot=\"combobox-item\"\n {...{ [SLOT_ATTR]: \"combobox-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n >\n {children}\n </CommandItem>\n )\n})\n\nexport type FieldComboboxItemCheckIconProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxItemCheckIcon = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxItemCheckIconProps\n>(function FieldComboboxItemCheckIcon({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n className={mergeClasses(styles.itemCheckIcon, className)}\n {...props}\n >\n <CheckIcon className={styles.checkSvg} />\n </span>\n )\n})\n\nexport type FieldComboboxEmptyProps = CommandEmptyProps\n\nexport const FieldComboboxEmpty = React.forwardRef<\n HTMLDivElement,\n FieldComboboxEmptyProps\n>(function FieldComboboxEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandEmpty\n ref={ref}\n data-slot=\"combobox-empty\"\n {...{ [SLOT_ATTR]: \"combobox-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxGroupProps = CommandGroupProps\n\nexport const FieldComboboxGroup = React.forwardRef<\n HTMLDivElement,\n FieldComboboxGroupProps\n>(function FieldComboboxGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandGroup\n ref={ref}\n data-slot=\"combobox-group\"\n {...{ [SLOT_ATTR]: \"combobox-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxGroupLabelProps = CommandGroupLabelProps\n\nexport const FieldComboboxGroupLabel = React.forwardRef<\n HTMLDivElement,\n FieldComboboxGroupLabelProps\n>(function FieldComboboxGroupLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandGroupLabel\n ref={ref}\n data-slot=\"combobox-group-label\"\n {...{ [SLOT_ATTR]: \"combobox-group-label\" }}\n className={mergeClasses(styles.groupLabel, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxCollectionProps = CommandCollectionProps\n\n/**\n * Renders the matching items of the enclosing FieldComboboxGroup.\n * @no-host-element Base UI's Collection renders only the items, so there is no element to take a ref.\n */\nexport const FieldComboboxCollection = (\n props: FieldComboboxCollectionProps\n) => <CommandCollection {...props} />\n\nexport type FieldComboboxSeparatorProps = CommandSeparatorProps\n\nexport const FieldComboboxSeparator = React.forwardRef<\n HTMLDivElement,\n FieldComboboxSeparatorProps\n>(function FieldComboboxSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandSeparator\n ref={ref}\n data-slot=\"select-separator\"\n {...{ [SLOT_ATTR]: \"select-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxLoadingProps = CommandLoadingProps\n\nexport const FieldComboboxLoading = React.forwardRef<\n HTMLDivElement,\n FieldComboboxLoadingProps\n>(function FieldComboboxLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandLoading\n ref={ref}\n data-slot=\"combobox-command-loading\"\n {...{ [SLOT_ATTR]: \"combobox-command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxClearProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxClear = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxClearProps\n>(function FieldComboboxClear({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n className={mergeClasses(styles.clear, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.clearSvg} />\n </span>\n )\n})\n\nexport type FieldComboboxPlaceholderProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxPlaceholder = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxPlaceholderProps\n>(function FieldComboboxPlaceholder({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n className={mergeClasses(styles.placeholder, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxClearValueProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxClearValue = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxClearValueProps\n>(function FieldComboboxClearValue({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n className={mergeClasses(styles.clearValue, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.clearValueSvg} />\n </span>\n )\n})\n\nexport {\n FieldCombobox as Combobox,\n FieldComboboxGroup as ComboboxGroup,\n FieldComboboxGroupLabel as ComboboxGroupLabel,\n FieldComboboxCollection as ComboboxCollection,\n FieldComboboxValue as ComboboxValue,\n FieldComboboxTrigger as ComboboxTrigger,\n FieldComboboxContent as ComboboxContent,\n FieldComboboxItem as ComboboxItem,\n FieldComboboxItemCheckIcon as ComboboxItemCheckIcon,\n FieldComboboxEmpty as ComboboxEmpty,\n FieldComboboxSeparator as ComboboxSeparator,\n FieldComboboxInput as ComboboxInput,\n FieldComboboxList as ComboboxList,\n FieldComboboxLoading as ComboboxLoading,\n FieldComboboxClear as ComboboxClear,\n FieldComboboxClearValue as ComboboxClearValue,\n FieldComboboxPlaceholder as ComboboxPlaceholder,\n}\n"],"names":["CheckIcon","props","jsx","ChevronDownIcon","XIcon","useStyles","makeZenithStyles","nativeControl","shorthands","tokens.spacingElement2","tokens.radiusLg","tokens.textSm","tokens.leadingSm","tokens.focusRing","SLOT_ATTR","boxModel","tokens.grayA11","tokens.grayA12","tokens.spacingGroup1","tokens.radiusMd","tokens.fontWeightSemibold","tokens.textXs","tokens.leadingXs","tokens.graySoft","tokens.spacingElement1","tokens.accentA11","tokens.grayA8","FieldCombobox","React","_ref","Popover","FieldComboboxTrigger","className","children","forwardedRef","styles","fieldContext","useOptionalFieldContext","inField","inputRef","useReportFieldControlId","jsxs","PopoverTrigger","el","mergeClasses","FieldComboboxContent","container","items","filter","itemToStringValue","limit","value","defaultValue","onValueChange","ref","PopoverPortal","PopoverContent","Command","FieldComboboxValue","FieldComboboxInput","CommandInput","FieldComboboxList","ariaLabel","ariaLabelledBy","fieldLabelId","useFieldLabelId","CommandList","FieldComboboxItem","CommandItem","FieldComboboxItemCheckIcon","FieldComboboxEmpty","CommandEmpty","FieldComboboxGroup","CommandGroup","FieldComboboxGroupLabel","CommandGroupLabel","FieldComboboxCollection","CommandCollection","FieldComboboxSeparator","CommandSeparator","FieldComboboxLoading","CommandLoading","FieldComboboxClear","onClick","event","FieldComboboxPlaceholder","FieldComboboxClearValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-combobox.js","sources":["../../../src/components/field/field-combobox.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Command,\n CommandCollection,\n CommandEmpty,\n CommandGroup,\n CommandGroupLabel,\n CommandInput,\n CommandItem,\n CommandList,\n CommandLoading,\n CommandSeparator,\n type CommandCollectionProps,\n type CommandEmptyProps,\n type CommandGroupLabelProps,\n type CommandGroupProps,\n type CommandInputProps,\n type CommandItemProps,\n type CommandListProps,\n type CommandLoadingProps,\n type CommandRootProps,\n type CommandSeparatorProps,\n} from \"../command/command\"\nimport {\n Popover,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n type PopoverContentProps,\n type PopoverPortalProps,\n type PopoverProps,\n type PopoverTriggerProps,\n} from \"../popover/popover\"\nimport {\n useFieldLabelId,\n useOptionalFieldContext,\n useReportFieldControlId,\n} from \"./field\"\n\nconst CheckIcon = (props: React.ComponentProps<\"svg\">) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M459-381 314-526q-3-3-4.5-6.5T308-540q0-8 5.5-14t14.5-6h304q9 0 14.5 6t5.5 14q0 2-6 14L501-381q-5 5-10 7t-11 2q-6 0-11-2t-10-7Z\" />\n </svg>\n)\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-424 284-228q-11 11-28 11t-28-11q-11-11-11-28t11-28l196-196-196-196q-11-11-11-28t11-28q11-11 28-11t28 11l196 196 196-196q11-11 28-11t28 11q11 11 11 28t-11 28L536-480l196 196q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-424Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n trigger: {\n ...nativeControl,\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: \"transparent\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n whiteSpace: \"nowrap\",\n outlineStyle: \"none\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n\n // The open-state chevron rotation is declared HERE, on the trigger that carries the state\n // attribute, reaching the chevron by SLOT_ATTR.\n [`&[data-popup-open] [${SLOT_ATTR}=\"combobox-icon\"]`]: {\n transform: \"rotate(180deg)\",\n },\n },\n triggerInField: {\n outlineStyle: \"none\",\n \":focus-visible\": {\n outlineStyle: \"none\",\n },\n },\n triggerChevron: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n flexShrink: 0,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n color: tokens.grayA11,\n },\n value: {\n ...boxModel,\n color: tokens.grayA12,\n width: \"100%\",\n textAlign: \"left\",\n flexWrap: \"wrap\",\n display: \"flex\",\n ...shorthands.gap(tokens.spacingElement2),\n position: \"relative\",\n whiteSpace: \"normal\",\n marginRight: \"1.25rem\",\n },\n // Capped to the room on the popup's side of the trigger, which the Base UI positioner measures\n // into `--available-height` (seeded before its first pass, so no fallback). As a column, the\n // command root shrinks to fit and its list scrolls, under a search input that stays in place.\n content: {\n ...boxModel,\n ...shorthands.padding(0),\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"var(--available-height)\",\n },\n command: {\n ...boxModel,\n width: \"100%\",\n ...shorthands.borderRadius(0),\n },\n input: {\n ...nativeControl,\n width: \"100%\",\n },\n list: {\n ...boxModel,\n ...shorthands.padding(tokens.spacingElement2),\n },\n item: {\n ...boxModel,\n paddingLeft: tokens.spacingGroup1,\n paddingRight: \"2rem\",\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n color: tokens.grayA12,\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n },\n itemCheckIcon: {\n ...boxModel,\n position: \"absolute\",\n right: tokens.spacingElement2,\n display: \"flex\",\n width: \"1rem\",\n height: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n checkSvg: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.grayA12,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n color: tokens.grayA12,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n group: {\n ...boxModel,\n ...shorthands.padding(0),\n },\n groupLabel: {\n ...boxModel,\n color: tokens.grayA11,\n fontWeight: tokens.fontWeightSemibold,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement2,\n paddingBottom: tokens.spacingElement2,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n pointerEvents: \"none\",\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement2,\n marginBottom: tokens.spacingElement2,\n height: \"1px\",\n },\n loading: {\n ...boxModel,\n color: tokens.grayA11,\n paddingLeft: tokens.spacingGroup1,\n paddingRight: tokens.spacingGroup1,\n paddingTop: tokens.spacingElement2,\n paddingBottom: tokens.spacingElement2,\n // A status region stays mounted; it takes room only while it has something to say.\n \":empty\": {\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n clear: {\n ...boxModel,\n position: \"absolute\",\n right: \"2.75rem\",\n cursor: \"pointer\",\n minHeight: \"auto\",\n ...shorthands.padding(\"0.125rem\"),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n color: tokens.accentA11,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n },\n clearSvg: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n clearValue: {\n ...boxModel,\n cursor: \"pointer\",\n \":hover\": {\n opacity: 0.7,\n },\n color: \"currentColor\",\n ...shorthands.borderRadius(\"9999px\"),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n clearValueSvg: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: \"currentColor\",\n },\n placeholder: {\n color: tokens.grayA8,\n },\n})\n\nexport type FieldComboboxProps = PopoverProps\n\nexport const FieldCombobox = React.forwardRef<HTMLElement, FieldComboboxProps>(\n function FieldCombobox(props, _ref) {\n return (\n <Popover\n data-slot=\"combobox\"\n {...{ [SLOT_ATTR]: \"combobox\" }}\n {...props}\n />\n )\n }\n)\n\nexport type FieldComboboxTriggerProps = PopoverTriggerProps\n\nexport const FieldComboboxTrigger = React.forwardRef<\n HTMLButtonElement,\n FieldComboboxTriggerProps\n>(function FieldComboboxTrigger(\n { className, children, ...props },\n forwardedRef\n) {\n const styles = useStyles()\n // Optional on purpose: this part is valid standalone and only picks up field wiring\n // when nested inside one. See useOptionalFieldContext.\n const fieldContext = useOptionalFieldContext()\n const inField = fieldContext !== null\n const inputRef = fieldContext?.inputRef ?? null\n // The Field names the list with the label whose `htmlFor` is this id, so it follows a change.\n useReportFieldControlId(props.id)\n\n const handleRef = (el: HTMLButtonElement | null) => {\n if (inputRef) {\n inputRef.current = el\n }\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el)\n } else if (forwardedRef) {\n forwardedRef.current = el\n }\n }\n\n return (\n <PopoverTrigger\n ref={handleRef}\n data-slot=\"select-trigger\"\n {...{ [SLOT_ATTR]: \"select-trigger\" }}\n className={mergeClasses(\n styles.trigger,\n inField && styles.triggerInField,\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n data-slot=\"combobox-icon\"\n {...{ [SLOT_ATTR]: \"combobox-icon\" }}\n className={styles.triggerChevron}\n />\n </PopoverTrigger>\n )\n})\n\n/**\n * The popover holding the search and the list, and the root of the search: `items` are filtered\n * against the input's text, and the list renders the matches.\n */\nexport type FieldComboboxContentProps = Omit<\n PopoverContentProps,\n \"defaultValue\"\n> &\n CommandRootProps & {\n container?: PopoverPortalProps[\"container\"]\n }\n\nexport const FieldComboboxContent = React.forwardRef<\n HTMLDivElement,\n FieldComboboxContentProps\n>(function FieldComboboxContent(\n {\n className,\n children,\n container,\n items,\n filter,\n itemToStringValue,\n limit,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n return (\n <PopoverPortal container={container}>\n <PopoverContent\n ref={ref}\n data-slot=\"combobox-content\"\n {...{ [SLOT_ATTR]: \"combobox-content\" }}\n className={mergeClasses(styles.content, className)}\n {...props}\n >\n <Command\n data-slot=\"combobox-command\"\n {...{ [SLOT_ATTR]: \"combobox-command\" }}\n className={styles.command}\n items={items}\n filter={filter}\n itemToStringValue={itemToStringValue}\n limit={limit}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </Command>\n </PopoverContent>\n </PopoverPortal>\n )\n})\n\nexport type FieldComboboxValueProps = React.ComponentProps<\"div\">\n\nexport const FieldComboboxValue = React.forwardRef<\n HTMLDivElement,\n FieldComboboxValueProps\n>(function FieldComboboxValue({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"combobox-value\"\n {...{ [SLOT_ATTR]: \"combobox-value\" }}\n className={mergeClasses(styles.value, className)}\n {...props}\n >\n {children}\n </div>\n )\n})\n\nexport type FieldComboboxInputProps = CommandInputProps\n\nexport const FieldComboboxInput = React.forwardRef<\n HTMLInputElement,\n FieldComboboxInputProps\n>(function FieldComboboxInput({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandInput\n ref={ref}\n data-slot=\"combobox-command-input\"\n {...{ [SLOT_ATTR]: \"combobox-command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxListProps = CommandListProps\n\n/** Inside a Field, the list is named by the Field's label, like the control; otherwise \"Suggestions\". */\nexport const FieldComboboxList = React.forwardRef<\n HTMLDivElement,\n FieldComboboxListProps\n>(function FieldComboboxList(\n {\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const fieldLabelId = useFieldLabelId()\n\n return (\n <CommandList\n ref={ref}\n data-slot=\"combobox-command-list\"\n {...{ [SLOT_ATTR]: \"combobox-command-list\" }}\n className={mergeClasses(styles.list, className)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy ?? (ariaLabel ? undefined : fieldLabelId)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxItemProps = CommandItemProps\n\nexport const FieldComboboxItem = React.forwardRef<\n HTMLDivElement,\n FieldComboboxItemProps\n>(function FieldComboboxItem({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandItem\n ref={ref}\n data-slot=\"combobox-item\"\n {...{ [SLOT_ATTR]: \"combobox-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n >\n {children}\n </CommandItem>\n )\n})\n\nexport type FieldComboboxItemCheckIconProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxItemCheckIcon = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxItemCheckIconProps\n>(function FieldComboboxItemCheckIcon({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n className={mergeClasses(styles.itemCheckIcon, className)}\n {...props}\n >\n <CheckIcon className={styles.checkSvg} />\n </span>\n )\n})\n\nexport type FieldComboboxEmptyProps = CommandEmptyProps\n\nexport const FieldComboboxEmpty = React.forwardRef<\n HTMLDivElement,\n FieldComboboxEmptyProps\n>(function FieldComboboxEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandEmpty\n ref={ref}\n data-slot=\"combobox-empty\"\n {...{ [SLOT_ATTR]: \"combobox-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxGroupProps = CommandGroupProps\n\nexport const FieldComboboxGroup = React.forwardRef<\n HTMLDivElement,\n FieldComboboxGroupProps\n>(function FieldComboboxGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandGroup\n ref={ref}\n data-slot=\"combobox-group\"\n {...{ [SLOT_ATTR]: \"combobox-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxGroupLabelProps = CommandGroupLabelProps\n\nexport const FieldComboboxGroupLabel = React.forwardRef<\n HTMLDivElement,\n FieldComboboxGroupLabelProps\n>(function FieldComboboxGroupLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandGroupLabel\n ref={ref}\n data-slot=\"combobox-group-label\"\n {...{ [SLOT_ATTR]: \"combobox-group-label\" }}\n className={mergeClasses(styles.groupLabel, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxCollectionProps = CommandCollectionProps\n\n/**\n * Renders the matching items of the enclosing FieldComboboxGroup.\n * @no-host-element Base UI's Collection renders only the items, so there is no element to take a ref.\n */\nexport const FieldComboboxCollection = (\n props: FieldComboboxCollectionProps\n) => <CommandCollection {...props} />\n\nexport type FieldComboboxSeparatorProps = CommandSeparatorProps\n\nexport const FieldComboboxSeparator = React.forwardRef<\n HTMLDivElement,\n FieldComboboxSeparatorProps\n>(function FieldComboboxSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandSeparator\n ref={ref}\n data-slot=\"select-separator\"\n {...{ [SLOT_ATTR]: \"select-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxLoadingProps = CommandLoadingProps\n\nexport const FieldComboboxLoading = React.forwardRef<\n HTMLDivElement,\n FieldComboboxLoadingProps\n>(function FieldComboboxLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandLoading\n ref={ref}\n data-slot=\"combobox-command-loading\"\n {...{ [SLOT_ATTR]: \"combobox-command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxClearProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxClear = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxClearProps\n>(function FieldComboboxClear({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n className={mergeClasses(styles.clear, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.clearSvg} />\n </span>\n )\n})\n\nexport type FieldComboboxPlaceholderProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxPlaceholder = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxPlaceholderProps\n>(function FieldComboboxPlaceholder({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n className={mergeClasses(styles.placeholder, className)}\n {...props}\n />\n )\n})\n\nexport type FieldComboboxClearValueProps = React.ComponentProps<\"span\">\n\nexport const FieldComboboxClearValue = React.forwardRef<\n HTMLSpanElement,\n FieldComboboxClearValueProps\n>(function FieldComboboxClearValue({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n className={mergeClasses(styles.clearValue, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.clearValueSvg} />\n </span>\n )\n})\n\nexport {\n FieldCombobox as Combobox,\n FieldComboboxGroup as ComboboxGroup,\n FieldComboboxGroupLabel as ComboboxGroupLabel,\n FieldComboboxCollection as ComboboxCollection,\n FieldComboboxValue as ComboboxValue,\n FieldComboboxTrigger as ComboboxTrigger,\n FieldComboboxContent as ComboboxContent,\n FieldComboboxItem as ComboboxItem,\n FieldComboboxItemCheckIcon as ComboboxItemCheckIcon,\n FieldComboboxEmpty as ComboboxEmpty,\n FieldComboboxSeparator as ComboboxSeparator,\n FieldComboboxInput as ComboboxInput,\n FieldComboboxList as ComboboxList,\n FieldComboboxLoading as ComboboxLoading,\n FieldComboboxClear as ComboboxClear,\n FieldComboboxClearValue as ComboboxClearValue,\n FieldComboboxPlaceholder as ComboboxPlaceholder,\n}\n"],"names":["CheckIcon","props","jsx","ChevronDownIcon","XIcon","useStyles","makeZenithStyles","nativeControl","shorthands","tokens.spacingElement2","tokens.radiusLg","tokens.textSm","tokens.leadingSm","tokens.focusRing","SLOT_ATTR","boxModel","tokens.grayA11","tokens.grayA12","tokens.spacingGroup1","tokens.radiusMd","tokens.fontWeightSemibold","tokens.textXs","tokens.leadingXs","tokens.graySoft","tokens.spacingElement1","tokens.accentA11","tokens.grayA8","FieldCombobox","React","_ref","Popover","FieldComboboxTrigger","className","children","forwardedRef","styles","fieldContext","useOptionalFieldContext","inField","inputRef","useReportFieldControlId","jsxs","PopoverTrigger","el","mergeClasses","FieldComboboxContent","container","items","filter","itemToStringValue","limit","value","defaultValue","onValueChange","ref","PopoverPortal","PopoverContent","Command","FieldComboboxValue","FieldComboboxInput","CommandInput","FieldComboboxList","ariaLabel","ariaLabelledBy","fieldLabelId","useFieldLabelId","CommandList","FieldComboboxItem","CommandItem","FieldComboboxItemCheckIcon","FieldComboboxEmpty","CommandEmpty","FieldComboboxGroup","CommandGroup","FieldComboboxGroupLabel","CommandGroupLabel","FieldComboboxCollection","CommandCollection","FieldComboboxSeparator","CommandSeparator","FieldComboboxLoading","CommandLoading","FieldComboboxClear","onClick","event","FieldComboboxPlaceholder","FieldComboboxClearValue"],"mappings":";;;;;;;;;AA8CA,MAAMA,KAAY,CAACC,MACjB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,uJAAA,CAAuJ;AAAA,EAAA;AACjK,GAGIC,KAAkB,CAACF,MACvB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,kIAAA,CAAkI;AAAA,EAAA;AAC5I,GAGIE,IAAQ,CAACH,MACb,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,oOAAA,CAAoO;AAAA,EAAA;AAC9O,GAGIG,IAAYC,EAAiB;AAAA,EACjC,SAAS;AAAA,IACP,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,GAAGC,EAAW,IAAIC,CAAsB;AAAA,IACxC,GAAGD,EAAW,aAAaE,CAAe;AAAA,IAC1C,iBAAiB;AAAA,IACjB,UAAUC;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAGJ,EAAW,OAAO,GAAG;AAAA,IACxB,GAAGA,EAAW,QAAQ,CAAC;AAAA,IACvB,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAcK;AAAAA,IAAO;AAAA,IAEvB,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA;AAAA;AAAA;AAAA,IAKX,CAAC,uBAAuBC,CAAS,mBAAmB,GAAG;AAAA,MACrD,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,gBAAgB;AAAA,IACd,cAAc;AAAA,IACd,kBAAkB;AAAA,MAChB,cAAc;AAAA,IAAA;AAAA,EAChB;AAAA,EAEF,gBAAgB;AAAA,IACd,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,2CAA2C;AAAA,MACzC,oBAAoB;AAAA,IAAA;AAAA,IAEtB,OAAOC;AAAAA,EAAO;AAAA,EAEhB,OAAO;AAAA,IACL,GAAGD;AAAA,IACH,OAAOE;AAAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,GAAGT,EAAW,IAAIC,CAAsB;AAAA,IACxC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKf,SAAS;AAAA,IACP,GAAGM;AAAA,IACH,GAAGP,EAAW,QAAQ,CAAC;AAAA,IACvB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,WAAW;AAAA,EAAA;AAAA,EAEb,SAAS;AAAA,IACP,GAAGO;AAAA,IACH,OAAO;AAAA,IACP,GAAGP,EAAW,aAAa,CAAC;AAAA,EAAA;AAAA,EAE9B,OAAO;AAAA,IACL,GAAGD;AAAA,IACH,OAAO;AAAA,EAAA;AAAA,EAET,MAAM;AAAA,IACJ,GAAGQ;AAAA,IACH,GAAGP,EAAW,QAAQC,CAAsB;AAAA,EAAA;AAAA,EAE9C,MAAM;AAAA,IACJ,GAAGM;AAAA,IACH,aAAaG;AAAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,OAAOD;AAAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,GAAGT,EAAW,IAAIC,CAAsB;AAAA,IACxC,GAAGD,EAAW,aAAaW,CAAe;AAAA,IAC1C,UAAUR;AAAAA,IACV,YAAYC;AAAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA,EAAA;AAAA,EAEd,eAAe;AAAA,IACb,GAAGG;AAAA,IACH,UAAU;AAAA,IACV,OAAON;AAAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAAA;AAAA,EAElB,UAAU;AAAA,IACR,GAAGM;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAOE;AAAAA,EAAO;AAAA,EAEhB,OAAO;AAAA,IACL,GAAGF;AAAA,IACH,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAOE;AAAAA,IACP,UAAUN;AAAAA,IACV,YAAYC;AAAAA,IACZ,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,eAAe;AAAA,IAAA;AAAA,EACjB;AAAA,EAEF,OAAO;AAAA,IACL,GAAGG;AAAA,IACH,GAAGP,EAAW,QAAQ,CAAC;AAAA,EAAA;AAAA,EAEzB,YAAY;AAAA,IACV,GAAGO;AAAA,IACH,OAAOC;AAAAA,IACP,YAAYI;AAAAA,IACZ,aAAaX;AAAAA,IACb,cAAcA;AAAAA,IACd,YAAYA;AAAAA,IACZ,eAAeA;AAAAA,IACf,UAAUY;AAAAA,IACV,YAAYC;AAAAA,EAAO;AAAA,EAErB,WAAW;AAAA,IACT,GAAGP;AAAA,IACH,iBAAiBQ;AAAAA,IACjB,eAAe;AAAA,IACf,YAAY,aAAaC,CAAsB;AAAA,IAC/C,aAAa,aAAaA,CAAsB;AAAA,IAChD,WAAWf;AAAAA,IACX,cAAcA;AAAAA,IACd,QAAQ;AAAA,EAAA;AAAA,EAEV,SAAS;AAAA,IACP,GAAGM;AAAA,IACH,OAAOC;AAAAA,IACP,aAAaE;AAAAA,IACb,cAAcA;AAAAA,IACd,YAAYT;AAAAA,IACZ,eAAeA;AAAAA;AAAAA,IAEf,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,eAAe;AAAA,IAAA;AAAA,EACjB;AAAA,EAEF,OAAO;AAAA,IACL,GAAGM;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,GAAGP,EAAW,QAAQ,UAAU;AAAA,IAChC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,GAAGA,EAAW,aAAa,QAAQ;AAAA,IACnC,iBAAiB;AAAA,IACjB,GAAGA,EAAW,OAAO,GAAG;AAAA,IACxB,OAAOiB;AAAAA,IACP,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAcZ;AAAAA,IAAO;AAAA,EACvB;AAAA,EAEF,UAAU;AAAA,IACR,GAAGE;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,YAAY;AAAA,IACV,GAAGA;AAAA,IACH,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,IAAA;AAAA,IAEX,OAAO;AAAA,IACP,GAAGP,EAAW,aAAa,QAAQ;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAAA;AAAA,EAElB,eAAe;AAAA,IACb,GAAGO;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,OAAOW;AAAAA,EAAO;AAElB,CAAC,GAIYC,KAAgBC,EAAM;AAAA,EACjC,SAAuB3B,GAAO4B,GAAM;AAClC,WACE,gBAAA3B;AAAA,MAAC4B;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACJ,CAAChB,CAAS,GAAG;AAAA,QAClB,GAAGb;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF,GAIa8B,KAAuBH,EAAM,WAGxC,SACA,EAAE,WAAAI,GAAW,UAAAC,GAAU,GAAGhC,EAAA,GAC1BiC,GACA;AACA,QAAMC,IAAS9B,EAAA,GAGT+B,IAAeC,GAAA,GACfC,IAAUF,MAAiB,MAC3BG,KAAWH,KAAA,gBAAAA,EAAc,aAAY;AAE3C,SAAAI,GAAwBvC,EAAM,EAAE,GAc9B,gBAAAwC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAbc,CAACC,MAAiC;AAClD,QAAIJ,MACFA,EAAS,UAAUI,IAEjB,OAAOT,KAAiB,aAC1BA,EAAaS,CAAE,IACNT,MACTA,EAAa,UAAUS;AAAA,MAE3B;AAAA,MAKI,aAAU;AAAA,MACJ,CAAC7B,CAAS,GAAG;AAAA,MACnB,WAAW8B;AAAA,QACTT,EAAO;AAAA,QACPG,KAAWH,EAAO;AAAA,QAClBH;AAAA,MAAA;AAAA,MAED,GAAG/B;AAAA,MAEH,UAAA;AAAA,QAAAgC;AAAA,QACD,gBAAA/B;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACJ,CAACW,CAAS,GAAG;AAAA,YACnB,WAAWqB,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACpB;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC,GAcYU,KAAuBjB,EAAM,WAGxC,SACA;AAAA,EACE,WAAAI;AAAA,EACA,UAAAC;AAAA,EACA,WAAAa;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,GAAGpD;AACL,GACAqD,GACA;AACA,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH,EAACqD,KAAc,WAAAT,GACb,UAAA,gBAAA5C;AAAA,IAACsD;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,SAASH,CAAS;AAAA,MAChD,GAAG/B;AAAA,MAEJ,UAAA,gBAAAC;AAAA,QAACuD;AAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACJ,CAAC3C,CAAS,GAAG;AAAA,UACnB,WAAWqB,EAAO;AAAA,UAClB,OAAAY;AAAA,UACA,QAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,OAAAC;AAAA,UACA,OAAAC;AAAA,UACA,cAAAC;AAAA,UACA,eAAAC;AAAA,UAEC,UAAApB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,GAEJ;AAEJ,CAAC,GAIYyB,KAAqB9B,EAAM,WAGtC,SAA4B,EAAE,WAAAI,GAAW,UAAAC,GAAU,GAAGhC,EAAA,GAASqD,GAAK;AACpE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAoD;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,OAAOH,CAAS;AAAA,MAC9C,GAAG/B;AAAA,MAEH,UAAAgC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GAIY0B,KAAqB/B,EAAM,WAGtC,SAA4B,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC1D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC0D;AAAA,IAAA;AAAA,MACC,KAAAN;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,OAAOH,CAAS;AAAA,MAC9C,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAKY4D,KAAoBjC,EAAM,WAGrC,SACA;AAAA,EACE,WAAAI;AAAA,EACA,cAAc8B;AAAA,EACd,mBAAmBC;AAAA,EACnB,GAAG9D;AACL,GACAqD,GACA;AACA,QAAMnB,IAAS9B,EAAA,GACT2D,IAAeC,GAAA;AAErB,SACE,gBAAA/D;AAAA,IAACgE;AAAA,IAAA;AAAA,MACC,KAAAZ;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,MAAMH,CAAS;AAAA,MAC9C,cAAY8B;AAAA,MACZ,mBAAiBC,MAAmBD,IAAY,SAAYE;AAAA,MAC3D,GAAG/D;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIYkE,KAAoBvC,EAAM,WAGrC,SAA2B,EAAE,WAAAI,GAAW,UAAAC,GAAU,GAAGhC,EAAA,GAASqD,GAAK;AACnE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAACkE;AAAA,IAAA;AAAA,MACC,KAAAd;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,MAAMH,CAAS;AAAA,MAC7C,GAAG/B;AAAA,MAEH,UAAAgC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GAIYoC,KAA6BzC,EAAM,WAG9C,SAAoC,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAClE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAoD;AAAA,MACA,WAAWV,EAAaT,EAAO,eAAeH,CAAS;AAAA,MACtD,GAAG/B;AAAA,MAEJ,UAAA,gBAAAC,EAACF,IAAA,EAAU,WAAWmC,EAAO,SAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAG7C,CAAC,GAIYmC,KAAqB1C,EAAM,WAGtC,SAA4B,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC1D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAACqE;AAAA,IAAA;AAAA,MACC,KAAAjB;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,OAAOH,CAAS;AAAA,MAC9C,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIYuE,KAAqB5C,EAAM,WAGtC,SAA4B,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC1D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAACuE;AAAA,IAAA;AAAA,MACC,KAAAnB;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,OAAOH,CAAS;AAAA,MAC9C,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIYyE,KAA0B9C,EAAM,WAG3C,SAAiC,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC/D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAACyE;AAAA,IAAA;AAAA,MACC,KAAArB;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,YAAYH,CAAS;AAAA,MACnD,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAQY2E,KAA0B,CACrC3E,MACG,gBAAAC,EAAC2E,GAAA,EAAmB,GAAG5E,EAAA,CAAO,GAItB6E,KAAyBlD,EAAM,WAG1C,SAAgC,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC9D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC6E;AAAA,IAAA;AAAA,MACC,KAAAzB;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,WAAWH,CAAS;AAAA,MAClD,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIY+E,KAAuBpD,EAAM,WAGxC,SAA8B,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAC5D,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC+E;AAAA,IAAA;AAAA,MACC,KAAA3B;AAAA,MACA,aAAU;AAAA,MACJ,CAACxC,CAAS,GAAG;AAAA,MACnB,WAAW8B,EAAaT,EAAO,SAASH,CAAS;AAAA,MAChD,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIYiF,KAAqBtD,EAAM,WAGtC,SAA4B,EAAE,WAAAI,GAAW,SAAAmD,GAAS,GAAGlF,EAAA,GAASqD,GAAK;AACnE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAoD;AAAA,MACA,MAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAWV,EAAaT,EAAO,OAAOH,CAAS;AAAA,MAC/C,eAAe,CAACoD,MAAU;AACxB,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA;AAAA,MACR;AAAA,MACA,SAAS,CAACA,MAAU;AAClB,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACND,KAAA,QAAAA,EAAUC;AAAA,MACZ;AAAA,MACC,GAAGnF;AAAA,MAEJ,UAAA,gBAAAC,EAACE,GAAA,EAAM,WAAW+B,EAAO,SAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAGzC,CAAC,GAIYkD,KAA2BzD,EAAM,WAG5C,SAAkC,EAAE,WAAAI,GAAW,GAAG/B,EAAA,GAASqD,GAAK;AAChE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAoD;AAAA,MACA,WAAWV,EAAaT,EAAO,aAAaH,CAAS;AAAA,MACpD,GAAG/B;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAIYqF,KAA0B1D,EAAM,WAG3C,SAAiC,EAAE,WAAAI,GAAW,SAAAmD,GAAS,GAAGlF,EAAA,GAASqD,GAAK;AACxE,QAAMnB,IAAS9B,EAAA;AAEf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAoD;AAAA,MACA,MAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAWV,EAAaT,EAAO,YAAYH,CAAS;AAAA,MACpD,eAAe,CAACoD,MAAU;AACxB,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA;AAAA,MACR;AAAA,MACA,SAAS,CAACA,MAAU;AAClB,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACND,KAAA,QAAAA,EAAUC;AAAA,MACZ;AAAA,MACC,GAAGnF;AAAA,MAEJ,UAAA,gBAAAC,EAACE,GAAA,EAAM,WAAW+B,EAAO,cAAA,CAAe;AAAA,IAAA;AAAA,EAAA;AAG9C,CAAC;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epilot/zenith-react",
|
|
3
|
-
"version": "0.3.0-next.
|
|
3
|
+
"version": "0.3.0-next.9",
|
|
4
4
|
"description": "Zenith React components, styled with Griffel and designed for isolated micro-frontend delivery",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -149,8 +149,9 @@
|
|
|
149
149
|
},
|
|
150
150
|
"zenith": {
|
|
151
151
|
"next": {
|
|
152
|
-
"mainSha": "
|
|
153
|
-
"
|
|
152
|
+
"mainSha": "d582e10001dac440483da5db0d3df18ad2469751",
|
|
153
|
+
"buildJobUrl": "https://gitlab.com/e-pilot/product/frontend/zenith/-/jobs/17616650502",
|
|
154
|
+
"pipelineId": 3009621582,
|
|
154
155
|
"included": [
|
|
155
156
|
{
|
|
156
157
|
"iid": 151,
|
|
@@ -161,7 +162,7 @@
|
|
|
161
162
|
],
|
|
162
163
|
"leftOut": [],
|
|
163
164
|
"versions": {
|
|
164
|
-
"react": "0.3.0-next.
|
|
165
|
+
"react": "0.3.0-next.9",
|
|
165
166
|
"runtime": "0.3.0-next.1"
|
|
166
167
|
},
|
|
167
168
|
"runtime": {
|