@nucleux/questionnaire 0.0.0-stage → 0.7.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"@nucleux/utils\";\nimport { Button, type ButtonSize, type ButtonVariant } from \"@nucleux/button\";\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\n/** Whether an item has an answer, was intentionally skipped, or neither. */\nexport type QuestionnaireItemStatus = \"unanswered\" | \"answered\" | \"skipped\";\n\n/** Answer shortcut scheme: A–Z or 1–9 per item. */\nexport type QuestionnaireShortcuts = \"letters\" | \"numbers\";\n\n/** Optional collection data for a fixed answer. */\nexport interface QuestionnaireChoiceDefinition {\n value: string;\n disabled?: boolean;\n}\n\n/** Optional collection data for one item, passed to `Questionnaire` as `items`. */\nexport interface QuestionnaireItemDefinition {\n name: string;\n required?: boolean;\n disabled?: boolean;\n multiple?: boolean;\n choices?: readonly QuestionnaireChoiceDefinition[];\n}\n\n/** Props a part hands to its `render` target. Spread them onto your element. */\nexport type QuestionnaireRenderProps = React.HTMLAttributes<HTMLElement> & Record<`data-${string}`, unknown>;\n\n/**\n * Replace a part's default element: pass an element (props are merged onto it)\n * or a function that receives the part's props and render state.\n */\nexport type QuestionnaireRender<State> =\n | React.ReactElement\n | ((props: QuestionnaireRenderProps, state: State) => React.ReactElement);\n\n/** Render state of QuestionnaireProgress. */\nexport interface QuestionnaireProgressState {\n current: number;\n total: number;\n first: boolean;\n last: boolean;\n}\n\n/** Render state of the navigation actions. */\nexport interface QuestionnaireActionState {\n visible: boolean;\n disabled: boolean;\n shortcut: string | undefined;\n status: QuestionnaireItemStatus;\n}\n\n/** Render state of QuestionnaireInput. */\nexport interface QuestionnaireInputState {\n disabled: boolean;\n filled: boolean;\n invalid: boolean;\n}\n\n/** Render state of QuestionnaireError. */\nexport interface QuestionnaireErrorState {\n invalid: boolean;\n}\n\n/** Render state of QuestionnaireChoices. */\nexport interface QuestionnaireChoicesState {\n shortcuts: QuestionnaireShortcuts | undefined;\n}\n\n/** shadcn Button variant names are accepted as aliases (\"default\" = primary, \"outline\" = secondary). */\nexport type QuestionnaireActionVariant = ButtonVariant | \"default\" | \"outline\";\n/** shadcn Button size names are accepted as aliases (\"default\" = md, \"xs\" = sm). */\nexport type QuestionnaireActionSize = ButtonSize | \"default\" | \"xs\";\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\nconst useIsoLayoutEffect = typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n\n/** Render a part as `tag`, or into the consumer's `render` element / function. */\nfunction renderPart<State>(\n tag: keyof JSX.IntrinsicElements,\n props: AnyProps,\n state: State,\n render: QuestionnaireRender<State> | undefined,\n): React.ReactElement {\n if (typeof render === \"function\") return render(props as QuestionnaireRenderProps, state);\n if (React.isValidElement(render)) {\n const element = render as React.ReactElement<AnyProps>;\n const theirs = element.props;\n const merged: AnyProps = { ...props, ...theirs };\n for (const key of Object.keys(props)) {\n const ours = props[key];\n const other = theirs[key];\n if (/^on[A-Z]/.test(key) && typeof ours === \"function\" && typeof other === \"function\") {\n merged[key] = (...args: unknown[]) => {\n (other as (...a: unknown[]) => void)(...args);\n (ours as (...a: unknown[]) => void)(...args);\n };\n } else if (key === \"className\") {\n merged.className = cn(ours as string, other as string);\n } else if (key === \"children\" && other === undefined) {\n merged.children = ours;\n }\n }\n return React.cloneElement(element, merged);\n }\n return React.createElement(tag, props);\n}\n\nconst flag = (on: boolean | undefined) => (on ? \"\" : undefined);\n\ninterface Answer {\n checked: string[];\n text: string;\n}\n\nconst CONTROL = \"input[data-questionnaire-control]\";\n\nfunction readAnswer(fieldset: HTMLElement): Answer {\n const checked: string[] = [];\n let text = \"\";\n fieldset.querySelectorAll<HTMLInputElement>(CONTROL).forEach((input) => {\n if (input.matches(\":disabled\")) return;\n if (input.type === \"radio\" || input.type === \"checkbox\") {\n if (input.checked) checked.push(input.value);\n } else if (!text && input.value.trim() !== \"\") {\n text = input.value;\n }\n });\n return { checked, text };\n}\n\nconst sameAnswer = (a: Answer | undefined, b: Answer) =>\n !!a && a.text === b.text && a.checked.length === b.checked.length && a.checked.every((v, i) => v === b.checked[i]);\n\nconst hasAnswer = (a: Answer | undefined) => !!a && (a.checked.length > 0 || a.text.trim() !== \"\");\n\nfunction shortcutLabel(scheme: QuestionnaireShortcuts | undefined, index: number): string | undefined {\n if (!scheme || index < 0) return undefined;\n if (scheme === \"letters\") return index < 26 ? String.fromCharCode(65 + index) : undefined;\n return index < 9 ? String(index + 1) : undefined;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Contexts */\n/* -------------------------------------------------------------------------- */\n\ninterface ItemMeta {\n required: boolean;\n multiple: boolean;\n disabled: boolean;\n}\n\ninterface RootContextValue {\n shortcuts: QuestionnaireShortcuts | undefined;\n definitions: Map<string, QuestionnaireItemDefinition>;\n active: string | undefined;\n index: number;\n total: number;\n answers: Record<string, Answer>;\n invalid: Record<string, boolean>;\n register: (name: string, meta: ItemMeta) => void;\n unregister: (name: string) => void;\n setElement: (name: string, el: HTMLFieldSetElement | null) => void;\n setAnswer: (name: string, answer: Answer) => void;\n statusOf: (name: string) => QuestionnaireItemStatus;\n isRequired: (name: string) => boolean;\n next: () => void;\n previous: () => void;\n skip: () => void;\n}\n\nconst RootContext = React.createContext<RootContextValue | null>(null);\n\nfunction useRoot(part: string): RootContextValue {\n const ctx = React.useContext(RootContext);\n if (!ctx) throw new Error(`<${part}> must be used inside <Questionnaire>.`);\n return ctx;\n}\n\ninterface ItemContextValue {\n name: string;\n multiple: boolean;\n required: boolean;\n disabled: boolean;\n invalid: boolean;\n measured: boolean;\n checked: string[];\n text: string;\n descriptionId: string;\n errorId: string;\n setHasDescription: (has: boolean) => void;\n setHasError: (has: boolean) => void;\n shortcutFor: (value: string) => string | undefined;\n}\n\nconst ItemContext = React.createContext<ItemContextValue | null>(null);\n\nfunction useItem(part: string): ItemContextValue {\n const ctx = React.useContext(ItemContext);\n if (!ctx) throw new Error(`<${part}> must be used inside <QuestionnaireItem>.`);\n return ctx;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Root */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireProps extends React.FormHTMLAttributes<HTMLFormElement> {\n /** Controlled active item name. */\n item?: string;\n /** Initially active item name. Defaults to the first enabled item. */\n defaultItem?: string;\n /** Optional item data, so order, progress, actions and shortcuts are known before items mount (SSR). */\n items?: readonly QuestionnaireItemDefinition[];\n /** Called when navigation requests a different item. */\n onItemChange?: (item: string) => void;\n /** Assign A–Z or 1–9 answer shortcuts per item, in definition or DOM order. */\n shortcuts?: QuestionnaireShortcuts;\n /** Disable the browser's constraint UI. Questionnaire validation still runs. Defaults to true. */\n noValidate?: boolean;\n}\n\n/**\n * A multi-step form that shows one question at a time. It owns the ordered\n * items, the active item, answer state, validation, progress and navigation;\n * answers live in native radios, checkboxes and text inputs, so read them\n * with `FormData` in `onSubmit` (called only once every enabled item\n * validates). Required items need an answer; optional items need an answer or\n * an explicit Skip. Supports `item`/`onItemChange` control, `defaultItem`,\n * `items` for SSR ordering, and `shortcuts=\"letters\" | \"numbers\"`.\n */\nexport const Questionnaire = React.forwardRef<HTMLFormElement, QuestionnaireProps>(\n (\n {\n item: itemProp,\n defaultItem,\n items,\n onItemChange,\n shortcuts,\n noValidate = true,\n onSubmit,\n onReset,\n onKeyDown,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const formRef = React.useRef<HTMLFormElement>(null);\n const elements = React.useRef(new Map<string, HTMLFieldSetElement>());\n const initialItem = React.useRef(defaultItem);\n const pendingFocus = React.useRef<{ name: string; target: \"item\" | \"control\" } | null>(null);\n const [metas, setMetas] = React.useState<Record<string, ItemMeta>>({});\n const [internalItem, setInternalItem] = React.useState(defaultItem);\n const [answers, setAnswers] = React.useState<Record<string, Answer>>({});\n const [skipped, setSkipped] = React.useState<Record<string, boolean>>({});\n const [invalid, setInvalid] = React.useState<Record<string, boolean>>({});\n const [, setTick] = React.useState(0);\n\n const definitions = React.useMemo(\n () => new Map((items ?? []).map((d) => [d.name, d] as const)),\n [items],\n );\n\n const metaOf = (name: string): ItemMeta => {\n const def = definitions.get(name);\n return (\n metas[name] ?? {\n required: def?.required ?? false,\n multiple: def?.multiple ?? false,\n disabled: def?.disabled ?? false,\n }\n );\n };\n\n // Item order: the `items` collection when given, otherwise DOM order.\n const domOrder = Object.keys(metas).sort((a, b) => {\n const ea = elements.current.get(a);\n const eb = elements.current.get(b);\n if (!ea || !eb) return 0;\n return ea.compareDocumentPosition(eb) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n const order = items\n ? [...items.map((d) => d.name), ...domOrder.filter((n) => !definitions.has(n))]\n : domOrder;\n const enabled = order.filter((n) => !metaOf(n).disabled);\n\n const requested = itemProp !== undefined ? itemProp : internalItem;\n const active = requested !== undefined && enabled.includes(requested) ? requested : enabled[0];\n const index = active !== undefined ? enabled.indexOf(active) : -1;\n const isLast = index === enabled.length - 1;\n\n const answered = (name: string) => hasAnswer(answers[name]);\n const statusOf = (name: string): QuestionnaireItemStatus =>\n answered(name) ? \"answered\" : skipped[name] ? \"skipped\" : \"unanswered\";\n const isValid = (name: string) => answered(name) || (!metaOf(name).required && !!skipped[name]);\n\n const goTo = (name: string, target: \"item\" | \"control\") => {\n pendingFocus.current = { name, target };\n if (name !== active) {\n if (itemProp === undefined) setInternalItem(name);\n onItemChange?.(name);\n }\n setTick((t) => t + 1);\n };\n\n const markInvalid = (names: string[]) =>\n setInvalid((prev) => {\n const nextState = { ...prev };\n for (const n of names) nextState[n] = true;\n return nextState;\n });\n\n const clearFlag = (setter: React.Dispatch<React.SetStateAction<Record<string, boolean>>>, name: string) =>\n setter((prev) => {\n if (!prev[name]) return prev;\n const nextState = { ...prev };\n delete nextState[name];\n return nextState;\n });\n\n const next = () => {\n if (active === undefined) return;\n if (!isValid(active)) {\n markInvalid([active]);\n goTo(active, \"control\");\n return;\n }\n clearFlag(setInvalid, active);\n const target = enabled[index + 1];\n if (target !== undefined) goTo(target, \"item\");\n };\n\n const previous = () => {\n const target = enabled[index - 1];\n if (index > 0 && target !== undefined) goTo(target, \"item\");\n };\n\n const skip = () => {\n if (active === undefined || metaOf(active).required) return;\n const el = elements.current.get(active);\n el?.querySelectorAll<HTMLInputElement>(CONTROL).forEach((input) => {\n if (input.type === \"radio\" || input.type === \"checkbox\") input.checked = false;\n else input.value = \"\";\n });\n setAnswers((prev) => ({ ...prev, [active]: { checked: [], text: \"\" } }));\n setSkipped((prev) => ({ ...prev, [active]: true }));\n clearFlag(setInvalid, active);\n const target = enabled[index + 1];\n if (target !== undefined) goTo(target, \"item\");\n };\n\n const continueFlow = () => {\n if (active === undefined) return;\n if (!isLast) {\n next();\n return;\n }\n const form = formRef.current;\n if (!form) return;\n if (typeof form.requestSubmit === \"function\") form.requestSubmit();\n else form.dispatchEvent(new Event(\"submit\", { bubbles: true, cancelable: true }));\n };\n\n // Move focus after navigation or failed validation.\n React.useEffect(() => {\n const pending = pendingFocus.current;\n if (!pending || pending.name !== active) return;\n const el = elements.current.get(pending.name);\n if (!el || el.hidden) return;\n pendingFocus.current = null;\n if (pending.target === \"control\") {\n const control = Array.from(el.querySelectorAll<HTMLInputElement>(CONTROL)).find(\n (c) => !c.matches(\":disabled\"),\n );\n (control ?? el).focus();\n } else {\n el.focus();\n }\n });\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n const failing = enabled.filter((n) => !isValid(n));\n if (failing.length > 0) {\n event.preventDefault();\n markInvalid(failing);\n goTo(failing[0]!, \"control\");\n return;\n }\n onSubmit?.(event);\n };\n\n const handleReset = (event: React.FormEvent<HTMLFormElement>) => {\n onReset?.(event);\n if (event.defaultPrevented) return;\n setSkipped({});\n setInvalid({});\n if (itemProp === undefined) setInternalItem(initialItem.current);\n else if (initialItem.current !== undefined) onItemChange?.(initialItem.current);\n // Native reset runs after this handler; re-read the restored answers afterwards.\n setTimeout(() => setTick((t) => t + 1), 0);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLFormElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n const target = event.target as HTMLElement;\n const fieldset = active !== undefined ? elements.current.get(active) : undefined;\n const input = target instanceof HTMLInputElement ? target : null;\n const isChoiceInput = !!input && (input.type === \"radio\" || input.type === \"checkbox\");\n const isTextEntry =\n (!!input && !isChoiceInput && ![\"button\", \"submit\", \"reset\"].includes(input.type)) ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement ||\n target.isContentEditable;\n\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n continueFlow();\n return;\n }\n if (event.key === \"Enter\") {\n // Stop implicit form submission from inputs; continue when answered.\n if (input && (isChoiceInput || isTextEntry)) {\n event.preventDefault();\n if (active !== undefined && answered(active)) continueFlow();\n }\n return;\n }\n if (event.altKey || event.ctrlKey || event.metaKey) return;\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n if (!fieldset || !fieldset.contains(target)) return;\n if (isTextEntry && !(input && input.value === \"\")) return;\n const controls = Array.from(fieldset.querySelectorAll<HTMLInputElement>(CONTROL)).filter(\n (c) => !c.matches(\":disabled\"),\n );\n if (controls.length === 0) return;\n event.preventDefault();\n const i = input ? controls.indexOf(input) : -1;\n const n = controls.length;\n const nextIndex =\n event.key === \"ArrowDown\" ? (i < 0 ? 0 : (i + 1) % n) : i < 0 ? n - 1 : (i - 1 + n) % n;\n const control = controls[nextIndex]!;\n control.focus();\n if (control.type === \"radio\" && !control.checked) control.click();\n return;\n }\n\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n if (isTextEntry || (input && input.type === \"radio\")) return;\n if (event.key === \"ArrowLeft\") {\n if (index > 0) {\n event.preventDefault();\n previous();\n }\n } else if (active !== undefined && !isLast && statusOf(active) !== \"unanswered\") {\n event.preventDefault();\n next();\n }\n return;\n }\n\n if (shortcuts && fieldset && !isTextEntry && event.key.length === 1) {\n const key = shortcuts === \"letters\" ? event.key.toUpperCase() : event.key;\n if (!(shortcuts === \"letters\" ? /^[A-Z]$/ : /^[1-9]$/).test(key)) return;\n const choice = fieldset.querySelector(`[data-shortcut=\"${key}\"]`);\n const control = choice?.querySelector<HTMLInputElement>(CONTROL);\n if (control && !control.matches(\":disabled\")) {\n event.preventDefault();\n control.focus();\n control.click();\n }\n }\n };\n\n const register = React.useCallback((name: string, meta: ItemMeta) => {\n setMetas((prev) => {\n const old = prev[name];\n if (old && old.required === meta.required && old.multiple === meta.multiple && old.disabled === meta.disabled)\n return prev;\n return { ...prev, [name]: meta };\n });\n }, []);\n\n const unregister = React.useCallback((name: string) => {\n setMetas((prev) => {\n if (!(name in prev)) return prev;\n const nextState = { ...prev };\n delete nextState[name];\n return nextState;\n });\n }, []);\n\n const setElement = React.useCallback((name: string, el: HTMLFieldSetElement | null) => {\n if (el) elements.current.set(name, el);\n else elements.current.delete(name);\n }, []);\n\n const setAnswer = React.useCallback((name: string, answer: Answer) => {\n setAnswers((prev) => (sameAnswer(prev[name], answer) ? prev : { ...prev, [name]: answer }));\n if (hasAnswer(answer)) {\n const drop = (prev: Record<string, boolean>) => {\n if (!prev[name]) return prev;\n const nextState = { ...prev };\n delete nextState[name];\n return nextState;\n };\n setSkipped(drop);\n setInvalid(drop);\n }\n }, []);\n\n const context: RootContextValue = {\n shortcuts,\n definitions,\n active,\n index,\n total: enabled.length,\n answers,\n invalid,\n register,\n unregister,\n setElement,\n setAnswer,\n statusOf,\n isRequired: (name) => metaOf(name).required,\n next,\n previous,\n skip,\n };\n\n return (\n <RootContext.Provider value={context}>\n <form\n ref={mergeRefs(ref, formRef)}\n noValidate={noValidate}\n data-slot=\"questionnaire\"\n data-current={index + 1}\n data-total={enabled.length}\n data-first={flag(index === 0)}\n data-last={flag(enabled.length > 0 && isLast)}\n data-shortcuts={shortcuts}\n className={cn(\"flex w-full min-w-0 flex-col gap-4\", className)}\n onSubmit={handleSubmit}\n onReset={handleReset}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </form>\n </RootContext.Provider>\n );\n },\n);\nQuestionnaire.displayName = \"Questionnaire\";\n\n/* -------------------------------------------------------------------------- */\n/* Progress */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Custom render target; receives `{ current, total, first, last }`. */\n render?: QuestionnaireRender<QuestionnaireProgressState>;\n}\n\n/**\n * The position within the enabled items, exposed as a named `progressbar`.\n * Renders \"Question {current} of {total}\" unless you pass children or a\n * `render` function that formats `state.current` and `state.total`.\n */\nexport const QuestionnaireProgress = React.forwardRef<HTMLDivElement, QuestionnaireProgressProps>(\n ({ className, render, children, ...props }, ref) => {\n const root = useRoot(\"QuestionnaireProgress\");\n const current = root.index + 1;\n const total = root.total;\n const state: QuestionnaireProgressState = {\n current,\n total,\n first: root.index === 0,\n last: total > 0 && current === total,\n };\n const text = `Question ${current} of ${total}`;\n return renderPart(\n \"div\",\n {\n ref,\n role: \"progressbar\",\n \"aria-label\": \"Questionnaire progress\",\n \"aria-valuemin\": 0,\n \"aria-valuemax\": total,\n \"aria-valuenow\": current,\n \"aria-valuetext\": text,\n \"data-slot\": \"questionnaire-progress\",\n \"data-current\": current,\n \"data-total\": total,\n \"data-first\": flag(state.first),\n \"data-last\": flag(state.last),\n className: cn(\n \"min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium tabular-nums text-muted-foreground\",\n className,\n ),\n ...props,\n children: children ?? text,\n },\n state,\n render,\n );\n },\n);\nQuestionnaireProgress.displayName = \"QuestionnaireProgress\";\n\n/* -------------------------------------------------------------------------- */\n/* Item */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireItemProps extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, \"name\"> {\n /** Unique item identifier; also the form field name of its answers. */\n name: string;\n /** Requires an answer and hides Skip. */\n required?: boolean;\n /** Renders fixed choices as checkboxes. */\n multiple?: boolean;\n /** Removes the item from progress, navigation, validation and submission. */\n disabled?: boolean;\n /** Marks the item invalid from an external validator. */\n invalid?: boolean;\n /** Observes \"unanswered\" / \"answered\" / \"skipped\" changes. */\n onStatusChange?: (status: QuestionnaireItemStatus) => void;\n}\n\n/**\n * One questionnaire step, rendered as a `<fieldset>` (QuestionnaireTitle is\n * its `<legend>`). Only the active item is shown; the others stay mounted but\n * hidden so their answers still submit. `required` items need an answer,\n * `multiple` items use checkboxes, and `disabled` items drop out of the flow.\n */\nexport const QuestionnaireItem = React.forwardRef<HTMLFieldSetElement, QuestionnaireItemProps>(\n (\n {\n name,\n required = false,\n multiple = false,\n disabled = false,\n invalid: invalidProp = false,\n onStatusChange,\n onChange,\n className,\n children,\n \"aria-describedby\": describedByProp,\n ...props\n },\n ref,\n ) => {\n const root = useRoot(\"QuestionnaireItem\");\n const elRef = React.useRef<HTMLFieldSetElement | null>(null);\n const baseId = React.useId();\n const [hasDescription, setHasDescription] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n const [domChoices, setDomChoices] = React.useState<string[]>([]);\n const { register, unregister, setElement, setAnswer } = root;\n\n useIsoLayoutEffect(() => {\n register(name, { required, multiple, disabled });\n }, [register, name, required, multiple, disabled]);\n useIsoLayoutEffect(() => () => unregister(name), [unregister, name]);\n\n // Re-read answers from the native controls after every render, so defaults,\n // controlled props and resets are all reflected.\n useIsoLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n setAnswer(name, readAnswer(el));\n const values = Array.from(el.querySelectorAll<HTMLElement>(\"[data-questionnaire-choice-value]\"))\n .filter((c) => !c.hasAttribute(\"data-disabled\"))\n .map((c) => c.getAttribute(\"data-questionnaire-choice-value\") ?? \"\");\n setDomChoices((prev) =>\n prev.length === values.length && prev.every((v, i) => v === values[i]) ? prev : values,\n );\n });\n\n const active = root.active === name && !disabled;\n const status = root.statusOf(name);\n const invalid = invalidProp || !!root.invalid[name];\n\n const lastStatus = React.useRef(status);\n React.useEffect(() => {\n if (lastStatus.current !== status) {\n lastStatus.current = status;\n onStatusChange?.(status);\n }\n }, [status, onStatusChange]);\n\n const definedChoices = root.definitions.get(name)?.choices;\n const choiceOrder = definedChoices ? definedChoices.filter((c) => !c.disabled).map((c) => c.value) : domChoices;\n const answer = root.answers[name];\n\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n const describedBy =\n [describedByProp, hasDescription && descriptionId, invalid && hasError && errorId].filter(Boolean).join(\" \") ||\n undefined;\n\n const handleChange = (event: React.FormEvent<HTMLFieldSetElement>) => {\n onChange?.(event);\n const el = elRef.current;\n const target = event.target as HTMLInputElement;\n if (!el || !target.matches?.(CONTROL)) return;\n if (!multiple) {\n // A single-answer item keeps one answer: a choice clears the freeform\n // text, and typing clears the selected choice.\n if (target.type === \"radio\" && target.checked) {\n el.querySelectorAll<HTMLInputElement>(`${CONTROL}[data-questionnaire-control=\"input\"]`).forEach((i) => {\n i.value = \"\";\n });\n } else if (target.getAttribute(\"data-questionnaire-control\") === \"input\" && target.value.trim() !== \"\") {\n el.querySelectorAll<HTMLInputElement>(`${CONTROL}[type=\"radio\"]`).forEach((i) => {\n i.checked = false;\n });\n }\n }\n setAnswer(name, readAnswer(el));\n };\n\n const itemContext: ItemContextValue = {\n name,\n multiple,\n required,\n disabled,\n invalid,\n measured: answer !== undefined,\n checked: answer?.checked ?? [],\n text: answer?.text ?? \"\",\n descriptionId,\n errorId,\n setHasDescription,\n setHasError,\n shortcutFor: (value) => shortcutLabel(root.shortcuts, choiceOrder.indexOf(value)),\n };\n\n return (\n <ItemContext.Provider value={itemContext}>\n <fieldset\n ref={mergeRefs(ref, elRef, (el: HTMLFieldSetElement | null) => setElement(name, el))}\n tabIndex={-1}\n disabled={disabled}\n hidden={!active}\n aria-describedby={describedBy}\n aria-invalid={invalid || undefined}\n data-slot=\"questionnaire-item\"\n data-active={flag(active)}\n data-status={status}\n data-required={flag(required)}\n data-multiple={flag(multiple)}\n data-disabled={flag(disabled)}\n data-invalid={flag(invalid)}\n className={cn(\n \"m-0 flex min-w-0 flex-col gap-4 border-0 p-0 outline-none [&[hidden]]:hidden\",\n className,\n )}\n onChange={handleChange}\n {...props}\n >\n {children}\n </fieldset>\n </ItemContext.Provider>\n );\n },\n);\nQuestionnaireItem.displayName = \"QuestionnaireItem\";\n\n/* -------------------------------------------------------------------------- */\n/* Title / Description */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireTitleProps extends React.HTMLAttributes<HTMLLegendElement> {\n /** Custom render target. If it is not a legend, give it an `id` and pass it to the item's `aria-labelledby`. */\n render?: QuestionnaireRender<Record<string, never>>;\n}\n\n/** The question, rendered as the item's `<legend>` so it names the fieldset. */\nexport const QuestionnaireTitle = React.forwardRef<HTMLLegendElement, QuestionnaireTitleProps>(\n ({ className, render, ...props }, ref) =>\n renderPart(\n \"legend\",\n {\n ref,\n \"data-slot\": \"questionnaire-title\",\n className: cn(\n \"text-pretty text-base font-medium leading-snug [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4\",\n className,\n ),\n ...props,\n },\n {},\n render,\n ),\n);\nQuestionnaireTitle.displayName = \"QuestionnaireTitle\";\n\nexport interface QuestionnaireDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {\n /** Custom render target. */\n render?: QuestionnaireRender<Record<string, never>>;\n}\n\n/** Supporting text for the question, connected to the item with `aria-describedby`. */\nexport const QuestionnaireDescription = React.forwardRef<HTMLParagraphElement, QuestionnaireDescriptionProps>(\n ({ className, render, id, ...props }, ref) => {\n const item = useItem(\"QuestionnaireDescription\");\n const { setHasDescription } = item;\n React.useEffect(() => {\n setHasDescription(true);\n return () => setHasDescription(false);\n }, [setHasDescription]);\n return renderPart(\n \"p\",\n {\n ref,\n id: id ?? item.descriptionId,\n \"data-slot\": \"questionnaire-description\",\n className: cn(\"text-pretty text-sm text-muted-foreground\", className),\n ...props,\n },\n {},\n render,\n );\n },\n);\nQuestionnaireDescription.displayName = \"QuestionnaireDescription\";\n\n/* -------------------------------------------------------------------------- */\n/* Choices */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireChoicesProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Custom render target; receives `{ shortcuts }`. */\n render?: QuestionnaireRender<QuestionnaireChoicesState>;\n}\n\n/** Layout container for an item's fixed choices and optional freeform input. */\nexport const QuestionnaireChoices = React.forwardRef<HTMLDivElement, QuestionnaireChoicesProps>(\n ({ className, render, ...props }, ref) => {\n const root = useRoot(\"QuestionnaireChoices\");\n return renderPart(\n \"div\",\n {\n ref,\n \"data-slot\": \"questionnaire-choices\",\n \"data-shortcuts\": root.shortcuts,\n className: cn(\"group/questionnaire-choices grid min-w-0 gap-2\", className),\n ...props,\n },\n { shortcuts: root.shortcuts },\n render,\n );\n },\n);\nQuestionnaireChoices.displayName = \"QuestionnaireChoices\";\n\nexport interface QuestionnaireChoiceProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"defaultChecked\"> {\n /** The submitted answer value. */\n value: string;\n /** Controlled checked state. */\n checked?: boolean;\n /** Initial checked state (e.g. when resuming a draft). */\n defaultChecked?: boolean;\n /** Disables this answer. */\n disabled?: boolean;\n /** Native change handler of the underlying radio / checkbox. */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n}\n\n/**\n * A fixed answer: a `<label>` wrapping a native radio (or checkbox when the\n * item is `multiple`), a visual indicator, the label content and, when the\n * root has `shortcuts`, its key hint. Exposes `data-type`, `data-checked`,\n * `data-disabled`, `data-invalid` and `data-shortcut`.\n */\nexport const QuestionnaireChoice = React.forwardRef<HTMLLabelElement, QuestionnaireChoiceProps>(\n ({ value, checked, defaultChecked, disabled = false, onChange, className, children, ...props }, ref) => {\n const item = useItem(\"QuestionnaireChoice\");\n const type = item.multiple ? \"checkbox\" : \"radio\";\n const isChecked = checked ?? (item.measured ? item.checked.includes(value) : !!defaultChecked);\n const isDisabled = disabled || item.disabled;\n const shortcut = disabled ? undefined : item.shortcutFor(value);\n return (\n <label\n ref={ref}\n data-slot=\"questionnaire-choice\"\n data-questionnaire-choice-value={value}\n data-type={type}\n data-checked={flag(isChecked)}\n data-unchecked={flag(!isChecked)}\n data-disabled={flag(isDisabled)}\n data-invalid={flag(item.invalid)}\n data-shortcut={shortcut}\n className={cn(\n \"group/questionnaire-choice relative flex min-h-11 cursor-pointer select-none items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm outline-none transition-colors hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-2 has-[>input:focus-visible]:ring-ring/50 data-[invalid]:border-destructive data-[checked]:border-primary/40 data-[checked]:bg-muted\",\n \"data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <input\n type={type}\n name={item.name}\n value={value}\n checked={checked}\n defaultChecked={checked === undefined ? defaultChecked : undefined}\n disabled={disabled}\n onChange={onChange}\n aria-invalid={item.invalid || undefined}\n aria-keyshortcuts={shortcut}\n data-questionnaire-control=\"choice\"\n data-slot=\"questionnaire-choice-input\"\n className=\"absolute inset-0 z-10 size-full cursor-pointer opacity-0\"\n />\n <span\n aria-hidden=\"true\"\n data-slot=\"questionnaire-choice-indicator\"\n className={cn(\n \"pointer-events-none relative flex size-4 shrink-0 translate-y-[0.1125rem] items-center justify-center rounded-[4px] border border-input group-has-[[data-slot=questionnaire-choice-description]]/questionnaire-choice:translate-y-0.5 group-data-[checked]/questionnaire-choice:border-primary group-data-[checked]/questionnaire-choice:bg-primary group-data-[checked]/questionnaire-choice:text-primary-foreground\",\n type === \"radio\" && \"rounded-full\",\n )}\n >\n {type === \"radio\" ? (\n <span\n data-slot=\"questionnaire-choice-indicator-dot\"\n className=\"hidden size-2 rounded-full bg-primary-foreground group-data-[checked]/questionnaire-choice:block\"\n />\n ) : (\n <Check\n data-slot=\"questionnaire-choice-indicator-check\"\n className=\"hidden size-3.5 group-data-[checked]/questionnaire-choice:block\"\n />\n )}\n </span>\n <span data-slot=\"questionnaire-choice-label\" className=\"flex min-w-0 flex-1 flex-col gap-0.5 leading-snug\">\n {children}\n </span>\n {shortcut ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"questionnaire-choice-shortcut\"\n className=\"pointer-events-none ms-auto inline-flex size-5 shrink-0 translate-y-[0.1125rem] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] font-medium leading-none text-muted-foreground group-has-[[data-slot=questionnaire-choice-description]]/questionnaire-choice:translate-y-0.5\"\n >\n {shortcut}\n </span>\n ) : null}\n </label>\n );\n },\n);\nQuestionnaireChoice.displayName = \"QuestionnaireChoice\";\n\nexport interface QuestionnaireChoiceDescriptionProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Additional classes merged onto the description. */\n className?: string;\n}\n\n/** Secondary line of text inside a QuestionnaireChoice. */\nexport const QuestionnaireChoiceDescription = React.forwardRef<HTMLSpanElement, QuestionnaireChoiceDescriptionProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n data-slot=\"questionnaire-choice-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nQuestionnaireChoiceDescription.displayName = \"QuestionnaireChoiceDescription\";\n\n/* -------------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"name\"> {\n /** Custom render target; receives `{ disabled, filled, invalid }`. */\n render?: QuestionnaireRender<QuestionnaireInputState>;\n}\n\n/**\n * A freeform answer: a native text input whose form name is managed by the\n * item (it only submits when filled). In a single-answer item, typing clears\n * any selected choice and vice versa. Always give it an accessible name with\n * a visible label, `aria-label` or `aria-labelledby`.\n */\nexport const QuestionnaireInput = React.forwardRef<HTMLInputElement, QuestionnaireInputProps>(\n ({ className, type = \"text\", disabled = false, render, ...props }, ref) => {\n const item = useItem(\"QuestionnaireInput\");\n const initial = String(props.value ?? props.defaultValue ?? \"\");\n const filled = item.measured ? item.text.trim() !== \"\" : initial.trim() !== \"\";\n const isDisabled = disabled || item.disabled;\n const state: QuestionnaireInputState = { disabled: isDisabled, filled, invalid: item.invalid };\n return (\n <div data-slot=\"questionnaire-input-wrapper\" className=\"group/questionnaire-input relative w-full min-w-0\">\n {renderPart(\n \"input\",\n {\n ref,\n type,\n name: filled ? item.name : undefined,\n disabled,\n \"aria-invalid\": item.invalid || undefined,\n \"data-questionnaire-control\": \"input\",\n \"data-slot\": \"questionnaire-input\",\n \"data-filled\": flag(filled),\n \"data-empty\": flag(!filled),\n \"data-disabled\": flag(isDisabled),\n \"data-invalid\": flag(item.invalid),\n className: cn(\n \"h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base outline-none transition-[color,box-shadow,background-color] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/20 sm:min-h-0 md:text-sm\",\n \"placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n className,\n ),\n ...props,\n },\n state,\n render,\n )}\n </div>\n );\n },\n);\nQuestionnaireInput.displayName = \"QuestionnaireInput\";\n\n/* -------------------------------------------------------------------------- */\n/* Error */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireErrorProps extends React.HTMLAttributes<HTMLParagraphElement> {\n /** Custom render target; receives `{ invalid }`. */\n render?: QuestionnaireRender<QuestionnaireErrorState>;\n}\n\n/**\n * The validation message. Hidden until the item fails validation, then shown\n * with `role=\"alert\"` and linked to the item via `aria-describedby`. Defaults\n * to \"Choose an answer to continue.\" (required) or \"Choose an answer or skip\n * this question.\" (optional); pass children to replace it.\n */\nexport const QuestionnaireError = React.forwardRef<HTMLParagraphElement, QuestionnaireErrorProps>(\n ({ className, render, children, id, ...props }, ref) => {\n const item = useItem(\"QuestionnaireError\");\n const { setHasError } = item;\n React.useEffect(() => {\n setHasError(true);\n return () => setHasError(false);\n }, [setHasError]);\n const message =\n children ?? (item.required ? \"Choose an answer to continue.\" : \"Choose an answer or skip this question.\");\n return renderPart(\n \"p\",\n {\n ref,\n id: id ?? item.errorId,\n role: item.invalid ? \"alert\" : undefined,\n hidden: !item.invalid || undefined,\n \"data-slot\": \"questionnaire-error\",\n \"data-invalid\": flag(item.invalid),\n className: cn(\"mt-2 text-sm text-destructive [&[hidden]]:hidden\", className),\n ...props,\n children: item.invalid ? message : null,\n },\n { invalid: item.invalid },\n render,\n );\n },\n);\nQuestionnaireError.displayName = \"QuestionnaireError\";\n\n/* -------------------------------------------------------------------------- */\n/* Actions */\n/* -------------------------------------------------------------------------- */\n\nexport interface QuestionnaireActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Additional classes merged onto the actions row. */\n className?: string;\n}\n\n/** Layout row for Previous (start), Skip and Next/Submit (end). Styling only. */\nexport const QuestionnaireActions = React.forwardRef<HTMLDivElement, QuestionnaireActionsProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"questionnaire-actions\"\n className={cn(\n \"grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8\",\n className,\n )}\n {...props}\n />\n ),\n);\nQuestionnaireActions.displayName = \"QuestionnaireActions\";\n\nexport interface QuestionnaireActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Button variant. Accepts Nucleux variants plus shadcn's \"default\" and \"outline\". */\n variant?: QuestionnaireActionVariant;\n /** Button size. Accepts Nucleux sizes plus shadcn's \"default\" and \"xs\". */\n size?: QuestionnaireActionSize;\n /** Custom render target; receives `{ visible, disabled, shortcut, status }`. */\n render?: QuestionnaireRender<QuestionnaireActionState>;\n}\n\ntype ActionKind = \"previous\" | \"skip\" | \"next\" | \"submit\";\n\nconst variantMap: Record<QuestionnaireActionVariant, ButtonVariant> = {\n default: \"primary\",\n outline: \"secondary\",\n primary: \"primary\",\n cta: \"cta\",\n secondary: \"secondary\",\n ghost: \"ghost\",\n destructive: \"destructive\",\n link: \"link\",\n};\n\nconst sizeMap: Record<QuestionnaireActionSize, ButtonSize> = {\n default: \"md\",\n xs: \"sm\",\n sm: \"sm\",\n md: \"md\",\n lg: \"lg\",\n icon: \"icon\",\n \"icon-sm\": \"icon-sm\",\n \"icon-lg\": \"icon-lg\",\n};\n\nconst actionLayout: Record<ActionKind, string> = {\n previous: \"col-start-1 row-start-1 justify-self-start\",\n skip: \"col-start-2 row-start-1 justify-self-end\",\n next: \"col-start-3 row-start-1 justify-self-end\",\n submit: \"col-start-3 row-start-1 justify-self-end\",\n};\n\nconst actionLabel: Record<ActionKind, string> = {\n previous: \"Previous\",\n skip: \"Skip\",\n next: \"Next\",\n submit: \"Submit\",\n};\n\nfunction useAction(\n kind: ActionKind,\n { variant, size, render, disabled, onClick, className, children, ...props }: QuestionnaireActionProps,\n ref: React.ForwardedRef<HTMLButtonElement>,\n) {\n const root = useRoot(`Questionnaire${actionLabel[kind]}`);\n const last = root.total > 0 && root.index === root.total - 1;\n const visible =\n root.active !== undefined &&\n (kind === \"previous\"\n ? root.index > 0\n : kind === \"skip\"\n ? !root.isRequired(root.active)\n : kind === \"next\"\n ? !last\n : last);\n const status = root.active !== undefined ? root.statusOf(root.active) : \"unanswered\";\n const shortcut = (kind === \"next\" || kind === \"submit\") && visible && !disabled ? \"Enter\" : undefined;\n const state: QuestionnaireActionState = { visible, disabled: !!disabled, shortcut, status };\n const nucleuxVariant = variantMap[variant ?? (kind === \"next\" || kind === \"submit\" ? \"default\" : \"outline\")];\n const nucleuxSize = sizeMap[size ?? \"default\"];\n\n return renderPart(\n \"button\",\n {\n ref,\n type: kind === \"submit\" ? \"submit\" : \"button\",\n disabled,\n hidden: !visible || undefined,\n \"aria-keyshortcuts\": shortcut ? \"Control+Enter Meta+Enter\" : undefined,\n \"data-slot\": `questionnaire-${kind}`,\n \"data-size\": size ?? \"default\",\n \"data-variant\": variant ?? (kind === \"next\" || kind === \"submit\" ? \"default\" : \"outline\"),\n \"data-visible\": flag(visible),\n \"data-hidden\": flag(!visible),\n \"data-disabled\": flag(disabled),\n \"data-shortcut\": shortcut,\n \"data-status\": status,\n className: cn(actionLayout[kind], \"min-h-11 sm:min-h-0 data-[hidden]:hidden\", className),\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (kind === \"previous\") root.previous();\n else if (kind === \"skip\") root.skip();\n else if (kind === \"next\") root.next();\n },\n ...props,\n children: children ?? actionLabel[kind],\n },\n state,\n render ?? <Button variant={nucleuxVariant} size={nucleuxSize} />,\n );\n}\n\n/** Goes back to the previous enabled item. Hidden on the first item. */\nexport const QuestionnairePrevious = React.forwardRef<HTMLButtonElement, QuestionnaireActionProps>((props, ref) =>\n useAction(\"previous\", props, ref),\n);\nQuestionnairePrevious.displayName = \"QuestionnairePrevious\";\n\n/** Records the active optional item as intentionally skipped and moves on. Hidden on required items. */\nexport const QuestionnaireSkip = React.forwardRef<HTMLButtonElement, QuestionnaireActionProps>((props, ref) =>\n useAction(\"skip\", props, ref),\n);\nQuestionnaireSkip.displayName = \"QuestionnaireSkip\";\n\n/** Validates the active item and moves to the next one. Hidden on the last item. */\nexport const QuestionnaireNext = React.forwardRef<HTMLButtonElement, QuestionnaireActionProps>((props, ref) =>\n useAction(\"next\", props, ref),\n);\nQuestionnaireNext.displayName = \"QuestionnaireNext\";\n\n/** Submits the form after validating every enabled item. Shown only on the last item. */\nexport const QuestionnaireSubmit = React.forwardRef<HTMLButtonElement, QuestionnaireActionProps>((props, ref) =>\n useAction(\"submit\", props, ref),\n);\nQuestionnaireSubmit.displayName = \"QuestionnaireSubmit\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,59 @@
1
1
  {
2
2
  "name": "@nucleux/questionnaire",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.7.0",
4
+ "type": "module",
5
+ "sideEffects": false,
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "peerDependencies": {
21
+ "react": ">=18",
22
+ "react-dom": ">=18"
23
+ },
24
+ "dependencies": {
25
+ "@nucleux/utils": "0.7.0",
26
+ "@nucleux/button": "0.7.0",
27
+ "lucide-react": "^0.469.0"
28
+ },
29
+ "devDependencies": {
30
+ "tsup": "^8.3.5",
31
+ "typescript": "^5.7.2",
32
+ "@types/react": "^18.3.18",
33
+ "react": "^18.3.1"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/intelligaia-open-labs/nucleux.git",
42
+ "directory": "packages/questionnaire"
43
+ },
44
+ "homepage": "https://github.com/intelligaia-open-labs/nucleux#readme",
45
+ "description": "Multi-step questionnaire with single, multiple, freeform and skippable answers — Nucleux agentic UI for React.",
46
+ "keywords": [
47
+ "nucleux",
48
+ "react",
49
+ "ui",
50
+ "components",
51
+ "agentic",
52
+ "ai",
53
+ "tailwind",
54
+ "questionnaire"
55
+ ],
56
+ "scripts": {
57
+ "build": "tsup"
58
+ }
6
59
  }