@justanarthur/modo-ui 0.6.0-canary.3 → 0.6.0-canary.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +4 -4
  2. package/components/accordion/examples.mdx +24 -0
  3. package/components/accordion/index.tsx +26 -13
  4. package/components/card/index.tsx +3 -2
  5. package/components/inputs/field/index.tsx +3 -2
  6. package/components/inputs/select/index.tsx +2 -1
  7. package/components/overlays/dialog/index.tsx +2 -2
  8. package/components/overlays/dropdown/index.tsx +8 -2
  9. package/components/overlays/dropdown/menu-parts.tsx +4 -0
  10. package/components/overlays/popover/index.tsx +2 -2
  11. package/components/overlays/tooltip/index.tsx +2 -2
  12. package/dist/base.css +8 -4
  13. package/dist/blocks/sidebar-app/index.js +7 -7
  14. package/dist/components/AI/input-message/index.js +3 -3
  15. package/dist/components/accordion/index.d.ts +22 -9
  16. package/dist/components/accordion/index.js +2 -1
  17. package/dist/components/card/index.d.ts +3 -3
  18. package/dist/components/copy/index.js +3 -3
  19. package/dist/components/inputs/color-picker/index.js +3 -3
  20. package/dist/components/inputs/date-time/date-picker/index.js +5 -5
  21. package/dist/components/inputs/date-time/date-range-picker/index.js +5 -5
  22. package/dist/components/inputs/date-time/duration-picker/index.js +5 -5
  23. package/dist/components/inputs/date-time/month-picker/index.js +5 -5
  24. package/dist/components/inputs/date-time/time-picker/index.js +5 -5
  25. package/dist/components/inputs/field/index.js +2 -2
  26. package/dist/components/inputs/search/index.js +4 -4
  27. package/dist/components/inputs/select/index.js +2 -2
  28. package/dist/components/navigation/pagination/index.js +3 -3
  29. package/dist/components/navigation/sidebar/index.js +5 -5
  30. package/dist/components/overlays/alert-dialog/index.js +3 -3
  31. package/dist/components/overlays/command/index.js +3 -3
  32. package/dist/components/overlays/context-menu/index.js +3 -3
  33. package/dist/components/overlays/dialog/index.js +2 -2
  34. package/dist/components/overlays/dropdown/index.js +2 -2
  35. package/dist/components/overlays/popover/index.js +2 -2
  36. package/dist/components/overlays/sheet/index.js +3 -3
  37. package/dist/components/overlays/toast/index.js +2 -2
  38. package/dist/components/overlays/tooltip/index.js +2 -2
  39. package/dist/index.d.ts +102 -100
  40. package/dist/index.js +26 -26
  41. package/dist/lib/slot.d.ts +8 -1
  42. package/dist/lib/slot.js +3 -1
  43. package/dist/shared/{components-w0x0ne38.js → components-0htgmaka.js} +1 -1
  44. package/dist/shared/{components-1dwmqj3g.js → components-51vvrw0w.js} +1 -1
  45. package/dist/shared/{components-cr081ppn.js → components-5rdj02v9.js} +1 -1
  46. package/dist/shared/{components-f1f0qvxg.js → components-63bv8e6d.js} +1 -1
  47. package/dist/shared/{components-48rp8zeh.js → components-7sxc86zp.js} +1 -1
  48. package/dist/shared/{components-x2h0zwad.js → components-8b9ffpfh.js} +1 -1
  49. package/dist/shared/{components-09gadh7e.js → components-8m623m9h.js} +5 -3
  50. package/dist/shared/{components-n1e28m0k.js → components-96sd8h9m.js} +6 -3
  51. package/dist/shared/{components-xmepz8d9.js → components-ar5swjbr.js} +1 -1
  52. package/dist/shared/{components-9gx18g9j.js → components-b92nqk44.js} +5 -3
  53. package/dist/shared/{components-p9mzwfbt.js → components-d7nhksd0.js} +10 -4
  54. package/dist/shared/{components-6mwvgrq9.js → components-dg6s5gjg.js} +1 -1
  55. package/dist/shared/{components-n9q8dcyf.js → components-egzetyq9.js} +1 -1
  56. package/dist/shared/{components-6b1gamqy.js → components-hx4a4cvm.js} +4 -2
  57. package/dist/shared/{components-avrrksxk.js → components-khcnzj3g.js} +9 -4
  58. package/dist/shared/{components-0d6zzjjz.js → components-mrbaxt8q.js} +5 -1
  59. package/dist/shared/{components-j4rs3qka.js → components-n9v66vv8.js} +1 -1
  60. package/dist/shared/{components-8hb3r1fv.js → components-p7h3bwxf.js} +1 -1
  61. package/dist/shared/{components-e5jyw7g9.js → components-prsvfkew.js} +3 -3
  62. package/dist/shared/{components-fz1pnkzq.js → components-q4z71n18.js} +1 -1
  63. package/dist/shared/{components-dm2ed0sg.js → components-qvyr98nt.js} +1 -1
  64. package/dist/shared/{components-cfn30fa8.js → components-rngyah0v.js} +2 -2
  65. package/dist/shared/{components-gqkjcw7c.js → components-rt9yw9ty.js} +2 -2
  66. package/dist/shared/{components-8yqkpbqa.js → components-vbh98t9d.js} +1 -1
  67. package/dist/shared/{components-rz7wh3jx.js → components-vqqapw72.js} +5 -3
  68. package/dist/shared/{components-jmft19kz.js → components-w7zqeatr.js} +1 -1
  69. package/dist/styles.css +9 -5
  70. package/lib/slot.ts +14 -2
  71. package/package.json +26 -1
package/README.md CHANGED
@@ -134,12 +134,12 @@ positioning) are ported.
134
134
  | `AGENTS.md` | The ui-specific guide for coding agents (where things live, the rules that matter most, the checks); `CLAUDE.md` imports it. |
135
135
  | `DESIGN.md` | The design language in Google's [DESIGN.md](https://github.com/google-labs-code/design.md) format: the tokens as front matter, the rules as prose. Agents building here follow the `modo-ui` skill (`.claude/skills/modo-ui` at the repo root). |
136
136
  | `tokens/*.css` | Colors, typography (`--font-sans`, `--text-*`), motion (`--duration-*`), radius and spacing. |
