@mortenbrudvik/waveui 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +231 -85
  2. package/dist/components/data-display/InfoButton.cjs +2 -0
  3. package/dist/components/data-display/InfoButton.cjs.map +1 -0
  4. package/dist/components/data-display/InfoButton.mjs +173 -0
  5. package/dist/components/data-display/InfoButton.mjs.map +1 -0
  6. package/dist/components/data-display/InfoLabel.cjs +1 -1
  7. package/dist/components/data-display/InfoLabel.cjs.map +1 -1
  8. package/dist/components/data-display/InfoLabel.mjs +39 -96
  9. package/dist/components/data-display/InfoLabel.mjs.map +1 -1
  10. package/dist/components/input/Checkbox.cjs +1 -1
  11. package/dist/components/input/Checkbox.cjs.map +1 -1
  12. package/dist/components/input/Checkbox.mjs +91 -75
  13. package/dist/components/input/Checkbox.mjs.map +1 -1
  14. package/dist/components/input/ColorPicker.parts.cjs +1 -1
  15. package/dist/components/input/ColorPicker.parts.cjs.map +1 -1
  16. package/dist/components/input/ColorPicker.parts.mjs +1 -1
  17. package/dist/components/input/ColorPicker.parts.mjs.map +1 -1
  18. package/dist/components/input/Combobox.cjs +1 -1
  19. package/dist/components/input/Combobox.cjs.map +1 -1
  20. package/dist/components/input/Combobox.expand.cjs +1 -1
  21. package/dist/components/input/Combobox.expand.cjs.map +1 -1
  22. package/dist/components/input/Combobox.expand.mjs +20 -20
  23. package/dist/components/input/Combobox.expand.mjs.map +1 -1
  24. package/dist/components/input/Combobox.mjs +143 -138
  25. package/dist/components/input/Combobox.mjs.map +1 -1
  26. package/dist/components/input/DatePicker.cjs +1 -1
  27. package/dist/components/input/DatePicker.cjs.map +1 -1
  28. package/dist/components/input/DatePicker.mjs +213 -209
  29. package/dist/components/input/DatePicker.mjs.map +1 -1
  30. package/dist/components/input/Dropdown.cjs +1 -1
  31. package/dist/components/input/Dropdown.cjs.map +1 -1
  32. package/dist/components/input/Dropdown.mjs +80 -74
  33. package/dist/components/input/Dropdown.mjs.map +1 -1
  34. package/dist/components/input/Field.cjs +1 -1
  35. package/dist/components/input/Field.cjs.map +1 -1
  36. package/dist/components/input/Field.mjs +99 -66
  37. package/dist/components/input/Field.mjs.map +1 -1
  38. package/dist/components/input/Input.cjs +1 -1
  39. package/dist/components/input/Input.cjs.map +1 -1
  40. package/dist/components/input/Input.mjs +79 -55
  41. package/dist/components/input/Input.mjs.map +1 -1
  42. package/dist/components/input/Label.cjs +1 -1
  43. package/dist/components/input/Label.cjs.map +1 -1
  44. package/dist/components/input/Label.mjs +19 -13
  45. package/dist/components/input/Label.mjs.map +1 -1
  46. package/dist/components/input/Rating.cjs +1 -1
  47. package/dist/components/input/Rating.cjs.map +1 -1
  48. package/dist/components/input/Rating.item.cjs +2 -0
  49. package/dist/components/input/Rating.item.cjs.map +1 -0
  50. package/dist/components/input/Rating.item.mjs +255 -0
  51. package/dist/components/input/Rating.item.mjs.map +1 -0
  52. package/dist/components/input/Rating.mjs +150 -151
  53. package/dist/components/input/Rating.mjs.map +1 -1
  54. package/dist/components/input/SearchBox.cjs +1 -1
  55. package/dist/components/input/SearchBox.cjs.map +1 -1
  56. package/dist/components/input/SearchBox.mjs +146 -115
  57. package/dist/components/input/SearchBox.mjs.map +1 -1
  58. package/dist/components/input/Select.cjs +1 -1
  59. package/dist/components/input/Select.cjs.map +1 -1
  60. package/dist/components/input/Select.mjs +34 -25
  61. package/dist/components/input/Select.mjs.map +1 -1
  62. package/dist/components/input/Slider.cjs +1 -1
  63. package/dist/components/input/Slider.cjs.map +1 -1
  64. package/dist/components/input/Slider.mjs +77 -54
  65. package/dist/components/input/Slider.mjs.map +1 -1
  66. package/dist/components/input/SpinButton.cjs +1 -1
  67. package/dist/components/input/SpinButton.cjs.map +1 -1
  68. package/dist/components/input/SpinButton.mjs +198 -96
  69. package/dist/components/input/SpinButton.mjs.map +1 -1
  70. package/dist/components/input/Switch.cjs +1 -1
  71. package/dist/components/input/Switch.cjs.map +1 -1
  72. package/dist/components/input/Switch.mjs +71 -55
  73. package/dist/components/input/Switch.mjs.map +1 -1
  74. package/dist/components/input/TagPicker.cjs +1 -1
  75. package/dist/components/input/TagPicker.cjs.map +1 -1
  76. package/dist/components/input/TagPicker.mjs +142 -116
  77. package/dist/components/input/TagPicker.mjs.map +1 -1
  78. package/dist/components/input/Textarea.cjs +1 -1
  79. package/dist/components/input/Textarea.cjs.map +1 -1
  80. package/dist/components/input/Textarea.mjs +28 -21
  81. package/dist/components/input/Textarea.mjs.map +1 -1
  82. package/dist/components/input/TimePicker.cjs +1 -1
  83. package/dist/components/input/TimePicker.cjs.map +1 -1
  84. package/dist/components/input/TimePicker.mjs +189 -184
  85. package/dist/components/input/TimePicker.mjs.map +1 -1
  86. package/dist/components/input/fieldLabel.cjs +2 -0
  87. package/dist/components/input/fieldLabel.cjs.map +1 -0
  88. package/dist/components/input/fieldLabel.mjs +17 -0
  89. package/dist/components/input/fieldLabel.mjs.map +1 -0
  90. package/dist/components/input/inputLook.cjs +2 -0
  91. package/dist/components/input/inputLook.cjs.map +1 -0
  92. package/dist/components/input/inputLook.mjs +28 -0
  93. package/dist/components/input/inputLook.mjs.map +1 -0
  94. package/dist/components/input/pickerStyles.cjs +1 -1
  95. package/dist/components/input/pickerStyles.cjs.map +1 -1
  96. package/dist/components/input/pickerStyles.mjs +42 -4
  97. package/dist/components/input/pickerStyles.mjs.map +1 -1
  98. package/dist/components/navigation/Menu.popover.cjs +1 -1
  99. package/dist/components/navigation/Menu.popover.cjs.map +1 -1
  100. package/dist/components/navigation/Menu.popover.mjs +10 -10
  101. package/dist/components/navigation/Menu.root.cjs +1 -1
  102. package/dist/components/navigation/Menu.root.cjs.map +1 -1
  103. package/dist/components/navigation/Menu.root.mjs +10 -10
  104. package/dist/components/overlays/Popover.cjs +1 -1
  105. package/dist/components/overlays/Popover.cjs.map +1 -1
  106. package/dist/components/overlays/Popover.mjs +203 -208
  107. package/dist/components/overlays/Popover.mjs.map +1 -1
  108. package/dist/components/overlays/Popover.shared.cjs +1 -1
  109. package/dist/components/overlays/Popover.shared.cjs.map +1 -1
  110. package/dist/components/overlays/Popover.shared.mjs +82 -77
  111. package/dist/components/overlays/Popover.shared.mjs.map +1 -1
  112. package/dist/components/provider/WaveProvider.cjs +1 -1
  113. package/dist/components/provider/WaveProvider.cjs.map +1 -1
  114. package/dist/components/provider/WaveProvider.mjs +25 -19
  115. package/dist/components/provider/WaveProvider.mjs.map +1 -1
  116. package/dist/hooks/useFieldControl.cjs.map +1 -1
  117. package/dist/hooks/useFieldControl.mjs.map +1 -1
  118. package/dist/index.cjs +1 -1
  119. package/dist/index.d.cts +805 -99
  120. package/dist/index.d.ts +805 -99
  121. package/dist/index.mjs +101 -99
  122. package/dist/lib/classNames.cjs +1 -1
  123. package/dist/lib/classNames.cjs.map +1 -1
  124. package/dist/lib/classNames.mjs +74 -66
  125. package/dist/lib/classNames.mjs.map +1 -1
  126. package/dist/lib/styles.cjs +1 -1
  127. package/dist/lib/styles.cjs.map +1 -1
  128. package/dist/lib/styles.mjs +21 -4
  129. package/dist/lib/styles.mjs.map +1 -1
  130. package/dist/styles.css +1 -1
  131. package/package.json +1 -1
  132. package/src/styles/tokens.css +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useFieldControl.cjs","names":["React","useId","joinIds","require_runtime","require_useId","require_aria","react","FieldControlIdClaimStore","token","onChange","listener","createFieldControlIdClaim","subscribeNothing","noVersion","FieldContext","useFieldContext","useFieldControl","field","fallbackId","options","wantsControlId","props","claim","holdsControlId","id","labelledBy","labelable","describedBy","invalid","ariaRequired","required","nativeRequired","result"],"sources":["../../src/hooks/useFieldControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { joinIds } from '../lib/aria';\nimport type { ValidationState } from '../lib/types';\nimport { useId } from './useId';\n\n/**\n * What a `Field` tells the controls inside it: the ids of its label, hint and validation message,\n * and its validation, invalid and required state. `Field` provides it; every library input reads\n * it through {@link useFieldControl}, and so can your own control.\n */\nexport interface FieldContextValue {\n /** The id the Field's `<label htmlFor>` points at. */\n controlId: string;\n /** The id of the Field's `<label>`, used for `aria-labelledby` on non-labelable controls. */\n labelId: string | undefined;\n /** The id of the rendered hint, if any. */\n hintId: string | undefined;\n /**\n * The id of the rendered error message, if any: set only while the validation message is an\n * error (see `validationMessageId` for every state).\n */\n errorId: string | undefined;\n /** Whether the Field is in an error state (only the `error` validation state is invalid). */\n invalid: boolean;\n /** Whether the Field is required. */\n required: boolean;\n /** Field renders the error message itself; controls with their own `error` must not repeat it. */\n hasErrorMessage: boolean;\n /**\n * Field already gave `controlId` to its first child, a label-for merge target (component,\n * labelable element, custom element), whether Field merged it or it was the child's own id; a\n * control that receives no `id` prop is then not that child (it is nested inside it, e.g.\n * `Field > Tooltip > Input`, or a later sibling) and must not reuse `controlId`.\n * {@link useFieldControl} gives such a control its own id and names it through\n * `aria-labelledby`. Absent or `false`: a control without an `id` uses `controlId`, subject to\n * `controlIdClaim`.\n */\n controlIdAssigned?: boolean;\n /**\n * Hands `controlId` to one control when `controlIdAssigned` is not set — Field left its first\n * child alone (a plain `<div>`, a Fragment), so every library control inside reads this context.\n * The first control without an `id` of its own takes `controlId`; the others get their own id\n * and are named through `aria-labelledby`, so no id is duplicated. `Field` creates one for each\n * Field. Absent: every control without an `id` uses `controlId`.\n */\n controlIdClaim?: FieldControlIdClaim;\n /**\n * The Field's validation state (`validationState`, or `'error'` from `error`). Absent in\n * contexts built before 0.6: read it as `invalid ? 'error' : 'none'`.\n */\n validationState?: ValidationState;\n /**\n * The id of the rendered validation message in any state (error, warning, success, neutral).\n * `errorId` is set only while that message is an error.\n */\n validationMessageId?: string;\n}\n\n/**\n * Decides which control inside a `Field` takes the Field's `controlId` (the id its\n * `<label htmlFor>` points at) when several library controls without an `id` of their own read\n * the same context. `Field` creates one for each Field and passes it as\n * {@link FieldContextValue.controlIdClaim}; {@link useFieldControl} calls the methods, so a\n * control never calls them itself.\n *\n * - The first control to render takes `controlId`: on the first render (and on the server, so\n * hydration matches) that is the first one in document order. It keeps it across re-renders.\n * - When the holder unmounts or stops wanting `controlId` (it gets an `id` of its own), the\n * subscribers are notified, re-render, and the first of them takes `controlId` over.\n * - A render that claimed `controlId` but never committed (a discarded concurrent render) does not\n * keep it: a mounted control that renders without `controlId` frees it.\n */\nexport interface FieldControlIdClaim {\n /**\n * During render, with the control's stable token (its `useId`): gives `controlId` to `token`\n * when no control holds it, and returns whether `token` holds it. Idempotent per token, so\n * StrictMode double renders and later re-renders agree.\n */\n claim(token: string): boolean;\n /**\n * From a layout effect while the control wants `controlId`: marks `token` mounted. The returned\n * cleanup frees `controlId` when `token` holds it and notifies the subscribers.\n */\n mount(token: string): () => void;\n /**\n * From a layout effect of the control that rendered with `controlId`: takes it again after a\n * StrictMode effect replay freed it; if another control took it meanwhile, notifies the\n * subscribers so both re-render and agree.\n */\n hold(token: string): void;\n /**\n * From a passive effect of a mounted control that rendered without `controlId`: frees\n * `controlId` when its holder is not mounted (its render was discarded) and notifies the\n * subscribers.\n */\n releaseStale(): void;\n /** Subscribes to changes of the holder (for `useSyncExternalStore`); returns the unsubscribe. */\n subscribe(onChange: () => void): () => void;\n /** A number that changes whenever the subscribers are notified (the store snapshot). */\n getVersion(): number;\n}\n\nclass FieldControlIdClaimStore implements FieldControlIdClaim {\n private holder: string | undefined = undefined;\n private readonly mounted = new Set<string>();\n private readonly listeners = new Set<() => void>();\n private version = 0;\n\n claim = (token: string): boolean => {\n if (this.holder === undefined) this.holder = token;\n return this.holder === token;\n };\n\n mount = (token: string): (() => void) => {\n this.mounted.add(token);\n return () => {\n this.mounted.delete(token);\n if (this.holder === token) this.free();\n };\n };\n\n hold = (token: string): void => {\n if (this.holder === undefined) this.holder = token;\n else if (this.holder !== token) this.notify();\n };\n\n releaseStale = (): void => {\n if (this.holder !== undefined && !this.mounted.has(this.holder)) this.free();\n };\n\n subscribe = (onChange: () => void): (() => void) => {\n this.listeners.add(onChange);\n return () => {\n this.listeners.delete(onChange);\n };\n };\n\n getVersion = (): number => this.version;\n\n private free(): void {\n this.holder = undefined;\n this.notify();\n }\n\n private notify(): void {\n this.version += 1;\n for (const listener of Array.from(this.listeners)) listener();\n }\n}\n\n/**\n * Creates the {@link FieldControlIdClaim} a Field puts into its context (one per Field instance,\n * e.g. `const [claim] = useState(createFieldControlIdClaim)`).\n *\n * @internal Not exported from the package.\n */\nexport function createFieldControlIdClaim(): FieldControlIdClaim {\n return new FieldControlIdClaimStore();\n}\n\nconst subscribeNothing = (): (() => void) => () => {};\nconst noVersion = (): number => 0;\n\n/**\n * Context provided by `Field`. `null` outside a Field (controls then use only their own props).\n */\nexport const FieldContext: React.Context<FieldContextValue | null> =\n React.createContext<FieldContextValue | null>(null);\nFieldContext.displayName = 'FieldContext';\n\n/** The surrounding Field's context value, or `null` when the control is not inside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return React.useContext(FieldContext);\n}\n\n/** The labelling/validation props a control receives from its consumer and from its Field. */\nexport interface FieldControlProps {\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: React.AriaAttributes['aria-invalid'];\n 'aria-required'?: React.AriaAttributes['aria-required'];\n required?: boolean;\n}\n\n/** Options of {@link useFieldControl}. */\nexport interface UseFieldControlOptions {\n /**\n * Whether the focusable element can be the target of `<label htmlFor>` (`<input>`, `<button>`,\n * `<select>`, `<textarea>`). Non-labelable controls (`role=\"radiogroup\"`/`role=\"group\"` divs)\n * are named with `aria-labelledby` instead.\n * @default true\n */\n labelable?: boolean;\n /**\n * Whether the focusable element is a native form control (Input, Select, Textarea, Slider,\n * SpinButton's input), so the Field's `required` becomes the native `required` attribute and\n * constraint validation runs. Controls built on buttons or divs validate through `HiddenInput`.\n * @default false\n */\n nativeRequired?: boolean;\n}\n\n/**\n * Merges a control's own labelling props with its surrounding `Field`. Spread the result onto the\n * **focusable element** (for a control whose root wraps it, not onto the root). Consumer values\n * are merged, never overwritten, and only defined keys are returned, so spreading never clears an\n * attribute.\n *\n * - `id`: the consumer's id; else, when the Field already gave `controlId` to its first child\n * (`controlIdAssigned`) — so this control is nested inside that child or a later sibling — a\n * generated id of its own; else the Field's `controlId`, which only one control takes when the\n * Field provides a `controlIdClaim` (several controls inside a plain `<div>`: the first one\n * takes it, the others get a generated id of their own). The first child itself receives\n * `controlId` as its `id` prop from Field, so it keeps it.\n * - `aria-labelledby`: when the consumer set an `aria-label`, only the consumer's\n * `aria-labelledby`; otherwise, when the control is not labelable **or** its id is not the\n * Field's `controlId` (it carries its own id, or is not the Field's first child, so\n * `<label htmlFor>` does not reach it), the consumer's ids plus the Field's `labelId`.\n * - `aria-describedby`: the consumer's ids, then the Field's validation message\n * (`validationMessageId`, else `errorId`), then its hint (deduplicated). A warning, success or\n * neutral message describes the control too.\n * - `aria-invalid` / `aria-required`: the consumer's value, else `true` when the Field is\n * invalid/required (`aria-required`: not when the consumer passes `required={false}`). Only the\n * `error` validation state makes the Field invalid.\n * - `required`: only with `nativeRequired` — the consumer's value, else the Field's `required`.\n * - `aria-label`: passed through.\n *\n * @example\n * const fieldProps = useFieldControl({ id, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy,\n * 'aria-describedby': describedBy, 'aria-invalid': ariaInvalid, 'aria-required': ariaRequired });\n * return <button role=\"switch\" {...fieldProps} />;\n */\nexport function useFieldControl(\n props: FieldControlProps,\n options: UseFieldControlOptions = {},\n): FieldControlProps {\n const field = useFieldContext();\n // Always called (stable hook order); used only when the Field's controlId is taken. It is also\n // the control's token in the Field's controlIdClaim.\n const fallbackId = useId('field-control');\n const { labelable = true, nativeRequired = false } = options;\n\n // A control without an id of its own wants the Field's controlId unless Field gave it to its\n // first child. With a claim, only the first such control takes it.\n const wantsControlId = field !== null && props.id === undefined && !field.controlIdAssigned;\n const claim = wantsControlId ? field.controlIdClaim : undefined;\n // Re-render when the controlId is freed, so the next control takes it over.\n React.useSyncExternalStore(\n claim ? claim.subscribe : subscribeNothing,\n claim ? claim.getVersion : noVersion,\n claim ? claim.getVersion : noVersion,\n );\n const holdsControlId = wantsControlId && (claim ? claim.claim(fallbackId) : true);\n // Layout effects do nothing on the server, and React 19 no longer warns about them there.\n React.useLayoutEffect(() => claim?.mount(fallbackId), [claim, fallbackId]);\n React.useLayoutEffect(() => {\n if (claim && holdsControlId) claim.hold(fallbackId);\n }, [claim, holdsControlId, fallbackId]);\n // After every commit (all layout effects of the commit, and so every mount, have run): a\n // control rendered without controlId frees one held by a render that never committed.\n React.useEffect(() => {\n if (claim && !holdsControlId) claim.releaseStale();\n });\n\n const id =\n props.id ?? (field === null ? undefined : holdsControlId ? field.controlId : fallbackId);\n\n let labelledBy = props['aria-labelledby'];\n if (field && props['aria-label'] === undefined && (!labelable || id !== field.controlId)) {\n labelledBy = joinIds(labelledBy, field.labelId);\n }\n\n // The message in any validation state (a context built before 0.6 has only `errorId`).\n const describedBy = field\n ? joinIds(props['aria-describedby'], field.validationMessageId ?? field.errorId, field.hintId)\n : props['aria-describedby'];\n const invalid = props['aria-invalid'] ?? (field?.invalid || undefined);\n // A consumer `required={false}` (native controls pass `required`) also keeps the Field's\n // required state out of aria-required, so the announced state matches native validation.\n const ariaRequired =\n props['aria-required'] ?? (props.required === false ? undefined : field?.required || undefined);\n const required = nativeRequired ? (props.required ?? (field?.required || undefined)) : undefined;\n\n const result: FieldControlProps = {};\n if (id !== undefined) result.id = id;\n if (props['aria-label'] !== undefined) result['aria-label'] = props['aria-label'];\n if (labelledBy !== undefined) result['aria-labelledby'] = labelledBy;\n if (describedBy !== undefined) result['aria-describedby'] = describedBy;\n if (invalid !== undefined) result['aria-invalid'] = invalid;\n if (ariaRequired !== undefined) result['aria-required'] = ariaRequired;\n if (required !== undefined) result.required = required;\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useFieldControl.cjs","names":["React","useId","joinIds","require_runtime","require_useId","require_aria","react","FieldControlIdClaimStore","token","onChange","listener","createFieldControlIdClaim","subscribeNothing","noVersion","FieldContext","useFieldContext","useFieldControl","field","fallbackId","options","wantsControlId","props","claim","holdsControlId","id","labelledBy","labelable","describedBy","invalid","ariaRequired","required","nativeRequired","result"],"sources":["../../src/hooks/useFieldControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { joinIds } from '../lib/aria';\nimport type { CoreSize, ValidationState } from '../lib/types';\nimport { useId } from './useId';\n\n/**\n * What a `Field` tells the controls inside it: the ids of its label, hint and validation message,\n * and its validation, invalid and required state. `Field` provides it; every library input reads\n * it through {@link useFieldControl}, and so can your own control.\n */\nexport interface FieldContextValue {\n /** The id the Field's `<label htmlFor>` points at. */\n controlId: string;\n /** The id of the Field's `<label>`, used for `aria-labelledby` on non-labelable controls. */\n labelId: string | undefined;\n /** The id of the rendered hint, if any. */\n hintId: string | undefined;\n /**\n * The id of the rendered error message, if any: set only while the validation message is an\n * error (see `validationMessageId` for every state).\n */\n errorId: string | undefined;\n /** Whether the Field is in an error state (only the `error` validation state is invalid). */\n invalid: boolean;\n /** Whether the Field is required. */\n required: boolean;\n /** Field renders the error message itself; controls with their own `error` must not repeat it. */\n hasErrorMessage: boolean;\n /**\n * Field already gave `controlId` to its first child, a label-for merge target (component,\n * labelable element, custom element), whether Field merged it or it was the child's own id; a\n * control that receives no `id` prop is then not that child (it is nested inside it, e.g.\n * `Field > Tooltip > Input`, or a later sibling) and must not reuse `controlId`.\n * {@link useFieldControl} gives such a control its own id and names it through\n * `aria-labelledby`. Absent or `false`: a control without an `id` uses `controlId`, subject to\n * `controlIdClaim`.\n */\n controlIdAssigned?: boolean;\n /**\n * Hands `controlId` to one control when `controlIdAssigned` is not set — Field left its first\n * child alone (a plain `<div>`, a Fragment), so every library control inside reads this context.\n * The first control without an `id` of its own takes `controlId`; the others get their own id\n * and are named through `aria-labelledby`, so no id is duplicated. `Field` creates one for each\n * Field. Absent: every control without an `id` uses `controlId`.\n */\n controlIdClaim?: FieldControlIdClaim;\n /**\n * The Field's validation state (`validationState`, or `'error'` from `error`). Absent in\n * contexts built before 0.6: read it as `invalid ? 'error' : 'none'`.\n */\n validationState?: ValidationState;\n /**\n * The id of the rendered validation message in any state (error, warning, success, neutral).\n * `errorId` is set only while that message is an error.\n */\n validationMessageId?: string;\n /**\n * The Field's own `size` prop, when set: the default size of the text inputs and pickers inside\n * it (their own `size` wins). Absent when the Field has no `size` (the controls then fall back to\n * `WaveProvider inputDefaults`) and in contexts built before 0.9.\n */\n size?: CoreSize;\n}\n\n/**\n * Decides which control inside a `Field` takes the Field's `controlId` (the id its\n * `<label htmlFor>` points at) when several library controls without an `id` of their own read\n * the same context. `Field` creates one for each Field and passes it as\n * {@link FieldContextValue.controlIdClaim}; {@link useFieldControl} calls the methods, so a\n * control never calls them itself.\n *\n * - The first control to render takes `controlId`: on the first render (and on the server, so\n * hydration matches) that is the first one in document order. It keeps it across re-renders.\n * - When the holder unmounts or stops wanting `controlId` (it gets an `id` of its own), the\n * subscribers are notified, re-render, and the first of them takes `controlId` over.\n * - A render that claimed `controlId` but never committed (a discarded concurrent render) does not\n * keep it: a mounted control that renders without `controlId` frees it.\n */\nexport interface FieldControlIdClaim {\n /**\n * During render, with the control's stable token (its `useId`): gives `controlId` to `token`\n * when no control holds it, and returns whether `token` holds it. Idempotent per token, so\n * StrictMode double renders and later re-renders agree.\n */\n claim(token: string): boolean;\n /**\n * From a layout effect while the control wants `controlId`: marks `token` mounted. The returned\n * cleanup frees `controlId` when `token` holds it and notifies the subscribers.\n */\n mount(token: string): () => void;\n /**\n * From a layout effect of the control that rendered with `controlId`: takes it again after a\n * StrictMode effect replay freed it; if another control took it meanwhile, notifies the\n * subscribers so both re-render and agree.\n */\n hold(token: string): void;\n /**\n * From a passive effect of a mounted control that rendered without `controlId`: frees\n * `controlId` when its holder is not mounted (its render was discarded) and notifies the\n * subscribers.\n */\n releaseStale(): void;\n /** Subscribes to changes of the holder (for `useSyncExternalStore`); returns the unsubscribe. */\n subscribe(onChange: () => void): () => void;\n /** A number that changes whenever the subscribers are notified (the store snapshot). */\n getVersion(): number;\n}\n\nclass FieldControlIdClaimStore implements FieldControlIdClaim {\n private holder: string | undefined = undefined;\n private readonly mounted = new Set<string>();\n private readonly listeners = new Set<() => void>();\n private version = 0;\n\n claim = (token: string): boolean => {\n if (this.holder === undefined) this.holder = token;\n return this.holder === token;\n };\n\n mount = (token: string): (() => void) => {\n this.mounted.add(token);\n return () => {\n this.mounted.delete(token);\n if (this.holder === token) this.free();\n };\n };\n\n hold = (token: string): void => {\n if (this.holder === undefined) this.holder = token;\n else if (this.holder !== token) this.notify();\n };\n\n releaseStale = (): void => {\n if (this.holder !== undefined && !this.mounted.has(this.holder)) this.free();\n };\n\n subscribe = (onChange: () => void): (() => void) => {\n this.listeners.add(onChange);\n return () => {\n this.listeners.delete(onChange);\n };\n };\n\n getVersion = (): number => this.version;\n\n private free(): void {\n this.holder = undefined;\n this.notify();\n }\n\n private notify(): void {\n this.version += 1;\n for (const listener of Array.from(this.listeners)) listener();\n }\n}\n\n/**\n * Creates the {@link FieldControlIdClaim} a Field puts into its context (one per Field instance,\n * e.g. `const [claim] = useState(createFieldControlIdClaim)`).\n *\n * @internal Not exported from the package.\n */\nexport function createFieldControlIdClaim(): FieldControlIdClaim {\n return new FieldControlIdClaimStore();\n}\n\nconst subscribeNothing = (): (() => void) => () => {};\nconst noVersion = (): number => 0;\n\n/**\n * Context provided by `Field`. `null` outside a Field (controls then use only their own props).\n */\nexport const FieldContext: React.Context<FieldContextValue | null> =\n React.createContext<FieldContextValue | null>(null);\nFieldContext.displayName = 'FieldContext';\n\n/** The surrounding Field's context value, or `null` when the control is not inside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return React.useContext(FieldContext);\n}\n\n/** The labelling/validation props a control receives from its consumer and from its Field. */\nexport interface FieldControlProps {\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: React.AriaAttributes['aria-invalid'];\n 'aria-required'?: React.AriaAttributes['aria-required'];\n required?: boolean;\n}\n\n/** Options of {@link useFieldControl}. */\nexport interface UseFieldControlOptions {\n /**\n * Whether the focusable element can be the target of `<label htmlFor>` (`<input>`, `<button>`,\n * `<select>`, `<textarea>`). Non-labelable controls (`role=\"radiogroup\"`/`role=\"group\"` divs)\n * are named with `aria-labelledby` instead.\n * @default true\n */\n labelable?: boolean;\n /**\n * Whether the focusable element is a native form control (Input, Select, Textarea, Slider,\n * SpinButton's input), so the Field's `required` becomes the native `required` attribute and\n * constraint validation runs. Controls built on buttons or divs validate through `HiddenInput`.\n * @default false\n */\n nativeRequired?: boolean;\n}\n\n/**\n * Merges a control's own labelling props with its surrounding `Field`. Spread the result onto the\n * **focusable element** (for a control whose root wraps it, not onto the root). Consumer values\n * are merged, never overwritten, and only defined keys are returned, so spreading never clears an\n * attribute.\n *\n * - `id`: the consumer's id; else, when the Field already gave `controlId` to its first child\n * (`controlIdAssigned`) — so this control is nested inside that child or a later sibling — a\n * generated id of its own; else the Field's `controlId`, which only one control takes when the\n * Field provides a `controlIdClaim` (several controls inside a plain `<div>`: the first one\n * takes it, the others get a generated id of their own). The first child itself receives\n * `controlId` as its `id` prop from Field, so it keeps it.\n * - `aria-labelledby`: when the consumer set an `aria-label`, only the consumer's\n * `aria-labelledby`; otherwise, when the control is not labelable **or** its id is not the\n * Field's `controlId` (it carries its own id, or is not the Field's first child, so\n * `<label htmlFor>` does not reach it), the consumer's ids plus the Field's `labelId`.\n * - `aria-describedby`: the consumer's ids, then the Field's validation message\n * (`validationMessageId`, else `errorId`), then its hint (deduplicated). A warning, success or\n * neutral message describes the control too.\n * - `aria-invalid` / `aria-required`: the consumer's value, else `true` when the Field is\n * invalid/required (`aria-required`: not when the consumer passes `required={false}`). Only the\n * `error` validation state makes the Field invalid.\n * - `required`: only with `nativeRequired` — the consumer's value, else the Field's `required`.\n * - `aria-label`: passed through.\n *\n * @example\n * const fieldProps = useFieldControl({ id, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy,\n * 'aria-describedby': describedBy, 'aria-invalid': ariaInvalid, 'aria-required': ariaRequired });\n * return <button role=\"switch\" {...fieldProps} />;\n */\nexport function useFieldControl(\n props: FieldControlProps,\n options: UseFieldControlOptions = {},\n): FieldControlProps {\n const field = useFieldContext();\n // Always called (stable hook order); used only when the Field's controlId is taken. It is also\n // the control's token in the Field's controlIdClaim.\n const fallbackId = useId('field-control');\n const { labelable = true, nativeRequired = false } = options;\n\n // A control without an id of its own wants the Field's controlId unless Field gave it to its\n // first child. With a claim, only the first such control takes it.\n const wantsControlId = field !== null && props.id === undefined && !field.controlIdAssigned;\n const claim = wantsControlId ? field.controlIdClaim : undefined;\n // Re-render when the controlId is freed, so the next control takes it over.\n React.useSyncExternalStore(\n claim ? claim.subscribe : subscribeNothing,\n claim ? claim.getVersion : noVersion,\n claim ? claim.getVersion : noVersion,\n );\n const holdsControlId = wantsControlId && (claim ? claim.claim(fallbackId) : true);\n // Layout effects do nothing on the server, and React 19 no longer warns about them there.\n React.useLayoutEffect(() => claim?.mount(fallbackId), [claim, fallbackId]);\n React.useLayoutEffect(() => {\n if (claim && holdsControlId) claim.hold(fallbackId);\n }, [claim, holdsControlId, fallbackId]);\n // After every commit (all layout effects of the commit, and so every mount, have run): a\n // control rendered without controlId frees one held by a render that never committed.\n React.useEffect(() => {\n if (claim && !holdsControlId) claim.releaseStale();\n });\n\n const id =\n props.id ?? (field === null ? undefined : holdsControlId ? field.controlId : fallbackId);\n\n let labelledBy = props['aria-labelledby'];\n if (field && props['aria-label'] === undefined && (!labelable || id !== field.controlId)) {\n labelledBy = joinIds(labelledBy, field.labelId);\n }\n\n // The message in any validation state (a context built before 0.6 has only `errorId`).\n const describedBy = field\n ? joinIds(props['aria-describedby'], field.validationMessageId ?? field.errorId, field.hintId)\n : props['aria-describedby'];\n const invalid = props['aria-invalid'] ?? (field?.invalid || undefined);\n // A consumer `required={false}` (native controls pass `required`) also keeps the Field's\n // required state out of aria-required, so the announced state matches native validation.\n const ariaRequired =\n props['aria-required'] ?? (props.required === false ? undefined : field?.required || undefined);\n const required = nativeRequired ? (props.required ?? (field?.required || undefined)) : undefined;\n\n const result: FieldControlProps = {};\n if (id !== undefined) result.id = id;\n if (props['aria-label'] !== undefined) result['aria-label'] = props['aria-label'];\n if (labelledBy !== undefined) result['aria-labelledby'] = labelledBy;\n if (describedBy !== undefined) result['aria-describedby'] = describedBy;\n if (invalid !== undefined) result['aria-invalid'] = invalid;\n if (ariaRequired !== undefined) result['aria-required'] = ariaRequired;\n if (required !== undefined) result.required = required;\n return result;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFieldControl.mjs","names":["useId","useId$1","React","FieldControlIdClaimStore","token","onChange","listener","createFieldControlIdClaim","subscribeNothing","noVersion","FieldContext","useFieldContext","useFieldControl","field","fallbackId","options","wantsControlId","props","claim","holdsControlId","id","labelledBy","labelable","joinIds","describedBy","invalid","ariaRequired","required","nativeRequired","result"],"sources":["../../src/hooks/useFieldControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { joinIds } from '../lib/aria';\nimport type { ValidationState } from '../lib/types';\nimport { useId } from './useId';\n\n/**\n * What a `Field` tells the controls inside it: the ids of its label, hint and validation message,\n * and its validation, invalid and required state. `Field` provides it; every library input reads\n * it through {@link useFieldControl}, and so can your own control.\n */\nexport interface FieldContextValue {\n /** The id the Field's `<label htmlFor>` points at. */\n controlId: string;\n /** The id of the Field's `<label>`, used for `aria-labelledby` on non-labelable controls. */\n labelId: string | undefined;\n /** The id of the rendered hint, if any. */\n hintId: string | undefined;\n /**\n * The id of the rendered error message, if any: set only while the validation message is an\n * error (see `validationMessageId` for every state).\n */\n errorId: string | undefined;\n /** Whether the Field is in an error state (only the `error` validation state is invalid). */\n invalid: boolean;\n /** Whether the Field is required. */\n required: boolean;\n /** Field renders the error message itself; controls with their own `error` must not repeat it. */\n hasErrorMessage: boolean;\n /**\n * Field already gave `controlId` to its first child, a label-for merge target (component,\n * labelable element, custom element), whether Field merged it or it was the child's own id; a\n * control that receives no `id` prop is then not that child (it is nested inside it, e.g.\n * `Field > Tooltip > Input`, or a later sibling) and must not reuse `controlId`.\n * {@link useFieldControl} gives such a control its own id and names it through\n * `aria-labelledby`. Absent or `false`: a control without an `id` uses `controlId`, subject to\n * `controlIdClaim`.\n */\n controlIdAssigned?: boolean;\n /**\n * Hands `controlId` to one control when `controlIdAssigned` is not set — Field left its first\n * child alone (a plain `<div>`, a Fragment), so every library control inside reads this context.\n * The first control without an `id` of its own takes `controlId`; the others get their own id\n * and are named through `aria-labelledby`, so no id is duplicated. `Field` creates one for each\n * Field. Absent: every control without an `id` uses `controlId`.\n */\n controlIdClaim?: FieldControlIdClaim;\n /**\n * The Field's validation state (`validationState`, or `'error'` from `error`). Absent in\n * contexts built before 0.6: read it as `invalid ? 'error' : 'none'`.\n */\n validationState?: ValidationState;\n /**\n * The id of the rendered validation message in any state (error, warning, success, neutral).\n * `errorId` is set only while that message is an error.\n */\n validationMessageId?: string;\n}\n\n/**\n * Decides which control inside a `Field` takes the Field's `controlId` (the id its\n * `<label htmlFor>` points at) when several library controls without an `id` of their own read\n * the same context. `Field` creates one for each Field and passes it as\n * {@link FieldContextValue.controlIdClaim}; {@link useFieldControl} calls the methods, so a\n * control never calls them itself.\n *\n * - The first control to render takes `controlId`: on the first render (and on the server, so\n * hydration matches) that is the first one in document order. It keeps it across re-renders.\n * - When the holder unmounts or stops wanting `controlId` (it gets an `id` of its own), the\n * subscribers are notified, re-render, and the first of them takes `controlId` over.\n * - A render that claimed `controlId` but never committed (a discarded concurrent render) does not\n * keep it: a mounted control that renders without `controlId` frees it.\n */\nexport interface FieldControlIdClaim {\n /**\n * During render, with the control's stable token (its `useId`): gives `controlId` to `token`\n * when no control holds it, and returns whether `token` holds it. Idempotent per token, so\n * StrictMode double renders and later re-renders agree.\n */\n claim(token: string): boolean;\n /**\n * From a layout effect while the control wants `controlId`: marks `token` mounted. The returned\n * cleanup frees `controlId` when `token` holds it and notifies the subscribers.\n */\n mount(token: string): () => void;\n /**\n * From a layout effect of the control that rendered with `controlId`: takes it again after a\n * StrictMode effect replay freed it; if another control took it meanwhile, notifies the\n * subscribers so both re-render and agree.\n */\n hold(token: string): void;\n /**\n * From a passive effect of a mounted control that rendered without `controlId`: frees\n * `controlId` when its holder is not mounted (its render was discarded) and notifies the\n * subscribers.\n */\n releaseStale(): void;\n /** Subscribes to changes of the holder (for `useSyncExternalStore`); returns the unsubscribe. */\n subscribe(onChange: () => void): () => void;\n /** A number that changes whenever the subscribers are notified (the store snapshot). */\n getVersion(): number;\n}\n\nclass FieldControlIdClaimStore implements FieldControlIdClaim {\n private holder: string | undefined = undefined;\n private readonly mounted = new Set<string>();\n private readonly listeners = new Set<() => void>();\n private version = 0;\n\n claim = (token: string): boolean => {\n if (this.holder === undefined) this.holder = token;\n return this.holder === token;\n };\n\n mount = (token: string): (() => void) => {\n this.mounted.add(token);\n return () => {\n this.mounted.delete(token);\n if (this.holder === token) this.free();\n };\n };\n\n hold = (token: string): void => {\n if (this.holder === undefined) this.holder = token;\n else if (this.holder !== token) this.notify();\n };\n\n releaseStale = (): void => {\n if (this.holder !== undefined && !this.mounted.has(this.holder)) this.free();\n };\n\n subscribe = (onChange: () => void): (() => void) => {\n this.listeners.add(onChange);\n return () => {\n this.listeners.delete(onChange);\n };\n };\n\n getVersion = (): number => this.version;\n\n private free(): void {\n this.holder = undefined;\n this.notify();\n }\n\n private notify(): void {\n this.version += 1;\n for (const listener of Array.from(this.listeners)) listener();\n }\n}\n\n/**\n * Creates the {@link FieldControlIdClaim} a Field puts into its context (one per Field instance,\n * e.g. `const [claim] = useState(createFieldControlIdClaim)`).\n *\n * @internal Not exported from the package.\n */\nexport function createFieldControlIdClaim(): FieldControlIdClaim {\n return new FieldControlIdClaimStore();\n}\n\nconst subscribeNothing = (): (() => void) => () => {};\nconst noVersion = (): number => 0;\n\n/**\n * Context provided by `Field`. `null` outside a Field (controls then use only their own props).\n */\nexport const FieldContext: React.Context<FieldContextValue | null> =\n React.createContext<FieldContextValue | null>(null);\nFieldContext.displayName = 'FieldContext';\n\n/** The surrounding Field's context value, or `null` when the control is not inside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return React.useContext(FieldContext);\n}\n\n/** The labelling/validation props a control receives from its consumer and from its Field. */\nexport interface FieldControlProps {\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: React.AriaAttributes['aria-invalid'];\n 'aria-required'?: React.AriaAttributes['aria-required'];\n required?: boolean;\n}\n\n/** Options of {@link useFieldControl}. */\nexport interface UseFieldControlOptions {\n /**\n * Whether the focusable element can be the target of `<label htmlFor>` (`<input>`, `<button>`,\n * `<select>`, `<textarea>`). Non-labelable controls (`role=\"radiogroup\"`/`role=\"group\"` divs)\n * are named with `aria-labelledby` instead.\n * @default true\n */\n labelable?: boolean;\n /**\n * Whether the focusable element is a native form control (Input, Select, Textarea, Slider,\n * SpinButton's input), so the Field's `required` becomes the native `required` attribute and\n * constraint validation runs. Controls built on buttons or divs validate through `HiddenInput`.\n * @default false\n */\n nativeRequired?: boolean;\n}\n\n/**\n * Merges a control's own labelling props with its surrounding `Field`. Spread the result onto the\n * **focusable element** (for a control whose root wraps it, not onto the root). Consumer values\n * are merged, never overwritten, and only defined keys are returned, so spreading never clears an\n * attribute.\n *\n * - `id`: the consumer's id; else, when the Field already gave `controlId` to its first child\n * (`controlIdAssigned`) — so this control is nested inside that child or a later sibling — a\n * generated id of its own; else the Field's `controlId`, which only one control takes when the\n * Field provides a `controlIdClaim` (several controls inside a plain `<div>`: the first one\n * takes it, the others get a generated id of their own). The first child itself receives\n * `controlId` as its `id` prop from Field, so it keeps it.\n * - `aria-labelledby`: when the consumer set an `aria-label`, only the consumer's\n * `aria-labelledby`; otherwise, when the control is not labelable **or** its id is not the\n * Field's `controlId` (it carries its own id, or is not the Field's first child, so\n * `<label htmlFor>` does not reach it), the consumer's ids plus the Field's `labelId`.\n * - `aria-describedby`: the consumer's ids, then the Field's validation message\n * (`validationMessageId`, else `errorId`), then its hint (deduplicated). A warning, success or\n * neutral message describes the control too.\n * - `aria-invalid` / `aria-required`: the consumer's value, else `true` when the Field is\n * invalid/required (`aria-required`: not when the consumer passes `required={false}`). Only the\n * `error` validation state makes the Field invalid.\n * - `required`: only with `nativeRequired` — the consumer's value, else the Field's `required`.\n * - `aria-label`: passed through.\n *\n * @example\n * const fieldProps = useFieldControl({ id, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy,\n * 'aria-describedby': describedBy, 'aria-invalid': ariaInvalid, 'aria-required': ariaRequired });\n * return <button role=\"switch\" {...fieldProps} />;\n */\nexport function useFieldControl(\n props: FieldControlProps,\n options: UseFieldControlOptions = {},\n): FieldControlProps {\n const field = useFieldContext();\n // Always called (stable hook order); used only when the Field's controlId is taken. It is also\n // the control's token in the Field's controlIdClaim.\n const fallbackId = useId('field-control');\n const { labelable = true, nativeRequired = false } = options;\n\n // A control without an id of its own wants the Field's controlId unless Field gave it to its\n // first child. With a claim, only the first such control takes it.\n const wantsControlId = field !== null && props.id === undefined && !field.controlIdAssigned;\n const claim = wantsControlId ? field.controlIdClaim : undefined;\n // Re-render when the controlId is freed, so the next control takes it over.\n React.useSyncExternalStore(\n claim ? claim.subscribe : subscribeNothing,\n claim ? claim.getVersion : noVersion,\n claim ? claim.getVersion : noVersion,\n );\n const holdsControlId = wantsControlId && (claim ? claim.claim(fallbackId) : true);\n // Layout effects do nothing on the server, and React 19 no longer warns about them there.\n React.useLayoutEffect(() => claim?.mount(fallbackId), [claim, fallbackId]);\n React.useLayoutEffect(() => {\n if (claim && holdsControlId) claim.hold(fallbackId);\n }, [claim, holdsControlId, fallbackId]);\n // After every commit (all layout effects of the commit, and so every mount, have run): a\n // control rendered without controlId frees one held by a render that never committed.\n React.useEffect(() => {\n if (claim && !holdsControlId) claim.releaseStale();\n });\n\n const id =\n props.id ?? (field === null ? undefined : holdsControlId ? field.controlId : fallbackId);\n\n let labelledBy = props['aria-labelledby'];\n if (field && props['aria-label'] === undefined && (!labelable || id !== field.controlId)) {\n labelledBy = joinIds(labelledBy, field.labelId);\n }\n\n // The message in any validation state (a context built before 0.6 has only `errorId`).\n const describedBy = field\n ? joinIds(props['aria-describedby'], field.validationMessageId ?? field.errorId, field.hintId)\n : props['aria-describedby'];\n const invalid = props['aria-invalid'] ?? (field?.invalid || undefined);\n // A consumer `required={false}` (native controls pass `required`) also keeps the Field's\n // required state out of aria-required, so the announced state matches native validation.\n const ariaRequired =\n props['aria-required'] ?? (props.required === false ? undefined : field?.required || undefined);\n const required = nativeRequired ? (props.required ?? (field?.required || undefined)) : undefined;\n\n const result: FieldControlProps = {};\n if (id !== undefined) result.id = id;\n if (props['aria-label'] !== undefined) result['aria-label'] = props['aria-label'];\n if (labelledBy !== undefined) result['aria-labelledby'] = labelledBy;\n if (describedBy !== undefined) result['aria-describedby'] = describedBy;\n if (invalid !== undefined) result['aria-invalid'] = invalid;\n if (ariaRequired !== undefined) result['aria-required'] = ariaRequired;\n if (required !== undefined) result.required = required;\n return result;\n}\n"],"mappings":";;;;;AAsGA,IAAMG,IAAN,MAA8D;CAC5D,SAAqC,KAAA;CACrC,0BAA2B,IAAI,IAAY;CAC3C,4BAA6B,IAAI,IAAgB;CACjD,UAAkB;CAElB,SAAS,OACH,KAAK,WAAW,KAAA,MAAW,KAAK,SAASC,IACtC,KAAK,WAAWA;CAGzB,SAAS,OACP,KAAK,QAAQ,IAAIA,CAAK,SACT;EAEX,AADA,KAAK,QAAQ,OAAOA,CAAK,GACrB,KAAK,WAAWA,KAAO,KAAK,KAAK;CACvC;CAGF,QAAQ,MAAwB;EAC9B,AAAI,KAAK,WAAW,KAAA,IAAW,KAAK,SAASA,IACpC,KAAK,WAAWA,KAAO,KAAK,OAAO;CAC9C;CAEA,qBAA2B;EACzB,AAAI,KAAK,WAAW,KAAA,KAAa,CAAC,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAG,KAAK,KAAK;CAC7E;CAEA,aAAa,OACX,KAAK,UAAU,IAAIC,CAAQ,SACd;EACX,KAAK,UAAU,OAAOA,CAAQ;CAChC;CAGF,mBAA2B,KAAK;CAEhC,OAAqB;EAEnB,AADA,KAAK,SAAS,KAAA,GACd,KAAK,OAAO;CACd;CAEA,SAAuB;EACrB,KAAK,WAAW;EAChB,KAAK,IAAMC,KAAY,MAAM,KAAK,KAAK,SAAS,GAAG,EAAS;CAC9D;AACF;AAQA,SAAgBC,IAAiD;CAC/D,OAAO,IAAIJ,EAAyB;AACtC;AAEA,IAAMK,gBAA6C,CAAC,GAC9CC,UAA0B,GAKnBC,IACXR,EAAM,cAAwC,IAAI;AACpD,EAAa,cAAc;AAG3B,SAAgBS,IAA4C;CAC1D,OAAOT,EAAM,WAAWQ,CAAY;AACtC;AA6DA,SAAgBE,EACd,GACA,IAAkC,CAAC,GAChB;CACnB,IAAMC,IAAQF,EAAgB,GAGxBG,IAAad,EAAM,eAAe,GAClC,EAAE,eAAY,IAAM,oBAAiB,OAAUe,GAI/CC,IAAiBH,MAAU,QAAQI,EAAM,OAAO,KAAA,KAAa,CAACJ,EAAM,mBACpEK,IAAQF,IAAiBH,EAAM,iBAAiB,KAAA;CAEtD,EAAM,qBACJK,IAAQA,EAAM,YAAYV,GAC1BU,IAAQA,EAAM,aAAaT,GAC3BS,IAAQA,EAAM,aAAaT,CAC7B;CACA,IAAMU,IAAiBH,MAAmB,MAAQE,EAAM,MAAMJ,CAAU;CAQxE,AANAZ,EAAM,sBAAsBgB,GAAO,MAAMJ,CAAU,GAAG,CAACI,GAAOJ,CAAU,CAAC,GACzEZ,EAAM,sBAAsB;EAC1B,AAAIgB,KAASC,KAAgBD,EAAM,KAAKJ,CAAU;CACpD,GAAG;EAACI;EAAOC;EAAgBL;CAAU,CAAC,GAGtCZ,EAAM,gBAAgB;EACpB,AAAIgB,KAAS,CAACC,KAAgBD,EAAM,aAAa;CACnD,CAAC;CAED,IAAME,IACJH,EAAM,OAAOJ,MAAU,OAAO,KAAA,IAAYM,IAAiBN,EAAM,YAAYC,IAE3EO,IAAaJ,EAAM;CACvB,AAAIJ,KAASI,EAAM,kBAAkB,KAAA,MAAc,CAACK,KAAaF,MAAOP,EAAM,eAC5E,IAAaU,EAAQF,GAAYR,EAAM,OAAO;CAIhD,IAAMW,IAAcX,IAChBU,EAAQN,EAAM,qBAAqBJ,EAAM,uBAAuBA,EAAM,SAASA,EAAM,MAAM,IAC3FI,EAAM,qBACJQ,IAAUR,EAAM,oBAAoBJ,GAAO,WAAW,KAAA,IAGtDa,IACJT,EAAM,qBAAqBA,EAAM,aAAa,KAAQ,KAAA,IAAYJ,GAAO,YAAY,KAAA,IACjFc,IAAWC,IAAkBX,EAAM,aAAaJ,GAAO,YAAY,KAAA,KAAc,KAAA,GAEjFgB,IAA4B,CAAC;CAQnC,OAPIT,MAAO,KAAA,MAAW,EAAO,KAAKA,IAC9BH,EAAM,kBAAkB,KAAA,MAAW,EAAO,gBAAgBA,EAAM,gBAChEI,MAAe,KAAA,MAAW,EAAO,qBAAqBA,IACtDG,MAAgB,KAAA,MAAW,EAAO,sBAAsBA,IACxDC,MAAY,KAAA,MAAW,EAAO,kBAAkBA,IAChDC,MAAiB,KAAA,MAAW,EAAO,mBAAmBA,IACtDC,MAAa,KAAA,MAAW,EAAO,WAAWA,IACvCE;AACT"}
1
+ {"version":3,"file":"useFieldControl.mjs","names":["useId","useId$1","React","FieldControlIdClaimStore","token","onChange","listener","createFieldControlIdClaim","subscribeNothing","noVersion","FieldContext","useFieldContext","useFieldControl","field","fallbackId","options","wantsControlId","props","claim","holdsControlId","id","labelledBy","labelable","joinIds","describedBy","invalid","ariaRequired","required","nativeRequired","result"],"sources":["../../src/hooks/useFieldControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { joinIds } from '../lib/aria';\nimport type { CoreSize, ValidationState } from '../lib/types';\nimport { useId } from './useId';\n\n/**\n * What a `Field` tells the controls inside it: the ids of its label, hint and validation message,\n * and its validation, invalid and required state. `Field` provides it; every library input reads\n * it through {@link useFieldControl}, and so can your own control.\n */\nexport interface FieldContextValue {\n /** The id the Field's `<label htmlFor>` points at. */\n controlId: string;\n /** The id of the Field's `<label>`, used for `aria-labelledby` on non-labelable controls. */\n labelId: string | undefined;\n /** The id of the rendered hint, if any. */\n hintId: string | undefined;\n /**\n * The id of the rendered error message, if any: set only while the validation message is an\n * error (see `validationMessageId` for every state).\n */\n errorId: string | undefined;\n /** Whether the Field is in an error state (only the `error` validation state is invalid). */\n invalid: boolean;\n /** Whether the Field is required. */\n required: boolean;\n /** Field renders the error message itself; controls with their own `error` must not repeat it. */\n hasErrorMessage: boolean;\n /**\n * Field already gave `controlId` to its first child, a label-for merge target (component,\n * labelable element, custom element), whether Field merged it or it was the child's own id; a\n * control that receives no `id` prop is then not that child (it is nested inside it, e.g.\n * `Field > Tooltip > Input`, or a later sibling) and must not reuse `controlId`.\n * {@link useFieldControl} gives such a control its own id and names it through\n * `aria-labelledby`. Absent or `false`: a control without an `id` uses `controlId`, subject to\n * `controlIdClaim`.\n */\n controlIdAssigned?: boolean;\n /**\n * Hands `controlId` to one control when `controlIdAssigned` is not set — Field left its first\n * child alone (a plain `<div>`, a Fragment), so every library control inside reads this context.\n * The first control without an `id` of its own takes `controlId`; the others get their own id\n * and are named through `aria-labelledby`, so no id is duplicated. `Field` creates one for each\n * Field. Absent: every control without an `id` uses `controlId`.\n */\n controlIdClaim?: FieldControlIdClaim;\n /**\n * The Field's validation state (`validationState`, or `'error'` from `error`). Absent in\n * contexts built before 0.6: read it as `invalid ? 'error' : 'none'`.\n */\n validationState?: ValidationState;\n /**\n * The id of the rendered validation message in any state (error, warning, success, neutral).\n * `errorId` is set only while that message is an error.\n */\n validationMessageId?: string;\n /**\n * The Field's own `size` prop, when set: the default size of the text inputs and pickers inside\n * it (their own `size` wins). Absent when the Field has no `size` (the controls then fall back to\n * `WaveProvider inputDefaults`) and in contexts built before 0.9.\n */\n size?: CoreSize;\n}\n\n/**\n * Decides which control inside a `Field` takes the Field's `controlId` (the id its\n * `<label htmlFor>` points at) when several library controls without an `id` of their own read\n * the same context. `Field` creates one for each Field and passes it as\n * {@link FieldContextValue.controlIdClaim}; {@link useFieldControl} calls the methods, so a\n * control never calls them itself.\n *\n * - The first control to render takes `controlId`: on the first render (and on the server, so\n * hydration matches) that is the first one in document order. It keeps it across re-renders.\n * - When the holder unmounts or stops wanting `controlId` (it gets an `id` of its own), the\n * subscribers are notified, re-render, and the first of them takes `controlId` over.\n * - A render that claimed `controlId` but never committed (a discarded concurrent render) does not\n * keep it: a mounted control that renders without `controlId` frees it.\n */\nexport interface FieldControlIdClaim {\n /**\n * During render, with the control's stable token (its `useId`): gives `controlId` to `token`\n * when no control holds it, and returns whether `token` holds it. Idempotent per token, so\n * StrictMode double renders and later re-renders agree.\n */\n claim(token: string): boolean;\n /**\n * From a layout effect while the control wants `controlId`: marks `token` mounted. The returned\n * cleanup frees `controlId` when `token` holds it and notifies the subscribers.\n */\n mount(token: string): () => void;\n /**\n * From a layout effect of the control that rendered with `controlId`: takes it again after a\n * StrictMode effect replay freed it; if another control took it meanwhile, notifies the\n * subscribers so both re-render and agree.\n */\n hold(token: string): void;\n /**\n * From a passive effect of a mounted control that rendered without `controlId`: frees\n * `controlId` when its holder is not mounted (its render was discarded) and notifies the\n * subscribers.\n */\n releaseStale(): void;\n /** Subscribes to changes of the holder (for `useSyncExternalStore`); returns the unsubscribe. */\n subscribe(onChange: () => void): () => void;\n /** A number that changes whenever the subscribers are notified (the store snapshot). */\n getVersion(): number;\n}\n\nclass FieldControlIdClaimStore implements FieldControlIdClaim {\n private holder: string | undefined = undefined;\n private readonly mounted = new Set<string>();\n private readonly listeners = new Set<() => void>();\n private version = 0;\n\n claim = (token: string): boolean => {\n if (this.holder === undefined) this.holder = token;\n return this.holder === token;\n };\n\n mount = (token: string): (() => void) => {\n this.mounted.add(token);\n return () => {\n this.mounted.delete(token);\n if (this.holder === token) this.free();\n };\n };\n\n hold = (token: string): void => {\n if (this.holder === undefined) this.holder = token;\n else if (this.holder !== token) this.notify();\n };\n\n releaseStale = (): void => {\n if (this.holder !== undefined && !this.mounted.has(this.holder)) this.free();\n };\n\n subscribe = (onChange: () => void): (() => void) => {\n this.listeners.add(onChange);\n return () => {\n this.listeners.delete(onChange);\n };\n };\n\n getVersion = (): number => this.version;\n\n private free(): void {\n this.holder = undefined;\n this.notify();\n }\n\n private notify(): void {\n this.version += 1;\n for (const listener of Array.from(this.listeners)) listener();\n }\n}\n\n/**\n * Creates the {@link FieldControlIdClaim} a Field puts into its context (one per Field instance,\n * e.g. `const [claim] = useState(createFieldControlIdClaim)`).\n *\n * @internal Not exported from the package.\n */\nexport function createFieldControlIdClaim(): FieldControlIdClaim {\n return new FieldControlIdClaimStore();\n}\n\nconst subscribeNothing = (): (() => void) => () => {};\nconst noVersion = (): number => 0;\n\n/**\n * Context provided by `Field`. `null` outside a Field (controls then use only their own props).\n */\nexport const FieldContext: React.Context<FieldContextValue | null> =\n React.createContext<FieldContextValue | null>(null);\nFieldContext.displayName = 'FieldContext';\n\n/** The surrounding Field's context value, or `null` when the control is not inside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return React.useContext(FieldContext);\n}\n\n/** The labelling/validation props a control receives from its consumer and from its Field. */\nexport interface FieldControlProps {\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: React.AriaAttributes['aria-invalid'];\n 'aria-required'?: React.AriaAttributes['aria-required'];\n required?: boolean;\n}\n\n/** Options of {@link useFieldControl}. */\nexport interface UseFieldControlOptions {\n /**\n * Whether the focusable element can be the target of `<label htmlFor>` (`<input>`, `<button>`,\n * `<select>`, `<textarea>`). Non-labelable controls (`role=\"radiogroup\"`/`role=\"group\"` divs)\n * are named with `aria-labelledby` instead.\n * @default true\n */\n labelable?: boolean;\n /**\n * Whether the focusable element is a native form control (Input, Select, Textarea, Slider,\n * SpinButton's input), so the Field's `required` becomes the native `required` attribute and\n * constraint validation runs. Controls built on buttons or divs validate through `HiddenInput`.\n * @default false\n */\n nativeRequired?: boolean;\n}\n\n/**\n * Merges a control's own labelling props with its surrounding `Field`. Spread the result onto the\n * **focusable element** (for a control whose root wraps it, not onto the root). Consumer values\n * are merged, never overwritten, and only defined keys are returned, so spreading never clears an\n * attribute.\n *\n * - `id`: the consumer's id; else, when the Field already gave `controlId` to its first child\n * (`controlIdAssigned`) — so this control is nested inside that child or a later sibling — a\n * generated id of its own; else the Field's `controlId`, which only one control takes when the\n * Field provides a `controlIdClaim` (several controls inside a plain `<div>`: the first one\n * takes it, the others get a generated id of their own). The first child itself receives\n * `controlId` as its `id` prop from Field, so it keeps it.\n * - `aria-labelledby`: when the consumer set an `aria-label`, only the consumer's\n * `aria-labelledby`; otherwise, when the control is not labelable **or** its id is not the\n * Field's `controlId` (it carries its own id, or is not the Field's first child, so\n * `<label htmlFor>` does not reach it), the consumer's ids plus the Field's `labelId`.\n * - `aria-describedby`: the consumer's ids, then the Field's validation message\n * (`validationMessageId`, else `errorId`), then its hint (deduplicated). A warning, success or\n * neutral message describes the control too.\n * - `aria-invalid` / `aria-required`: the consumer's value, else `true` when the Field is\n * invalid/required (`aria-required`: not when the consumer passes `required={false}`). Only the\n * `error` validation state makes the Field invalid.\n * - `required`: only with `nativeRequired` — the consumer's value, else the Field's `required`.\n * - `aria-label`: passed through.\n *\n * @example\n * const fieldProps = useFieldControl({ id, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy,\n * 'aria-describedby': describedBy, 'aria-invalid': ariaInvalid, 'aria-required': ariaRequired });\n * return <button role=\"switch\" {...fieldProps} />;\n */\nexport function useFieldControl(\n props: FieldControlProps,\n options: UseFieldControlOptions = {},\n): FieldControlProps {\n const field = useFieldContext();\n // Always called (stable hook order); used only when the Field's controlId is taken. It is also\n // the control's token in the Field's controlIdClaim.\n const fallbackId = useId('field-control');\n const { labelable = true, nativeRequired = false } = options;\n\n // A control without an id of its own wants the Field's controlId unless Field gave it to its\n // first child. With a claim, only the first such control takes it.\n const wantsControlId = field !== null && props.id === undefined && !field.controlIdAssigned;\n const claim = wantsControlId ? field.controlIdClaim : undefined;\n // Re-render when the controlId is freed, so the next control takes it over.\n React.useSyncExternalStore(\n claim ? claim.subscribe : subscribeNothing,\n claim ? claim.getVersion : noVersion,\n claim ? claim.getVersion : noVersion,\n );\n const holdsControlId = wantsControlId && (claim ? claim.claim(fallbackId) : true);\n // Layout effects do nothing on the server, and React 19 no longer warns about them there.\n React.useLayoutEffect(() => claim?.mount(fallbackId), [claim, fallbackId]);\n React.useLayoutEffect(() => {\n if (claim && holdsControlId) claim.hold(fallbackId);\n }, [claim, holdsControlId, fallbackId]);\n // After every commit (all layout effects of the commit, and so every mount, have run): a\n // control rendered without controlId frees one held by a render that never committed.\n React.useEffect(() => {\n if (claim && !holdsControlId) claim.releaseStale();\n });\n\n const id =\n props.id ?? (field === null ? undefined : holdsControlId ? field.controlId : fallbackId);\n\n let labelledBy = props['aria-labelledby'];\n if (field && props['aria-label'] === undefined && (!labelable || id !== field.controlId)) {\n labelledBy = joinIds(labelledBy, field.labelId);\n }\n\n // The message in any validation state (a context built before 0.6 has only `errorId`).\n const describedBy = field\n ? joinIds(props['aria-describedby'], field.validationMessageId ?? field.errorId, field.hintId)\n : props['aria-describedby'];\n const invalid = props['aria-invalid'] ?? (field?.invalid || undefined);\n // A consumer `required={false}` (native controls pass `required`) also keeps the Field's\n // required state out of aria-required, so the announced state matches native validation.\n const ariaRequired =\n props['aria-required'] ?? (props.required === false ? undefined : field?.required || undefined);\n const required = nativeRequired ? (props.required ?? (field?.required || undefined)) : undefined;\n\n const result: FieldControlProps = {};\n if (id !== undefined) result.id = id;\n if (props['aria-label'] !== undefined) result['aria-label'] = props['aria-label'];\n if (labelledBy !== undefined) result['aria-labelledby'] = labelledBy;\n if (describedBy !== undefined) result['aria-describedby'] = describedBy;\n if (invalid !== undefined) result['aria-invalid'] = invalid;\n if (ariaRequired !== undefined) result['aria-required'] = ariaRequired;\n if (required !== undefined) result.required = required;\n return result;\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const ee=require("./lib/cn.cjs"),e=require("./lib/slot.cjs"),te=require("./lib/composeEventHandlers.cjs"),ne=require("./lib/mergeRefs.cjs"),t=require("./lib/classNames.cjs"),n=require("./lib/color.cjs"),re=require("./lib/toaster.cjs"),ie=require("./hooks/useEventCallback.cjs"),r=require("./hooks/useControllable.cjs"),i=require("./hooks/useId.cjs"),a=require("./hooks/useRovingTabIndex.cjs"),o=require("./hooks/useMergedRefs.cjs"),s=require("./hooks/useIsClient.cjs"),ae=require("./hooks/useFieldControl.cjs"),c=require("./hooks/useAnnounce.cjs"),oe=require("./hooks/usePresence.cjs"),se=require("./lib/theme.cjs"),l=require("./components/provider/WaveProvider.cjs"),ce=require("./components/portal/Portal.cjs"),le=require("./components/button/Button.cjs"),ue=require("./components/button/CompoundButton.cjs"),de=require("./components/button/ToggleButton.cjs"),fe=require("./components/button/SplitButton.cjs"),pe=require("./components/button/MenuButton.cjs"),me=require("./components/button/Link.cjs"),u=require("./components/button/Toolbar.parts.cjs"),he=require("./components/button/Toolbar.cjs"),ge=require("./components/input/Input.cjs"),_e=require("./components/input/Textarea.cjs"),ve=require("./components/input/Field.cjs"),ye=require("./components/input/Checkbox.cjs"),d=require("./components/input/RadioGroup.cjs"),be=require("./components/input/Switch.cjs"),xe=require("./components/input/Select.cjs"),Se=require("./components/input/SearchBox.cjs"),f=require("./components/input/Slider.cjs"),p=require("./components/input/SpinButton.cjs"),m=require("./components/input/Label.cjs"),h=require("./components/input/Option.cjs"),g=require("./components/input/Combobox.cjs"),_=require("./components/input/Dropdown.cjs"),v=require("./components/input/SwatchPicker.cjs"),y=require("./components/input/ColorPicker.parts.cjs"),b=require("./components/input/AlphaSlider.cjs"),x=require("./components/input/ColorArea.cjs"),S=require("./components/input/ColorSlider.cjs"),C=require("./components/input/ColorPicker.cjs"),w=require("./components/input/TagPicker.cjs"),T=require("./components/input/Rating.cjs"),E=require("./components/input/TimePicker.cjs"),D=require("./components/input/DatePicker.cjs"),O=require("./components/data-display/Avatar.cjs"),k=require("./components/data-display/AvatarGroup.cjs"),A=require("./components/data-display/Badge.cjs"),j=require("./components/data-display/PresenceBadge.cjs"),M=require("./components/data-display/CounterBadge.cjs"),Ce=require("./components/data-display/Tag.cjs"),we=require("./components/data-display/Persona.cjs"),Te=require("./components/data-display/Divider.cjs"),Ee=require("./components/data-display/InfoLabel.cjs"),De=require("./components/data-display/Image.cjs"),N=require("./components/data-display/List.cjs"),Oe=require("./components/typography/Text.cjs"),P=require("./components/layout/Card.cjs"),F=require("./components/layout/Accordion.cjs"),I=require("./components/layout/TabList.cjs"),ke=require("./components/layout/Tree.core.cjs"),Ae=require("./components/layout/Tree.itemPersonaLayout.cjs"),je=require("./components/layout/Tree.cjs"),L=require("./components/layout/Carousel.cjs"),R=require("./components/layout/Overflow.cjs"),Me=require("./components/layout/Stack.cjs"),Ne=require("./components/layout/Flex.cjs"),Pe=require("./components/layout/Grid.cjs"),z=require("./components/navigation/Breadcrumb.cjs"),B=require("./components/navigation/Menu.items.cjs"),V=require("./components/navigation/Menu.group.cjs"),Fe=require("./components/navigation/Menu.link.cjs"),Ie=require("./components/navigation/Menu.popover.cjs"),Le=require("./components/navigation/Menu.trigger.cjs"),H=require("./components/navigation/Menu.selectable.cjs"),Re=require("./components/navigation/Menu.splitGroup.cjs"),ze=require("./components/navigation/Menu.cjs"),U=require("./components/navigation/Nav.cjs"),Be=require("./components/navigation/Pagination.cjs"),W=require("./components/navigation/Stepper.cjs"),G=require("./components/feedback/MessageBar.parts.cjs"),Ve=require("./components/feedback/MessageBar.cjs"),He=require("./components/feedback/ProgressBar.cjs"),Ue=require("./components/feedback/Spinner.cjs"),K=require("./components/feedback/Skeleton.cjs"),q=require("./components/feedback/Toast.parts.cjs"),J=require("./components/feedback/Toaster.cjs"),We=require("./components/feedback/Toast.cjs"),Y=require("./components/overlays/Dialog.cjs"),X=require("./components/overlays/Popover.cjs"),Ge=require("./components/overlays/Tooltip.cjs"),Z=require("./components/overlays/Drawer.cjs"),Ke=require("./components/overlays/TeachingPopover.cjs"),Q=require("./components/table/Table.cjs"),$=require("./components/table/DataGrid.cjs"),qe=require("./components/motion/Presence.cjs");exports.Accordion=F.Accordion,exports.AccordionItem=F.AccordionItem,exports.AccordionPanel=F.AccordionPanel,exports.AccordionTrigger=F.AccordionTrigger,exports.AlphaSlider=b.AlphaSlider,exports.Avatar=O.Avatar,exports.AvatarGroup=k.AvatarGroup,exports.Badge=A.Badge,exports.Breadcrumb=z.Breadcrumb,exports.BreadcrumbItem=z.BreadcrumbItem,exports.Button=le.Button,exports.Card=P.Card,exports.CardBody=P.CardBody,exports.CardFooter=P.CardFooter,exports.CardHeader=P.CardHeader,exports.Carousel=L.Carousel,exports.CarouselItem=L.CarouselItem,exports.Checkbox=ye.Checkbox,exports.ColorArea=x.ColorArea,exports.ColorPicker=C.ColorPicker,exports.ColorPickerHexField=y.ColorPickerHexField,exports.ColorPickerPreview=y.ColorPickerPreview,exports.ColorPickerSwatches=y.ColorPickerSwatches,exports.ColorSlider=S.ColorSlider,exports.Combobox=g.Combobox,exports.ComboboxOption=g.ComboboxOption,exports.ComboboxOptionGroup=g.ComboboxOptionGroup,exports.CompoundButton=ue.CompoundButton,exports.CounterBadge=M.CounterBadge,exports.DataGrid=$.DataGrid,exports.DataGridBody=$.DataGridBody,exports.DataGridCell=$.DataGridCell,exports.DataGridHeader=$.DataGridHeader,exports.DataGridHeaderCell=$.DataGridHeaderCell,exports.DataGridRow=$.DataGridRow,exports.DatePicker=D.DatePicker,exports.Dialog=Y.Dialog,exports.DialogClose=Y.DialogClose,exports.DialogContent=Y.DialogContent,exports.DialogFooter=Y.DialogFooter,exports.DialogTitle=Y.DialogTitle,exports.DialogTrigger=Y.DialogTrigger,exports.Divider=Te.Divider,exports.Drawer=Z.Drawer,exports.DrawerClose=Z.DrawerClose,exports.DrawerTitle=Z.DrawerTitle,exports.DrawerTrigger=Z.DrawerTrigger,exports.Dropdown=_.Dropdown,exports.DropdownOption=_.DropdownOption,exports.DropdownOptionGroup=_.DropdownOptionGroup,exports.Field=ve.Field,exports.Flex=Ne.Flex,exports.Grid=Pe.Grid,exports.Image=De.Image,exports.InfoLabel=Ee.InfoLabel,exports.Input=ge.Input,exports.Label=m.Label,exports.Link=me.Link,exports.List=N.List,exports.ListItem=N.ListItem,exports.Menu=ze.Menu,exports.MenuButton=pe.MenuButton,exports.MenuDivider=B.MenuDivider,exports.MenuGroup=V.MenuGroup,exports.MenuGroupHeader=V.MenuGroupHeader,exports.MenuItem=B.MenuItem,exports.MenuItemCheckbox=H.MenuItemCheckbox,exports.MenuItemLink=Fe.MenuItemLink,exports.MenuItemRadio=H.MenuItemRadio,exports.MenuItemSwitch=H.MenuItemSwitch,exports.MenuPopover=Ie.MenuPopover,exports.MenuSplitGroup=Re.MenuSplitGroup,exports.MenuTrigger=Le.MenuTrigger,exports.MessageBar=Ve.MessageBar,exports.MessageBarActions=G.MessageBarActions,exports.MessageBarTitle=G.MessageBarTitle,exports.Nav=U.Nav,exports.NavCategory=U.NavCategory,exports.NavItem=U.NavItem,exports.NavSubItem=U.NavSubItem,exports.Option=h.Option,exports.OptionGroup=h.OptionGroup,exports.Overflow=R.Overflow,exports.OverflowItem=R.OverflowItem,exports.Pagination=Be.Pagination,exports.Persona=we.Persona,exports.Popover=X.Popover,exports.PopoverContent=X.PopoverContent,exports.PopoverTrigger=X.PopoverTrigger,exports.Portal=ce.Portal,exports.Presence=qe.Presence,exports.PresenceBadge=j.PresenceBadge,exports.ProgressBar=He.ProgressBar,exports.RadioGroup=d.RadioGroup,exports.RadioGroupItem=d.RadioGroupItem,exports.RadioItem=d.RadioItem,exports.Rating=T.Rating,exports.RatingDisplay=T.RatingDisplay,exports.SearchBox=Se.SearchBox,exports.Select=xe.Select,exports.Skeleton=K.Skeleton,exports.SkeletonGroup=K.SkeletonGroup,exports.Slider=f.Slider,exports.SpinButton=p.SpinButton,exports.Spinner=Ue.Spinner,exports.SplitButton=fe.SplitButton,exports.Stack=Me.Stack,exports.Stepper=W.Stepper,exports.StepperStep=W.StepperStep,exports.SwatchPicker=v.SwatchPicker,exports.Switch=be.Switch,exports.TabList=I.TabList,exports.TabListPanel=I.TabListPanel,exports.TabListPanels=I.TabListPanels,exports.TabListTab=I.TabListTab,exports.Table=Q.Table,exports.TableBody=Q.TableBody,exports.TableCell=Q.TableCell,exports.TableHead=Q.TableHead,exports.TableHeadCell=Q.TableHeadCell,exports.TableHeader=Q.TableHeader,exports.TableHeaderCell=Q.TableHeaderCell,exports.TableRow=Q.TableRow,exports.Tag=Ce.Tag,exports.TagPicker=w.TagPicker,exports.TeachingPopover=Ke.TeachingPopover,exports.Text=Oe.Text,exports.Textarea=_e.Textarea,exports.TimePicker=E.TimePicker,exports.Toast=We.Toast,exports.ToastBody=q.ToastBody,exports.ToastClose=q.ToastClose,exports.ToastFooter=q.ToastFooter,exports.ToastTitle=q.ToastTitle,exports.Toaster=J.Toaster,exports.ToggleButton=de.ToggleButton,exports.Toolbar=he.Toolbar,exports.ToolbarButton=u.ToolbarButton,exports.ToolbarDivider=u.ToolbarDivider,exports.ToolbarGroup=u.ToolbarGroup,exports.ToolbarRadioButton=u.ToolbarRadioButton,exports.ToolbarRadioGroup=u.ToolbarRadioGroup,exports.ToolbarToggleButton=u.ToolbarToggleButton,exports.Tooltip=Ge.Tooltip,exports.Tree=je.Tree,exports.TreeItem=ke.TreeItem,exports.TreeItemPersonaLayout=Ae.TreeItemPersonaLayout,exports.WaveProvider=l.WaveProvider,exports.accordionClassNames=t.accordionClassNames,exports.accordionItemClassNames=t.accordionItemClassNames,exports.accordionPanelClassNames=t.accordionPanelClassNames,exports.accordionTriggerClassNames=t.accordionTriggerClassNames,exports.alphaSliderClassNames=t.alphaSliderClassNames,exports.announce=c.announce,exports.avatarClassNames=t.avatarClassNames,exports.avatarGroupClassNames=t.avatarGroupClassNames,exports.badgeClassNames=t.badgeClassNames,exports.breadcrumbClassNames=t.breadcrumbClassNames,exports.breadcrumbItemClassNames=t.breadcrumbItemClassNames,exports.buttonClassNames=t.buttonClassNames,exports.cardBodyClassNames=t.cardBodyClassNames,exports.cardClassNames=t.cardClassNames,exports.cardFooterClassNames=t.cardFooterClassNames,exports.cardHeaderClassNames=t.cardHeaderClassNames,exports.carouselClassNames=t.carouselClassNames,exports.carouselItemClassNames=t.carouselItemClassNames,exports.checkboxClassNames=t.checkboxClassNames,exports.cn=ee.cn,exports.colorAreaClassNames=t.colorAreaClassNames,exports.colorPickerClassNames=t.colorPickerClassNames,exports.colorPickerHexFieldClassNames=t.colorPickerHexFieldClassNames,exports.colorPickerPreviewClassNames=t.colorPickerPreviewClassNames,exports.colorPickerSwatchesClassNames=t.colorPickerSwatchesClassNames,exports.colorSliderClassNames=t.colorSliderClassNames,exports.comboboxClassNames=t.comboboxClassNames,exports.composeEventHandlers=te.composeEventHandlers,exports.compoundButtonClassNames=t.compoundButtonClassNames,exports.counterBadgeClassNames=t.counterBadgeClassNames,exports.createToaster=re.createToaster,exports.dataGridBodyClassNames=t.dataGridBodyClassNames,exports.dataGridCellClassNames=t.dataGridCellClassNames,exports.dataGridClassNames=t.dataGridClassNames,exports.dataGridHeaderCellClassNames=t.dataGridHeaderCellClassNames,exports.dataGridHeaderClassNames=t.dataGridHeaderClassNames,exports.dataGridRowClassNames=t.dataGridRowClassNames,exports.datePickerClassNames=t.datePickerClassNames,exports.dialogContentClassNames=t.dialogContentClassNames,exports.dialogFooterClassNames=t.dialogFooterClassNames,exports.dialogTitleClassNames=t.dialogTitleClassNames,exports.dividerClassNames=t.dividerClassNames,exports.drawerClassNames=t.drawerClassNames,exports.drawerTitleClassNames=t.drawerTitleClassNames,exports.dropdownClassNames=t.dropdownClassNames,exports.fieldClassNames=t.fieldClassNames,exports.flexClassNames=t.flexClassNames,exports.getThemeClassName=se.getThemeClassName,exports.gridClassNames=t.gridClassNames,exports.hexToHsv=n.hexToHsv,exports.hsvToHex=n.hsvToHex,exports.imageClassNames=t.imageClassNames,exports.infoLabelClassNames=t.infoLabelClassNames,exports.inputClassNames=t.inputClassNames,exports.labelClassNames=t.labelClassNames,exports.linkClassNames=t.linkClassNames,exports.listClassNames=t.listClassNames,exports.listItemClassNames=t.listItemClassNames,exports.menuButtonClassNames=t.menuButtonClassNames,exports.menuClassNames=t.menuClassNames,exports.menuDividerClassNames=t.menuDividerClassNames,exports.menuGroupClassNames=t.menuGroupClassNames,exports.menuGroupHeaderClassNames=t.menuGroupHeaderClassNames,exports.menuItemCheckboxClassNames=t.menuItemCheckboxClassNames,exports.menuItemClassNames=t.menuItemClassNames,exports.menuItemLinkClassNames=t.menuItemLinkClassNames,exports.menuItemRadioClassNames=t.menuItemRadioClassNames,exports.menuItemSwitchClassNames=t.menuItemSwitchClassNames,exports.menuPopoverClassNames=t.menuPopoverClassNames,exports.menuSplitGroupClassNames=t.menuSplitGroupClassNames,exports.mergeRefs=ne.mergeRefs,exports.messageBarActionsClassNames=t.messageBarActionsClassNames,exports.messageBarClassNames=t.messageBarClassNames,exports.messageBarTitleClassNames=t.messageBarTitleClassNames,exports.navCategoryClassNames=t.navCategoryClassNames,exports.navClassNames=t.navClassNames,exports.navItemClassNames=t.navItemClassNames,exports.navSubItemClassNames=t.navSubItemClassNames,exports.optionClassNames=t.optionClassNames,exports.optionGroupClassNames=t.optionGroupClassNames,exports.overflowClassNames=t.overflowClassNames,exports.overflowItemClassNames=t.overflowItemClassNames,exports.paginationClassNames=t.paginationClassNames,exports.personaClassNames=t.personaClassNames,exports.popoverContentClassNames=t.popoverContentClassNames,exports.portalClassNames=t.portalClassNames,exports.presenceBadgeClassNames=t.presenceBadgeClassNames,exports.progressBarClassNames=t.progressBarClassNames,exports.radioGroupClassNames=t.radioGroupClassNames,exports.radioGroupItemClassNames=t.radioGroupItemClassNames,exports.ratingClassNames=t.ratingClassNames,exports.ratingDisplayClassNames=t.ratingDisplayClassNames,exports.renderSlot=e.renderSlot,exports.resolveSlot=e.resolveSlot,exports.searchBoxClassNames=t.searchBoxClassNames,exports.selectClassNames=t.selectClassNames,exports.skeletonClassNames=t.skeletonClassNames,exports.skeletonGroupClassNames=t.skeletonGroupClassNames,exports.sliderClassNames=t.sliderClassNames,exports.spinButtonClassNames=t.spinButtonClassNames,exports.spinnerClassNames=t.spinnerClassNames,exports.splitButtonClassNames=t.splitButtonClassNames,exports.stackClassNames=t.stackClassNames,exports.stepperClassNames=t.stepperClassNames,exports.stepperStepClassNames=t.stepperStepClassNames,exports.swatchPickerClassNames=t.swatchPickerClassNames,exports.switchClassNames=t.switchClassNames,exports.tabListClassNames=t.tabListClassNames,exports.tabListPanelClassNames=t.tabListPanelClassNames,exports.tabListPanelsClassNames=t.tabListPanelsClassNames,exports.tabListTabClassNames=t.tabListTabClassNames,exports.tableBodyClassNames=t.tableBodyClassNames,exports.tableCellClassNames=t.tableCellClassNames,exports.tableClassNames=t.tableClassNames,exports.tableHeaderCellClassNames=t.tableHeaderCellClassNames,exports.tableHeaderClassNames=t.tableHeaderClassNames,exports.tableRowClassNames=t.tableRowClassNames,exports.tagClassNames=t.tagClassNames,exports.tagPickerClassNames=t.tagPickerClassNames,exports.teachingPopoverClassNames=t.teachingPopoverClassNames,exports.textClassNames=t.textClassNames,exports.textareaClassNames=t.textareaClassNames,exports.timePickerClassNames=t.timePickerClassNames,exports.toastBodyClassNames=t.toastBodyClassNames,exports.toastClassNames=t.toastClassNames,exports.toastFooterClassNames=t.toastFooterClassNames,exports.toastTitleClassNames=t.toastTitleClassNames,exports.toasterClassNames=t.toasterClassNames,exports.toggleButtonClassNames=t.toggleButtonClassNames,exports.toolbarButtonClassNames=t.toolbarButtonClassNames,exports.toolbarClassNames=t.toolbarClassNames,exports.toolbarDividerClassNames=t.toolbarDividerClassNames,exports.toolbarGroupClassNames=t.toolbarGroupClassNames,exports.toolbarRadioButtonClassNames=t.toolbarRadioButtonClassNames,exports.toolbarRadioGroupClassNames=t.toolbarRadioGroupClassNames,exports.toolbarToggleButtonClassNames=t.toolbarToggleButtonClassNames,exports.tooltipClassNames=t.tooltipClassNames,exports.treeClassNames=t.treeClassNames,exports.treeItemClassNames=t.treeItemClassNames,exports.treeItemPersonaLayoutClassNames=t.treeItemPersonaLayoutClassNames,exports.useAnnounce=c.useAnnounce,exports.useControllable=r.useControllable,exports.useEventCallback=ie.useEventCallback,exports.useFieldControl=ae.useFieldControl,exports.useId=i.useId,exports.useIsClient=s.useIsClient,exports.useIsOverflowItemVisible=R.useIsOverflowItemVisible,exports.useIsOverflowing=R.useIsOverflowing,exports.useMergedRefs=o.useMergedRefs,exports.useOverflowMenu=R.useOverflowMenu,exports.usePresence=oe.usePresence,exports.useRovingTabIndex=a.useRovingTabIndex,exports.useToastController=J.useToastController,exports.useWaveTheme=l.useWaveTheme,exports.waveProviderClassNames=t.waveProviderClassNames;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const ee=require("./lib/cn.cjs"),e=require("./lib/slot.cjs"),te=require("./lib/composeEventHandlers.cjs"),ne=require("./lib/mergeRefs.cjs"),t=require("./lib/classNames.cjs"),n=require("./lib/color.cjs"),re=require("./lib/toaster.cjs"),ie=require("./hooks/useEventCallback.cjs"),r=require("./hooks/useControllable.cjs"),i=require("./hooks/useId.cjs"),a=require("./hooks/useRovingTabIndex.cjs"),o=require("./hooks/useMergedRefs.cjs"),s=require("./hooks/useIsClient.cjs"),ae=require("./hooks/useFieldControl.cjs"),c=require("./hooks/useAnnounce.cjs"),oe=require("./hooks/usePresence.cjs"),se=require("./lib/theme.cjs"),l=require("./components/provider/WaveProvider.cjs"),ce=require("./components/portal/Portal.cjs"),le=require("./components/button/Button.cjs"),ue=require("./components/button/CompoundButton.cjs"),de=require("./components/button/ToggleButton.cjs"),fe=require("./components/button/SplitButton.cjs"),pe=require("./components/button/MenuButton.cjs"),me=require("./components/button/Link.cjs"),u=require("./components/button/Toolbar.parts.cjs"),he=require("./components/button/Toolbar.cjs"),ge=require("./components/input/Input.cjs"),_e=require("./components/input/Textarea.cjs"),ve=require("./components/input/Field.cjs"),ye=require("./components/input/Checkbox.cjs"),d=require("./components/input/RadioGroup.cjs"),be=require("./components/input/Switch.cjs"),xe=require("./components/input/Select.cjs"),Se=require("./components/input/SearchBox.cjs"),f=require("./components/input/Slider.cjs"),p=require("./components/input/SpinButton.cjs"),m=require("./components/input/Label.cjs"),h=require("./components/input/Option.cjs"),g=require("./components/input/Combobox.cjs"),_=require("./components/input/Dropdown.cjs"),v=require("./components/input/SwatchPicker.cjs"),y=require("./components/input/ColorPicker.parts.cjs"),b=require("./components/input/AlphaSlider.cjs"),x=require("./components/input/ColorArea.cjs"),S=require("./components/input/ColorSlider.cjs"),C=require("./components/input/ColorPicker.cjs"),w=require("./components/input/TagPicker.cjs"),T=require("./components/input/Rating.item.cjs"),E=require("./components/input/Rating.cjs"),D=require("./components/input/TimePicker.cjs"),O=require("./components/input/DatePicker.cjs"),k=require("./components/data-display/Avatar.cjs"),A=require("./components/data-display/AvatarGroup.cjs"),j=require("./components/data-display/Badge.cjs"),Ce=require("./components/data-display/PresenceBadge.cjs"),M=require("./components/data-display/CounterBadge.cjs"),we=require("./components/data-display/Tag.cjs"),Te=require("./components/data-display/Persona.cjs"),Ee=require("./components/data-display/Divider.cjs"),De=require("./components/data-display/InfoButton.cjs"),Oe=require("./components/data-display/InfoLabel.cjs"),ke=require("./components/data-display/Image.cjs"),N=require("./components/data-display/List.cjs"),Ae=require("./components/typography/Text.cjs"),P=require("./components/layout/Card.cjs"),F=require("./components/layout/Accordion.cjs"),I=require("./components/layout/TabList.cjs"),je=require("./components/layout/Tree.core.cjs"),Me=require("./components/layout/Tree.itemPersonaLayout.cjs"),Ne=require("./components/layout/Tree.cjs"),L=require("./components/layout/Carousel.cjs"),R=require("./components/layout/Overflow.cjs"),Pe=require("./components/layout/Stack.cjs"),Fe=require("./components/layout/Flex.cjs"),Ie=require("./components/layout/Grid.cjs"),z=require("./components/navigation/Breadcrumb.cjs"),B=require("./components/navigation/Menu.items.cjs"),V=require("./components/navigation/Menu.group.cjs"),Le=require("./components/navigation/Menu.link.cjs"),Re=require("./components/navigation/Menu.popover.cjs"),ze=require("./components/navigation/Menu.trigger.cjs"),H=require("./components/navigation/Menu.selectable.cjs"),Be=require("./components/navigation/Menu.splitGroup.cjs"),Ve=require("./components/navigation/Menu.cjs"),U=require("./components/navigation/Nav.cjs"),He=require("./components/navigation/Pagination.cjs"),W=require("./components/navigation/Stepper.cjs"),G=require("./components/feedback/MessageBar.parts.cjs"),Ue=require("./components/feedback/MessageBar.cjs"),We=require("./components/feedback/ProgressBar.cjs"),Ge=require("./components/feedback/Spinner.cjs"),K=require("./components/feedback/Skeleton.cjs"),q=require("./components/feedback/Toast.parts.cjs"),J=require("./components/feedback/Toaster.cjs"),Ke=require("./components/feedback/Toast.cjs"),Y=require("./components/overlays/Dialog.cjs"),X=require("./components/overlays/Popover.cjs"),qe=require("./components/overlays/Tooltip.cjs"),Z=require("./components/overlays/Drawer.cjs"),Je=require("./components/overlays/TeachingPopover.cjs"),Q=require("./components/table/Table.cjs"),$=require("./components/table/DataGrid.cjs"),Ye=require("./components/motion/Presence.cjs");exports.Accordion=F.Accordion,exports.AccordionItem=F.AccordionItem,exports.AccordionPanel=F.AccordionPanel,exports.AccordionTrigger=F.AccordionTrigger,exports.AlphaSlider=b.AlphaSlider,exports.Avatar=k.Avatar,exports.AvatarGroup=A.AvatarGroup,exports.Badge=j.Badge,exports.Breadcrumb=z.Breadcrumb,exports.BreadcrumbItem=z.BreadcrumbItem,exports.Button=le.Button,exports.Card=P.Card,exports.CardBody=P.CardBody,exports.CardFooter=P.CardFooter,exports.CardHeader=P.CardHeader,exports.Carousel=L.Carousel,exports.CarouselItem=L.CarouselItem,exports.Checkbox=ye.Checkbox,exports.ColorArea=x.ColorArea,exports.ColorPicker=C.ColorPicker,exports.ColorPickerHexField=y.ColorPickerHexField,exports.ColorPickerPreview=y.ColorPickerPreview,exports.ColorPickerSwatches=y.ColorPickerSwatches,exports.ColorSlider=S.ColorSlider,exports.Combobox=g.Combobox,exports.ComboboxOption=g.ComboboxOption,exports.ComboboxOptionGroup=g.ComboboxOptionGroup,exports.CompoundButton=ue.CompoundButton,exports.CounterBadge=M.CounterBadge,exports.DataGrid=$.DataGrid,exports.DataGridBody=$.DataGridBody,exports.DataGridCell=$.DataGridCell,exports.DataGridHeader=$.DataGridHeader,exports.DataGridHeaderCell=$.DataGridHeaderCell,exports.DataGridRow=$.DataGridRow,exports.DatePicker=O.DatePicker,exports.Dialog=Y.Dialog,exports.DialogClose=Y.DialogClose,exports.DialogContent=Y.DialogContent,exports.DialogFooter=Y.DialogFooter,exports.DialogTitle=Y.DialogTitle,exports.DialogTrigger=Y.DialogTrigger,exports.Divider=Ee.Divider,exports.Drawer=Z.Drawer,exports.DrawerClose=Z.DrawerClose,exports.DrawerTitle=Z.DrawerTitle,exports.DrawerTrigger=Z.DrawerTrigger,exports.Dropdown=_.Dropdown,exports.DropdownOption=_.DropdownOption,exports.DropdownOptionGroup=_.DropdownOptionGroup,exports.Field=ve.Field,exports.Flex=Fe.Flex,exports.Grid=Ie.Grid,exports.Image=ke.Image,exports.InfoButton=De.InfoButton,exports.InfoLabel=Oe.InfoLabel,exports.Input=ge.Input,exports.Label=m.Label,exports.Link=me.Link,exports.List=N.List,exports.ListItem=N.ListItem,exports.Menu=Ve.Menu,exports.MenuButton=pe.MenuButton,exports.MenuDivider=B.MenuDivider,exports.MenuGroup=V.MenuGroup,exports.MenuGroupHeader=V.MenuGroupHeader,exports.MenuItem=B.MenuItem,exports.MenuItemCheckbox=H.MenuItemCheckbox,exports.MenuItemLink=Le.MenuItemLink,exports.MenuItemRadio=H.MenuItemRadio,exports.MenuItemSwitch=H.MenuItemSwitch,exports.MenuPopover=Re.MenuPopover,exports.MenuSplitGroup=Be.MenuSplitGroup,exports.MenuTrigger=ze.MenuTrigger,exports.MessageBar=Ue.MessageBar,exports.MessageBarActions=G.MessageBarActions,exports.MessageBarTitle=G.MessageBarTitle,exports.Nav=U.Nav,exports.NavCategory=U.NavCategory,exports.NavItem=U.NavItem,exports.NavSubItem=U.NavSubItem,exports.Option=h.Option,exports.OptionGroup=h.OptionGroup,exports.Overflow=R.Overflow,exports.OverflowItem=R.OverflowItem,exports.Pagination=He.Pagination,exports.Persona=Te.Persona,exports.Popover=X.Popover,exports.PopoverContent=X.PopoverContent,exports.PopoverTrigger=X.PopoverTrigger,exports.Portal=ce.Portal,exports.Presence=Ye.Presence,exports.PresenceBadge=Ce.PresenceBadge,exports.ProgressBar=We.ProgressBar,exports.RadioGroup=d.RadioGroup,exports.RadioGroupItem=d.RadioGroupItem,exports.RadioItem=d.RadioItem,exports.Rating=E.Rating,exports.RatingDisplay=E.RatingDisplay,exports.RatingDisplayItem=E.RatingDisplayItem,exports.RatingItem=T.RatingItem,exports.SearchBox=Se.SearchBox,exports.Select=xe.Select,exports.Skeleton=K.Skeleton,exports.SkeletonGroup=K.SkeletonGroup,exports.Slider=f.Slider,exports.SpinButton=p.SpinButton,exports.Spinner=Ge.Spinner,exports.SplitButton=fe.SplitButton,exports.Stack=Pe.Stack,exports.Stepper=W.Stepper,exports.StepperStep=W.StepperStep,exports.SwatchPicker=v.SwatchPicker,exports.Switch=be.Switch,exports.TabList=I.TabList,exports.TabListPanel=I.TabListPanel,exports.TabListPanels=I.TabListPanels,exports.TabListTab=I.TabListTab,exports.Table=Q.Table,exports.TableBody=Q.TableBody,exports.TableCell=Q.TableCell,exports.TableHead=Q.TableHead,exports.TableHeadCell=Q.TableHeadCell,exports.TableHeader=Q.TableHeader,exports.TableHeaderCell=Q.TableHeaderCell,exports.TableRow=Q.TableRow,exports.Tag=we.Tag,exports.TagPicker=w.TagPicker,exports.TeachingPopover=Je.TeachingPopover,exports.Text=Ae.Text,exports.Textarea=_e.Textarea,exports.TimePicker=D.TimePicker,exports.Toast=Ke.Toast,exports.ToastBody=q.ToastBody,exports.ToastClose=q.ToastClose,exports.ToastFooter=q.ToastFooter,exports.ToastTitle=q.ToastTitle,exports.Toaster=J.Toaster,exports.ToggleButton=de.ToggleButton,exports.Toolbar=he.Toolbar,exports.ToolbarButton=u.ToolbarButton,exports.ToolbarDivider=u.ToolbarDivider,exports.ToolbarGroup=u.ToolbarGroup,exports.ToolbarRadioButton=u.ToolbarRadioButton,exports.ToolbarRadioGroup=u.ToolbarRadioGroup,exports.ToolbarToggleButton=u.ToolbarToggleButton,exports.Tooltip=qe.Tooltip,exports.Tree=Ne.Tree,exports.TreeItem=je.TreeItem,exports.TreeItemPersonaLayout=Me.TreeItemPersonaLayout,exports.WaveProvider=l.WaveProvider,exports.accordionClassNames=t.accordionClassNames,exports.accordionItemClassNames=t.accordionItemClassNames,exports.accordionPanelClassNames=t.accordionPanelClassNames,exports.accordionTriggerClassNames=t.accordionTriggerClassNames,exports.alphaSliderClassNames=t.alphaSliderClassNames,exports.announce=c.announce,exports.avatarClassNames=t.avatarClassNames,exports.avatarGroupClassNames=t.avatarGroupClassNames,exports.badgeClassNames=t.badgeClassNames,exports.breadcrumbClassNames=t.breadcrumbClassNames,exports.breadcrumbItemClassNames=t.breadcrumbItemClassNames,exports.buttonClassNames=t.buttonClassNames,exports.cardBodyClassNames=t.cardBodyClassNames,exports.cardClassNames=t.cardClassNames,exports.cardFooterClassNames=t.cardFooterClassNames,exports.cardHeaderClassNames=t.cardHeaderClassNames,exports.carouselClassNames=t.carouselClassNames,exports.carouselItemClassNames=t.carouselItemClassNames,exports.checkboxClassNames=t.checkboxClassNames,exports.cn=ee.cn,exports.colorAreaClassNames=t.colorAreaClassNames,exports.colorPickerClassNames=t.colorPickerClassNames,exports.colorPickerHexFieldClassNames=t.colorPickerHexFieldClassNames,exports.colorPickerPreviewClassNames=t.colorPickerPreviewClassNames,exports.colorPickerSwatchesClassNames=t.colorPickerSwatchesClassNames,exports.colorSliderClassNames=t.colorSliderClassNames,exports.comboboxClassNames=t.comboboxClassNames,exports.composeEventHandlers=te.composeEventHandlers,exports.compoundButtonClassNames=t.compoundButtonClassNames,exports.counterBadgeClassNames=t.counterBadgeClassNames,exports.createToaster=re.createToaster,exports.dataGridBodyClassNames=t.dataGridBodyClassNames,exports.dataGridCellClassNames=t.dataGridCellClassNames,exports.dataGridClassNames=t.dataGridClassNames,exports.dataGridHeaderCellClassNames=t.dataGridHeaderCellClassNames,exports.dataGridHeaderClassNames=t.dataGridHeaderClassNames,exports.dataGridRowClassNames=t.dataGridRowClassNames,exports.datePickerClassNames=t.datePickerClassNames,exports.dialogContentClassNames=t.dialogContentClassNames,exports.dialogFooterClassNames=t.dialogFooterClassNames,exports.dialogTitleClassNames=t.dialogTitleClassNames,exports.dividerClassNames=t.dividerClassNames,exports.drawerClassNames=t.drawerClassNames,exports.drawerTitleClassNames=t.drawerTitleClassNames,exports.dropdownClassNames=t.dropdownClassNames,exports.fieldClassNames=t.fieldClassNames,exports.flexClassNames=t.flexClassNames,exports.getThemeClassName=se.getThemeClassName,exports.gridClassNames=t.gridClassNames,exports.hexToHsv=n.hexToHsv,exports.hsvToHex=n.hsvToHex,exports.imageClassNames=t.imageClassNames,exports.infoButtonClassNames=t.infoButtonClassNames,exports.infoLabelClassNames=t.infoLabelClassNames,exports.inputClassNames=t.inputClassNames,exports.labelClassNames=t.labelClassNames,exports.linkClassNames=t.linkClassNames,exports.listClassNames=t.listClassNames,exports.listItemClassNames=t.listItemClassNames,exports.menuButtonClassNames=t.menuButtonClassNames,exports.menuClassNames=t.menuClassNames,exports.menuDividerClassNames=t.menuDividerClassNames,exports.menuGroupClassNames=t.menuGroupClassNames,exports.menuGroupHeaderClassNames=t.menuGroupHeaderClassNames,exports.menuItemCheckboxClassNames=t.menuItemCheckboxClassNames,exports.menuItemClassNames=t.menuItemClassNames,exports.menuItemLinkClassNames=t.menuItemLinkClassNames,exports.menuItemRadioClassNames=t.menuItemRadioClassNames,exports.menuItemSwitchClassNames=t.menuItemSwitchClassNames,exports.menuPopoverClassNames=t.menuPopoverClassNames,exports.menuSplitGroupClassNames=t.menuSplitGroupClassNames,exports.mergeRefs=ne.mergeRefs,exports.messageBarActionsClassNames=t.messageBarActionsClassNames,exports.messageBarClassNames=t.messageBarClassNames,exports.messageBarTitleClassNames=t.messageBarTitleClassNames,exports.navCategoryClassNames=t.navCategoryClassNames,exports.navClassNames=t.navClassNames,exports.navItemClassNames=t.navItemClassNames,exports.navSubItemClassNames=t.navSubItemClassNames,exports.optionClassNames=t.optionClassNames,exports.optionGroupClassNames=t.optionGroupClassNames,exports.overflowClassNames=t.overflowClassNames,exports.overflowItemClassNames=t.overflowItemClassNames,exports.paginationClassNames=t.paginationClassNames,exports.personaClassNames=t.personaClassNames,exports.popoverContentClassNames=t.popoverContentClassNames,exports.portalClassNames=t.portalClassNames,exports.presenceBadgeClassNames=t.presenceBadgeClassNames,exports.progressBarClassNames=t.progressBarClassNames,exports.radioGroupClassNames=t.radioGroupClassNames,exports.radioGroupItemClassNames=t.radioGroupItemClassNames,exports.ratingClassNames=t.ratingClassNames,exports.ratingDisplayClassNames=t.ratingDisplayClassNames,exports.ratingItemClassNames=t.ratingItemClassNames,exports.renderSlot=e.renderSlot,exports.resolveSlot=e.resolveSlot,exports.searchBoxClassNames=t.searchBoxClassNames,exports.selectClassNames=t.selectClassNames,exports.skeletonClassNames=t.skeletonClassNames,exports.skeletonGroupClassNames=t.skeletonGroupClassNames,exports.sliderClassNames=t.sliderClassNames,exports.spinButtonClassNames=t.spinButtonClassNames,exports.spinnerClassNames=t.spinnerClassNames,exports.splitButtonClassNames=t.splitButtonClassNames,exports.stackClassNames=t.stackClassNames,exports.stepperClassNames=t.stepperClassNames,exports.stepperStepClassNames=t.stepperStepClassNames,exports.swatchPickerClassNames=t.swatchPickerClassNames,exports.switchClassNames=t.switchClassNames,exports.tabListClassNames=t.tabListClassNames,exports.tabListPanelClassNames=t.tabListPanelClassNames,exports.tabListPanelsClassNames=t.tabListPanelsClassNames,exports.tabListTabClassNames=t.tabListTabClassNames,exports.tableBodyClassNames=t.tableBodyClassNames,exports.tableCellClassNames=t.tableCellClassNames,exports.tableClassNames=t.tableClassNames,exports.tableHeaderCellClassNames=t.tableHeaderCellClassNames,exports.tableHeaderClassNames=t.tableHeaderClassNames,exports.tableRowClassNames=t.tableRowClassNames,exports.tagClassNames=t.tagClassNames,exports.tagPickerClassNames=t.tagPickerClassNames,exports.teachingPopoverClassNames=t.teachingPopoverClassNames,exports.textClassNames=t.textClassNames,exports.textareaClassNames=t.textareaClassNames,exports.timePickerClassNames=t.timePickerClassNames,exports.toastBodyClassNames=t.toastBodyClassNames,exports.toastClassNames=t.toastClassNames,exports.toastFooterClassNames=t.toastFooterClassNames,exports.toastTitleClassNames=t.toastTitleClassNames,exports.toasterClassNames=t.toasterClassNames,exports.toggleButtonClassNames=t.toggleButtonClassNames,exports.toolbarButtonClassNames=t.toolbarButtonClassNames,exports.toolbarClassNames=t.toolbarClassNames,exports.toolbarDividerClassNames=t.toolbarDividerClassNames,exports.toolbarGroupClassNames=t.toolbarGroupClassNames,exports.toolbarRadioButtonClassNames=t.toolbarRadioButtonClassNames,exports.toolbarRadioGroupClassNames=t.toolbarRadioGroupClassNames,exports.toolbarToggleButtonClassNames=t.toolbarToggleButtonClassNames,exports.tooltipClassNames=t.tooltipClassNames,exports.treeClassNames=t.treeClassNames,exports.treeItemClassNames=t.treeItemClassNames,exports.treeItemPersonaLayoutClassNames=t.treeItemPersonaLayoutClassNames,exports.useAnnounce=c.useAnnounce,exports.useControllable=r.useControllable,exports.useEventCallback=ie.useEventCallback,exports.useFieldControl=ae.useFieldControl,exports.useId=i.useId,exports.useIsClient=s.useIsClient,exports.useIsOverflowItemVisible=R.useIsOverflowItemVisible,exports.useIsOverflowing=R.useIsOverflowing,exports.useMergedRefs=o.useMergedRefs,exports.useOverflowMenu=R.useOverflowMenu,exports.usePresence=oe.usePresence,exports.useRovingTabIndex=a.useRovingTabIndex,exports.useToastController=J.useToastController,exports.useWaveTheme=l.useWaveTheme,exports.waveProviderClassNames=t.waveProviderClassNames;