{"version":3,"names":["dynamic","createMemo","omit","useBaseUiId","createChangeEventDetails","REASONS","composeRefs","userRef","createControlledState","useFieldRootContext","fieldStateAttrs","readOption","mergeRootProps","resolveClassStyle","areArraysEqual","useFieldControlValidation","useValueChanged","createCheckboxGroup","EMPTY","Object","freeze","CheckboxGroup","props","field","id","undefined","resolvedValue","setUncontrolledValue","controlled","value","default","defaultValue","fallback","name","state","contextDefaultValue","c","allValues","disabled","onValueChange","next","event","details","none","isCanceled","preventDefault","controlRef","current","validation","getValue","enabled","initial","validityData","initialValue","initialArr","Array","isArray","setFilled","length","setDirty","shouldValidateOnChange","commit","userStyling","userProps","internalSlot","role","data-disabled","validationBag","getValidationProps","styledUserProps","merged","Tag","as","el","children"],"sources":["checkbox-group.tsx"],"sourcesContent":["import type { JSX, ValidComponent } from \"@solidjs/web\";\nimport { dynamic } from \"@solidjs/web\";\nimport { createMemo, omit } from \"solid-js\";\nimport { useBaseUiId } from \"../internals/base-ui-id\";\nimport {\n\ttype BaseUIEventReasons,\n\tcreateChangeEventDetails,\n\tREASONS,\n} from \"../internals/change-event-details\";\nimport { composeRefs, userRef } from \"../internals/compose-refs\";\nimport { createControlledState } from \"../internals/create-controlled-state\";\nimport type { FieldRootState } from \"../internals/field-constants\";\nimport { useFieldRootContext } from \"../internals/field-context\";\nimport { fieldStateAttrs } from \"../internals/field-state-attrs\";\nimport { type MaybeAccessor, readOption } from \"../internals/maybe-accessor\";\nimport { mergeRootProps } from \"../internals/merge-root-props\";\nimport { resolveClassStyle } from \"../internals/resolve-class-style\";\nimport { areArraysEqual } from \"../internals/slider-utils/are-arrays-equal.ts\";\nimport type { BaseUIComponentProps } from \"../internals/types\";\nimport { useFieldControlValidation } from \"../internals/use-field-control-validation/use-field-control-validation.ts\";\nimport { useValueChanged } from \"../internals/use-value-changed.ts\";\nimport type { CheckboxGroupChangeEventDetails } from \"./checkbox-group-context.ts\";\nimport { createCheckboxGroup } from \"./create-checkbox-group.tsx\";\n\nexport type CheckboxGroupChangeEventReason = BaseUIEventReasons[\"none\"];\nexport type { CheckboxGroupChangeEventDetails };\n\n/**\n * State projected to `data-*` attributes. Extends the field-root state —\n * forms/fields drive the `data-*` validity surface.\n */\nexport interface CheckboxGroupState extends FieldRootState {\n\t/** Whether the group (and all its children) are disabled. */\n\tdisabled: boolean;\n}\n\nexport interface CheckboxGroupProps\n\textends BaseUIComponentProps<\"div\", CheckboxGroupState> {\n\t/**\n\t * Tag/component to render. Defaults to `\"div\"`. Replaces the\n\t * pre-spike `render` prop (axis G).\n\t */\n\tas?: ValidComponent;\n\t/**\n\t * Controlled value array of the ticked child checkboxes. When provided\n\t * (resolved value not `undefined`), the consumer owns the state — pair\n\t * with {@link onValueChange}. When omitted, the group manages its own\n\t * value (seeded from {@link defaultValue}). An empty array IS a\n\t * controlled value.\n\t */\n\tvalue?: MaybeAccessor<string[] | undefined>;\n\t/**\n\t * Initial value array when uncontrolled. Read once at mount.\n\t * @default []\n\t */\n\tdefaultValue?: MaybeAccessor<string[] | undefined>;\n\t/** Fires when the set of ticked values changes. */\n\tonValueChange?:\n\t\t| ((value: string[], details: CheckboxGroupChangeEventDetails) => void)\n\t\t| undefined;\n\t/** Every value a child can contribute (parent-checkbox pattern). */\n\tallValues?: MaybeAccessor<string[] | undefined>;\n\t/** Whether the group should ignore user interaction. @default false */\n\tdisabled?: MaybeAccessor<boolean | undefined>;\n}\n\nconst EMPTY: readonly string[] = Object.freeze([]);\n\n/**\n * Provides a shared value array to a series of `<Checkbox.Root>` elements.\n * Renders a `<div role=\"group\">` (or `as` override).\n *\n * §1 wave 2: replaces `renderElement` with `dynamic(() => props.as ?? \"div\")`.\n * Field-validity attrs (`data-valid`/`data-invalid`/`data-touched`/`data-dirty`/\n * `data-filled`/`data-focused`) flow via `fieldStateAttrs(state)`; the\n * `data-disabled` presence attr is emitted via an inline getter; aria-invalid\n * + aria-describedby come from `validation.getValidationProps()`.\n */\nexport function CheckboxGroup(props: CheckboxGroupProps): JSX.Element {\n\tconst field = useFieldRootContext();\n\n\tconst id = useBaseUiId(typeof props.id === \"string\" ? props.id : undefined);\n\n\t// Controlled / uncontrolled value array (Base UI `value` / `defaultValue`\n\t// contract, mirroring React's `useControlled` in `CheckboxGroup`): the\n\t// `value` prop wins while its resolved value is defined (an empty array\n\t// IS controlled); otherwise an internal signal (seeded once from\n\t// `defaultValue`, else `[]`) backs the state.\n\tconst [resolvedValue, setUncontrolledValue] = createControlledState<\n\t\treadonly string[]\n\t>({\n\t\tcontrolled: () => readOption(props.value),\n\t\tdefault: () => readOption(props.defaultValue),\n\t\tfallback: EMPTY,\n\t\tname: \"<CheckboxGroup>\",\n\t\tstate: \"value\",\n\t});\n\n\t// Base UI exposes `defaultValue` on the group context only while\n\t// uncontrolled (`externalValue === undefined ? defaultValueProp ?? [] :\n\t// undefined`) — child checkboxes derive their own seed from it.\n\tconst contextDefaultValue = (): readonly string[] | undefined =>\n\t\treadOption(props.value) === undefined\n\t\t\t? (readOption(props.defaultValue) ?? EMPTY)\n\t\t\t: undefined;\n\n\tconst c = createCheckboxGroup({\n\t\tvalue: resolvedValue,\n\t\tdefaultValue: contextDefaultValue,\n\t\tallValues: () => readOption(props.allValues),\n\t\tdisabled: (): boolean =>\n\t\t\tfield.disabled() || readOption(props.disabled) === true,\n\t\tonValueChange: (next, event) => {\n\t\t\tconst details = createChangeEventDetails(\n\t\t\t\tREASONS.none,\n\t\t\t\tevent,\n\t\t\t) as CheckboxGroupChangeEventDetails;\n\t\t\t// Base UI change flow: fire onValueChange first, honor\n\t\t\t// `details.cancel()`, then write the uncontrolled state (a no-op\n\t\t\t// for reads while the `value` prop is controlled).\n\t\t\tprops.onValueChange?.(next, details);\n\t\t\tif (details.isCanceled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetUncontrolledValue(next);\n\t\t},\n\t});\n\n\tconst value = c.value;\n\n\tconst controlRef: { current: HTMLElement | null } = { current: null };\n\tconst validation = useFieldControlValidation({\n\t\tvalue: () => value() ?? EMPTY,\n\t\tid: () => id,\n\t\tcontrolRef,\n\t\tgetValue: () => value() ?? EMPTY,\n\t\tenabled: () => !!field.name(),\n\t});\n\n\tuseValueChanged(\n\t\t() => value() ?? EMPTY,\n\t\t() => {\n\t\t\tconst current = value() ?? EMPTY;\n\t\t\tconst initial = field.validityData().initialValue;\n\t\t\tconst initialArr: readonly string[] = Array.isArray(initial)\n\t\t\t\t? (initial as readonly string[])\n\t\t\t\t: EMPTY;\n\n\t\t\tfield.setFilled(current.length > 0);\n\t\t\tfield.setDirty(!areArraysEqual(current, initialArr));\n\n\t\t\tif (field.shouldValidateOnChange()) {\n\t\t\t\tvoid validation.commit(current);\n\t\t\t} else {\n\t\t\t\tvoid validation.commit(current, true);\n\t\t\t}\n\t\t},\n\t);\n\n\tconst state = createMemo(\n\t\t(): CheckboxGroupState => ({\n\t\t\t...field.state(),\n\t\t\tdisabled: c.disabled(),\n\t\t}),\n\t);\n\n\tconst userStyling = resolveClassStyle(props, () => state());\n\n\tconst userProps = omit(\n\t\tprops,\n\t\t\"class\",\n\t\t\"style\",\n\t\t\"attrs\",\n\t\t\"as\",\n\t\t\"allValues\",\n\t\t\"children\",\n\t\t\"defaultValue\",\n\t\t\"disabled\",\n\t\t\"id\",\n\t\t\"onValueChange\",\n\t\t\"value\",\n\t);\n\n\t// Internal slot bag: id, role, data-disabled, plus aria-invalid /\n\t// aria-describedby from field-validation. Field-state validity attrs\n\t// flow through `fieldStateAttrs(state)`.\n\tconst internalSlot = {\n\t\tid,\n\t\trole: \"group\" as const,\n\t\tget \"data-disabled\"(): \"\" | undefined {\n\t\t\treturn c.disabled() ? \"\" : undefined;\n\t\t},\n\t};\n\n\tconst validationBag = validation.getValidationProps() ?? {};\n\n\tconst styledUserProps = mergeRootProps(userStyling, userProps);\n\n\tlet merged: Record<string, unknown> = mergeRootProps(\n\t\tinternalSlot,\n\t\tvalidationBag,\n\t);\n\tmerged = mergeRootProps(merged, fieldStateAttrs(state));\n\tmerged = mergeRootProps(merged, styledUserProps);\n\n\tconst Tag = dynamic(() => props.as ?? \"div\");\n\treturn (\n\t\t<Tag\n\t\t\t{...merged}\n\t\t\tref={composeRefs((el: HTMLElement | null) => {\n\t\t\t\tcontrolRef.current = el;\n\t\t\t}, userRef(props))}\n\t\t>\n\t\t\t<c.Provider>{props.children}</c.Provider>\n\t\t</Tag>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}