{"version":3,"names":["createContext","createMemo","useContext","formatNumberValue","readOption","mergeRootProps","SNAPSHOT_KEYS","snapshotKeys","ProgressContext","useProgress","ctx","Error","defaultGetAriaValueText","formattedValue","value","createProgress","options","name","min","max","status","v","Number","isFinite","locale","format","ariaValueText","fn","getAriaValueText","rootInternal","role","aria-valuemin","aria-valuemax","aria-valuenow","undefined","aria-valuetext","root","userProps","api","Provider","props","children","PROGRESS_SNAPSHOT_KEYS"],"sources":["create-progress.tsx"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\nimport { type Accessor, createContext, createMemo, useContext } from \"solid-js\";\nimport { formatNumberValue } from \"../internals/format-number\";\nimport { type MaybeAccessor, readOption } from \"../internals/maybe-accessor\";\nimport { mergeRootProps } from \"../internals/merge-root-props\";\nimport {\n\tSNAPSHOT_KEYS,\n\ttype Snapshottable,\n\tsnapshotKeys,\n} from \"../internals/observability/snapshot\";\nimport type { ProgressStatus } from \"./progress-root-context.ts\";\n\nexport type { ProgressStatus };\n\n/**\n * Options for {@link createProgress}. Every reactive input is a\n * `MaybeAccessor<T>`; pass an accessor for live updates.\n *\n * Headless primitive — no Label/track/value/indicator parts. The wrapper\n * `<Progress.Root>` layers the label-id registry, the NVDA-pump span, and\n * the per-part adapters on top.\n */\nexport interface CreateProgressOptions {\n\t/** Current value (`null` = indeterminate). */\n\tvalue: MaybeAccessor<number | null>;\n\t/** Minimum value. @default 0 */\n\tmin?: MaybeAccessor<number | undefined>;\n\t/** Maximum value. @default 100 */\n\tmax?: MaybeAccessor<number | undefined>;\n\t/** `Intl.NumberFormat` options forwarded to {@link formatNumberValue}. */\n\tformat?: MaybeAccessor<Intl.NumberFormatOptions | undefined>;\n\t/** Locale for {@link Intl.NumberFormat}. Defaults to runtime locale. */\n\tlocale?: MaybeAccessor<Intl.LocalesArgument | undefined>;\n\t/**\n\t * Compute `aria-valuetext`. Receives the formatted value (empty string\n\t * when indeterminate) and the raw numeric value. Default returns\n\t * `\"indeterminate progress\"` when null, otherwise the formatted string\n\t * (or `\"<value>%\"` if no `format` given).\n\t */\n\tgetAriaValueText?: (\n\t\tformattedValue: string | null,\n\t\tvalue: number | null,\n\t) => string;\n}\n\n/** Slot bag for the `<div role=\"progressbar\">` element. */\nexport interface ProgressRootSlotProps {\n\trole: \"progressbar\";\n\t\"aria-valuemin\": number;\n\t\"aria-valuemax\": number;\n\t\"aria-valuenow\": number | undefined;\n\t\"aria-valuetext\": string;\n}\n\n/** Public api returned by {@link createProgress}. */\nexport interface ProgressApi {\n\t/** Current value (`null` = indeterminate). */\n\tvalue: Accessor<number | null>;\n\t/** Minimum (defaults to 0). */\n\tmin: Accessor<number>;\n\t/** Maximum (defaults to 100). */\n\tmax: Accessor<number>;\n\t/** Formatted value string (empty string when null). */\n\tformattedValue: Accessor<string>;\n\t/** `\"indeterminate\" | \"progressing\" | \"complete\"`. */\n\tstatus: Accessor<ProgressStatus>;\n\t/** Resolved `aria-valuetext`. */\n\tariaValueText: Accessor<string>;\n\n\t/** Slot bag for the root element. */\n\troot: <U extends object | undefined = undefined>(\n\t\tuserProps?: U,\n\t) => ProgressRootSlotProps & (U extends object ? U : object);\n\n\t/**\n\t * Context provider. Wrap a subtree to make the api discoverable via\n\t * `useProgress()`.\n\t */\n\tProvider: (props: { children: JSX.Element }) => JSX.Element;\n}\n\nconst ProgressContext = createContext<ProgressApi | null>(null);\n\n/**\n * Read the nearest {@link ProgressApi} provided by `c.Provider`. Throws if\n * called outside a Provider.\n */\nexport function useProgress(): ProgressApi {\n\tconst ctx = useContext(ProgressContext);\n\tif (ctx == null) {\n\t\tthrow new Error(\n\t\t\t\"Base UI: useProgress() must be called inside a <c.Provider>.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\nfunction defaultGetAriaValueText(\n\tformattedValue: string | null,\n\tvalue: number | null,\n): string {\n\tif (value == null) return \"indeterminate progress\";\n\treturn formattedValue || `${value}%`;\n}\n\n/**\n * Solid-native headless progress primitive. Pure derivations from the input\n * value/min/max — no internal state. Pair with `<Progress.Root>` for the\n * structural wrapper, or use `c.root()` directly for a fully custom shell.\n */\nexport function createProgress(options: CreateProgressOptions): ProgressApi {\n\tconst value = createMemo<number | null>(() => readOption(options.value), {\n\t\tname: \"progress.value\",\n\t});\n\tconst min = createMemo<number>(() => readOption(options.min) ?? 0, {\n\t\tname: \"progress.min\",\n\t});\n\tconst max = createMemo<number>(() => readOption(options.max) ?? 100, {\n\t\tname: \"progress.max\",\n\t});\n\n\tconst status = createMemo<ProgressStatus>(\n\t\t() => {\n\t\t\tconst v = value();\n\t\t\tif (v == null || !Number.isFinite(v)) return \"indeterminate\";\n\t\t\treturn v === max() ? \"complete\" : \"progressing\";\n\t\t},\n\t\t{ name: \"progress.status\" },\n\t);\n\n\tconst formattedValue = createMemo<string>(\n\t\t() =>\n\t\t\tformatNumberValue(\n\t\t\t\tvalue(),\n\t\t\t\treadOption(options.locale),\n\t\t\t\treadOption(options.format),\n\t\t\t),\n\t\t{ name: \"progress.formattedValue\" },\n\t);\n\n\tconst ariaValueText = createMemo<string>(\n\t\t() => {\n\t\t\tconst fn = options.getAriaValueText ?? defaultGetAriaValueText;\n\t\t\treturn fn(formattedValue(), value());\n\t\t},\n\t\t{ name: \"progress.ariaValueText\" },\n\t);\n\n\tconst rootInternal = {\n\t\trole: \"progressbar\" as const,\n\t\tget \"aria-valuemin\"() {\n\t\t\treturn min();\n\t\t},\n\t\tget \"aria-valuemax\"() {\n\t\t\treturn max();\n\t\t},\n\t\tget \"aria-valuenow\"() {\n\t\t\tconst v = value();\n\t\t\treturn v == null ? undefined : v;\n\t\t},\n\t\tget \"aria-valuetext\"() {\n\t\t\treturn ariaValueText();\n\t\t},\n\t};\n\n\tconst root = <U extends object | undefined>(userProps?: U) =>\n\t\tmergeRootProps(rootInternal, userProps) as ProgressRootSlotProps &\n\t\t\t(U extends object ? U : object);\n\n\tconst api: ProgressApi = {\n\t\tvalue,\n\t\tmin,\n\t\tmax,\n\t\tformattedValue,\n\t\tstatus,\n\t\tariaValueText,\n\t\troot,\n\t\tProvider: (props) => (\n\t\t\t<ProgressContext value={api}>{props.children}</ProgressContext>\n\t\t),\n\t};\n\t(api as ProgressApi & Snapshottable)[SNAPSHOT_KEYS] = PROGRESS_SNAPSHOT_KEYS;\n\treturn api;\n}\n\nconst PROGRESS_SNAPSHOT_KEYS = snapshotKeys<ProgressApi>(\n\t\"value\",\n\t\"min\",\n\t\"max\",\n\t\"formattedValue\",\n\t\"status\",\n\t\"ariaValueText\",\n);\n"],"mappings":"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","ignoreList":[]}