@typed/ui 1.0.0-beta.4 → 1.0.0-beta.6

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 (157) hide show
  1. package/README.md +53 -9
  2. package/dist/Alert.d.ts +78 -0
  3. package/dist/Alert.d.ts.map +1 -0
  4. package/dist/Alert.js +37 -0
  5. package/dist/Button.d.ts +144 -0
  6. package/dist/Button.d.ts.map +1 -0
  7. package/dist/Button.js +38 -0
  8. package/dist/Carousel.d.ts +547 -0
  9. package/dist/Carousel.d.ts.map +1 -0
  10. package/dist/Carousel.js +387 -0
  11. package/dist/Checkbox.d.ts +203 -0
  12. package/dist/Checkbox.d.ts.map +1 -0
  13. package/dist/Checkbox.js +140 -0
  14. package/dist/Collection.d.ts +254 -0
  15. package/dist/Collection.d.ts.map +1 -0
  16. package/dist/Collection.js +218 -0
  17. package/dist/Combobox.d.ts +516 -0
  18. package/dist/Combobox.d.ts.map +1 -0
  19. package/dist/Combobox.js +371 -0
  20. package/dist/Component.d.ts +127 -0
  21. package/dist/Component.d.ts.map +1 -0
  22. package/dist/Component.js +60 -0
  23. package/dist/Composite.d.ts +823 -0
  24. package/dist/Composite.d.ts.map +1 -0
  25. package/dist/Composite.js +615 -0
  26. package/dist/Dialog.d.ts +544 -0
  27. package/dist/Dialog.d.ts.map +1 -0
  28. package/dist/Dialog.js +355 -0
  29. package/dist/Disclosure.d.ts +219 -0
  30. package/dist/Disclosure.d.ts.map +1 -0
  31. package/dist/Disclosure.js +128 -0
  32. package/dist/Dom/Events.d.ts +122 -0
  33. package/dist/Dom/Events.d.ts.map +1 -0
  34. package/dist/Dom/Events.js +192 -0
  35. package/dist/Dom/Props.d.ts +161 -0
  36. package/dist/Dom/Props.d.ts.map +1 -0
  37. package/dist/Dom/Props.js +110 -0
  38. package/dist/Dom/Refs.d.ts +58 -0
  39. package/dist/Dom/Refs.d.ts.map +1 -0
  40. package/dist/Dom/Refs.js +61 -0
  41. package/dist/Dom/Render.d.ts +59 -0
  42. package/dist/Dom/Render.d.ts.map +1 -0
  43. package/dist/Dom/Render.js +71 -0
  44. package/dist/Dom/Types.d.ts +570 -0
  45. package/dist/Dom/Types.d.ts.map +1 -0
  46. package/dist/Dom/Types.js +1 -0
  47. package/dist/Dom/index.d.ts +20 -0
  48. package/dist/Dom/index.d.ts.map +1 -0
  49. package/dist/Dom/index.js +8 -0
  50. package/dist/Dom.d.ts +14 -0
  51. package/dist/Dom.d.ts.map +1 -0
  52. package/dist/Dom.js +13 -0
  53. package/dist/Focusable.d.ts +85 -0
  54. package/dist/Focusable.d.ts.map +1 -0
  55. package/dist/Focusable.js +35 -0
  56. package/dist/Form.d.ts +1695 -0
  57. package/dist/Form.d.ts.map +1 -0
  58. package/dist/Form.js +987 -0
  59. package/dist/Grid.d.ts +569 -0
  60. package/dist/Grid.d.ts.map +1 -0
  61. package/dist/Grid.js +379 -0
  62. package/dist/Group.d.ts +147 -0
  63. package/dist/Group.d.ts.map +1 -0
  64. package/dist/Group.js +63 -0
  65. package/dist/Heading.d.ts +86 -0
  66. package/dist/Heading.d.ts.map +1 -0
  67. package/dist/Heading.js +48 -0
  68. package/dist/Hovercard.d.ts +297 -0
  69. package/dist/Hovercard.d.ts.map +1 -0
  70. package/dist/Hovercard.js +188 -0
  71. package/dist/HttpRouter.d.ts +129 -6
  72. package/dist/HttpRouter.d.ts.map +1 -1
  73. package/dist/HttpRouter.js +196 -53
  74. package/dist/Link.d.ts +67 -28
  75. package/dist/Link.d.ts.map +1 -1
  76. package/dist/Link.js +91 -37
  77. package/dist/Listbox.d.ts +437 -0
  78. package/dist/Listbox.d.ts.map +1 -0
  79. package/dist/Listbox.js +316 -0
  80. package/dist/Menu.d.ts +972 -0
  81. package/dist/Menu.d.ts.map +1 -0
  82. package/dist/Menu.js +731 -0
  83. package/dist/Menubar.d.ts +367 -0
  84. package/dist/Menubar.d.ts.map +1 -0
  85. package/dist/Menubar.js +265 -0
  86. package/dist/Meter.d.ts +217 -0
  87. package/dist/Meter.d.ts.map +1 -0
  88. package/dist/Meter.js +94 -0
  89. package/dist/NativeDetails.d.ts +41 -0
  90. package/dist/NativeDetails.d.ts.map +1 -0
  91. package/dist/NativeDetails.js +40 -0
  92. package/dist/NativeDialog.d.ts +64 -0
  93. package/dist/NativeDialog.d.ts.map +1 -0
  94. package/dist/NativeDialog.js +50 -0
  95. package/dist/NativePopover.d.ts +41 -0
  96. package/dist/NativePopover.d.ts.map +1 -0
  97. package/dist/NativePopover.js +46 -0
  98. package/dist/Popover.d.ts +241 -0
  99. package/dist/Popover.d.ts.map +1 -0
  100. package/dist/Popover.js +141 -0
  101. package/dist/RadioGroup.d.ts +432 -0
  102. package/dist/RadioGroup.d.ts.map +1 -0
  103. package/dist/RadioGroup.js +291 -0
  104. package/dist/Role.d.ts +64 -0
  105. package/dist/Role.d.ts.map +1 -0
  106. package/dist/Role.js +27 -0
  107. package/dist/Select.d.ts +529 -0
  108. package/dist/Select.d.ts.map +1 -0
  109. package/dist/Select.js +407 -0
  110. package/dist/Separator.d.ts +54 -0
  111. package/dist/Separator.d.ts.map +1 -0
  112. package/dist/Separator.js +26 -0
  113. package/dist/Slider.d.ts +188 -0
  114. package/dist/Slider.d.ts.map +1 -0
  115. package/dist/Slider.js +96 -0
  116. package/dist/SpinButton.d.ts +188 -0
  117. package/dist/SpinButton.d.ts.map +1 -0
  118. package/dist/SpinButton.js +96 -0
  119. package/dist/Storybook.d.ts +76 -0
  120. package/dist/Storybook.d.ts.map +1 -0
  121. package/dist/Storybook.js +102 -0
  122. package/dist/Switch.d.ts +187 -0
  123. package/dist/Switch.d.ts.map +1 -0
  124. package/dist/Switch.js +116 -0
  125. package/dist/Tab.d.ts +26 -0
  126. package/dist/Tab.d.ts.map +1 -0
  127. package/dist/Tab.js +25 -0
  128. package/dist/Tabs.d.ts +591 -0
  129. package/dist/Tabs.d.ts.map +1 -0
  130. package/dist/Tabs.js +346 -0
  131. package/dist/Toolbar.d.ts +366 -0
  132. package/dist/Toolbar.d.ts.map +1 -0
  133. package/dist/Toolbar.js +245 -0
  134. package/dist/Tooltip.d.ts +296 -0
  135. package/dist/Tooltip.d.ts.map +1 -0
  136. package/dist/Tooltip.js +172 -0
  137. package/dist/Tree.d.ts +591 -0
  138. package/dist/Tree.d.ts.map +1 -0
  139. package/dist/Tree.js +434 -0
  140. package/dist/TreeGrid.d.ts +645 -0
  141. package/dist/TreeGrid.d.ts.map +1 -0
  142. package/dist/TreeGrid.js +420 -0
  143. package/dist/VisuallyHidden.d.ts +54 -0
  144. package/dist/VisuallyHidden.d.ts.map +1 -0
  145. package/dist/VisuallyHidden.js +27 -0
  146. package/dist/WindowSplitter.d.ts +376 -0
  147. package/dist/WindowSplitter.d.ts.map +1 -0
  148. package/dist/WindowSplitter.js +222 -0
  149. package/dist/index.d.ts +49 -0
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +49 -0
  152. package/package.json +45 -18
  153. package/src/HttpRouter.test.ts +0 -256
  154. package/src/HttpRouter.ts +0 -165
  155. package/src/Link.test.ts +0 -84
  156. package/src/Link.ts +0 -107
  157. package/src/index.ts +0 -2
