@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,132 @@
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 menubar_exports = {};
20
+ __export(menubar_exports, {
21
+ Menubar: () => Menubar
22
+ });
23
+ module.exports = __toCommonJS(menubar_exports);
24
+ var import_octane = require("octane");
25
+ var import_internal = require("./internal.cjs");
26
+ var import_useBaseUiId = require("./utils/useBaseUiId.cjs");
27
+ var import_CompositeRoot = require("./utils/composite/CompositeRoot.cjs");
28
+ var import_FloatingTree = require("./utils/floating/FloatingTree.cjs");
29
+ var import_MenubarContext = require("./utils/MenubarContext.cjs");
30
+ var import_createChangeEventDetails = require("./utils/createChangeEventDetails.cjs");
31
+ const menubarStateAttributesMapping = {
32
+ hasSubmenuOpen(value) {
33
+ return value ? { "data-has-submenu-open": "" } : null;
34
+ }
35
+ };
36
+ function MenubarContent(props) {
37
+ const slot = (0, import_internal.S)("MenubarContent");
38
+ const nodeId = (0, import_FloatingTree.useFloatingNodeId)(void 0, (0, import_internal.subSlot)(slot, "nodeId"));
39
+ const tree = (0, import_FloatingTree.useFloatingTree)();
40
+ const menuEvents = tree.events;
41
+ const rootContext = (0, import_MenubarContext.useMenubarContext)();
42
+ (0, import_octane.useEffect)(
43
+ () => {
44
+ function onSubmenuOpenChange(details) {
45
+ if (!details.nodeId || details.parentNodeId !== nodeId) {
46
+ return;
47
+ }
48
+ if (details.open) {
49
+ if (!rootContext.hasSubmenuOpen) {
50
+ rootContext.setHasSubmenuOpen(true);
51
+ }
52
+ } else if (details.reason !== import_createChangeEventDetails.REASONS.siblingOpen && details.reason !== import_createChangeEventDetails.REASONS.listNavigation) {
53
+ rootContext.setHasSubmenuOpen(false);
54
+ }
55
+ }
56
+ menuEvents.on("menuopenchange", onSubmenuOpenChange);
57
+ return () => {
58
+ menuEvents.off("menuopenchange", onSubmenuOpenChange);
59
+ };
60
+ },
61
+ [menuEvents, nodeId, rootContext],
62
+ (0, import_internal.subSlot)(slot, "e")
63
+ );
64
+ return (0, import_octane.createElement)(import_FloatingTree.FloatingNode, { id: nodeId, children: props.children });
65
+ }
66
+ function Menubar(props) {
67
+ const slot = (0, import_internal.S)("Menubar");
68
+ const {
69
+ orientation = "horizontal",
70
+ loopFocus = true,
71
+ render,
72
+ className,
73
+ modal = true,
74
+ disabled = false,
75
+ id: idProp,
76
+ style,
77
+ ref: forwardedRef,
78
+ ...elementProps
79
+ } = props;
80
+ const [contentElement, setContentElement] = (0, import_octane.useState)(
81
+ null,
82
+ (0, import_internal.subSlot)(slot, "content")
83
+ );
84
+ const [hasSubmenuOpen, setHasSubmenuOpen] = (0, import_octane.useState)(false, (0, import_internal.subSlot)(slot, "hasSub"));
85
+ const id = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
86
+ const state = {
87
+ orientation,
88
+ modal,
89
+ hasSubmenuOpen
90
+ };
91
+ const contentRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "contentRef"));
92
+ const allowMouseUpTriggerRef = (0, import_octane.useRef)(false, (0, import_internal.subSlot)(slot, "amut"));
93
+ const context = (0, import_octane.useMemo)(
94
+ () => ({
95
+ contentElement,
96
+ setContentElement,
97
+ setHasSubmenuOpen,
98
+ hasSubmenuOpen,
99
+ modal,
100
+ disabled,
101
+ orientation,
102
+ allowMouseUpTriggerRef,
103
+ rootId: id
104
+ }),
105
+ [contentElement, hasSubmenuOpen, modal, disabled, orientation, id],
106
+ (0, import_internal.subSlot)(slot, "ctx")
107
+ );
108
+ return (0, import_octane.createElement)(import_MenubarContext.MenubarContext.Provider, {
109
+ value: context,
110
+ children: (0, import_octane.createElement)(import_FloatingTree.FloatingTree, {
111
+ children: (0, import_octane.createElement)(MenubarContent, {
112
+ children: (0, import_octane.createElement)(import_CompositeRoot.CompositeRoot, {
113
+ render,
114
+ className,
115
+ style,
116
+ state,
117
+ stateAttributesMapping: menubarStateAttributesMapping,
118
+ refs: [forwardedRef, setContentElement, contentRef],
119
+ props: [{ role: "menubar", id, "aria-orientation": orientation }, elementProps],
120
+ orientation,
121
+ loopFocus,
122
+ enableHomeAndEndKeys: true,
123
+ highlightItemOnHover: hasSubmenuOpen
124
+ })
125
+ })
126
+ })
127
+ });
128
+ }
129
+ // Annotate the CommonJS export names for ESM import in node:
130
+ 0 && (module.exports = {
131
+ Menubar
132
+ });
@@ -0,0 +1,34 @@
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 merge_props_exports = {};
20
+ __export(merge_props_exports, {
21
+ makeEventPreventable: () => import_mergeProps.makeEventPreventable,
22
+ mergeClassNames: () => import_mergeProps.mergeClassNames,
23
+ mergeProps: () => import_mergeProps.mergeProps,
24
+ mergePropsN: () => import_mergeProps.mergePropsN
25
+ });
26
+ module.exports = __toCommonJS(merge_props_exports);
27
+ var import_mergeProps = require("./utils/mergeProps.cjs");
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ makeEventPreventable,
31
+ mergeClassNames,
32
+ mergeProps,
33
+ mergePropsN
34
+ });
@@ -0,0 +1,169 @@
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 meter_exports = {};
20
+ __export(meter_exports, {
21
+ Meter: () => Meter
22
+ });
23
+ module.exports = __toCommonJS(meter_exports);
24
+ var import_octane = require("octane");
25
+ var import_internal = require("./internal.cjs");
26
+ var import_useRenderElement = require("./utils/useRenderElement.cjs");
27
+ var import_useRegisteredLabelId = require("./utils/useRegisteredLabelId.cjs");
28
+ var import_valueToPercent = require("./utils/valueToPercent.cjs");
29
+ var import_clamp = require("./utils/clamp.cjs");
30
+ var import_formatNumber = require("./utils/formatNumber.cjs");
31
+ var import_visuallyHidden = require("./utils/visuallyHidden.cjs");
32
+ const MeterRootContext = (0, import_octane.createContext)(void 0);
33
+ function useMeterRootContext() {
34
+ const context = (0, import_octane.useContext)(MeterRootContext);
35
+ if (context === void 0) {
36
+ throw new Error(
37
+ "Base UI: MeterRootContext is missing. Meter parts must be placed within <Meter.Root>."
38
+ );
39
+ }
40
+ return context;
41
+ }
42
+ function MeterRoot(props) {
43
+ const slot = (0, import_internal.S)("MeterRoot");
44
+ const {
45
+ format,
46
+ getAriaValueText,
47
+ locale,
48
+ max = 100,
49
+ min = 0,
50
+ value: valueProp,
51
+ render,
52
+ className,
53
+ children,
54
+ style,
55
+ ref,
56
+ ...elementProps
57
+ } = props;
58
+ const [labelId, setLabelId] = (0, import_octane.useState)(void 0, (0, import_internal.subSlot)(slot, "labelId"));
59
+ const rawPercentage = (0, import_valueToPercent.valueToPercent)(valueProp, min, max);
60
+ const percentageValue = (0, import_clamp.clamp)(Number.isNaN(rawPercentage) ? 0 : rawPercentage, 0, 100);
61
+ const clampedValue = (0, import_clamp.clamp)(Number.isNaN(valueProp) ? min : valueProp, min, max);
62
+ const formattedValue = format ? (0, import_formatNumber.formatNumber)(valueProp, locale, format) : (0, import_formatNumber.formatNumber)(percentageValue / 100, locale, { style: "percent" });
63
+ let ariaValuetext = formattedValue;
64
+ if (getAriaValueText) {
65
+ ariaValuetext = getAriaValueText(formattedValue, valueProp);
66
+ }
67
+ const defaultProps = {
68
+ "aria-labelledby": labelId,
69
+ "aria-valuemax": max,
70
+ "aria-valuemin": min,
71
+ "aria-valuenow": clampedValue,
72
+ "aria-valuetext": ariaValuetext,
73
+ role: "meter",
74
+ // Octane reconciles an ARRAY child as a keyed list, so each slot carries a stable key;
75
+ // values that cannot be keyed in place go through a keyed Fragment.
76
+ children: [
77
+ (0, import_octane.createElement)(import_octane.Fragment, { key: "children", children }),
78
+ // force NVDA to read the label (mui/base-ui#4184)
79
+ (0, import_octane.createElement)("span", {
80
+ key: "sr-hint",
81
+ role: "presentation",
82
+ style: import_visuallyHidden.visuallyHidden,
83
+ children: "x"
84
+ })
85
+ ]
86
+ };
87
+ const contextValue = (0, import_octane.useMemo)(
88
+ () => ({ formattedValue, max, min, percentageValue, setLabelId, value: valueProp }),
89
+ [formattedValue, max, min, percentageValue, setLabelId, valueProp],
90
+ (0, import_internal.subSlot)(slot, "ctx")
91
+ );
92
+ const element = (0, import_useRenderElement.useRenderElement)(
93
+ "div",
94
+ { render, className, style },
95
+ { ref, props: [defaultProps, elementProps] },
96
+ (0, import_internal.subSlot)(slot, "re")
97
+ );
98
+ return (0, import_octane.createElement)(MeterRootContext.Provider, { value: contextValue, children: element });
99
+ }
100
+ function MeterTrack(props) {
101
+ const slot = (0, import_internal.S)("MeterTrack");
102
+ const { render, className, style, ref, ...elementProps } = props;
103
+ return (0, import_useRenderElement.useRenderElement)(
104
+ "div",
105
+ { render, className, style },
106
+ { ref, props: elementProps },
107
+ (0, import_internal.subSlot)(slot, "re")
108
+ );
109
+ }
110
+ function MeterIndicator(props) {
111
+ const slot = (0, import_internal.S)("MeterIndicator");
112
+ const { render, className, style, ref, ...elementProps } = props;
113
+ const { percentageValue } = useMeterRootContext();
114
+ return (0, import_useRenderElement.useRenderElement)(
115
+ "div",
116
+ { render, className, style },
117
+ {
118
+ ref,
119
+ props: [
120
+ { style: { insetInlineStart: 0, height: "inherit", width: `${percentageValue}%` } },
121
+ elementProps
122
+ ]
123
+ },
124
+ (0, import_internal.subSlot)(slot, "re")
125
+ );
126
+ }
127
+ function MeterValue(props) {
128
+ const slot = (0, import_internal.S)("MeterValue");
129
+ const { className, render, children, style, ref, ...elementProps } = props;
130
+ const { value, formattedValue } = useMeterRootContext();
131
+ return (0, import_useRenderElement.useRenderElement)(
132
+ "span",
133
+ { render, className, style },
134
+ {
135
+ ref,
136
+ props: [
137
+ {
138
+ "aria-hidden": true,
139
+ children: typeof children === "function" ? children(formattedValue, value) : formattedValue
140
+ },
141
+ elementProps
142
+ ]
143
+ },
144
+ (0, import_internal.subSlot)(slot, "re")
145
+ );
146
+ }
147
+ function MeterLabel(props) {
148
+ const slot = (0, import_internal.S)("MeterLabel");
149
+ const { render, className, style, id: idProp, ref, ...elementProps } = props;
150
+ const { setLabelId } = useMeterRootContext();
151
+ const id = (0, import_useRegisteredLabelId.useRegisteredLabelId)(idProp, setLabelId, (0, import_internal.subSlot)(slot, "labelId"));
152
+ return (0, import_useRenderElement.useRenderElement)(
153
+ "span",
154
+ { render, className, style },
155
+ { ref, props: [{ id, role: "presentation" }, elementProps] },
156
+ (0, import_internal.subSlot)(slot, "re")
157
+ );
158
+ }
159
+ const Meter = {
160
+ Root: MeterRoot,
161
+ Track: MeterTrack,
162
+ Indicator: MeterIndicator,
163
+ Value: MeterValue,
164
+ Label: MeterLabel
165
+ };
166
+ // Annotate the CommonJS export names for ESM import in node:
167
+ 0 && (module.exports = {
168
+ Meter
169
+ });