import { dynamic } from "@solidjs/web";
import { createSignal, omit } from "solid-js";
import { userRef } from "../../internals/compose-refs.jsx";
import { readOption } from "../../internals/maybe-accessor.jsx";
import { mergeRootProps } from "../../internals/merge-root-props.jsx";
import { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { VISUALLY_HIDDEN_STYLE } from "../../internals/visually-hidden-style.jsx";
import { createMeter } from "../create-meter.jsx";
import { MeterRootContext } from "../meter-root-context.jsx";
/**
 * Groups all parts of the meter and provides the value for screen readers.
 * Renders a `<div>` (or `as` override).
 *
 * §1 wave 2: replaces `renderElement` with `dynamic(() => props.as ?? "div")`.
 * The slot factory `createMeter().root()` carries `role="meter"` and the
 * aria-valuemin/max/now/text getters; aria-labelledby is an inline reactive
 * getter on the wrapper's internal slot bag.
 */
export function MeterRoot(props) {
  const c = createMeter({
    value: () => readOption(props.value),
    min: () => readOption(props.min),
    max: () => readOption(props.max),
    format: () => readOption(props.format),
    locale: () => readOption(props.locale),
    getAriaValueText: props.getAriaValueText
  });
  const value = c.value;
  const min = c.min;
  const max = c.max;
  const formattedValue = c.formattedValue;
  const [labelId, setLabelId] = createSignal(undefined, {
    ownedWrite: true
  });
  const contextValue = {
    value,
    min,
    max,
    formattedValue,
    setLabelId
  };
  const userClassStyle = resolveClassStyle(props, () => ({}));
  const userProps = omit(props, "as", "children", "class", "style", "attrs", "format", "getAriaValueText", "locale", "max", "min", "value", "aria-valuetext");
  const internalSlot = {
    get "aria-labelledby"() {
      return labelId() ?? "";
    },
    get "aria-valuetext"() {
      const provided = props["aria-valuetext"];
      return typeof provided === "string" ? provided : c.ariaValueText();
    }
  };
  let merged = mergeRootProps(c.root(), internalSlot);
  merged = mergeRootProps(merged, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const Tag = dynamic(() => props.as ?? "div");
  return <MeterRootContext value={contextValue}>
			<Tag {...merged} ref={userRef(props)}>
				{props.children}
				<span role="presentation" style={{
        ...VISUALLY_HIDDEN_STYLE
      }}>
					{/* force NVDA to read the label https://github.com/mui/base-ui/issues/4184 */}
					x
				</span>
			</Tag>
		</MeterRootContext>;
}
//# sourceMappingURL=meter-root.jsx.map