137
- | `base.css` | Theme switching, base styles, focus fallback, scrollbars, shimmer/spinner keyframes and `.scroll-fade`. Shipped in the package. |
137
+ | `base.css` | Theme switching, base styles, focus fallback, scrollbars, shimmer/spinner keyframes and `.scroll-fade`. Shipped in the package. The inline `code` chip applies only inside the docs shell, `data-modo="prose"` and `.modo-prose`. |
138
138
  | `global.css` | The docs site's stylesheet (`modo.config.ts` `css`): imports `base.css`, then the modo-only focus revert and the docs chrome. |
139
139
  | `preset.ts` | The UnoCSS preset (theme and token utilities), shipped as `@justanarthur/modo-ui/unocss`. |
140
140
  | `uno.config.ts`, `vite.ts` | The UnoCSS setup of the docs site and the prebuilt CSS (see below). |
141
141
  | `index.ts`, `bunup.config.ts`, `scripts/build-css.ts` | The package build: `bun run build` writes the components, their types and the stylesheets to `dist/`. The docs site builds with `bun run build:docs` into `docs-dist/`. |
142
- | `scripts/exports.ts`, `scripts/use-client.ts`, `scripts/check-singletons.ts` | Packaging around that build. `exports.ts` (first step of `bun run build`) writes one `./lib/<name>` export per `lib/` module into `package.json`, plus `./components/*/variants` and `./blocks/*/variants` for the items' server-callable `variants.ts` entries; commit the `package.json` it leaves. `use-client.ts` (after bunup) puts `"use client"` on the emitted modules that render, call a hook or create a context, or use a binding from one; pure helpers (`cn`, class tables, springs, `variants.ts`) and re-export entries stay directive-free so a React Server Component can call them (`--list` prints the split). `check-singletons.ts` (`bun run check:dist`) checks that every React context and the `toast()` manager exist once in `dist/`, and that every entry has its `.d.ts`. |
142
+ | `scripts/exports.ts`, `scripts/use-client.ts`, `scripts/check-singletons.ts` | Packaging around that build. `exports.ts` (first step of `bun run build`) writes one `./lib/<name>` export per `lib/` module into `package.json`, plus `./components/*/variants` and `./blocks/*/variants` for the items' server-callable `variants.ts` entries; commit the `package.json` it leaves. `use-client.ts` (after bunup) puts `"use client"` on the emitted modules that render, call a hook or create a context, or use a binding from one; pure helpers (`cn`, class tables, springs, `variants.ts`) and re-export entries stay directive-free so a React Server Component can call them (`--list` prints the split). `check-singletons.ts` (`bun run check:dist`) checks that every React context and the `toast()` manager exist once in `dist/`, and that every entry has its `.d.ts`. `typesVersions` in `package.json` maps every public subpath to `dist/**/*.d.ts`, so `moduleResolution: node` consumers do not type-check the shipped source. |
143
143
  | `lib/` | FF's shared system files (upstream `lib/`, `hooks/` and the fluid-hover highlight, flat, upstream names), imported relatively by items. modo only scans the tier folders, so it never mistakes them for items. |
144
144
  | `modo.components.tsx` | Components only the docs site uses: the `Icon`, `Select` and `DocsNav` shell-slot adapters and the `ThemeSwitcher` panel item, picked in `modo.config.ts` by export name (`./modo.components.tsx#Select`). |
145
145
  | `primitives/<id>/` | FF's "System" pages: `index.tsx` (component + TSDoc prose) and `examples.mdx`, pulled in by `@example {@include ./examples.mdx}`. |
@@ -178,7 +178,7 @@ positioning) are ported.
178
178
  | — (new) | `lib/inert.ts` | Local addition: `inert` that holds on React 18 and 19 (18 passes it through as an unknown attribute and needs `''`, 19 reads a boolean and drops `''`): `inertProps(on)` to spread, `markInert` as a ref for an element that is always inert; Sidebar's folded and collapsed parts, Tabs' ghost label |
179
179
  | — (new) | `lib/focus-ring.tsx` | Local addition: `FocusRing`, the one keyboard ring a list panel draws, 2px outside the focused row and springing between rows (a snap under reduced motion); radius from the surrounding shape, or pinned with `shape` (popups pin `rounded`); Dropdown and its submenus, NavigationMenu, Select |
180
180
  | — (new) | `lib/scroll-column.tsx` | Local addition: `ScrollColumn`, the scrolling option list beside a calendar (months, years, hours, minutes) or a strip above it: the pick gets a dot, a run of `inView` options one band, the followed option stays centred; fluid hover, listbox semantics, arrow keys; `dividedColumns` puts a hairline between neighbours; `layout="grid"` (`columns` 2–6, 2-D fluid hover, row-wise arrow keys) after utegsk/ui's 0.14 grid picker |
