{"version":3,"sources":["../../../../src/components/molecules/MultiCheckBoxField/MultiCheckBoxField.tsx"],"names":["cva","jsxs","jsx","Label","Typography","Field","CheckboxField","checked","Controller"],"mappings":"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","file":"MultiCheckBoxField.cjs","sourcesContent":["import type { ReactNode } from \"react\";\nimport { Controller, type ControllerProps } from \"react-hook-form\";\nimport { Field } from \"@headlessui/react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Typography } from \"../../atoms/Typography/Typography\";\nimport { Label } from \"../../atoms/Label\";\nimport { CheckboxField, type CheckBoxFieldProps } from \"../CheckBoxField\";\nimport type { Option } from \"../ComboBoxField\";\n\nconst multiWrap = cva(\"flex flex-col gap-2\", {\n  variants: {\n    spacing: {\n      default: \"gap-3\",\n      compact: \"gap-1\",\n    },\n    columns: {\n      1: \"grid grid-cols-1\",\n      2: \"grid grid-cols-1 sm:grid-cols-2\",\n      3: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n      4: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n      5: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\n      6: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-6\",\n      8: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-8\",\n    },\n  },\n  defaultVariants: {\n    spacing: \"default\",\n    columns: 5,\n  },\n});\n\nexport type MultiCheckboxFieldProps = Omit<\n  CheckBoxFieldProps,\n  | \"label\"\n  | \"description\"\n  | \"checked\"\n  | \"onChange\"\n  | \"id\"\n  | \"error\"\n  | \"showError\"\n  | \"value\"\n> & {\n  label?: string;\n  description?: ReactNode;\n  options: Option[];\n  value: Array<Option[\"value\"]>;\n  onChange: (next: Array<Option[\"value\"]>) => void;\n  showError?: boolean;\n  error?: string;\n  showSelectControls?: boolean;\n  idBase?: string;\n  checkboxAppearance?: CheckBoxFieldProps[\"checkboxAppearance\"];\n} & VariantProps<typeof multiWrap>;\n\nexport function MultiCheckboxField({\n  label,\n  description,\n  options,\n  value,\n  onChange,\n  size = \"sm\",\n  spacing,\n  showError = false,\n  name,\n  error,\n  columns,\n  checkboxAppearance,\n  showSelectControls = false,\n  idBase,\n  ...checkboxProps\n}: MultiCheckboxFieldProps) {\n  const selectedSet = new Set<Option[\"value\"]>(value);\n\n  const toggle = (optValue: Option[\"value\"], checked: boolean) => {\n    const next = new Set(selectedSet);\n    if (checked) next.add(optValue);\n    else next.delete(optValue);\n    onChange(Array.from(next));\n  };\n\n  const allEnabledValues = options\n    .filter((o) => !o.disabled)\n    .map((o) => o.value);\n\n  const selectAll = () => onChange(allEnabledValues);\n  const clearAll = () => onChange([]);\n\n  return (\n    <fieldset className=\"space-y-2\">\n      <legend className=\"font-medium\">\n        <Label>{label}</Label>\n      </legend>\n\n      {description ? (\n        <Typography className=\"text-sm text-font-secondary\">\n          {description}\n        </Typography>\n      ) : null}\n\n      <Field className={multiWrap({ spacing, columns })}>\n        {options.map((opt) => {\n          const id =\n            (idBase ??\n              (label || name || \"\").replace(/\\s+/g, \"-\").toLowerCase()) +\n            \"-\" +\n            String(opt.value);\n          const checked = selectedSet.has(opt.value);\n\n          const compositeLabel = (\n            <span className=\"inline-flex items-center gap-2\">\n              {opt.leftItem ? <span>{opt.leftItem}</span> : null}\n              {opt.image ? (\n                <img\n                  src={opt.image}\n                  alt=\"\"\n                  className=\"inline-block size-5 rounded object-cover\"\n                />\n              ) : null}\n              <span>{opt.label}</span>\n              {opt.rightItem ? (\n                <span className=\"ml-auto\">{opt.rightItem}</span>\n              ) : null}\n            </span>\n          );\n\n          return (\n            <CheckboxField\n              key={id}\n              id={id}\n              size={size}\n              appearance=\"default\"\n              checkboxAppearance={checkboxAppearance}\n              label={compositeLabel as unknown as string}\n              description={\n                opt.description ? (\n                  <span className=\"cbft\">{opt.description}</span>\n                ) : undefined\n              }\n              checked={checked}\n              disabled={opt.disabled}\n              onChange={(checked) => toggle(opt.value, checked)}\n              showError={false}\n              {...checkboxProps}\n            />\n          );\n        })}\n      </Field>\n\n      {showSelectControls ? (\n        <div className=\"flex items-center gap-3 pt-1\">\n          <button\n            type=\"button\"\n            className=\"underline underline-offset-2 hover:no-underline cursor-pointer text-xs\"\n            onClick={selectAll}\n          >\n            Select all\n          </button>\n          {/* <span aria-hidden>·</span> */}\n          <button\n            type=\"button\"\n            className=\"underline underline-offset-2 hover:no-underline cursor-pointer text-xs\"\n            onClick={clearAll}\n          >\n            Clear\n          </button>\n        </div>\n      ) : null}\n\n      {showError && !!error ? (\n        <Typography className=\"bg-danger mt-1\">{error}</Typography>\n      ) : null}\n    </fieldset>\n  );\n}\n\nexport type FormMultiCheckboxFieldProps = Omit<\n  MultiCheckboxFieldProps,\n  \"value\" | \"onChange\"\n> & {\n  name: string;\n  controller?: Pick<\n    ControllerProps,\n    \"defaultValue\" | \"disabled\" | \"rules\" | \"shouldUnregister\"\n  >;\n};\n\nexport function FormMultiCheckboxField({\n  name,\n  controller,\n  showError = true,\n  ...rest\n}: FormMultiCheckboxFieldProps) {\n  return (\n    <Controller\n      name={name}\n      {...controller}\n      render={({ field, fieldState }) => {\n        const current: Array<Option[\"value\"]> = Array.isArray(field.value)\n          ? field.value\n          : [];\n\n        return (\n          <MultiCheckboxField\n            {...rest}\n            name={name}\n            value={current}\n            onChange={(next) => field.onChange(next)}\n            showError={showError}\n            error={fieldState.error?.message}\n          />\n        );\n      }}\n    />\n  );\n}\n"]}