@octanejs/base-ui 0.1.30 → 0.1.32

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 (201) hide show
  1. package/dist/cjs/accordion.cjs +497 -0
  2. package/dist/cjs/alert-dialog.cjs +65 -0
  3. package/dist/cjs/avatar.cjs +234 -0
  4. package/dist/cjs/button.cjs +54 -0
  5. package/dist/cjs/checkbox-group.cjs +165 -0
  6. package/dist/cjs/checkbox.cjs +475 -0
  7. package/dist/cjs/collapsible.cjs +700 -0
  8. package/dist/cjs/context-menu.cjs +257 -0
  9. package/dist/cjs/csp-provider.cjs +40 -0
  10. package/dist/cjs/dialog.cjs +741 -0
  11. package/dist/cjs/direction-provider.cjs +35 -0
  12. package/dist/cjs/field.cjs +559 -0
  13. package/dist/cjs/fieldset.cjs +101 -0
  14. package/dist/cjs/form.cjs +177 -0
  15. package/dist/cjs/index.cjs +133 -0
  16. package/dist/cjs/input.cjs +32 -0
  17. package/dist/cjs/internal.cjs +51 -0
  18. package/dist/cjs/menu.cjs +2420 -0
  19. package/dist/cjs/menubar.cjs +132 -0
  20. package/dist/cjs/merge-props.cjs +34 -0
  21. package/dist/cjs/meter.cjs +169 -0
  22. package/dist/cjs/number-field.cjs +812 -0
  23. package/dist/cjs/popover.cjs +966 -0
  24. package/dist/cjs/preview-card.cjs +632 -0
  25. package/dist/cjs/progress.cjs +206 -0
  26. package/dist/cjs/radio-group.cjs +264 -0
  27. package/dist/cjs/radio.cjs +327 -0
  28. package/dist/cjs/separator.cjs +44 -0
  29. package/dist/cjs/slider.cjs +1384 -0
  30. package/dist/cjs/switch.cjs +306 -0
  31. package/dist/cjs/tabs.cjs +727 -0
  32. package/dist/cjs/toast.cjs +1766 -0
  33. package/dist/cjs/toggle-group.cjs +118 -0
  34. package/dist/cjs/toggle.cjs +121 -0
  35. package/dist/cjs/tooltip.cjs +835 -0
  36. package/dist/cjs/unstable-use-media-query.cjs +79 -0
  37. package/dist/cjs/use-render.cjs +40 -0
  38. package/dist/cjs/utils/CSPContext.cjs +38 -0
  39. package/dist/cjs/utils/CheckboxGroupContext.cjs +40 -0
  40. package/dist/cjs/utils/CompositeRootContext.cjs +40 -0
  41. package/dist/cjs/utils/ContextMenuRootContext.cjs +42 -0
  42. package/dist/cjs/utils/DirectionContext.cjs +34 -0
  43. package/dist/cjs/utils/FloatingPortalLite.cjs +47 -0
  44. package/dist/cjs/utils/InternalBackdrop.cjs +49 -0
  45. package/dist/cjs/utils/MenubarContext.cjs +40 -0
  46. package/dist/cjs/utils/RadioGroupContext.cjs +34 -0
  47. package/dist/cjs/utils/RequestQueue.cjs +111 -0
  48. package/dist/cjs/utils/TimeoutManager.cjs +50 -0
  49. package/dist/cjs/utils/ToggleGroupContext.cjs +40 -0
  50. package/dist/cjs/utils/adaptiveOriginMiddleware.cjs +94 -0
  51. package/dist/cjs/utils/addEventListener.cjs +33 -0
  52. package/dist/cjs/utils/areArraysEqual.cjs +30 -0
  53. package/dist/cjs/utils/clamp.cjs +30 -0
  54. package/dist/cjs/utils/closePart.cjs +70 -0
  55. package/dist/cjs/utils/collapsibleOpenStateMapping.cjs +42 -0
  56. package/dist/cjs/utils/composeRefs.cjs +68 -0
  57. package/dist/cjs/utils/composite/CompositeItem.cjs +59 -0
  58. package/dist/cjs/utils/composite/CompositeList.cjs +177 -0
  59. package/dist/cjs/utils/composite/CompositeListContext.cjs +43 -0
  60. package/dist/cjs/utils/composite/CompositeRoot.cjs +118 -0
  61. package/dist/cjs/utils/composite/grid-utils.cjs +343 -0
  62. package/dist/cjs/utils/composite/gridNavigation.cjs +92 -0
  63. package/dist/cjs/utils/composite/keys.cjs +174 -0
  64. package/dist/cjs/utils/composite/list-utils.cjs +90 -0
  65. package/dist/cjs/utils/composite/useCompositeItem.cjs +63 -0
  66. package/dist/cjs/utils/composite/useCompositeListItem.cjs +104 -0
  67. package/dist/cjs/utils/composite/useCompositeRoot.cjs +263 -0
  68. package/dist/cjs/utils/constants.cjs +56 -0
  69. package/dist/cjs/utils/contains.cjs +46 -0
  70. package/dist/cjs/utils/createChangeEventDetails.cjs +92 -0
  71. package/dist/cjs/utils/dom.cjs +35 -0
  72. package/dist/cjs/utils/empty.cjs +34 -0
  73. package/dist/cjs/utils/field/FieldItemContext.cjs +34 -0
  74. package/dist/cjs/utils/field/FieldRootContext.cjs +80 -0
  75. package/dist/cjs/utils/field/FormContext.cjs +41 -0
  76. package/dist/cjs/utils/field/LabelableContext.cjs +43 -0
  77. package/dist/cjs/utils/field/LabelableProvider.cjs +115 -0
  78. package/dist/cjs/utils/field/constants.cjs +68 -0
  79. package/dist/cjs/utils/field/getCombinedFieldValidityData.cjs +36 -0
  80. package/dist/cjs/utils/field/useAriaLabelledBy.cjs +87 -0
  81. package/dist/cjs/utils/field/useFieldControlRegistration.cjs +165 -0
  82. package/dist/cjs/utils/field/useFieldValidation.cjs +285 -0
  83. package/dist/cjs/utils/field/useLabel.cjs +99 -0
  84. package/dist/cjs/utils/field/useLabelableId.cjs +105 -0
  85. package/dist/cjs/utils/field/useRegisterFieldControl.cjs +60 -0
  86. package/dist/cjs/utils/findRootOwnerId.cjs +37 -0
  87. package/dist/cjs/utils/floating/FloatingDelayGroup.cjs +219 -0
  88. package/dist/cjs/utils/floating/FloatingFocusManager.cjs +685 -0
  89. package/dist/cjs/utils/floating/FloatingPortal.cjs +230 -0
  90. package/dist/cjs/utils/floating/FloatingRootStore.cjs +87 -0
  91. package/dist/cjs/utils/floating/FloatingTree.cjs +86 -0
  92. package/dist/cjs/utils/floating/FloatingTreeStore.cjs +41 -0
  93. package/dist/cjs/utils/floating/FocusGuard.cjs +54 -0
  94. package/dist/cjs/utils/floating/composite.cjs +42 -0
  95. package/dist/cjs/utils/floating/constants.cjs +34 -0
  96. package/dist/cjs/utils/floating/createAttribute.cjs +30 -0
  97. package/dist/cjs/utils/floating/createEventEmitter.cjs +44 -0
  98. package/dist/cjs/utils/floating/element.cjs +103 -0
  99. package/dist/cjs/utils/floating/enqueueFocus.cjs +51 -0
  100. package/dist/cjs/utils/floating/event.cjs +65 -0
  101. package/dist/cjs/utils/floating/getEmptyRootContext.cjs +42 -0
  102. package/dist/cjs/utils/floating/gridNavigation.cjs +45 -0
  103. package/dist/cjs/utils/floating/markOthers.cjs +181 -0
  104. package/dist/cjs/utils/floating/nodes.cjs +48 -0
  105. package/dist/cjs/utils/floating/safePolygon.cjs +301 -0
  106. package/dist/cjs/utils/floating/tabbable.cjs +242 -0
  107. package/dist/cjs/utils/floating/types.cjs +16 -0
  108. package/dist/cjs/utils/floating/useClick.cjs +153 -0
  109. package/dist/cjs/utils/floating/useClientPoint.cjs +225 -0
  110. package/dist/cjs/utils/floating/useDismiss.cjs +506 -0
  111. package/dist/cjs/utils/floating/useFloating.cjs +186 -0
  112. package/dist/cjs/utils/floating/useFloatingRootContext.cjs +75 -0
  113. package/dist/cjs/utils/floating/useFocus.cjs +184 -0
  114. package/dist/cjs/utils/floating/useHoverFloatingInteraction.cjs +231 -0
  115. package/dist/cjs/utils/floating/useHoverInteractionSharedState.cjs +113 -0
  116. package/dist/cjs/utils/floating/useHoverReferenceInteraction.cjs +380 -0
  117. package/dist/cjs/utils/floating/useHoverShared.cjs +65 -0
  118. package/dist/cjs/utils/floating/useListNavigation.cjs +665 -0
  119. package/dist/cjs/utils/floating/useSyncedFloatingRootContext.cjs +91 -0
  120. package/dist/cjs/utils/floating/useTypeahead.cjs +187 -0
  121. package/dist/cjs/utils/formatNumber.cjs +60 -0
  122. package/dist/cjs/utils/generateId.cjs +32 -0
  123. package/dist/cjs/utils/getCssDimensions.cjs +42 -0
  124. package/dist/cjs/utils/getDefaultFormSubmitter.cjs +42 -0
  125. package/dist/cjs/utils/getDisabledMountTransitionStyles.cjs +32 -0
  126. package/dist/cjs/utils/getElementRef.cjs +35 -0
  127. package/dist/cjs/utils/getPseudoElementBounds.cjs +56 -0
  128. package/dist/cjs/utils/getStateAttributesProps.cjs +46 -0
  129. package/dist/cjs/utils/hideMiddleware.cjs +42 -0
  130. package/dist/cjs/utils/inertValue.cjs +30 -0
  131. package/dist/cjs/utils/matchesFocusVisible.cjs +38 -0
  132. package/dist/cjs/utils/mergeCleanups.cjs +37 -0
  133. package/dist/cjs/utils/mergeObjects.cjs +39 -0
  134. package/dist/cjs/utils/mergeProps.cjs +182 -0
  135. package/dist/cjs/utils/noop.cjs +29 -0
  136. package/dist/cjs/utils/number/constants.cjs +34 -0
  137. package/dist/cjs/utils/number/parse.cjs +258 -0
  138. package/dist/cjs/utils/number/types.cjs +16 -0
  139. package/dist/cjs/utils/number/validate.cjs +104 -0
  140. package/dist/cjs/utils/owner.cjs +35 -0
  141. package/dist/cjs/utils/platform.cjs +83 -0
  142. package/dist/cjs/utils/popupStateMapping.cjs +74 -0
  143. package/dist/cjs/utils/popups/index.cjs +39 -0
  144. package/dist/cjs/utils/popups/inlineRect.cjs +218 -0
  145. package/dist/cjs/utils/popups/popupStoreUtils.cjs +379 -0
  146. package/dist/cjs/utils/popups/popupTriggerMap.cjs +76 -0
  147. package/dist/cjs/utils/popups/store.cjs +118 -0
  148. package/dist/cjs/utils/popups/useTriggerFocusGuards.cjs +72 -0
  149. package/dist/cjs/utils/resolveAriaLabelledBy.cjs +35 -0
  150. package/dist/cjs/utils/resolveClassName.cjs +30 -0
  151. package/dist/cjs/utils/resolveRef.cjs +33 -0
  152. package/dist/cjs/utils/resolveStyle.cjs +30 -0
  153. package/dist/cjs/utils/serializeValue.cjs +40 -0
  154. package/dist/cjs/utils/slider/asc.cjs +30 -0
  155. package/dist/cjs/utils/slider/getMidpoint.cjs +34 -0
  156. package/dist/cjs/utils/slider/getPushedThumbValues.cjs +73 -0
  157. package/dist/cjs/utils/slider/getSliderValue.cjs +42 -0
  158. package/dist/cjs/utils/slider/replaceArrayItemAtIndex.cjs +33 -0
  159. package/dist/cjs/utils/slider/resolveThumbCollision.cjs +155 -0
  160. package/dist/cjs/utils/slider/roundValueToStep.cjs +45 -0
  161. package/dist/cjs/utils/slider/validateMinimumDistance.cjs +40 -0
  162. package/dist/cjs/utils/slider/valueArrayToPercentages.cjs +36 -0
  163. package/dist/cjs/utils/store/ReactStore.cjs +135 -0
  164. package/dist/cjs/utils/store/Store.cjs +83 -0
  165. package/dist/cjs/utils/store/createSelector.cjs +74 -0
  166. package/dist/cjs/utils/store/useStore.cjs +51 -0
  167. package/dist/cjs/utils/stringifyLocale.cjs +36 -0
  168. package/dist/cjs/utils/useAnchorPositioning.cjs +421 -0
  169. package/dist/cjs/utils/useAnchoredPopupScrollLock.cjs +59 -0
  170. package/dist/cjs/utils/useAnimationFrame.cjs +93 -0
  171. package/dist/cjs/utils/useAnimationsFinished.cjs +98 -0
  172. package/dist/cjs/utils/useBaseUiId.cjs +36 -0
  173. package/dist/cjs/utils/useButton.cjs +177 -0
  174. package/dist/cjs/utils/useCheckboxGroupParent.cjs +114 -0
  175. package/dist/cjs/utils/useControlled.cjs +47 -0
  176. package/dist/cjs/utils/useEnhancedClickHandler.cjs +60 -0
  177. package/dist/cjs/utils/useFocusableWhenDisabled.cjs +77 -0
  178. package/dist/cjs/utils/useForcedRerendering.cjs +35 -0
  179. package/dist/cjs/utils/useIsHydrating.cjs +44 -0
  180. package/dist/cjs/utils/useMixedToggleClickHandler.cjs +66 -0
  181. package/dist/cjs/utils/useOnFirstRender.cjs +35 -0
  182. package/dist/cjs/utils/useOnMount.cjs +36 -0
  183. package/dist/cjs/utils/useOpenChangeComplete.cjs +57 -0
  184. package/dist/cjs/utils/useOpenInteractionType.cjs +69 -0
  185. package/dist/cjs/utils/usePopupAutoResize.cjs +191 -0
  186. package/dist/cjs/utils/usePopupViewport.cjs +283 -0
  187. package/dist/cjs/utils/usePositioner.cjs +53 -0
  188. package/dist/cjs/utils/usePressAndHold.cjs +51 -0
  189. package/dist/cjs/utils/usePreviousValue.cjs +47 -0
  190. package/dist/cjs/utils/useRefWithInit.cjs +41 -0
  191. package/dist/cjs/utils/useRegisteredLabelId.cjs +48 -0
  192. package/dist/cjs/utils/useRenderElement.cjs +106 -0
  193. package/dist/cjs/utils/useScrollLock.cjs +232 -0
  194. package/dist/cjs/utils/useStableCallback.cjs +41 -0
  195. package/dist/cjs/utils/useTimeout.cjs +66 -0
  196. package/dist/cjs/utils/useTransitionStatus.cjs +116 -0
  197. package/dist/cjs/utils/useValueAsRef.cjs +43 -0
  198. package/dist/cjs/utils/useValueChanged.cjs +55 -0
  199. package/dist/cjs/utils/valueToPercent.cjs +30 -0
  200. package/dist/cjs/utils/visuallyHidden.cjs +49 -0
  201. package/package.json +20 -8
