{"version":3,"names":["createContext","createMemo","createSignal","createUniqueId","runWithOwner","untrack","useContext","makeSlotRefDirective","readOption","mergeRootProps","SNAPSHOT_KEYS","snapshotKeys","CollapsibleContext","useCollapsible","ctx","Error","createCollapsible","options","open","Boolean","name","disabled","setOpen","next","event","reason","ev","Event","cancelable","onOpenChange","toggle","fallbackPanelId","panelId","setPanelId","ownedWrite","triggerInternal","type","aria-expanded","aria-controls","undefined","data-panel-open","data-disabled","onClick","panelInternal","id","data-state","data-open","data-closed","trigger","userProps","panel","triggerRef","panelRef","api","Provider","props","children","COLLAPSIBLE_SNAPSHOT_KEYS"],"sources":["create-collapsible.tsx"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\nimport {\n\ttype Accessor,\n\tcreateContext,\n\tcreateMemo,\n\tcreateSignal,\n\tcreateUniqueId,\n\trunWithOwner,\n\tuntrack,\n\tuseContext,\n} from \"solid-js\";\nimport { makeSlotRefDirective } from \"../internals/make-slot-ref-directive\";\nimport { type MaybeAccessor, readOption } from \"../internals/maybe-accessor\";\nimport { mergeRootProps } from \"../internals/merge-root-props\";\nimport {\n\tSNAPSHOT_KEYS,\n\ttype Snapshottable,\n\tsnapshotKeys,\n} from \"../internals/observability/snapshot\";\n\n/**\n * Options for {@link createCollapsible}.\n *\n * All reactive inputs accept `MaybeAccessor<T>` so a consumer can flip\n * `open` / `disabled` / `keepMounted` post-construction without\n * re-creating the primitive.\n *\n * **Solid-native shape (2026-04-30).** No internal state. `open` is\n * required and the consumer always owns the signal. The primitive is\n * a pure function from `(open, onOpenChange) → api`. Migration from\n * pre-2026-04-30: `createCollapsible({ defaultOpen: false })` becomes\n * `const [open, setOpen] = createSignal(false); createCollapsible({ open, onOpenChange: setOpen })`.\n * See `solidify.md` §6 for rationale.\n */\nexport interface CreateCollapsibleOptions {\n\t/**\n\t * Open state. Consumer-owned signal — the primitive reads through\n\t * the accessor and does NOT keep an internal copy. Writes happen\n\t * via `onOpenChange` (the consumer's responsibility to update their\n\t * signal in response).\n\t */\n\topen: MaybeAccessor<boolean>;\n\t/**\n\t * Whether interaction is suppressed.\n\t * @default false\n\t */\n\tdisabled?: MaybeAccessor<boolean>;\n\t/**\n\t * Pre-change callback. Called synchronously before any internal state\n\t * write with `(next, event, reason)`. The consumer can call\n\t * `event.preventDefault()` to veto the transition.\n\t *\n\t * **Pre/post asymmetry — important.** This callback is pre-change ONLY.\n\t * Reading `c.open()` inside this handler returns the OLD value (the\n\t * setter's microtask write hasn't flushed yet). Don't drive post-change\n\t * side effects from here. For post-change observation, use:\n\t * ```ts\n\t * createEffect(c.open, (next) => { ... });\n\t * ```\n\t *\n\t * **Event contract.** The `event` argument is one of two shapes:\n\t *\n\t * | Trigger | `event` shape |\n\t * |---|---|\n\t * | DOM (click via `c.trigger()`/directive, keydown via `useButton`) | The live `MouseEvent` / `KeyboardEvent`. |\n\t * | Programmatic `c.setOpen(next)` / `c.toggle()` with no event arg | A synthesized `new Event(\"openchange\", { cancelable: true })`. |\n\t * | Programmatic `c.setOpen(next, event)` with explicit event | The supplied event, used as-is. |\n\t *\n\t * Cancellation flows by reference: any layer in the chain that calls\n\t * `event.preventDefault()` is observed by every later layer.\n\t */\n\tonOpenChange?: (\n\t\topen: boolean,\n\t\tevent: Event,\n\t\treason: CollapsibleChangeReason,\n\t) => void;\n\t/**\n\t * Keep the panel in the DOM even while closed. Read by inline-headless\n\t * consumers via `c.panel()` (currently dormant under the structural\n\t * `<Collapsible.Panel>` wrapper, which composes its own\n\t * `createMountTransition`).\n\t * @default false\n\t */\n\tkeepMounted?: MaybeAccessor<boolean>;\n\t/**\n\t * Use `hidden=\"until-found\"` so the browser's built-in page search can\n\t * find and expand the panel. Forces {@link keepMounted}. Same dormancy\n\t * note as `keepMounted` for the structural wrapper path.\n\t * @default false\n\t */\n\thiddenUntilFound?: MaybeAccessor<boolean>;\n}\n\n/**\n * Why the open state changed. Emitted on the third arg of\n * `onOpenChange(next, event, reason)` and accepted by\n * `c.setOpen(next, event?, reason?)` / `c.toggle(event?, reason?)`.\n *\n * - `\"trigger-press\"` — click or keyboard-activated (Enter/Space) trigger.\n * - `\"beforematch\"` — browser find-in-page expanded the panel (when\n *   `hiddenUntilFound` is enabled, via the wrapper's `createMountTransition`).\n * - `\"imperative\"` — programmatic change with no originating DOM event,\n *   or caller-supplied reason not covered by the above.\n *\n * Outer compounds that embed Collapsible (Accordion, etc.) receive this\n * as-is.\n */\nexport type CollapsibleChangeReason =\n\t| \"trigger-press\"\n\t| \"beforematch\"\n\t| \"imperative\";\n\n/**\n * Public API returned by {@link createCollapsible}. Flat accessors and\n * setters at the root; no `state` snapshot blob (axis D).\n *\n * Stage-01c cleanup-chain (post AccordionPanel migration): `mounted`,\n * `transitionStatus`, `shouldRenderPanel`, and `_setMounted` are no longer\n * on this api — animation lifecycle lives in `createMountTransition`,\n * composed by each structural panel wrapper.\n */\nexport interface CollapsibleApi {\n\t/** Reactive accessor for the current open state. */\n\topen: Accessor<boolean>;\n\t/** Whether interaction is suppressed. */\n\tdisabled: Accessor<boolean>;\n\t/**\n\t * Stable id for the panel element. Generated at primitive setup\n\t * (`createUniqueId()` is stable for the owner's lifetime). Inline-\n\t * headless consumers reading the panel slot get this on\n\t * `c.panel().id`; outer compounds that embed this primitive\n\t * (Accordion, etc.) read it directly to wire `aria-labelledby` /\n\t * `aria-controls` cross-component without going through the slot bag.\n\t */\n\tpanelId: Accessor<string>;\n\t/**\n\t * Override the panel id. Called by `<CollapsiblePanel>` /\n\t * `<Accordion.Panel>` when the consumer provides an explicit `id`\n\t * prop, so the trigger's `aria-controls` binding reflects the\n\t * consumer-supplied value.\n\t */\n\tsetPanelId: (id: string) => void;\n\n\t/**\n\t * Flip `open` (no-op if `disabled`). Same `event?` / `reason?` contract\n\t * as {@link setOpen}.\n\t */\n\ttoggle: (event?: Event, reason?: CollapsibleChangeReason) => void;\n\t/**\n\t * Imperative open setter. Fires `onOpenChange(next, event, reason)` first;\n\t * if the consumer calls `event.preventDefault()` the internal write is\n\t * skipped.\n\t */\n\tsetOpen: (\n\t\tnext: boolean,\n\t\tevent?: Event,\n\t\treason?: CollapsibleChangeReason,\n\t) => void;\n\n\t/**\n\t * Trigger slot — returns a getter-bag of HTML attributes ready for\n\t * spreading onto a `<button>` (or `dynamic(...)`).\n\t */\n\ttrigger: <U extends object | undefined = undefined>(\n\t\tuserProps?: U,\n\t) => CollapsibleTriggerSlotProps & (U extends object ? U : object);\n\t/**\n\t * Panel slot — getter-bag with `id` and `data-state`/`data-open`/\n\t * `data-closed`. Animation/exit lifecycle (`hidden`, `style`,\n\t * `data-starting-style`/`data-ending-style`, panel ref) is composed\n\t * separately via `createMountTransition` on top of `c.open`. The slot\n\t * itself emits no lifecycle keys after the stage-01c cleanup.\n\t */\n\tpanel: <U extends object | undefined = undefined>(\n\t\tuserProps?: U,\n\t) => CollapsiblePanelSlotProps & (U extends object ? U : object);\n\n\t/**\n\t * Directive form of {@link trigger} — returns a `ref` callback that\n\t * spreads the trigger slot bag onto the element at apply time.\n\t *\n\t * ```tsx\n\t * <button ref={c.triggerRef()}>Toggle</button>\n\t * ```\n\t */\n\ttriggerRef: () => (el: HTMLButtonElement | null) => void;\n\t/** Directive form of {@link panel}. */\n\tpanelRef: () => (el: HTMLElement | null) => void;\n\n\t/**\n\t * Context provider. Wrap a subtree to make the API discoverable via\n\t * `useCollapsible()` without prop-drilling.\n\t */\n\tProvider: (props: { children: JSX.Element }) => JSX.Element;\n}\n\n/**\n * Shape of attributes emitted by `c.trigger()`.\n */\nexport interface CollapsibleTriggerSlotProps {\n\ttype: \"button\";\n\t\"aria-expanded\": \"true\" | \"false\";\n\t\"aria-controls\": string | undefined;\n\t\"data-panel-open\": \"\" | undefined;\n\t\"data-disabled\": \"\" | undefined;\n\tonClick: (event: MouseEvent) => void;\n}\n\nexport interface CollapsiblePanelSlotProps {\n\tid: string | undefined;\n\t\"data-state\": \"open\" | \"closed\";\n\t\"data-open\": \"\" | undefined;\n\t\"data-closed\": \"\" | undefined;\n}\n\nconst CollapsibleContext = createContext<CollapsibleApi | null>(null);\n\n/**\n * Read the nearest {@link CollapsibleApi} provided by `c.Provider`.\n * Throws if used outside a Provider.\n */\nexport function useCollapsible(): CollapsibleApi {\n\tconst ctx = useContext(CollapsibleContext);\n\tif (ctx == null) {\n\t\tthrow new Error(\n\t\t\t\"Base UI: useCollapsible() must be called inside a <c.Provider>.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\n/**\n * Solid 2.0-native compound primitive for collapsible disclosure. One call\n * owns logical state (open/disabled, panel id, change callbacks). Animation\n * lifecycle (mount, exit, measurement, beforematch) is NOT in this primitive\n * — wrappers compose `createMountTransition` over `c.open`.\n */\nexport function createCollapsible(\n\toptions: CreateCollapsibleOptions,\n): CollapsibleApi {\n\t// `open` reads through the consumer's accessor — no internal signal,\n\t// no controlled-or-internal branching. Memoized so dependents see the\n\t// same identity within a tracking scope and so dev-time observability\n\t// (`name`) lines up with the rest of the api's signals.\n\tconst open = createMemo<boolean>(() => Boolean(readOption(options.open)), {\n\t\tname: \"collapsible.open\",\n\t});\n\n\tconst disabled = createMemo<boolean>(\n\t\t() => Boolean(readOption(options.disabled)),\n\t\t{ name: \"collapsible.disabled\" },\n\t);\n\n\t// `setOpen` / `toggle` are pure event-emitters. They fire\n\t// `onOpenChange(next, event, reason)`; the consumer is responsible\n\t// for updating their open-signal in response. There is no internal\n\t// state to write — `event.preventDefault()` is now a no-op for the\n\t// primitive (the consumer's handler is the only writer).\n\tconst setOpen = (\n\t\tnext: boolean,\n\t\tevent?: Event,\n\t\treason: CollapsibleChangeReason = \"imperative\",\n\t): void => {\n\t\tconst ev = event ?? new Event(\"openchange\", { cancelable: true });\n\t\t// Use runWithOwner(null, ...) to escape the current reactive owner so\n\t\t// that consumer signal writes inside onOpenChange don't trigger\n\t\t// SIGNAL_WRITE_IN_OWNED_SCOPE. The callback is an event-emitter — it\n\t\t// exits the reactive graph intentionally (same pattern as DOM event\n\t\t// handlers). untrack() alone doesn't clear the owner context.\n\t\trunWithOwner(null, () => options.onOpenChange?.(next, ev, reason));\n\t};\n\n\tconst toggle = (\n\t\tevent?: Event,\n\t\treason: CollapsibleChangeReason = \"imperative\",\n\t): void => {\n\t\tif (untrack(disabled)) return;\n\t\tsetOpen(!untrack(open), event, reason);\n\t};\n\n\t// Panel-id signal. Seeded with a pre-generated fallback so the trigger's\n\t// `aria-controls` getter has a non-undefined initial value (Solid 2's DOM\n\t// spread filters undefined keys out of `ownKeys` at first spread and never\n\t// re-enters them — see `test/internals/merge-props-undefined-attr.test.tsx`).\n\tconst fallbackPanelId = createUniqueId();\n\tconst [panelId, setPanelId] = createSignal<string>(fallbackPanelId, {\n\t\townedWrite: true,\n\t\tname: \"collapsible.panelId\",\n\t});\n\n\t// Internal getter-bag for the trigger slot.\n\tconst triggerInternal = {\n\t\ttype: \"button\" as const,\n\t\tget \"aria-expanded\"() {\n\t\t\treturn open() ? (\"true\" as const) : (\"false\" as const);\n\t\t},\n\t\tget \"aria-controls\"() {\n\t\t\t// Match React (`open ? panelId : undefined`): omit `aria-controls`\n\t\t\t// entirely while closed so a closed collapsible never points at a\n\t\t\t// panel that isn't rendered — notably under SSR, where a closed\n\t\t\t// panel has no element in the DOM. When open, `shouldRender`\n\t\t\t// guarantees the panel is mounted, so the id resolves to a real\n\t\t\t// element. `mergeRootProps` keeps this key reactive across spreads\n\t\t\t// even though it can start `undefined`, so the old `\"\"`-seed\n\t\t\t// undefined-attr workaround is no longer needed.\n\t\t\treturn open() ? panelId() : undefined;\n\t\t},\n\t\tget \"data-panel-open\"() {\n\t\t\treturn open() ? \"\" : undefined;\n\t\t},\n\t\tget \"data-disabled\"() {\n\t\t\treturn disabled() ? \"\" : undefined;\n\t\t},\n\t\tonClick(event: MouseEvent) {\n\t\t\tif (disabled()) return;\n\t\t\tsetOpen(!untrack(open), event, \"trigger-press\");\n\t\t},\n\t};\n\n\t// Internal getter-bag for the panel slot. Only logical state attrs —\n\t// animation lifecycle (`hidden`, `style`, `data-{starting,ending}-style`,\n\t// ref) is the wrapper's `createMountTransition` instance's job.\n\tconst panelInternal = {\n\t\tget id() {\n\t\t\treturn panelId();\n\t\t},\n\t\tget \"data-state\"() {\n\t\t\treturn open() ? (\"open\" as const) : (\"closed\" as const);\n\t\t},\n\t\tget \"data-open\"() {\n\t\t\treturn open() ? \"\" : undefined;\n\t\t},\n\t\tget \"data-closed\"() {\n\t\t\treturn open() ? undefined : \"\";\n\t\t},\n\t};\n\n\tconst trigger = <U extends object | undefined>(userProps?: U) =>\n\t\tmergeRootProps(triggerInternal, userProps) as CollapsibleTriggerSlotProps &\n\t\t\t(U extends object ? U : object);\n\n\tconst panel = <U extends object | undefined>(userProps?: U) =>\n\t\tmergeRootProps(panelInternal, userProps) as CollapsiblePanelSlotProps &\n\t\t\t(U extends object ? U : object);\n\n\tconst triggerRef = (): ((el: HTMLButtonElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => trigger());\n\tconst panelRef = (): ((el: HTMLElement | null) => void) =>\n\t\tmakeSlotRefDirective(() => panel());\n\n\tconst api: CollapsibleApi = {\n\t\topen,\n\t\tdisabled,\n\t\tpanelId,\n\t\tsetPanelId,\n\t\ttoggle,\n\t\tsetOpen,\n\t\ttrigger,\n\t\tpanel,\n\t\ttriggerRef,\n\t\tpanelRef,\n\t\tProvider: (props) => (\n\t\t\t<CollapsibleContext value={api}>{props.children}</CollapsibleContext>\n\t\t),\n\t};\n\t(api as CollapsibleApi & Snapshottable)[SNAPSHOT_KEYS] =\n\t\tCOLLAPSIBLE_SNAPSHOT_KEYS;\n\treturn api;\n}\n\nconst COLLAPSIBLE_SNAPSHOT_KEYS = snapshotKeys<CollapsibleApi>(\n\t\"open\",\n\t\"disabled\",\n\t\"panelId\",\n);\n\n/**\n * Shared directive-factory pattern used by both `c.triggerRef()` /\n * `c.panelRef()` (above) and the top-level `collapsibleTrigger(c)` /\n * `collapsiblePanel(c)` exports.\n */\n"],"mappings":"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","ignoreList":[]}