181
- | — (new) | `lib/slot.ts` | Local addition: Dialog's `render` / `asChild` slot shape (`SlotProps`, `slotRender`), shared by every overlay part that wraps a control; `children` fill a `render` element that has none of its own (Base UI semantics), and `nativeButton` reaches the Base UI triggers and closes (`false` for a `<div>` or link); `cloneSlot` / `mergeSlotProps` / `composeRefs` are Radix Slot's merge (child props win, `on*` handlers chain child-first, `className` joins, `style` merges, refs compose; React 18 `forwardRef` and React 19 `props.ref`) |
181
+ | — (new) | `lib/slot.ts` | Local addition: Dialog's `render` / `asChild` slot shape (`SlotProps`, `slotRender`), shared by every overlay part that wraps a control; `children` fill a `render` element that has none of its own (Base UI semantics), and `nativeButton` reaches the Base UI triggers and closes (`false` for a `<div>` or link); `cloneSlot` / `mergeSlotProps` / `composeRefs` are Radix Slot's merge (child props win, `on*` handlers chain child-first, `className` joins, `style` merges, refs compose; React 18 `forwardRef` and React 19 `props.ref`); `slotId(el, id)` hands a slot element's own `id` to the Base UI part, so triggers and Field.Control register the id the DOM carries |
182
182
  | — (new) | `lib/morph-part.tsx` | Local addition: `MorphPart` (shared parts over a motion `layoutId`, after motion-primitives' morphing dialog) and the scope contexts overlays provide |
183
183
  | — (new) | `lib/goo-indicator.tsx` | Local addition: `GooIndicator` (melts between items, a lingering blob follows it) and `GooLayer` (goo over the shapes' coverage, filled with their own token, on only while moving), on the engine's `GOO_MATRIX` / `GOO_BLUR_RATIO` |
184
184
  | — (new) | `lib/morph-layers.tsx` | Local addition: `MorphSurface`, the renderer (shapes layer with beUI's goo filter plus a `--shadow-color` hairline around the melted shape, surface background and shadow, clipped content) |
@@ -232,7 +232,7 @@ only what is specific to it:
232
232
 
233
233
  | Item | Upstream | Local | Specific modifications |
234
234
  |---|---|---|---|
235
- | `Accordion` | `registry/base/accordion.tsx` | `components/accordion/index.tsx` | open state runs through `useControllableState` (see [Behavior additions](#behavior-additions)); standalone `Accordion` accepts `highlight` and passes it to its items as their default; the panel morphs out of its row (a shape grows from the press point into the item, content clipped by it, layout height on its bottom edge; the `"item"` tint is that shape melted into the row through `GooFilter`), `effect` / `tier` on `Accordion.Content`; the group's hover highlight and focus ring snap with reflowed rows; statics `.Group/.Item/.Trigger/.Content`; local Trigger `icon` / `weightShift`, Content `contentClassName` |
235
+ | `Accordion` | `registry/base/accordion.tsx` | `components/accordion/index.tsx` | open state runs through `useControllableState` (see [Behavior additions](#behavior-additions)); standalone `Accordion` accepts `highlight` and passes it to its items as their default; the panel morphs out of its row (a shape grows from the press point into the item, content clipped by it, layout height on its bottom edge; the `"item"` tint is that shape melted into the row through `GooFilter`), `effect` / `tier` on `Accordion.Content`; the group's hover highlight and focus ring snap with reflowed rows; statics `.Group/.Item/.Trigger/.Content`; local Trigger `icon` / `weightShift`, Content `contentClassName`; `Accordion.Trigger` takes `render` / `asChild` (`lib/slot.ts`) |
236
236
  | `AlertDialog` | — (local) | `components/overlays/alert-dialog/index.tsx` (+ `pending-demo.tsx`) | Base UI AlertDialog root (always modal, no outside-press dismissal) over Dialog's own parts and `DialogState`, so it morphs like Dialog; `AlertDialog.Content` drops the ✕ by default; statics as Dialog's; `AlertDialog.Action` (promise-aware confirm: Button `loading`, every close blocked via `details.cancel()` while pending, closes on resolve, `onError` on reject; a controlled `pending` makes a plain `onClick` close once `pending` goes true and back to false) and `AlertDialog.Cancel` (Close as a ghost Button, disabled while pending); `pending-demo.tsx` is the docs stage; `onOpenChange(open, details)` with Base UI's change details (an action's own close reports `'imperative-action'`) |
237
237
  | `Avatar` | — (local) | `components/avatar/index.tsx` | Base UI Avatar (image loading status, the fallback's `delay`); one control tall (36 / 28px compact), `shape` circle or square; a 1px inset image edge after FF's media outline (`outline-image-edge`); the image fades in on the fast tier; statics `.Image/.Fallback` |
238
238
  | `Badge` | `registry/default/badge.tsx` | `components/badge/index.tsx` | `variant` re-declared (it came from cva's `VariantProps` upstream); changes animate: a new label or variant springs the width (inner content span, `spring.moderate`) while the label blur-crossfades, a new color fades, the dot scales in and out; "Changes" example over a local `change-demo.tsx` stage; `badgeColors`, `badgeVariants` and the size aliases moved to `variants.ts` (server-callable) and re-exported; local variant `outline` (the dot badge's neutral hairline without the dot; `color` has no effect) |
@@ -1,4 +1,5 @@
1
1
  import Accordion from './index'
2
+ import Button from '../button'
2
3
  import { ArrowRight } from 'lucide-react'
3
4
 
4
5
  # Standalone
@@ -201,3 +202,26 @@ By default the trigger renders its label twice: a hidden semibold copy reserves
201
202
  </Accordion.Content>
202
203
  </Accordion.Item>
203
204
  </Accordion.Group>
205
+
206
+ # Your own trigger
207
+
208
+ `asChild` (or `render`) makes your element the trigger, so a Button, a link-styled control or anything else can open the item. It is rendered as it is: the row's label copy, the chevron and the row padding are not added, so the element brings its own content and look. Base UI still wires `aria-expanded`, `aria-controls`, `data-panel-open` and the keys onto it, so style the open state with `data-[panel-open]`.
209
+
210
+ <Accordion.Group type="single" collapsible defaultValue="one">
211
+ <Accordion.Item value="one" index={0}>
212
+ <Accordion.Trigger asChild>
213
+ <Button variant="ghost" className="w-full justify-start">Billing</Button>
214
+ </Accordion.Trigger>
215
+ <Accordion.Content>
216
+ Invoices, payment methods and receipts.
217
+ </Accordion.Content>
218
+ </Accordion.Item>
219
+ <Accordion.Item value="two" index={1}>
220
+ <Accordion.Trigger render={<Button variant="ghost" className="w-full justify-start" />}>
221
+ Security
222
+ </Accordion.Trigger>
223
+ <Accordion.Content>
224
+ Passwords, sessions and two-factor.
225
+ </Accordion.Content>
226
+ </Accordion.Item>
227
+ </Accordion.Group>
@@ -39,6 +39,9 @@
39
39
  * focus ring snap with rows a morph pushes around (instead of springing
40
40
  * after them over the content) until the pointer or focus moves. `effect`
41
41
  * and `tier` on `AccordionContent`; reduced motion snaps, as before.
42
+ * - `AccordionTrigger` takes `render` / `asChild` (`lib/slot.ts`, local): the element is
43
+ * Base UI's Trigger as it is, inside the same row and header, with no row look, label
44
+ * copy or chevron. Its own `id` is the one Base UI registers (`slotId`).
42
45
  */
43
46
 
44
47
  import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'
@@ -70,6 +73,7 @@ import { GooFilter } from '../../lib/morph-layers'
70
73
  import { useReduceMotion } from '../../lib/reduced-motion'
71
74
  import { useShape } from '../../lib/shape-context'
72
75
  import { type SizeVariant, useSize } from '../../lib/size-context'
76
+ import { type SlotProps, slotId, slotRender } from '../../lib/slot'
73
77
  import { spring } from '../../lib/springs'
74
78
  import { useControllableState } from '../../lib/use-controllable-state'
75
79
  import { useFluidHover, useRegisterFluidHoverItem } from '../../lib/use-fluid-hover'
@@ -515,7 +519,9 @@ type AccordionComponent = ForwardRefExoticComponent<AccordionProps & RefAttribut
515
519
  * Statics: Accordion.Group (the grouped root: type, collapsible,
516
520
  * defaultValue, value, onValueChange, highlight, size), Accordion.Item (value,
517
521
  * index, disabled), Accordion.Trigger (the row that toggles its item: `icon`
518
- * swaps or hides the chevron, `weightShift={false}` renders a rich label once)
522
+ * swaps or hides the chevron, `weightShift={false}` renders a rich label once,
523
+ * `render` / `asChild` make your own element the trigger, unstyled and without
524
+ * chevron or label copy)
519
525
  * and Accordion.Content (the collapsible panel: `effect` — `'goo'` or a plain
520
526
  * `'morph'` — the spring `tier`, `'slow'` or `'moderate'`, and
521
527
  * `contentClassName` for the inner row).
@@ -668,9 +674,9 @@ AccordionItem.displayName = 'AccordionItem'
668
674
 
669
675
  // ─── AccordionTrigger ────────────────────────────────────────────────────────
670
676
 
671
- interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {
672
- /** Trigger label content. */
673
- children: ReactNode
677
+ interface AccordionTriggerProps extends Omit<SlotProps, 'children'> {
678
+ /** Trigger label content. With `asChild`, the single child element that becomes the trigger instead, and `render` takes an element the same way: that element is rendered as it is, the whole trigger, look included. It gets Base UI's `aria-expanded`, `aria-controls`, `data-panel-open` and key handling, and sits in the same row, but the label copy, `weightShift`, `icon` and chevron are not rendered (give it its own content), nor are the trigger's padding and ring. */
679
+ children?: ReactNode
674
680
  /** The glyph at the row's end, which turns a quarter turn when the item opens (so give it a right-pointing one), or `false` for none. Defaults to the icon context's `chevron-right`. */
675
681
  icon?: IconComponent | false
676
682
  /** Whether the label gets heavier while the item is open. On, the label renders twice in one grid cell (a hidden semibold copy reserves its width, so nothing reflows); off, it renders once and keeps whatever weight its content has, which suits rich content such as a whole `Card.Header` that would otherwise be duplicated in the DOM. The label sits inside the trigger `<button>`, so give it phrasing content (spans), not block elements such as a `div`-based header. Rich content that sets its own text colour does not change on open: only the chevron, the highlight and the open tint signal the state. Defaults to `true`. */
@@ -678,7 +684,8 @@ interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {
678
684
  }
679
685
 
680
686
  const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(
681
- ({ children, className, icon, weightShift = true, ...props }, ref) => {
687
+ ({ children, className, icon, weightShift = true, render, asChild, nativeButton, ...props }, ref) => {
688
+ const el = slotRender(render, asChild, children)
682
689
  const ChevronRight = useIcon('chevron-right')
683
690
  const Glyph = icon === false ? null : (icon ?? ChevronRight)
684
691
  const groupCtx = useAccordionGroup()
@@ -703,15 +710,21 @@ const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(
703
710
  <AccordionPrimitive.Header render={<div />}>
704
711
  <AccordionPrimitive.Trigger
705
712
  ref={ref as React.Ref<HTMLElement>}
706
- className={cn(
707
- `relative z-10 flex items-center ${sizeClasses.gap} ${shape.item} ${sizeClasses.px} ${sizeClasses.variant === 'compact' ? 'py-1' : 'py-2'} w-full cursor-pointer outline-none select-none`,
708
- !groupCtx?.grouped && 'focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:ring-offset-0',
709
- className,
710
- )}
713
+ // A `render` / `asChild` element is the whole trigger: its own look, no row padding or ring.
714
+ className={
715
+ el
716
+ ? className
717
+ : cn(
718
+ `relative z-10 flex items-center ${sizeClasses.gap} ${shape.item} ${sizeClasses.px} ${sizeClasses.variant === 'compact' ? 'py-1' : 'py-2'} w-full cursor-pointer outline-none select-none`,
719
+ !groupCtx?.grouped &&
720
+ 'focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:ring-offset-0',
721
+ className,
722
+ )
723
+ }
711
724
  {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}
725
+ {...(el ? { render: el, nativeButton, id: slotId(el, props.id) } : {})}
712
726
  >
713
- {/* Label with dual-layer text */}
714
- {weightShift ? (
727
+ {el ? undefined : weightShift ? (
715
728
  <span className={cn('inline-grid flex-1 text-left', sizeClasses.text)}>
716
729
  <span className="col-start-1 row-start-1 invisible weight-semibold" aria-hidden="true">
717
730
  {children}
@@ -739,7 +752,7 @@ const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(
739
752
  )}
740
753
 
741
754
  {/* Chevron */}
742
- {Glyph && (
755
+ {!el && Glyph && (
743
756
  <motion.span
744
757
  className="shrink-0 inline-flex items-center justify-center"
745
758
  animate={{ rotate: isOpen ? 90 : 0 }}
@@ -39,6 +39,7 @@ import {
39
39
  forwardRef,
40
40
  type HTMLAttributes,
41
41
  isValidElement,
42
+ type MouseEventHandler,
42
43
  type ReactElement,
43
44
  type ReactNode,
44
45
  type Ref,
@@ -235,8 +236,8 @@ CardGroup.displayName = 'CardGroup'
235
236
  interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick'> {
236
237
  /** Compositional parts: Card.Image, Card.Media, Card.Header, Card.Content, Card.Footer. */
237
238
  children?: ReactNode
238
- /** Makes the whole card a clickable target (stretched button); fluid hover previews it. */
239
- onClick?: () => void
239
+ /** Makes the whole card a clickable target (stretched button); fluid hover previews it. Receives the click event, or takes no argument. */
240
+ onClick?: MouseEventHandler<HTMLElement>
240
241
  /** Makes the whole card a link (stretched anchor). */
241
242
  href?: string
242
243
  /** Opens href in a new tab. Defaults to `false`. */
@@ -19,7 +19,7 @@ import {
19
19
  } from 'react'
20
20
  import { FIELD_TEXT_INSET, FieldStateContext, useFieldState } from '../../../lib/field-classes'
21
21
  import { type SizeVariant, useSize } from '../../../lib/size-context'
22
- import { slotRender } from '../../../lib/slot'
22
+ import { slotId, slotRender } from '../../../lib/slot'
23
23
  import { cn } from '../../../lib/utils'
24
24
  import { SizeProvider } from '../../../primitives/sizes'
25
25
  import { Label } from '../input'
@@ -143,7 +143,8 @@ interface FieldControlProps {
143
143
  }
144
144
 
145
145
  function FieldControl({ render, asChild, children }: FieldControlProps) {
146
- return <BaseField.Control render={slotRender(render, asChild, children)} />
146
+ const el = slotRender(render, asChild, children)
147
+ return <BaseField.Control render={el} id={slotId(el)} />
147
148
  }
148
149
 
149
150
  interface ProvideFieldStateProps {
@@ -88,7 +88,7 @@ import { isDisabledRow, popupScrollAreaClass, popupViewportClass } from '../../.
88
88
  import { RowOrderContext, useRowOrder, useRowSlot } from '../../../lib/row-order'
89
89
  import { shapeMap, useShape } from '../../../lib/shape-context'
90
90
  import { type SizeVariant, useSize } from '../../../lib/size-context'
91
- import { type SlotProps, slotRender } from '../../../lib/slot'
91
+ import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
92
92
  import { spring } from '../../../lib/springs'
93
93
  import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
94
94
  import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
@@ -482,6 +482,7 @@ const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(
482
482
  )
483
483
  }
484
484
  {...props}
485
+ id={slotId(el, props.id)}
485
486
  >
486
487
  <span className={cn('flex items-center min-w-0 flex-1', sizeClasses.gap)}>
487
488
  {Icon && (
@@ -63,7 +63,7 @@ import { MorphSurface } from '../../../lib/morph-layers'
63
63
  import { MorphPartScope } from '../../../lib/morph-part'
64
64
  import { useShape } from '../../../lib/shape-context'
65
65
  import { useSize, useSizeVariant } from '../../../lib/size-context'
66
- import { type SlotProps, slotRender } from '../../../lib/slot'
66
+ import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
67
67
  import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
68
68
  import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
69
69
  import { useControllableState } from '../../../lib/use-controllable-state'
@@ -86,7 +86,7 @@ const useDialogState = () => useContext(DialogContext)
86
86
  const DialogTrigger = forwardRef<HTMLButtonElement, DialogSlotProps>(({ render, asChild, children, ...props }, ref) => {
87
87
  const el = slotRender(render, asChild, children)
88
88
  return el ? (
89
- <DialogPrimitive.Trigger ref={ref} render={el} {...props} />
89
+ <DialogPrimitive.Trigger ref={ref} render={el} {...props} id={slotId(el, props.id)} />
90
90
  ) : (
91
91
  <DialogPrimitive.Trigger ref={ref} {...props}>
92
92
  {children}
@@ -119,6 +119,7 @@ import { isDisabledRow, popupScrollAreaClass, popupViewportClass } from '../../.
119
119
  import { RowOrderContext, useRowOrder, useRowSlot } from '../../../lib/row-order'
120
120
  import { shapeMap } from '../../../lib/shape-context'
121
121
  import { type SizeVariant, useSize } from '../../../lib/size-context'
122
+ import { slotId } from '../../../lib/slot'
122
123
  import { spring } from '../../../lib/springs'
123
124
  import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
124
125
  import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
@@ -754,9 +755,14 @@ type DropdownTriggerProps = MenuTriggerProps & {
754
755
  const DropdownTrigger = forwardRef<HTMLButtonElement, DropdownTriggerProps>(
755
756
  ({ asChild, render, children, ...props }, ref) =>
756
757
  asChild && isValidElement(children) ? (
757
- <BaseMenu.Trigger ref={ref} render={children as ReactElement<Record<string, unknown>>} {...props} />
758
+ <BaseMenu.Trigger
759
+ ref={ref}
760
+ render={children as ReactElement<Record<string, unknown>>}
761
+ {...props}
762
+ id={slotId(children, props.id)}
763
+ />
758
764
  ) : (
759
- <BaseMenu.Trigger ref={ref} render={render} {...props}>
765
+ <BaseMenu.Trigger ref={ref} render={render} {...props} id={slotId(render, props.id)}>
760
766
  {children}
761
767
  </BaseMenu.Trigger>
762
768
  ),
@@ -424,6 +424,10 @@ function DropdownSub({ children, open, defaultOpen = false, onOpenChange, disabl
424
424
  open={current}
425
425
  disabled={disabled}
426
426
  onOpenChange={(next, details) => {
427
+ // Base UI re-reports a sub that is already closed as closed (reason `sibling-open`,
428
+ // once per sibling that opens). The caller hears changes only, as it did through
429
+ // useControllableState's no-op skip: a handler shared with the root must not see them.
430
+ if (next === current) return
427
431
  onOpenChange?.(next, details)
428
432
  if (details.isCanceled) return
429
433
  if (next) capture(details)
@@ -25,7 +25,7 @@ import {
25
25
  } from 'react'
26
26
  import { MorphSurface } from '../../../lib/morph-layers'
27
27
  import { useShape } from '../../../lib/shape-context'
28
- import { type SlotProps, slotRender } from '../../../lib/slot'
28
+ import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
29
29
  import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
30
30
  import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
31
31
  import { useControllableState } from '../../../lib/use-controllable-state'
@@ -52,7 +52,7 @@ const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(
52
52
  ({ render, asChild, children, ...props }, ref) => {
53
53
  const el = slotRender(render, asChild, children)
54
54
  return el ? (
55
- <PopoverPrimitive.Trigger ref={ref} render={el} {...props} />
55
+ <PopoverPrimitive.Trigger ref={ref} render={el} {...props} id={slotId(el, props.id)} />
56
56
  ) : (
57
57
  <PopoverPrimitive.Trigger ref={ref} {...props}>
58
58
  {children}
@@ -58,7 +58,7 @@ import {
58
58
  } from 'react'
59
59
  import { MorphSurface } from '../../../lib/morph-layers'
60
60
  import { useShape } from '../../../lib/shape-context'
61
- import { type SlotProps, slotRender } from '../../../lib/slot'
61
+ import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
62
62
  import { type MorphOrigin, useMorph, useMorphOrigin } from '../../../lib/use-morph'
63
63
  import { cn } from '../../../lib/utils'
64
64
 
@@ -263,7 +263,7 @@ const TooltipTrigger = forwardRef<HTMLButtonElement, TooltipTriggerProps>(
263
263
  // trigger inherits it from the provider.
264
264
  const shared = { ref, delay, closeDelay, onPointerMove: followCursor ? handleMove : onPointerMove, ...props }
265
265
  return el ? (
266
- <TooltipPrimitive.Trigger {...shared} render={el} />
266
+ <TooltipPrimitive.Trigger {...shared} render={el} id={slotId(el, props.id)} />
267
267
  ) : (
268
268
  <TooltipPrimitive.Trigger {...shared}>{children}</TooltipPrimitive.Trigger>
269
269
  )
package/dist/base.css CHANGED
@@ -402,6 +402,9 @@
402
402
  * :focus-visible fallback), html.transitioning, native scrollbars,
403
403
  * .scrollbar-hide, shimmer + spinner keyframes, .scroll-fade(-x).
404
404
  *
405
+ * Local scope change: the inline code chip applies inside the docs shell, a
406
+ * `data-modo="prose"` block or a `.modo-prose` container, not to every <code>.
407
+ *
405
408
  * Local value changes: the inline code chip and the shimmer stops read color
406
409
  * tokens instead of upstream's hex (light code chip `--muted`, dark
407
410
  * `--surface-4`; shimmer dim → bright runs `--muted-foreground` →
@@ -495,10 +498,11 @@ body {
495
498
  text-wrap: pretty;
496
499
  }
497
500
 
498
- /* Inline code chips: bare <code> in prose gets its own ground. Excludes
499
- code inside <pre>. Base layer, so a page can still override with
500
- utilities. */
501
- code:not(pre code) {
501
+ /* Inline code chips, for prose that opts in: the docs shell (`data-modo="app"`),
502
+ a modo prose block (`data-modo="prose"`) or a `.modo-prose` container. A bare
503
+ <code> in an app is left alone. Excludes code inside <pre>. Base layer, so a
504
+ page can still override with utilities. */
505
+ :where([data-modo="app"], [data-modo="prose"], .modo-prose) code:not(pre code) {
502
506
  background: light-dark(var(--muted), var(--surface-4));
503
507
  border-radius: 4px;
504
508
  padding: 1px 4px;
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  SidebarApp2
3
- } from "../../shared/components-e5jyw7g9.js";
4
- import"../../shared/components-cfn30fa8.js";
3
+ } from "../../shared/components-prsvfkew.js";
4
+ import"../../shared/components-rngyah0v.js";
5
5
  import"../../shared/components-kswxnm3h.js";
6
6
  import"../../shared/components-rrbpmfx4.js";
7
- import"../../shared/components-f1f0qvxg.js";
7
+ import"../../shared/components-63bv8e6d.js";
8
8
  import"../../shared/components-6zng858q.js";
9
9
  import"../../shared/components-124epb7f.js";
10
10
  import"../../shared/components-z3v0n0de.js";
11
- import"../../shared/components-avrrksxk.js";
11
+ import"../../shared/components-khcnzj3g.js";
12
12
  import"../../shared/components-8tt3xbb5.js";
13
13
  import"../../shared/components-tz4gaf1v.js";
14
14
  import"../../shared/components-8nwsqjn8.js";
15
15
  import"../../shared/components-9as3rf68.js";
16
- import"../../shared/components-rz7wh3jx.js";
16
+ import"../../shared/components-vqqapw72.js";
17
17
  import"../../shared/components-krtx3m5b.js";
18
- import"../../shared/components-09gadh7e.js";
18
+ import"../../shared/components-8m623m9h.js";
19
19
  import"../../shared/components-h6p86be3.js";
20
20
  import"../../shared/components-vf45j12c.js";
21
- import"../../shared/components-0d6zzjjz.js";
21
+ import"../../shared/components-mrbaxt8q.js";
22
22
  import"../../shared/components-4y816hwp.js";
23
23
  import"../../shared/components-b1e239g3.js";
24
24
  import"../../shared/components-dhgk6mbt.js";
@@ -2,10 +2,10 @@ import {
2
2
  FileThumbnail2,
3
3
  InputMessage2,
4
4
  input_message_default
5
- } from "../../../shared/components-jmft19kz.js";
6
- import"../../../shared/components-rz7wh3jx.js";
5
+ } from "../../../shared/components-w7zqeatr.js";
6
+ import"../../../shared/components-vqqapw72.js";
7
7
  import"../../../shared/components-vf45j12c.js";
8
- import"../../../shared/components-0d6zzjjz.js";
8
+ import"../../../shared/components-mrbaxt8q.js";
9
9
  import"../../../shared/components-4y816hwp.js";
10
10
  import"../../../shared/components-b1e239g3.js";
11
11
  import"../../../shared/components-dhgk6mbt.js";
@@ -1,4 +1,4 @@
1
- import { ForwardRefExoticComponent, HTMLAttributes, ReactNode as ReactNode2, RefAttributes } from "react";
1
+ import { ForwardRefExoticComponent, HTMLAttributes, ReactNode as ReactNode3, RefAttributes } from "react";
2
2
  import { ComponentType } from "react";
3
3
  interface IconComponentProps {
4
4
  size?: number | string;
@@ -7,6 +7,17 @@ interface IconComponentProps {
7
7
  }
8
8
  type IconComponent = ComponentType<IconComponentProps>;
9
9
  type SizeVariant = "default" | "compact";
10
+ import { ButtonHTMLAttributes, ReactElement, ReactNode as ReactNode2 } from "react";
11
+ interface SlotProps extends ButtonHTMLAttributes<HTMLButtonElement> {
12
+ /** The element that becomes the control, e.g. a Button. Children fill it when it has none of its own. */
13
+ render?: ReactElement;
14
+ /** Compose onto the single child instead. Both spellings work in both flavors. Defaults to `false`. */
15
+ asChild?: boolean;
16
+ /** Control content when there is no render element, or the content of a render element that has none of its own. */
17
+ children?: ReactNode2;
18
+ /** Whether the render element is a native `<button>`: pass `false` for a `<div>` or a link, so Base UI adds the button role and keyboard handling itself. Parts not built on a Base UI button ignore it. Defaults to `true`. */
19
+ nativeButton?: boolean;
20
+ }
10
21
  type AccordionGroupSingleProps = {
11
22
  /** Whether one or multiple items can be expanded. Defaults to `"single"`. */
12
23
  type?: "single";
@@ -30,7 +41,7 @@ type AccordionGroupMultipleProps = {
30
41
  onValueChange?: (value: string[]) => void;
31
42
  };
32
43
  type AccordionGroupProps = HTMLAttributes<HTMLDivElement> & {
33
- children: ReactNode2;
44
+ children: ReactNode3;
34
45
  /** Pins the group's rows to one step of the size ladder (default 36px,
35
46
  * compact 28px — see /docs/sizes). Omitted, they follow the surrounding
36
47
  * SizeProvider. */
@@ -45,7 +56,7 @@ type AccordionGroupProps = HTMLAttributes<HTMLDivElement> & {
45
56
  declare const AccordionGroup: ForwardRefExoticComponent<AccordionGroupProps & RefAttributes<HTMLDivElement>>;
46
57
  interface AccordionProps extends HTMLAttributes<HTMLDivElement> {
47
58
  /** The accordion's items (`Accordion.Item`). */
48
- children: ReactNode2;
59
+ children: ReactNode3;
49
60
  /** Whether one or multiple items can be expanded. Defaults to `"single"`. */
50
61
  type?: "single" | "multiple";
51
62
  /** Allow collapsing all items when type is single. Defaults to `true` (Base UI's single mode is always collapsible). */
@@ -88,7 +99,9 @@ type AccordionComponent = ForwardRefExoticComponent<AccordionProps & RefAttribut
88
99
  * Statics: Accordion.Group (the grouped root: type, collapsible,
89
100
  * defaultValue, value, onValueChange, highlight, size), Accordion.Item (value,
90
101
  * index, disabled), Accordion.Trigger (the row that toggles its item: `icon`
91
- * swaps or hides the chevron, `weightShift={false}` renders a rich label once)
102
+ * swaps or hides the chevron, `weightShift={false}` renders a rich label once,
103
+ * `render` / `asChild` make your own element the trigger, unstyled and without
104
+ * chevron or label copy)
92
105
  * and Accordion.Content (the collapsible panel: `effect` — `'goo'` or a plain
93
106
  * `'morph'` — the spring `tier`, `'slow'` or `'moderate'`, and
94
107
  * `contentClassName` for the inner row).
@@ -106,12 +119,12 @@ interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {
106
119
  /** Standalone equivalent of the group's prop: what an open item tints. Ignored inside a group, which decides for all its rows. Defaults to the standalone root's `highlight`, else `"item"`. */
107
120
  highlight?: "trigger" | "item";
108
121
  /** The item's `Accordion.Trigger` and `Accordion.Content`. */
109
- children: ReactNode2;
122
+ children: ReactNode3;
110
123
  }
111
124
  declare const AccordionItem: ForwardRefExoticComponent<AccordionItemProps & RefAttributes<HTMLDivElement>>;
112
- interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {
113
- /** Trigger label content. */
114
- children: ReactNode2;
125
+ interface AccordionTriggerProps extends Omit<SlotProps, "children"> {
126
+ /** Trigger label content. With `asChild`, the single child element that becomes the trigger instead, and `render` takes an element the same way: that element is rendered as it is, the whole trigger, look included. It gets Base UI's `aria-expanded`, `aria-controls`, `data-panel-open` and key handling, and sits in the same row, but the label copy, `weightShift`, `icon` and chevron are not rendered (give it its own content), nor are the trigger's padding and ring. */
127
+ children?: ReactNode3;
115
128
  /** The glyph at the row's end, which turns a quarter turn when the item opens (so give it a right-pointing one), or `false` for none. Defaults to the icon context's `chevron-right`. */
116
129
  icon?: IconComponent | false;
117
130
  /** Whether the label gets heavier while the item is open. On, the label renders twice in one grid cell (a hidden semibold copy reserves its width, so nothing reflows); off, it renders once and keeps whatever weight its content has, which suits rich content such as a whole `Card.Header` that would otherwise be duplicated in the DOM. The label sits inside the trigger `<button>`, so give it phrasing content (spans), not block elements such as a `div`-based header. Rich content that sets its own text colour does not change on open: only the chevron, the highlight and the open tint signal the state. Defaults to `true`. */
@@ -120,7 +133,7 @@ interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {
120
133
  declare const AccordionTrigger: ForwardRefExoticComponent<AccordionTriggerProps & RefAttributes<HTMLButtonElement>>;
121
134
  interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {
122
135
  /** Collapsible content. */
123
- children: ReactNode2;
136
+ children: ReactNode3;
124
137
  /** How the panel grows out of its row (see Morph): `goo` melts the open tint out of the row through a liquid neck, `morph` grows it without one. Defaults to `'goo'`. */
125
138
  effect?: "goo" | "morph";
126
139
  /** Spring tier the panel opens on; it closes on the tier's faster exit tween. Defaults to `'slow'`. */
@@ -5,7 +5,8 @@ import {
5
5
  AccordionTrigger2,
6
6
  AccordionContent2,
7
7
  accordion_default
8
- } from "../../shared/components-p9mzwfbt.js";
8
+ } from "../../shared/components-d7nhksd0.js";
9
+ import"../../shared/components-mrbaxt8q.js";
9
10
  import"../../shared/components-4y816hwp.js";
10
11
  import"../../shared/components-b1e239g3.js";
11
12
  import"../../shared/components-jqpefjsn.js";
@@ -1,4 +1,4 @@
1
- import { ForwardRefExoticComponent, HTMLAttributes, ReactNode as ReactNode2, RefAttributes } from "react";
1
+ import { ForwardRefExoticComponent, HTMLAttributes, MouseEventHandler, ReactNode as ReactNode2, RefAttributes } from "react";
2
2
  import { ComponentType } from "react";
3
3
  interface IconComponentProps {
4
4
  size?: number | string;
@@ -40,8 +40,8 @@ declare const CardGroup: ForwardRefExoticComponent<CardGroupProps & RefAttribute
40
40
  interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "onClick"> {
41
41
  /** Compositional parts: Card.Image, Card.Media, Card.Header, Card.Content, Card.Footer. */
42
42
  children?: ReactNode2;
43
- /** Makes the whole card a clickable target (stretched button); fluid hover previews it. */
44
- onClick?: () => void;
43
+ /** Makes the whole card a clickable target (stretched button); fluid hover previews it. Receives the click event, or takes no argument. */
44
+ onClick?: MouseEventHandler<HTMLElement>;
45
45
  /** Makes the whole card a link (stretched anchor). */
46
46
  href?: string;
47
47
  /** Opens href in a new tab. Defaults to `false`. */
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Copy2,
3
3
  copy_default
4
- } from "../../shared/components-fz1pnkzq.js";
5
- import"../../shared/components-rz7wh3jx.js";
6
- import"../../shared/components-0d6zzjjz.js";
4
+ } from "../../shared/components-q4z71n18.js";
5
+ import"../../shared/components-vqqapw72.js";
6
+ import"../../shared/components-mrbaxt8q.js";
7
7
  import"../../shared/components-4y816hwp.js";
8
8
  import"../../shared/components-b1e239g3.js";
9
9
  import"../../shared/components-dhgk6mbt.js";
@@ -5,15 +5,15 @@ import {
5
5
  ColorPicker2,
6
6
  ColorPickerPopover2,
7
7
  color_picker_default
8
- } from "../../../shared/components-8yqkpbqa.js";
8
+ } from "../../../shared/components-vbh98t9d.js";
9
9
  import {
10
10
  parseColor2,
11
11
  buildParsed2
12
12
  } from "../../../shared/components-26snnbs9.js";
13
13
  import"../../../shared/components-jkctvwz9.js";
14
- import"../../../shared/components-rz7wh3jx.js";
14
+ import"../../../shared/components-vqqapw72.js";
15
15
  import"../../../shared/components-vf45j12c.js";
16
- import"../../../shared/components-0d6zzjjz.js";
16
+ import"../../../shared/components-mrbaxt8q.js";
17
17
  import"../../../shared/components-4y816hwp.js";
18
18
  import"../../../shared/components-b1e239g3.js";
19
19
  import"../../../shared/components-dhgk6mbt.js";
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  DatePicker2,
3
3
  date_picker_default
4
- } from "../../../../shared/components-xmepz8d9.js";
4
+ } from "../../../../shared/components-ar5swjbr.js";
5
5
  import"../../../../shared/components-7s7pykk5.js";
6
6
  import"../../../../shared/components-daqy7ydp.js";
7
7
  import"../../../../shared/components-kr40s3z0.js";
8
- import"../../../../shared/components-cr081ppn.js";
8
+ import"../../../../shared/components-5rdj02v9.js";
9
9
  import"../../../../shared/components-v0nz1m4t.js";
10
10
  import"../../../../shared/components-54nq988h.js";
11
11
  import"../../../../shared/components-y1w3a6wx.js";
12
12
  import"../../../../shared/components-adkarj8n.js";
13
13
  import"../../../../shared/components-rrbpmfx4.js";
14
- import"../../../../shared/components-f1f0qvxg.js";
14
+ import"../../../../shared/components-63bv8e6d.js";
15
15
  import"../../../../shared/components-6zng858q.js";
16
16
  import"../../../../shared/components-124epb7f.js";
17
- import"../../../../shared/components-09gadh7e.js";
17
+ import"../../../../shared/components-8m623m9h.js";
18
18
  import"../../../../shared/components-vf45j12c.js";
19
- import"../../../../shared/components-0d6zzjjz.js";
19
+ import"../../../../shared/components-mrbaxt8q.js";
20
20
  import"../../../../shared/components-4y816hwp.js";
21
21
  import"../../../../shared/components-b1e239g3.js";
22
22
  import"../../../../shared/components-dhgk6mbt.js";
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  DateRangePicker2,
3
3
  date_range_picker_default
4
- } from "../../../../shared/components-n9q8dcyf.js";
4
+ } from "../../../../shared/components-egzetyq9.js";
5
5
  import"../../../../shared/components-7s7pykk5.js";
6
6
  import"../../../../shared/components-daqy7ydp.js";
7
7
  import"../../../../shared/components-kr40s3z0.js";
8
- import"../../../../shared/components-cr081ppn.js";
8
+ import"../../../../shared/components-5rdj02v9.js";
9
9
  import"../../../../shared/components-v0nz1m4t.js";
10
10
  import"../../../../shared/components-54nq988h.js";
11
11
  import"../../../../shared/components-y1w3a6wx.js";
12
12
  import"../../../../shared/components-adkarj8n.js";
13
13
  import"../../../../shared/components-rrbpmfx4.js";
14
- import"../../../../shared/components-f1f0qvxg.js";
14
+ import"../../../../shared/components-63bv8e6d.js";
15
15
  import"../../../../shared/components-6zng858q.js";
16
16
  import"../../../../shared/components-124epb7f.js";
17
- import"../../../../shared/components-09gadh7e.js";
17
+ import"../../../../shared/components-8m623m9h.js";
18
18
  import"../../../../shared/components-vf45j12c.js";
19
- import"../../../../shared/components-0d6zzjjz.js";
19
+ import"../../../../shared/components-mrbaxt8q.js";
20
20
  import"../../../../shared/components-4y816hwp.js";
21
21
  import"../../../../shared/components-b1e239g3.js";
22
22
  import"../../../../shared/components-dhgk6mbt.js";