@@ -0,0 +1,700 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var collapsible_exports = {};
20
+ __export(collapsible_exports, {
21
+ Collapsible: () => Collapsible,
22
+ CollapsiblePanel: () => CollapsiblePanel,
23
+ CollapsiblePanelCssVars: () => CollapsiblePanelCssVars,
24
+ CollapsibleRoot: () => CollapsibleRoot,
25
+ CollapsibleRootContext: () => CollapsibleRootContext,
26
+ CollapsibleTrigger: () => CollapsibleTrigger,
27
+ useCollapsiblePanel: () => useCollapsiblePanel,
28
+ useCollapsibleRoot: () => useCollapsibleRoot,
29
+ useCollapsibleRootContext: () => useCollapsibleRootContext
30
+ });
31
+ module.exports = __toCommonJS(collapsible_exports);
32
+ var import_octane = require("octane");
33
+ var import_internal = require("./internal.cjs");
34
+ var import_useRenderElement = require("./utils/useRenderElement.cjs");
35
+ var import_useBaseUiId = require("./utils/useBaseUiId.cjs");
36
+ var import_useButton = require("./utils/useButton.cjs");
37
+ var import_useControlled = require("./utils/useControlled.cjs");
38
+ var import_useStableCallback = require("./utils/useStableCallback.cjs");
39
+ var import_createChangeEventDetails = require("./utils/createChangeEventDetails.cjs");
40
+ var import_useTransitionStatus = require("./utils/useTransitionStatus.cjs");
41
+ var import_addEventListener = require("./utils/addEventListener.cjs");
42
+ var import_useAnimationFrame = require("./utils/useAnimationFrame.cjs");
43
+ var import_owner = require("./utils/owner.cjs");
44
+ var import_resolveStyle = require("./utils/resolveStyle.cjs");
45
+ var import_useAnimationsFinished = require("./utils/useAnimationsFinished.cjs");
46
+ var import_useOpenChangeComplete = require("./utils/useOpenChangeComplete.cjs");
47
+ var import_useValueAsRef = require("./utils/useValueAsRef.cjs");
48
+ var import_collapsibleOpenStateMapping = require("./utils/collapsibleOpenStateMapping.cjs");
49
+ const rootStateAttributesMapping = {
50
+ ...import_collapsibleOpenStateMapping.collapsibleOpenStateMapping,
51
+ ...import_useTransitionStatus.transitionStatusMapping
52
+ };
53
+ const triggerStateAttributesMapping = {
54
+ ...import_collapsibleOpenStateMapping.collapsibleTriggerOpenStateMapping,
55
+ ...import_useTransitionStatus.transitionStatusMapping
56
+ };
57
+ const CollapsibleRootContext = (0, import_octane.createContext)(
58
+ void 0
59
+ );
60
+ function useCollapsibleRootContext() {
61
+ const context = (0, import_octane.useContext)(CollapsibleRootContext);
62
+ if (context === void 0) {
63
+ throw new Error(
64
+ "Base UI: CollapsibleRootContext is missing. Collapsible parts must be placed within <Collapsible.Root>."
65
+ );
66
+ }
67
+ return context;
68
+ }
69
+ function useCollapsibleRoot(...args) {
70
+ const [user, slotArg] = (0, import_internal.splitSlot)(args);
71
+ const slot = slotArg ?? (0, import_internal.S)("useCollapsibleRoot");
72
+ const {
73
+ open: openParam,
74
+ defaultOpen,
75
+ onOpenChange,
76
+ disabled
77
+ } = user[0];
78
+ const [open, setOpen] = (0, import_useControlled.useControlled)(
79
+ { controlled: openParam, default: defaultOpen, name: "Collapsible", state: "open" },
80
+ (0, import_internal.subSlot)(slot, "ctrl")
81
+ );
82
+ const { mounted, setMounted, transitionStatus } = (0, import_useTransitionStatus.useTransitionStatus)(
83
+ open,
84
+ true,
85
+ true,
86
+ (0, import_internal.subSlot)(slot, "transition")
87
+ );
88
+ const defaultPanelId = (0, import_useBaseUiId.useBaseUiId)(void 0, (0, import_internal.subSlot)(slot, "id"));
89
+ const [panelIdState, setPanelIdState] = (0, import_octane.useState)(
90
+ void 0,
91
+ (0, import_internal.subSlot)(slot, "panelId")
92
+ );
93
+ const panelId = panelIdState ?? defaultPanelId;
94
+ const handleTrigger = (0, import_useStableCallback.useStableCallback)(
95
+ (event) => {
96
+ const nextOpen = !open;
97
+ const eventDetails = (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.triggerPress, event);
98
+ onOpenChange(nextOpen, eventDetails);
99
+ if (eventDetails.isCanceled) {
100
+ return;
101
+ }
102
+ setOpen(nextOpen);
103
+ },
104
+ (0, import_internal.subSlot)(slot, "trigger")
105
+ );
106
+ return (0, import_octane.useMemo)(
107
+ () => ({
108
+ disabled,
109
+ handleTrigger,
110
+ mounted,
111
+ open,
112
+ panelId,
113
+ setMounted,
114
+ setOpen,
115
+ setPanelIdState,
116
+ transitionStatus
117
+ }),
118
+ [
119
+ disabled,
120
+ handleTrigger,
121
+ mounted,
122
+ open,
123
+ panelId,
124
+ setMounted,
125
+ setOpen,
126
+ setPanelIdState,
127
+ transitionStatus
128
+ ],
129
+ (0, import_internal.subSlot)(slot, "memo")
130
+ );
131
+ }
132
+ function CollapsibleRoot(props) {
133
+ const slot = (0, import_internal.S)("CollapsibleRoot");
134
+ const {
135
+ render,
136
+ className,
137
+ defaultOpen = false,
138
+ disabled = false,
139
+ onOpenChange: onOpenChangeProp,
140
+ open,
141
+ style,
142
+ ref,
143
+ ...elementProps
144
+ } = props;
145
+ const onOpenChange = (0, import_useStableCallback.useStableCallback)(onOpenChangeProp ?? (() => {
146
+ }), (0, import_internal.subSlot)(slot, "onOpen"));
147
+ const collapsible = useCollapsibleRoot(
148
+ { open, defaultOpen, onOpenChange, disabled },
149
+ (0, import_internal.subSlot)(slot, "root")
150
+ );
151
+ const state = (0, import_octane.useMemo)(
152
+ () => ({
153
+ open: collapsible.open,
154
+ disabled: collapsible.disabled,
155
+ transitionStatus: collapsible.transitionStatus
156
+ }),
157
+ [collapsible.open, collapsible.disabled, collapsible.transitionStatus],
158
+ (0, import_internal.subSlot)(slot, "state")
159
+ );
160
+ const contextValue = (0, import_octane.useMemo)(
161
+ () => ({ ...collapsible, onOpenChange, state }),
162
+ [collapsible, onOpenChange, state],
163
+ (0, import_internal.subSlot)(slot, "ctx")
164
+ );
165
+ const element = (0, import_useRenderElement.useRenderElement)(
166
+ "div",
167
+ { render, className, style },
168
+ {
169
+ state,
170
+ ref,
171
+ props: elementProps,
172
+ stateAttributesMapping: rootStateAttributesMapping
173
+ },
174
+ (0, import_internal.subSlot)(slot, "re")
175
+ );
176
+ return (0, import_octane.createElement)(CollapsibleRootContext.Provider, {
177
+ value: contextValue,
178
+ children: element
179
+ });
180
+ }
181
+ function CollapsibleTrigger(props) {
182
+ const slot = (0, import_internal.S)("CollapsibleTrigger");
183
+ const {
184
+ panelId,
185
+ open,
186
+ handleTrigger,
187
+ state,
188
+ disabled: contextDisabled
189
+ } = useCollapsibleRootContext();
190
+ const {
191
+ className,
192
+ disabled = contextDisabled,
193
+ render,
194
+ nativeButton = true,
195
+ style,
196
+ ref,
197
+ ...elementProps
198
+ } = props;
199
+ const { getButtonProps, buttonRef } = (0, import_useButton.useButton)(
200
+ { disabled, focusableWhenDisabled: true, native: nativeButton },
201
+ (0, import_internal.subSlot)(slot, "button")
202
+ );
203
+ return (0, import_useRenderElement.useRenderElement)(
204
+ "button",
205
+ { render, className, style },
206
+ {
207
+ state,
208
+ ref: [ref, buttonRef],
209
+ props: [
210
+ {
211
+ "aria-controls": open ? panelId : void 0,
212
+ "aria-expanded": open,
213
+ onClick: handleTrigger
214
+ },
215
+ elementProps,
216
+ getButtonProps
217
+ ],
218
+ stateAttributesMapping: triggerStateAttributesMapping
219
+ },
220
+ (0, import_internal.subSlot)(slot, "re")
221
+ );
222
+ }
223
+ const CollapsiblePanelCssVars = {
224
+ collapsiblePanelHeight: "--collapsible-panel-height",
225
+ collapsiblePanelWidth: "--collapsible-panel-width"
226
+ };
227
+ const EMPTY_DIMENSIONS = { height: void 0, width: void 0 };
228
+ function getDimensions(element) {
229
+ return { height: element.scrollHeight, width: element.scrollWidth };
230
+ }
231
+ function hasNonZeroDuration(value) {
232
+ return value.split(",").map((part) => part.trim()).some((part) => part !== "" && Number.parseFloat(part) > 0);
233
+ }
234
+ function getAnimationType(element, hasSuppressedMountAnimation = false) {
235
+ const panelStyles = (0, import_owner.ownerWindow)(element).getComputedStyle(element);
236
+ const hasAnimation = (panelStyles.animationName.split(",").map((name) => name.trim()).some((name) => name !== "" && name !== "none") || hasSuppressedMountAnimation) && hasNonZeroDuration(panelStyles.animationDuration);
237
+ const hasTransition = hasNonZeroDuration(panelStyles.transitionDuration);
238
+ if (hasAnimation && hasTransition) {
239
+ if (process.env.NODE_ENV !== "production") {
240
+ console.warn(
241
+ "Base UI: CSS transitions and CSS animations both detected on Collapsible or Accordion panel. Only one of either animation type should be used."
242
+ );
243
+ }
244
+ return "css-transition";
245
+ }
246
+ if (hasTransition) {
247
+ return "css-transition";
248
+ }
249
+ if (hasAnimation) {
250
+ return "css-animation";
251
+ }
252
+ return "none";
253
+ }
254
+ function setTemporaryStyle(element, property, value) {
255
+ const previousValue = element.style.getPropertyValue(property);
256
+ const previousPriority = element.style.getPropertyPriority(property);
257
+ element.style.setProperty(property, value);
258
+ return () => {
259
+ if (previousValue === "") {
260
+ element.style.removeProperty(property);
261
+ return;
262
+ }
263
+ element.style.setProperty(property, previousValue, previousPriority);
264
+ };
265
+ }
266
+ function resetLayoutStyles(element) {
267
+ const originalLayoutStyles = {
268
+ "justify-content": element.style.justifyContent,
269
+ "align-items": element.style.alignItems,
270
+ "align-content": element.style.alignContent,
271
+ "justify-items": element.style.justifyItems
272
+ };
273
+ Object.keys(originalLayoutStyles).forEach((key) => {
274
+ element.style.setProperty(key, "initial", "important");
275
+ });
276
+ function restoreLayoutStyles() {
277
+ Object.entries(originalLayoutStyles).forEach(([key, value]) => {
278
+ if (value === "") {
279
+ element.style.removeProperty(key);
280
+ return;
281
+ }
282
+ element.style.setProperty(key, value);
283
+ });
284
+ }
285
+ const frame = import_useAnimationFrame.AnimationFrame.request(restoreLayoutStyles);
286
+ return () => {
287
+ import_useAnimationFrame.AnimationFrame.cancel(frame);
288
+ restoreLayoutStyles();
289
+ };
290
+ }
291
+ function useCollapsiblePanel(...args) {
292
+ const [user, slotArg] = (0, import_internal.splitSlot)(args);
293
+ const slot = slotArg ?? (0, import_internal.S)("useCollapsiblePanel");
294
+ const {
295
+ hiddenUntilFound,
296
+ id: idParam,
297
+ keepMounted,
298
+ mounted,
299
+ onOpenChange,
300
+ open,
301
+ setMounted,
302
+ setOpen,
303
+ transitionStatus
304
+ } = user[0];
305
+ const panelRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "panelRef"));
306
+ const animationTypeRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "animType"));
307
+ const [dimensions, setDimensionsUnwrapped] = (0, import_octane.useState)(
308
+ EMPTY_DIMENSIONS,
309
+ (0, import_internal.subSlot)(slot, "dims")
310
+ );
311
+ const lastMeasuredDimensionsRef = (0, import_octane.useRef)(EMPTY_DIMENSIONS, (0, import_internal.subSlot)(slot, "lastDims"));
312
+ const shouldSkipNextOpenRef = (0, import_octane.useRef)(false, (0, import_internal.subSlot)(slot, "skipOpen"));
313
+ const shouldPreventMountAnimationRef = (0, import_octane.useRef)(open, (0, import_internal.subSlot)(slot, "preventMount"));
314
+ const shouldPreventActivityResumeAnimationRef = (0, import_octane.useRef)(
315
+ false,
316
+ (0, import_internal.subSlot)(slot, "preventActivityResume")
317
+ );
318
+ const [forcePanelIdle, setForcePanelIdle] = (0, import_octane.useState)(false, (0, import_internal.subSlot)(slot, "forceIdle"));
319
+ const pendingTemporaryStyleRestoreRef = (0, import_octane.useRef)(
320
+ null,
321
+ (0, import_internal.subSlot)(slot, "pendingRestore")
322
+ );
323
+ const latestStateRef = (0, import_useValueAsRef.useValueAsRef)(
324
+ { mounted, open },
325
+ (0, import_internal.subSlot)(slot, "latest")
326
+ );
327
+ const runOnceCloseAnimationsFinish = (0, import_useAnimationsFinished.useAnimationsFinished)(
328
+ panelRef,
329
+ false,
330
+ false,
331
+ (0, import_internal.subSlot)(slot, "closeAnims")
332
+ );
333
+ const hidden = !open && !mounted;
334
+ const panelTransitionStatus = forcePanelIdle ? "idle" : transitionStatus;
335
+ const shouldPreventOpenAnimation = open && (shouldPreventMountAnimationRef.current || shouldPreventActivityResumeAnimationRef.current);
336
+ const renderedDimensions = !open && mounted && animationTypeRef.current === "css-animation" && dimensions.height === void 0 && dimensions.width === void 0 ? lastMeasuredDimensionsRef.current : dimensions;
337
+ const shouldPersistHiddenTransitionStyles = hiddenUntilFound && hidden && animationTypeRef.current !== "css-animation";
338
+ const setDimensions = (0, import_useStableCallback.useStableCallback)(
339
+ (next, shouldCacheMeasurement = true) => {
340
+ if (shouldCacheMeasurement) {
341
+ lastMeasuredDimensionsRef.current = next;
342
+ }
343
+ setDimensionsUnwrapped(next);
344
+ },
345
+ (0, import_internal.subSlot)(slot, "setDims")
346
+ );
347
+ const restorePendingTemporaryStyle = (0, import_useStableCallback.useStableCallback)(
348
+ () => {
349
+ pendingTemporaryStyleRestoreRef.current?.();
350
+ pendingTemporaryStyleRestoreRef.current = null;
351
+ },
352
+ (0, import_internal.subSlot)(slot, "restorePending")
353
+ );
354
+ const markActivityResumeAnimationSuppressed = (0, import_useStableCallback.useStableCallback)(
355
+ () => {
356
+ if (open && mounted && animationTypeRef.current === "css-animation") {
357
+ shouldPreventActivityResumeAnimationRef.current = true;
358
+ }
359
+ },
360
+ (0, import_internal.subSlot)(slot, "markActivityResume")
361
+ );
362
+ const setPendingTemporaryStyleRestore = (0, import_useStableCallback.useStableCallback)(
363
+ (restore) => {
364
+ restorePendingTemporaryStyle();
365
+ pendingTemporaryStyleRestoreRef.current = () => {
366
+ pendingTemporaryStyleRestoreRef.current = null;
367
+ restore();
368
+ };
369
+ },
370
+ (0, import_internal.subSlot)(slot, "setPending")
371
+ );
372
+ (0, import_octane.useLayoutEffect)(
373
+ () => {
374
+ if (!forcePanelIdle || transitionStatus === "starting") {
375
+ return;
376
+ }
377
+ setForcePanelIdle(false);
378
+ },
379
+ [forcePanelIdle, transitionStatus],
380
+ (0, import_internal.subSlot)(slot, "idleEffect")
381
+ );
382
+ (0, import_octane.useEffect)(
383
+ () => () => {
384
+ markActivityResumeAnimationSuppressed();
385
+ restorePendingTemporaryStyle();
386
+ },
387
+ [markActivityResumeAnimationSuppressed, restorePendingTemporaryStyle],
388
+ (0, import_internal.subSlot)(slot, "unmount")
389
+ );
390
+ (0, import_octane.useLayoutEffect)(
391
+ () => {
392
+ const panel = panelRef.current;
393
+ if (!panel) {
394
+ return void 0;
395
+ }
396
+ if (!open && pendingTemporaryStyleRestoreRef.current) {
397
+ restorePendingTemporaryStyle();
398
+ }
399
+ const animationType = getAnimationType(panel, shouldPreventOpenAnimation);
400
+ animationTypeRef.current = animationType;
401
+ if (open && transitionStatus === "idle" && shouldPreventMountAnimationRef.current && animationType === "css-animation") {
402
+ lastMeasuredDimensionsRef.current = getDimensions(panel);
403
+ return void 0;
404
+ }
405
+ if (open && transitionStatus === "starting") {
406
+ const skipNextOpen = shouldSkipNextOpenRef.current;
407
+ shouldSkipNextOpenRef.current = false;
408
+ if (animationType === "none") {
409
+ setDimensions(getDimensions(panel));
410
+ setForcePanelIdle(true);
411
+ return void 0;
412
+ }
413
+ if (animationType === "css-transition") {
414
+ const restoreLayout = resetLayoutStyles(panel);
415
+ setDimensions(getDimensions(panel));
416
+ if (!skipNextOpen) {
417
+ return restoreLayout;
418
+ }
419
+ setPendingTemporaryStyleRestore(setTemporaryStyle(panel, "transition-duration", "0s"));
420
+ setForcePanelIdle(true);
421
+ return restoreLayout;
422
+ }
423
+ if (animationType === "css-animation") {
424
+ setDimensions(getDimensions(panel));
425
+ if (!skipNextOpen) {
426
+ setTemporaryStyle(panel, "animation-name", "none")();
427
+ return void 0;
428
+ }
429
+ const restoreAnimationName = setTemporaryStyle(panel, "animation-name", "none");
430
+ const restoreAnimationDuration = setTemporaryStyle(panel, "animation-duration", "0s");
431
+ restoreAnimationName();
432
+ setPendingTemporaryStyleRestore(restoreAnimationDuration);
433
+ setForcePanelIdle(true);
434
+ return void 0;
435
+ }
436
+ }
437
+ if (!open && mounted && (transitionStatus === "idle" || transitionStatus === "starting")) {
438
+ shouldPreventMountAnimationRef.current = false;
439
+ shouldPreventActivityResumeAnimationRef.current = false;
440
+ if (animationType === "none") {
441
+ setDimensions(EMPTY_DIMENSIONS, false);
442
+ setMounted(false);
443
+ return void 0;
444
+ }
445
+ setDimensions(getDimensions(panel));
446
+ return void 0;
447
+ }
448
+ if (transitionStatus !== "ending") {
449
+ return void 0;
450
+ }
451
+ if (animationType === "none") {
452
+ setMounted(false);
453
+ return void 0;
454
+ }
455
+ const nextDimensions = getDimensions(panel);
456
+ const hasMeasuredSize = (nextDimensions.height ?? 0) > 0 || (nextDimensions.width ?? 0) > 0;
457
+ if (!hasMeasuredSize) {
458
+ setMounted(false);
459
+ return void 0;
460
+ }
461
+ setDimensions(nextDimensions);
462
+ if (animationType === "css-animation") {
463
+ setTemporaryStyle(panel, "animation-name", "none")();
464
+ }
465
+ return void 0;
466
+ },
467
+ [
468
+ mounted,
469
+ open,
470
+ restorePendingTemporaryStyle,
471
+ setDimensions,
472
+ setMounted,
473
+ setPendingTemporaryStyleRestore,
474
+ shouldPreventOpenAnimation,
475
+ transitionStatus
476
+ ],
477
+ (0, import_internal.subSlot)(slot, "mainEffect")
478
+ );
479
+ (0, import_useOpenChangeComplete.useOpenChangeComplete)(
480
+ {
481
+ enabled: open && mounted && panelTransitionStatus === "idle",
482
+ open: true,
483
+ ref: panelRef,
484
+ onComplete() {
485
+ if (!open) {
486
+ return;
487
+ }
488
+ setDimensions(EMPTY_DIMENSIONS, false);
489
+ }
490
+ },
491
+ (0, import_internal.subSlot)(slot, "openComplete")
492
+ );
493
+ (0, import_octane.useEffect)(
494
+ () => {
495
+ if (open || !mounted || panelTransitionStatus !== "ending") {
496
+ return void 0;
497
+ }
498
+ const panel = panelRef.current;
499
+ if (!panel) {
500
+ return void 0;
501
+ }
502
+ const abortController = new AbortController();
503
+ function handleComplete() {
504
+ if (latestStateRef.current.open) {
505
+ return;
506
+ }
507
+ setMounted(false);
508
+ setDimensions(EMPTY_DIMENSIONS, false);
509
+ }
510
+ const endingStyleFrame = import_useAnimationFrame.AnimationFrame.request(() => {
511
+ if (!abortController.signal.aborted) {
512
+ runOnceCloseAnimationsFinish(handleComplete, abortController.signal);
513
+ }
514
+ });
515
+ return () => {
516
+ import_useAnimationFrame.AnimationFrame.cancel(endingStyleFrame);
517
+ abortController.abort();
518
+ };
519
+ },
520
+ [
521
+ latestStateRef,
522
+ mounted,
523
+ open,
524
+ panelTransitionStatus,
525
+ runOnceCloseAnimationsFinish,
526
+ setDimensions,
527
+ setMounted
528
+ ],
529
+ (0, import_internal.subSlot)(slot, "closeEffect")
530
+ );
531
+ (0, import_octane.useLayoutEffect)(
532
+ () => {
533
+ const panel = panelRef.current;
534
+ if (!panel || !hiddenUntilFound || !hidden) {
535
+ return;
536
+ }
537
+ panel.setAttribute("hidden", "until-found");
538
+ },
539
+ [hidden, hiddenUntilFound],
540
+ (0, import_internal.subSlot)(slot, "hiddenEffect")
541
+ );
542
+ (0, import_octane.useEffect)(
543
+ () => {
544
+ const panel = panelRef.current;
545
+ if (!panel) {
546
+ return void 0;
547
+ }
548
+ function handleBeforeMatch(event) {
549
+ const eventDetails = (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.none, event);
550
+ onOpenChange(true, eventDetails);
551
+ if (eventDetails.isCanceled) {
552
+ return;
553
+ }
554
+ shouldSkipNextOpenRef.current = true;
555
+ setOpen(true);
556
+ }
557
+ return (0, import_addEventListener.addEventListener)(panel, "beforematch", handleBeforeMatch);
558
+ },
559
+ [onOpenChange, setOpen],
560
+ (0, import_internal.subSlot)(slot, "beforematch")
561
+ );
562
+ const shouldRender = keepMounted || hiddenUntilFound || mounted || open;
563
+ return {
564
+ height: renderedDimensions.height,
565
+ props: {
566
+ ...shouldPersistHiddenTransitionStyles ? { "data-starting-style": "" } : void 0,
567
+ hidden,
568
+ id: idParam
569
+ },
570
+ panelRef,
571
+ shouldPreventOpenAnimation,
572
+ shouldRender,
573
+ transitionStatus: panelTransitionStatus,
574
+ width: renderedDimensions.width
575
+ };
576
+ }
577
+ function CollapsiblePanel(props) {
578
+ const slot = (0, import_internal.S)("CollapsiblePanel");
579
+ const {
580
+ className,
581
+ hiddenUntilFound: hiddenUntilFoundProp,
582
+ keepMounted: keepMountedProp,
583
+ render,
584
+ id: idProp,
585
+ style,
586
+ ref,
587
+ ...elementProps
588
+ } = props;
589
+ const {
590
+ mounted,
591
+ onOpenChange,
592
+ open,
593
+ panelId,
594
+ setMounted,
595
+ setPanelIdState,
596
+ setOpen,
597
+ state,
598
+ transitionStatus
599
+ } = useCollapsibleRootContext();
600
+ const hiddenUntilFound = hiddenUntilFoundProp ?? false;
601
+ const keepMounted = keepMountedProp ?? false;
602
+ if (process.env.NODE_ENV !== "production") {
603
+ (0, import_octane.useLayoutEffect)(
604
+ () => {
605
+ if (hiddenUntilFound && keepMountedProp === false) {
606
+ console.warn(
607
+ "Base UI: The `keepMounted={false}` prop on `Collapsible.Panel` is ignored when `hiddenUntilFound` is enabled, since the panel must remain mounted while closed."
608
+ );
609
+ }
610
+ },
611
+ [hiddenUntilFound, keepMountedProp],
612
+ (0, import_internal.subSlot)(slot, "warn")
613
+ );
614
+ }
615
+ (0, import_octane.useLayoutEffect)(
616
+ () => {
617
+ if (idProp) {
618
+ setPanelIdState(idProp);
619
+ return () => {
620
+ setPanelIdState(void 0);
621
+ };
622
+ }
623
+ return void 0;
624
+ },
625
+ [idProp, setPanelIdState],
626
+ (0, import_internal.subSlot)(slot, "registerId")
627
+ );
628
+ const {
629
+ height,
630
+ props: panelProps,
631
+ panelRef,
632
+ shouldPreventOpenAnimation,
633
+ shouldRender,
634
+ transitionStatus: panelTransitionStatus,
635
+ width
636
+ } = useCollapsiblePanel(
637
+ {
638
+ hiddenUntilFound,
639
+ id: panelId,
640
+ keepMounted,
641
+ mounted,
642
+ onOpenChange,
643
+ open,
644
+ setMounted,
645
+ setOpen,
646
+ transitionStatus
647
+ },
648
+ (0, import_internal.subSlot)(slot, "panel")
649
+ );
650
+ const panelState = {
651
+ ...state,
652
+ transitionStatus: panelTransitionStatus
653
+ };
654
+ const resolvedStyle = (0, import_resolveStyle.resolveStyle)(style, panelState);
655
+ const element = (0, import_useRenderElement.useRenderElement)(
656
+ "div",
657
+ { render, className, style: void 0 },
658
+ {
659
+ state: panelState,
660
+ ref: [ref, panelRef],
661
+ props: [
662
+ panelProps,
663
+ {
664
+ style: {
665
+ [CollapsiblePanelCssVars.collapsiblePanelHeight]: height === void 0 ? "auto" : `${height}px`,
666
+ [CollapsiblePanelCssVars.collapsiblePanelWidth]: width === void 0 ? "auto" : `${width}px`
667
+ }
668
+ },
669
+ elementProps,
670
+ resolvedStyle ? { style: resolvedStyle } : void 0,
671
+ // The public `style` prop is resolved above so a temporary `animationName: 'none'`
672
+ // can still win after the user's inline styles have been merged.
673
+ shouldPreventOpenAnimation ? { style: { animationName: "none" } } : void 0
674
+ ],
675
+ stateAttributesMapping: rootStateAttributesMapping
676
+ },
677
+ (0, import_internal.subSlot)(slot, "re")
678
+ );
679
+ if (!shouldRender) {
680
+ return null;
681
+ }
682
+ return element;
683
+ }
684
+ const Collapsible = {
685
+ Root: CollapsibleRoot,
686
+ Trigger: CollapsibleTrigger,
687
+ Panel: CollapsiblePanel
688
+ };
689
+ // Annotate the CommonJS export names for ESM import in node:
690
+ 0 && (module.exports = {
691
+ Collapsible,
692
+ CollapsiblePanel,
693
+ CollapsiblePanelCssVars,
694
+ CollapsibleRoot,
695
+ CollapsibleRootContext,
696
+ CollapsibleTrigger,
697
+ useCollapsiblePanel,
698
+ useCollapsibleRoot,
699
+ useCollapsibleRootContext
700
+ });