@@ -0,0 +1,544 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Scope from "effect/Scope";
3
+ import * as Schema from "effect/Schema";
4
+ import type { Fx } from "@typed/fx/Fx";
5
+ import { RefSubject } from "@typed/fx";
6
+ import { EventHandler, type Renderable, type RenderEvent, type RenderTemplate } from "@typed/template";
7
+ import * as Dom from "./Dom.js";
8
+ import type { HostResult } from "./Dom/Types.js";
9
+ /** Current renderer-independent dialog visibility.
10
+ * @remarks
11
+ * ## Why
12
+ * State can be controlled and tested without mounting a dialog.
13
+ * ## Ownership and lifetime
14
+ * Plain data retains no resources; RefSubject lifetime is Scope-owned.
15
+ * @since 1.0.0
16
+ * @category state
17
+ */
18
+ export interface State {
19
+ /** Whether the native dialog is open.
20
+ * @remarks
21
+ * ## Why
22
+ * One value coordinates triggers, native lifecycle, and application state.
23
+ * ## Ownership and lifetime
24
+ * Plain data acquires no resources.
25
+ * @since 1.0.0
26
+ * @category state
27
+ */
28
+ readonly open: boolean;
29
+ }
30
+ /** Optional initial dialog state.
31
+ * @remarks
32
+ * ## Why
33
+ * Omission provides a deterministic closed hydration snapshot.
34
+ * ## Ownership and lifetime
35
+ * Configuration is inert.
36
+ * @since 1.0.0
37
+ * @category state
38
+ */
39
+ export interface InitialState {
40
+ /** Initial open state, defaulting to false.
41
+ * @remarks
42
+ * ## Why
43
+ * The value seeds the serializable server/client contract.
44
+ * ## Ownership and lifetime
45
+ * Plain data retains no resources.
46
+ * @since 1.0.0
47
+ * @category state
48
+ */
49
+ readonly open?: boolean;
50
+ }
51
+ /** Schema for dialog hydration state.
52
+ * @remarks
53
+ * ## Why
54
+ * Shared encoding keeps server and browser state compatible.
55
+ * ## Ownership and lifetime
56
+ * The immutable schema acquires no resources.
57
+ * @since 1.0.0
58
+ * @category schemas
59
+ */
60
+ export declare const StateSchema: Schema.Struct<{
61
+ readonly open: Schema.Boolean;
62
+ }>;
63
+ /** Creates hydrated dialog state independent of rendering.
64
+ * @remarks
65
+ * ## Why
66
+ * Application transitions can be composed and tested before a native dialog
67
+ * element exists.
68
+ * ## Ownership and lifetime
69
+ * The calling Effect Scope owns the returned RefSubject.
70
+ * @example
71
+ * ```ts
72
+ * import { Effect } from "effect"
73
+ * import * as Dialog from "@typed/ui/Dialog"
74
+ *
75
+ * const program = Effect.gen(function* () {
76
+ * return yield* Dialog.makeState()
77
+ * })
78
+ * ```
79
+ * @since 1.0.0
80
+ * @category constructors
81
+ */
82
+ export declare function makeState(initial?: InitialState): Effect.Effect<RefSubject.HydratedRefSubject<{
83
+ readonly open: boolean;
84
+ }, Schema.SchemaError, never, never>, never, Scope.Scope>;
85
+ /** Sets desired dialog visibility.
86
+ * @remarks
87
+ * ## Why
88
+ * Explicit state transitions stay outside renderers and retain Effect typing.
89
+ * ## Ownership and lifetime
90
+ * The Effect uses the existing RefSubject lifetime and acquires no resource.
91
+ * @example
92
+ * ```ts
93
+ * import { Effect } from "effect"
94
+ * import * as Dialog from "@typed/ui/Dialog"
95
+ *
96
+ * const program = Effect.gen(function* () {
97
+ * const state = yield* Dialog.makeState()
98
+ * yield* Dialog.setOpen(state, true)
99
+ * })
100
+ * ```
101
+ * @since 1.0.0
102
+ * @category state
103
+ */
104
+ export declare function setOpen<E, R>(state: RefSubject.RefSubject<State, E, R>, open: boolean): Effect.Effect<State, E, R>;
105
+ /** Marks dialog state closed without requesting native cancellation.
106
+ * @remarks
107
+ * ## Why
108
+ * Programmatic close is distinct from `requestClose`, which runs the browser's
109
+ * cancelable close-request lifecycle.
110
+ * ## Ownership and lifetime
111
+ * The Effect updates existing state and acquires no resource.
112
+ * @example
113
+ * ```ts
114
+ * import { Effect } from "effect"
115
+ * import * as Dialog from "@typed/ui/Dialog"
116
+ *
117
+ * const program = Effect.gen(function* () {
118
+ * const state = yield* Dialog.makeState({ open: true })
119
+ * yield* Dialog.close(state)
120
+ * })
121
+ * ```
122
+ * @since 1.0.0
123
+ * @category state
124
+ */
125
+ export declare function close<E, R>(state: RefSubject.RefSubject<State, E, R>): Effect.Effect<State, E, R>;
126
+ /**
127
+ * Requests the native dialog close lifecycle, including its cancel event.
128
+ * @remarks
129
+ * ## Why
130
+ * The browser's `requestClose()` is cancelable. The fallback dispatches a real
131
+ * cancelable `cancel` event and calls `close()` only when it is accepted, so
132
+ * user handlers retain the same veto point.
133
+ * ## Ownership and lifetime
134
+ * The Effect consults the dialog currently registered for the hydrated state;
135
+ * registration is removed when `Content`'s Scope closes. No dialog is retained
136
+ * after that finalizer.
137
+ * @example
138
+ * ```ts
139
+ * import { Effect } from "effect"
140
+ * import * as Dialog from "@typed/ui/Dialog"
141
+ *
142
+ * const program = Effect.gen(function* () {
143
+ * const state = yield* Dialog.makeState({ open: true })
144
+ * yield* Dialog.requestClose(state)
145
+ * })
146
+ * ```
147
+ * @since 1.0.0
148
+ * @category lifecycle
149
+ */
150
+ export declare function requestClose(state: RefSubject.HydratedRefSubject<State, Schema.SchemaError>, returnValue?: string): Effect.Effect<void>;
151
+ /** Options for a dialog-opening button.
152
+ * @remarks
153
+ * ## Why
154
+ * The trigger exposes dialog relationship and expanded state to the platform.
155
+ * ## Ownership and lifetime
156
+ * Options are inert; rendering owns listeners/subscriptions by Scope.
157
+ * @since 1.0.0
158
+ * @category models
159
+ */
160
+ export interface TriggerOptions extends Dom.HostOptions<HTMLButtonElement> {
161
+ /** Hydrated state shared with dialog content.
162
+ * @remarks
163
+ * ## Why
164
+ * One source drives `aria-expanded` and dialog visibility.
165
+ * ## Ownership and lifetime
166
+ * The trigger borrows state; its originating Scope owns it.
167
+ * @since 1.0.0
168
+ * @category state
169
+ */
170
+ readonly state: RefSubject.HydratedRefSubject<State, Schema.SchemaError>;
171
+ /** Dialog id targeted by native command attributes.
172
+ * @remarks
173
+ * ## Why
174
+ * With an id, the trigger emits `commandfor` and `command="show-modal"` and
175
+ * deliberately omits its Fx click fallback. That form therefore requires
176
+ * browser support for native command attributes. Without `controls`, Typed
177
+ * installs the state-driven click fallback instead.
178
+ * ## Ownership and lifetime
179
+ * The string is reflected and retains no resources.
180
+ * @since 1.0.0
181
+ * @category relationships
182
+ */
183
+ readonly controls?: string;
184
+ /** Visible trigger content and accessible name.
185
+ * @remarks
186
+ * ## Why
187
+ * A dialog trigger must be discoverable to assistive technology.
188
+ * ## Ownership and lifetime
189
+ * Dynamic content follows the trigger Scope.
190
+ * @since 1.0.0
191
+ * @category content
192
+ */
193
+ readonly content: Renderable.Any;
194
+ }
195
+ declare function triggerInternalProps<const Options extends TriggerOptions>(options: Options): ({ property }: Dom.InternalPropsHelpers<Options>) => {
196
+ readonly type: "button";
197
+ readonly "aria-haspopup": "dialog";
198
+ readonly "aria-expanded": RefSubject.Computed<boolean, Schema.SchemaError, never>;
199
+ readonly "aria-controls": Exclude<Dom.Property<Options, "controls">, Dom.Nullish> | undefined;
200
+ readonly commandfor: Exclude<Dom.Property<Options, "controls">, Dom.Nullish> | undefined;
201
+ readonly command: "show-modal" | undefined;
202
+ readonly onclick: Effect.Effect<State, Schema.SchemaError, never> | undefined;
203
+ };
204
+ type TriggerInternalProps<Options extends TriggerOptions> = ReturnType<ReturnType<typeof triggerInternalProps<Options>>>;
205
+ /** Renders a native button that opens dialog content.
206
+ * @remarks
207
+ * ## Why
208
+ * It preserves button semantics, real events, and ARIA relationship state.
209
+ * Supplying `controls` selects native `commandfor` / `show-modal` behavior and
210
+ * disables the Fx click fallback, so that form requires browser command support.
211
+ * Omitting `controls` installs the portable state-driven click handler.
212
+ * ## Ownership and lifetime
213
+ * Running the Fx owns reactive props/listeners in its Scope. A custom host must
214
+ * preserve button type, ARIA, command, click props, and content.
215
+ * @example
216
+ * ```ts
217
+ * import { Effect } from "effect"
218
+ * import * as Dialog from "@typed/ui/Dialog"
219
+ *
220
+ * const program = Effect.gen(function* () {
221
+ * const state = yield* Dialog.makeState()
222
+ * // Omitting controls selects the Fx state fallback.
223
+ * return Dialog.Trigger({ state, content: "Open" })
224
+ * })
225
+ * ```
226
+ * @since 1.0.0
227
+ * @category components
228
+ */
229
+ export declare function Trigger<const Options extends TriggerOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, TriggerInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
230
+ interface ContentOptionsBase extends Dom.HostOptions<HTMLDialogElement> {
231
+ readonly state: RefSubject.HydratedRefSubject<State, Schema.SchemaError>;
232
+ readonly content: Renderable.Any;
233
+ readonly id?: string;
234
+ readonly describedBy?: Renderable.Any<string | null | undefined>;
235
+ readonly modal?: boolean;
236
+ }
237
+ type AccessibleName = {
238
+ readonly label: Renderable.Any<string | null | undefined>;
239
+ readonly labelledBy?: never;
240
+ } | {
241
+ readonly label?: never;
242
+ readonly labelledBy: Renderable.Any<string | null | undefined>;
243
+ };
244
+ /**
245
+ * Dialog content options with exactly one accessible naming strategy.
246
+ * @remarks
247
+ * ## Why
248
+ * A dialog requires an accessible name. The union makes `label` and
249
+ * `labelledBy` mutually exclusive at compile time instead of silently choosing.
250
+ *
251
+ * ## Options
252
+ *
253
+ * `state` synchronizes the native element, `content` renders its subtree, `id`
254
+ * provides a target for browsers supporting native commands, `describedBy`
255
+ * connects supporting text, and
256
+ * `modal` selects `showModal()` by default or `show()` when explicitly false.
257
+ * The supplied label values may be reactive, but the command target id is a
258
+ * stable string so the server and client address the same element.
259
+ * ## Ownership and lifetime
260
+ * Options are inert; rendering owns dynamic values and native synchronization
261
+ * for its Effect Scope.
262
+ * @since 1.0.0
263
+ * @category models
264
+ */
265
+ export type ContentOptions = ContentOptionsBase & AccessibleName;
266
+ declare function contentInternalProps<const Options extends ContentOptions>(options: Options): ({ property }: Dom.InternalPropsHelpers<Options>) => {
267
+ id: Exclude<Dom.Property<Options, "id">, Dom.Nullish> | undefined;
268
+ "aria-labelledby": Exclude<Dom.Property<Options, "labelledBy">, Dom.Nullish> | undefined;
269
+ "aria-describedby": Exclude<Dom.Property<Options, "describedBy">, Dom.Nullish> | undefined;
270
+ "aria-label": Exclude<Dom.Property<Options, "label">, Dom.Nullish> | undefined;
271
+ oncancel: Effect.Effect<State, Schema.SchemaError, never>;
272
+ onclose: Effect.Effect<State, Schema.SchemaError, never>;
273
+ ontoggle: EventHandler.EventHandler<Event, Schema.SchemaError, never>;
274
+ ref: import("./Dom/Refs.js").ComposedRef<RefSubject.HydratedRefSubject<State, Schema.SchemaError, never, never>, (element: HTMLDialogElement) => Effect.Effect<void, Schema.SchemaError, Scope.Scope>> | undefined;
275
+ };
276
+ type ContentInternalProps<Options extends ContentOptions> = ReturnType<ReturnType<typeof contentInternalProps<Options>>>;
277
+ /**
278
+ * Renders native dialog content synchronized with hydrated state.
279
+ * @remarks
280
+ * ## Why
281
+ * `Content` uses a real `<dialog>` and its `show()`, `showModal()`, `close()`,
282
+ * `cancel`, `close`, and `toggle` lifecycle. The browser therefore owns focus,
283
+ * top-layer placement, modal inertness, and default Escape behavior.
284
+ * ## Ownership and lifetime
285
+ * Running the Fx owns native listeners, dialog registration, and the
286
+ * NativeDialog observer in its Effect Scope. Finalization removes registration
287
+ * only when it still points at this element. A custom host must preserve native
288
+ * dialog identity, naming props, lifecycle handlers, and exactly one hydration
289
+ * ref owner.
290
+ * @example
291
+ * ```ts
292
+ * import { Effect } from "effect"
293
+ * import * as Dialog from "@typed/ui/Dialog"
294
+ *
295
+ * const program = Effect.gen(function* () {
296
+ * const state = yield* Dialog.makeState()
297
+ * return Dialog.Content({
298
+ * state,
299
+ * id: "confirm",
300
+ * label: "Confirm",
301
+ * content: "Continue?"
302
+ * })
303
+ * })
304
+ * ```
305
+ * @since 1.0.0
306
+ * @category components
307
+ */
308
+ export declare function Content<const Options extends ContentOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, ContentInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
309
+ /** Canonical widget alias for `Content`.
310
+ * @remarks
311
+ * ## Why
312
+ * The alias provides the widget name while `Content` identifies compound use.
313
+ * ## Ownership and lifetime
314
+ * It has exactly the same native element and Scope ownership as `Content`.
315
+ * @since 1.0.0
316
+ * @category aliases
317
+ */
318
+ export declare const Dialog: typeof Content;
319
+ /** Options for dialog close and close-request buttons.
320
+ * @remarks
321
+ * ## Why
322
+ * Supplying `controls` selects native commands and removes the Fx click
323
+ * fallback, requiring command-attribute browser support. Omitting it keeps the
324
+ * state-driven close or request-close handler.
325
+ * ## Ownership and lifetime
326
+ * Options are inert; rendering owns listeners and dynamic content by Scope.
327
+ * @since 1.0.0
328
+ * @category models
329
+ */
330
+ export interface CloseOptions extends Dom.HostOptions<HTMLButtonElement> {
331
+ /** Hydrated state for fallback close behavior.
332
+ * @remarks
333
+ * ## Why
334
+ * Closing remains available when no native command target id is supplied.
335
+ * ## Ownership and lifetime
336
+ * The button borrows state; its original Scope owns it.
337
+ * @since 1.0.0
338
+ * @category state
339
+ */
340
+ readonly state: RefSubject.HydratedRefSubject<State, Schema.SchemaError>;
341
+ /** Dialog id targeted by native command attributes.
342
+ * @remarks
343
+ * ## Why
344
+ * Native command routing preserves the dialog's platform lifecycle, but
345
+ * selecting it omits the component's click fallback. Use it only where
346
+ * `commandfor` and the requested dialog command are supported; otherwise
347
+ * omit `controls`.
348
+ * ## Ownership and lifetime
349
+ * The string is reflected and retains no resources.
350
+ * @since 1.0.0
351
+ * @category relationships
352
+ */
353
+ readonly controls?: string;
354
+ /** Visible button content and accessible name.
355
+ * @remarks
356
+ * ## Why
357
+ * Every close action needs a discoverable label.
358
+ * ## Ownership and lifetime
359
+ * Dynamic content follows the button Scope.
360
+ * @since 1.0.0
361
+ * @category content
362
+ */
363
+ readonly content: Renderable.Any;
364
+ }
365
+ declare function closeInternalProps<const Options extends CloseOptions>(options: Options, requestCloseLifecycle: boolean): ({ property }: Dom.InternalPropsHelpers<Options>) => {
366
+ readonly type: "button";
367
+ readonly commandfor: Exclude<Dom.Property<Options, "controls">, Dom.Nullish> | undefined;
368
+ readonly command: "close" | "request-close" | undefined;
369
+ readonly onclick: Effect.Effect<void, never, never> | Effect.Effect<State, Schema.SchemaError, never> | undefined;
370
+ };
371
+ type CloseInternalProps<Options extends CloseOptions> = ReturnType<ReturnType<typeof closeInternalProps<Options>>>;
372
+ /** Renders a button that closes a dialog without a cancel request.
373
+ * @remarks
374
+ * ## Why
375
+ * Accepted actions need a direct close path distinct from cancelable dismissal.
376
+ * `controls` selects native `command="close"` and disables the Fx click
377
+ * fallback; omit it when native dialog commands are unavailable.
378
+ * ## Ownership and lifetime
379
+ * Running the Fx owns handlers/dynamic content by Scope. Custom hosts must
380
+ * preserve type, command or fallback click behavior, and content.
381
+ * @example
382
+ * ```ts
383
+ * import { Effect } from "effect"
384
+ * import * as Dialog from "@typed/ui/Dialog"
385
+ *
386
+ * const program = Effect.gen(function* () {
387
+ * const state = yield* Dialog.makeState({ open: true })
388
+ * return Dialog.Close({ state, content: "Done" })
389
+ * })
390
+ * ```
391
+ * @since 1.0.0
392
+ * @category components
393
+ */
394
+ export declare function Close<const Options extends CloseOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, CloseInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
395
+ /** Alias for direct `Close` behavior.
396
+ * @remarks
397
+ * ## Why
398
+ * The alias supports dismissal vocabulary without introducing another lifecycle.
399
+ * ## Ownership and lifetime
400
+ * It has exactly the same Scope and native button ownership as `Close`.
401
+ * @since 1.0.0
402
+ * @category aliases
403
+ */
404
+ export declare const Dismiss: typeof Close;
405
+ /** Renders a button that starts the cancelable native close-request lifecycle.
406
+ * @remarks
407
+ * ## Why
408
+ * Consumers can intercept a real `cancel` event before the dialog closes.
409
+ * `controls` selects native `command="request-close"` and disables the Fx click
410
+ * fallback; omit it when native dialog commands are unavailable.
411
+ * ## Ownership and lifetime
412
+ * Running the Fx owns handlers by Scope; dialog registration remains owned by
413
+ * the corresponding `Content` Scope.
414
+ * @example
415
+ * ```ts
416
+ * import { Effect } from "effect"
417
+ * import * as Dialog from "@typed/ui/Dialog"
418
+ *
419
+ * const program = Effect.gen(function* () {
420
+ * const state = yield* Dialog.makeState({ open: true })
421
+ * return Dialog.RequestClose({ state, content: "Cancel" })
422
+ * })
423
+ * ```
424
+ * @since 1.0.0
425
+ * @category components
426
+ */
427
+ export declare function RequestClose<const Options extends CloseOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, CloseInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
428
+ /** Options for an accessible dialog heading.
429
+ * @remarks
430
+ * ## Why
431
+ * A stable id can serve as the dialog's `aria-labelledby` target.
432
+ * ## Ownership and lifetime
433
+ * Options are inert; dynamic values follow the component Scope.
434
+ * @since 1.0.0
435
+ * @category models
436
+ */
437
+ export interface HeadingOptions extends Dom.HostOptions<HTMLHeadingElement> {
438
+ /** Heading content.
439
+ * @remarks
440
+ * ## Why
441
+ * Visible text supplies the dialog's accessible name when referenced.
442
+ * ## Ownership and lifetime
443
+ * Dynamic content follows the heading Scope.
444
+ * @since 1.0.0
445
+ * @category content
446
+ */
447
+ readonly content: Renderable.Any;
448
+ /** Optional id referenced by `Content.labelledBy`.
449
+ * @remarks
450
+ * ## Why
451
+ * Stable relationships are required for accessible naming and hydration.
452
+ * ## Ownership and lifetime
453
+ * The id is reflected and retains no resources.
454
+ * @since 1.0.0
455
+ * @category relationships
456
+ */
457
+ readonly id?: string;
458
+ /** ARIA heading level, defaulting to two.
459
+ * @remarks
460
+ * ## Why
461
+ * The level preserves document hierarchy independently of visual style.
462
+ * ## Ownership and lifetime
463
+ * The value is reflected and retains no resources.
464
+ * @since 1.0.0
465
+ * @category accessibility
466
+ */
467
+ readonly level?: 1 | 2 | 3 | 4 | 5 | 6;
468
+ }
469
+ declare function headingInternalProps<const Options extends HeadingOptions>(): ({ property }: Dom.InternalPropsHelpers<Options>) => {
470
+ readonly id: Exclude<Dom.Property<Options, "id">, Dom.Nullish> | undefined;
471
+ readonly role: "heading";
472
+ readonly "aria-level": 2 | Exclude<Dom.Property<Options, "level">, Dom.Nullish>;
473
+ };
474
+ type HeadingInternalProps<Options extends HeadingOptions> = ReturnType<ReturnType<typeof headingInternalProps<Options>>>;
475
+ /** Renders a dialog heading with explicit ARIA level semantics.
476
+ * @remarks
477
+ * ## Why
478
+ * The helper creates a reliable naming target and preserves heading hierarchy.
479
+ * ## Ownership and lifetime
480
+ * Running the Fx owns dynamic content by Scope. A custom host must preserve id,
481
+ * role, and `aria-level`.
482
+ * @example
483
+ * ```ts
484
+ * import { Heading } from "@typed/ui/Dialog"
485
+ *
486
+ * const title = Heading({ id: "confirm-title", content: "Confirm" })
487
+ * ```
488
+ * @since 1.0.0
489
+ * @category components
490
+ */
491
+ export declare function Heading<const Options extends HeadingOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, HeadingInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
492
+ /** Options for descriptive dialog text.
493
+ * @remarks
494
+ * ## Why
495
+ * A stable id lets dialog content establish `aria-describedby` explicitly.
496
+ * ## Ownership and lifetime
497
+ * Options are inert; dynamic content follows the component Scope.
498
+ * @since 1.0.0
499
+ * @category models
500
+ */
501
+ export interface DescriptionOptions extends Dom.HostOptions<HTMLParagraphElement> {
502
+ /** Descriptive content.
503
+ * @remarks
504
+ * ## Why
505
+ * Referenced text supplies context beyond the dialog's accessible name.
506
+ * ## Ownership and lifetime
507
+ * Dynamic content follows the description Scope.
508
+ * @since 1.0.0
509
+ * @category content
510
+ */
511
+ readonly content: Renderable.Any;
512
+ /** Optional id referenced by `Content.describedBy`.
513
+ * @remarks
514
+ * ## Why
515
+ * A stable DOM relationship exposes the description to assistive technology.
516
+ * ## Ownership and lifetime
517
+ * The id is reflected and retains no resources.
518
+ * @since 1.0.0
519
+ * @category relationships
520
+ */
521
+ readonly id?: string;
522
+ }
523
+ declare function descriptionInternalProps<const Options extends DescriptionOptions>(): ({ property }: Dom.InternalPropsHelpers<Options>) => {
524
+ readonly id: Exclude<Dom.Property<Options, "id">, Dom.Nullish> | undefined;
525
+ };
526
+ type DescriptionInternalProps<Options extends DescriptionOptions> = ReturnType<ReturnType<typeof descriptionInternalProps<Options>>>;
527
+ /** Renders descriptive dialog text with an optional relationship id.
528
+ * @remarks
529
+ * ## Why
530
+ * The helper keeps accessible description wiring explicit and platform-native.
531
+ * ## Ownership and lifetime
532
+ * Running the Fx owns dynamic content by Scope. A custom host must preserve id.
533
+ * @example
534
+ * ```ts
535
+ * import { Description } from "@typed/ui/Dialog"
536
+ *
537
+ * const detail = Description({ id: "confirm-detail", content: "This cannot be undone." })
538
+ * ```
539
+ * @since 1.0.0
540
+ * @category components
541
+ */
542
+ export declare function Description<const Options extends DescriptionOptions, const Host extends HostResult = never>(options: Options, host?: Dom.HostOverride<Dom.RenderHostProps<Options, DescriptionInternalProps<Options>>, Options["content"], Host>): Fx<RenderEvent, Renderable.Error<Options | Host>, Renderable.Services<Options | Host> | Scope.Scope | RenderTemplate>;
543
+ export {};
544
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.ts"],"names":[],"mappings":"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"}