@sustaina/shared-ui 1.23.0 → 1.24.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.
- package/dist/index.d.mts +41 -10
- package/dist/index.d.ts +41 -10
- package/dist/index.js +178 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +179 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/common.ts","../src/utils/filters.ts","../src/utils/date.ts","../src/utils/cn.ts","../src/components/icons/arrow.tsx","../src/components/icons/calendar.tsx","../src/components/icons/check.tsx","../src/components/icons/dots-vertical.tsx","../src/components/icons/empty-data.tsx","../src/components/icons/expand.tsx","../src/components/icons/filter.tsx","../src/components/icons/not-found.tsx","../src/components/icons/setting.tsx","../src/components/icons/triangle-down.tsx","../src/components/icons/warning.tsx","../src/components/ui/accordion.tsx","../src/components/advanceSearch/components/conditions/ExpandCollapse.tsx","../src/components/advanceSearch/operatorMap.ts","../src/components/advanceSearch/hooks/useAdvanceSearch.ts","../src/components/ui/select.tsx","../src/components/advanceSearch/components/conditions/FieldSelect.tsx","../src/components/advanceSearch/types.ts","../src/components/advanceSearch/components/conditions/OperatorSelect.tsx","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../src/components/ui/spinner.tsx","../src/components/ui/input.tsx","../src/components/ui/ClearButton.tsx","../src/components/advanceSearch/components/conditions/types/ConditionTextInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionNumberInput.tsx","../src/components/ui/button.tsx","../src/components/ui/popover.tsx","../src/components/ui/datepicker.tsx","../src/components/datePicker/DatePicker.tsx","../src/components/advanceSearch/components/constants/index.ts","../src/components/advanceSearch/components/conditions/types/ConditionDateInput.tsx","../src/components/ui/monthpicker.tsx","../src/components/monthPicker/MonthPicker.tsx","../src/components/advanceSearch/components/conditions/types/ConditionMonthInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionDropdownInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionCheckboxInput.tsx","../src/components/lookupSelect/LookupSelect.tsx","../src/components/advanceSearch/components/conditions/types/ConditionLookupInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionJSONInput.tsx","../src/components/advanceSearch/components/conditions/ConditionValue.tsx","../src/components/advanceSearch/components/conditions/AddRemoveButtons.tsx","../src/components/advanceSearch/components/conditions/AdvanceSearchRow.tsx","../src/components/advanceSearch/builder/checkbox.ts","../src/components/advanceSearch/builder/helper.ts","../src/components/advanceSearch/builder/datetime.ts","../src/components/advanceSearch/builder/datemonth.ts","../src/components/advanceSearch/builder/dropdown.ts","../src/components/advanceSearch/builder/json.ts","../src/components/advanceSearch/builder/lookup.ts","../src/components/advanceSearch/builder/number.ts","../src/components/advanceSearch/builder/text.ts","../src/components/advanceSearch/builder/uuid.ts","../src/components/advanceSearch/builder/index.ts","../src/components/advanceSearch/components/AdvanceSearch.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/data-table/sortingFns.ts","../src/components/data-table/utils.tsx","../src/hooks/useHover/useHover.ts","../src/hooks/useIntersectionObserver/useIntersectionObserver.ts","../src/hooks/useMediaQuery/useMediaQuery.ts","../src/hooks/useScreenSize/useScreenSize.ts","../src/hooks/useTruncated/useTruncated.ts","../src/components/data-table/cells/HeaderCell.tsx","../src/components/ui/table.tsx","../src/components/data-table/ColumnResizer.tsx","../src/components/data-table/ColumnSeparator.tsx","../src/components/data-table/StatusContentSlot.tsx","../src/components/data-table/DataTableDevTool.tsx","../src/components/data-table/helpers.ts","../src/components/data-table/DataTable.tsx","../src/components/ui/dialog.tsx","../src/components/dialog-alert/lib/utils.ts","../src/components/dialog-alert/components/ui/dialog.tsx","../src/components/dialog-alert/components/ui/button.tsx","../src/components/dialog-alert/lib/constants.ts","../src/components/dialog-alert/locale/default.ts","../src/components/dialog-alert/locale/i18n.ts","../src/components/dialog-alert/DialogAlert.tsx","../src/components/dialog-alert/templates/index.ts","../src/components/dialog-alert/hooks/DialogAlertStore.tsx","../src/components/ui/LoadingOverlay.tsx","../src/components/formulaEditor/constants/formulaOperation.ts","../src/components/formulaEditor/editor/SuggestionList.tsx","../src/components/formulaEditor/editor/EditorExtension.tsx","../src/components/formulaEditor/utils/parseFormulaToken.ts","../src/components/formulaEditor/FormulaEditor.tsx","../src/components/tooltip/tooltip.tsx","../src/components/grid-settings/SortableRow.tsx","../src/components/grid-settings/schema.tsx","../src/components/grid-settings/GridSettingsModal.tsx","../src/components/grid-settings/store/useGridSettingsStore.ts","../src/components/image/image.tsx","../src/components/list/components/table.tsx","../src/components/list/components/container.tsx","../src/components/list/components/header.tsx","../src/components/list/List.tsx","../src/assets/icon/InfoIcon.tsx","../src/components/navbar/navbar.tsx","../src/components/ui/sheet.tsx","../src/components/prevent-page-leave/store/usePreventPageLeaveStore.ts","../src/components/prevent-page-leave/PreventPageLeave.tsx","../src/components/prevent-page-leave/hooks/usePreventPageLeave.ts","../src/components/ui/radio.tsx","../src/components/ui/ImageNode.tsx","../src/components/ui/richtext.tsx","../src/components/ui/separator.tsx","../src/hooks/use-mobile.ts","../src/components/ui/skeleton.tsx","../src/components/ui/index.ts","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/sidebar.tsx","../src/components/cropperModal/type.ts","../src/components/cropperModal/helper.ts","../src/components/cropperModal/cropperModal.tsx","../src/components/truncated/truncated.tsx"],"names":["format","twMerge","clsx","jsx","jsxs","AccordionPrimitive","useState","X","Fragment","createPortal","useCallback","useMemo","SelectPrimitive","ChevronRight","CheckIcon","Triangle","React","Label","LabelPrimitive","FormProvider","React2","Controller","useFormContext","useFormState","Slot","CircleX","cva","React3","PopoverPrimitive","React4","ChevronLeft","parseISO","isValid","DatePicker","placeholder","CalendarIcon","React6","normalizeMonth","defaultDisplayFormatter","defaultValueFormatter","defaultValueParser","MonthPicker","useRef","useEffect","Search","Plus","Minus","parse","compareAsc","useForm","isAfter","CheckboxPrimitive","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","reSplitAlphaNumeric","threshold","ChevronUp","ChevronDown","Bug","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getExpandedRowModel","getGroupedRowModel","isSomeColumnsFilterable","flexRender","createElement","DialogPrimitive","XIcon","cn","Dialog","DialogPrimitive2","DialogPortal","DialogOverlay","DialogContent","DialogHeader","DialogTitle","DialogDescription","buttonVariants","Button","i18n","initReactI18next","useTranslation","create","useLayoutEffect","NodeViewWrapper","PluginKey","Suggestion","ReactDOM","editor","Plugin","tr","Node","mergeAttributes","ReactNodeViewRenderer","nodes","StarterKit","useEditor","EditorContent","Minimize2","Maximize2","TooltipPrimitive","useSortable","React17","CSS","useWatch","GripVertical","Info","CircleMinus","z","zodResolver","useFieldArray","useSensors","useSensor","PointerSensor","DndContext","closestCenter","restrictToParentElement","restrictToVerticalAxis","SortableContext","verticalListSortingStrategy","Image","React18","React19","UserIcon","Icon","CircleHelp","isValidElement","SheetPrimitive","RadioGroupPrimitive","DecoratorNode","HeadingNode","QuoteNode","ListNode","ListItemNode","LinkNode","CodeNode","createCommand","$createParagraphNode","$createTextNode","useLexicalComposerContext","$getSelection","$isRangeSelection","$isLinkNode","$getNodeByKey","$createLinkNode","$insertNodes","TOGGLE_LINK_COMMAND","$isListNode","$isHeadingNode","$isCodeNode","React23","mergeRegister","CAN_UNDO_COMMAND","COMMAND_PRIORITY_NORMAL","CAN_REDO_COMMAND","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_CRITICAL","selection","$setBlocksType","$createHeadingNode","REMOVE_LIST_COMMAND","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","$createQuoteNode","$createCodeNode","FORMAT_TEXT_COMMAND","FORMAT_ELEMENT_COMMAND","Undo","UNDO_COMMAND","Redo","REDO_COMMAND","Bold","Italic","Underline","Strikethrough","InlineCodeIcon","Pilcrow","Heading1","Heading2","Heading3","BulletListIcon","ListOrdered","QuoteIcon","CodeSquare","LinkIcon","Link2Off","ImageIcon","AlignLeft","AlignCenter","AlignRight","COMMAND_PRIORITY_EDITOR","forwardRef","RichText","html","$generateHtmlFromNodes","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","HistoryPlugin","ListPlugin","LinkPlugin","MarkdownShortcutPlugin","TRANSFORMERS","AutoFocusPlugin","OnChangePlugin","Separator","SeparatorPrimitive","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","SwitchPrimitive","TooltipPrimitive2","React24","open","PanelLeftIcon","croppedAreaPixels","Cropper"],"mappings":"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","file":"index.js","sourcesContent":["export function isDefined(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyObject(value: any) {\n return !!value && Object.keys(value).length === 0 && value.constructor === Object;\n}\n\nexport type DebounceOptions = {\n leading?: boolean;\n trailing?: boolean;\n maxWait?: number;\n};\n\nexport type DebouncedFunction<T extends (...args: any[]) => any> = {\n (...args: Parameters<T>): ReturnType<T> | undefined;\n cancel: () => void;\n flush: () => ReturnType<T> | undefined;\n};\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number = 150,\n options?: DebounceOptions\n): DebouncedFunction<T> {\n let lastArgs: Parameters<T> | undefined,\n lastThis: any,\n maxWait: number | undefined,\n result: ReturnType<T> | undefined,\n timerId: ReturnType<typeof setTimeout> | undefined,\n lastCallTime: number | undefined,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func !== \"function\") {\n throw new TypeError(\"Expected a function\");\n }\n\n wait = Number(wait) || 0;\n\n if (options && typeof options === \"object\") {\n leading = !!options.leading;\n maxing = \"maxWait\" in options;\n maxWait = maxing ? Math.max(Number(options.maxWait) || 0, wait) : undefined;\n trailing = \"trailing\" in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs!;\n const thisArg = lastThis!;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time: number) {\n lastInvokeTime = time;\n timerId = setTimeout(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime ?? 0);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const remaining = wait - timeSinceLastCall;\n return maxing ? Math.min(remaining, (maxWait ?? 0) - timeSinceLastInvoke) : remaining;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime ?? 0);\n const timeSinceLastInvoke = time - lastInvokeTime;\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= (maxWait ?? 0))\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\n timerId = undefined;\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced(this: any, ...args: Parameters<T>): ReturnType<T> | undefined {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n lastArgs = args;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n options?: Pick<DebounceOptions, \"leading\" | \"trailing\">\n): DebouncedFunction<T> {\n let leading = true,\n trailing = true;\n\n if (typeof func !== \"function\") {\n throw new TypeError(\"Expected a function\");\n }\n\n if (options) {\n leading = \"leading\" in options ? !!options.leading : leading;\n trailing = \"trailing\" in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n leading,\n maxWait: wait,\n trailing\n });\n}\n","import { isDefined } from \"./common\";\n\nexport function stripNullishObject<T extends Record<string, any>>(value: Partial<T>) {\n if (!isDefined(value)) {\n return {};\n }\n\n try {\n return Object.fromEntries(Object.entries(value).filter(([, propValue]) => isDefined(propValue)));\n } catch {\n return {};\n }\n}\n","const pad = (num: number): string => String(num).padStart(2, \"0\");\n/**\n * Formats an ISO date string according to a specified format.\n *\n * @param isoDateString The input ISO 8601 date string (e.g., '2025-09-22T08:47:15.627Z') or javascript Date object\n * @param format The format string (e.g., 'd/m/Y H:i:s')\n * - d / DD: Day (01-31)\n * - m / MM: Month (01-12)\n * - Y / YYYY: Full Year (e.g., 2025)\n * - H: Hour (00-23)\n * - i: Minute (00-59)\n * - s: Second (00-59)\n * @returns A formatted date string.\n */\nexport function formatISODate(isoDate: string | Date, format: string = \"d/m/Y H:i\"): string {\n const date = new Date(isoDate);\n\n if (isNaN(date.getTime())) {\n return \"Invalid Date\";\n }\n // Note: .getMonth() is 0-indexed (0-11), so we add 1.\n const parts = {\n d: pad(date.getDate()),\n m: pad(date.getMonth() + 1),\n Y: String(date.getFullYear()),\n H: pad(date.getHours()),\n i: pad(date.getMinutes()),\n s: pad(date.getSeconds())\n };\n\n const tokenMap: { [key: string]: PartKey } = {\n // Day\n d: \"d\",\n DD: \"d\",\n // Month\n m: \"m\",\n MM: \"m\",\n // Year\n Y: \"Y\", // 'Y' and 'YYYY' will both map to the 4-digit year\n YYYY: \"Y\",\n // Hour\n H: \"H\",\n // Minute\n i: \"i\",\n // Second\n s: \"s\"\n };\n\n // Define the type for our map keys for type safety\n type PartKey = keyof typeof parts;\n\n return format.replace(/YYYY|Y|MM|m|DD|d|H|i|s/g, (match) => {\n const partKey = tokenMap[match];\n return partKey ? parts[partKey] : match;\n });\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to intelligently combine class names using `clsx`\n * and resolve Tailwind CSS class conflicts using `tailwind-merge`.\n *\n * This function is commonly used in React or other frontend frameworks\n * to conditionally merge Tailwind classes and avoid class duplication or conflict,\n * especially when combining utility variants like `bg-red-500` and `bg-blue-500`.\n *\n * @param {...ClassValue[]} args - A variadic list of class values. Each can be:\n * - string: e.g. `\"px-4 py-2\"`\n * - object: e.g. `{ 'text-red-500': isError }`\n * - array: e.g. `['bg-blue-500', conditionalClass]`\n * These will be normalized and merged by `clsx`, then conflict-resolved by `tailwind-merge`.\n *\n * @returns {string} A single string of valid Tailwind class names with conflicts resolved.\n *\n * @example\n * ```tsx\n * <button className={cn(\"px-4 py-2\", isPrimary && \"bg-blue-500\", \"bg-red-500\")} />\n * // Result: \"px-4 py-2 bg-blue-500\" (if isPrimary is true)\n * ```\n *\n * @see https://github.com/lukeed/clsx - `clsx` docs for conditional class logic\n * @see https://github.com/dcastil/tailwind-merge - `tailwind-merge` docs for conflict resolution\n */\nexport default function cn(...args: ClassValue[]): string {\n return twMerge(clsx(args));\n}\n","import * as React from \"react\";\nimport type { SVGProps } from \"react\";\n\nconst ArrowIcon: React.FC<SVGProps<SVGSVGElement>> = ({\n width = \"1em\",\n height = \"1em\",\n fill = \"none\",\n ...props\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 9\"\n width={width}\n height={height}\n fill={fill}\n {...props}\n >\n <path d=\"M0.293 0.723L6.79 8.723L13.293 0.723H0.293Z\" fill={props.color || \"#127035\"} />\n </svg>\n);\n\nexport default ArrowIcon;\n","import type { SVGProps } from \"react\";\nconst SuiCalendarIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M8.504 11.205H5.837v2.4h2.667zm5.333 0h-2.666v2.4h2.666zm5.334 0h-2.667v2.4h2.667zm2.666-8.4h-1.333v-2.4h-2.667v2.4H7.171v-2.4H4.504v2.4H3.17c-1.48 0-2.654 1.08-2.654 2.4l-.013 16.8c0 1.32 1.187 2.4 2.667 2.4h18.666c1.467 0 2.667-1.08 2.667-2.4v-16.8c0-1.32-1.2-2.4-2.667-2.4m0 19.2H3.171v-13.2h18.666z\"\n />\n </svg>\n);\nexport default SuiCalendarIcon;\n","import type { SVGProps } from \"react\";\nconst SuiCheckIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#check_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M10.976.043c9.629-.793 16.248 9.583 11.392 18.002-4.252 7.37-14.736 8.025-19.907 1.26C-3.276 11.799 1.616.815 10.976.044m5.59 7.791c-.284.048-.555.25-.775.428l-5.159 4.944c-.188.033-2.31-2.268-2.865-2.51-1.413-.619-2.427 1.01-1.22 2.22.73.733 2.573 2.531 3.354 3.044.407.267.853.335 1.295.104 1.429-1.295 2.87-2.6 4.249-3.948.647-.633 1.63-1.47 2.186-2.112.825-.95.12-2.369-1.065-2.169\"\n />\n <path\n fill=\"#fff\"\n d=\"M16.567 7.835c1.186-.2 1.89 1.218 1.065 2.169-.557.64-1.54 1.479-2.187 2.112-1.379 1.348-2.818 2.653-4.248 3.948-.442.23-.889.162-1.295-.105-.782-.512-2.625-2.31-3.355-3.043-1.206-1.21-.192-2.84 1.221-2.221.556.243 2.677 2.544 2.865 2.51l5.16-4.943c.219-.178.489-.38.774-.429z\"\n />\n </g>\n <defs>\n <clipPath id=\"check_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiCheckIcon;\n","import type { SVGProps } from \"react\";\nconst SuiDotsVerticalIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n {...props}\n >\n <g clipPath=\"url(#dots-vertical_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M12.504 9.03a3.373 3.373 0 0 1 3.375 3.375 3.373 3.373 0 0 1-3.375 3.375 3.373 3.373 0 0 1-3.375-3.375 3.373 3.373 0 0 1 3.375-3.375M9.129 4.155a3.373 3.373 0 0 0 3.375 3.375 3.373 3.373 0 0 0 3.375-3.375A3.373 3.373 0 0 0 12.504.78a3.373 3.373 0 0 0-3.375 3.375m0 16.5a3.373 3.373 0 0 0 3.375 3.375 3.373 3.373 0 0 0 3.375-3.375 3.373 3.373 0 0 0-3.375-3.375 3.373 3.373 0 0 0-3.375 3.375\"\n />\n </g>\n <defs>\n <clipPath id=\"dots-vertical_svg__a\">\n <path fill=\"#fff\" d=\"M.504.405h24v24h-24z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiDotsVerticalIcon;\n","import type { SVGProps } from \"react\";\nconst SuiEmptyDataIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 184 152\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse fillOpacity=\".8\" cx=\"67.797\" cy=\"106.89\" rx=\"67.797\" ry=\"12.668\" fill=\"#B0DFAA\" />\n <path\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n fill=\"#CEE5D6\"\n />\n <path\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n fill=\"#DDEEE3\"\n transform=\"translate(13.56)\"\n />\n <path\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n fill=\"#F9F9F9\"\n />\n <path\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n fill=\"#DDEEE3\"\n />\n </g>\n <path\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n fill=\"#DDEEE3\"\n />\n <g transform=\"translate(149.65 15.383)\" fill=\"#FFF\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n);\nexport default SuiEmptyDataIcon;\n","import type { SVGProps } from \"react\";\nconst SuiExpandIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g fill=\"currentColor\" clipPath=\"url(#expand_svg__a)\">\n <path d=\"M11.674.038c.69-.18 1.498.305 1.69 1.2.283 6.934.043 13.962.122 20.93-.128 2.08-2.27 2.537-2.852.602-.282-6.934-.042-13.962-.122-20.93.072-.855.481-1.623 1.163-1.802M19.93 10.11c.024-.474-.188-2.095.498-1.842L24 11.947l-.2.504-3.37 3.288c-.687.252-.475-1.368-.5-1.843h-4.312c-.187 0-.664-.575-.718-.852-.066-.33-.066-1.751 0-2.083.054-.277.531-.852.718-.852h4.313M4.07 13.898c-.025.473.187 2.095-.5 1.842L0 12.06l.2-.504 3.37-3.288c.687-.253.475 1.367.5 1.842h4.312c.187 0 .664.576.718.852.066.33.066 1.752 0 2.084-.054.276-.531.852-.718.852z\" />\n </g>\n <defs>\n <clipPath id=\"expand_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiExpandIcon;\n","import type { SVGProps } from \"react\";\nconst SuiFilterIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#filter_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M.29.332a.85.85 0 0 0-.258.505c-.057.443-.053 2.439.125 2.752l8.58 8.904c.236 2.44-.221 5.164.023 7.57.049.464.147.525.494.83.675.59 3.539 2.57 4.326 2.94s1.45.15 1.654-.619l.022-10.721 8.585-8.904c.178-.317.187-2.313.13-2.752-.085-.639-.748-.793-1.352-.838H1.379C1.034.027.545.105.29.332\"\n />\n </g>\n <defs>\n <clipPath id=\"filter_svg__a\">\n <path fill=\"#fff\" d=\"M24-.001H0v24h24z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiFilterIcon;\n","import React from \"react\";\n\nconst NotFoundIcon: React.FC<React.SVGProps<SVGSVGElement>> = ({\n width = 24,\n height = 24,\n fill = \"currentColor\",\n className = \"\",\n ...props\n}) => (\n <svg\n viewBox=\"0 0 106 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width={width}\n height={height}\n fill={fill}\n className={className}\n {...props}\n >\n <path\n d=\"M44.7381 99.6137C69.3718 99.6137 89.3413 95.8824 89.3413 91.2795C89.3413 86.6767 69.3718 82.9453 44.7381 82.9453C20.1043 82.9453 0.134766 86.6767 0.134766 91.2795C0.134766 95.8824 20.1043 99.6137 44.7381 99.6137Z\"\n fill=\"#B0DFAA\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M80.4202 66.795L64.6801 47.4233C63.9249 46.5114 62.8209 45.9595 61.6584 45.9595H27.8163C26.6545 45.9595 25.5505 46.5114 24.7953 47.4233L9.05579 66.795V76.9154H80.4209V66.795H80.4202Z\"\n fill=\"#CEE5D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.3913 20.957H67.0841C67.782 20.957 68.4514 21.2343 68.9449 21.7278C69.4384 22.2213 69.7157 22.8907 69.7157 23.5886V84.9991C69.7157 85.6971 69.4384 86.3664 68.9449 86.8599C68.4514 87.3534 67.782 87.6307 67.0841 87.6307H22.3913C21.6934 87.6307 21.0241 87.3534 20.5305 86.8599C20.037 86.3664 19.7598 85.6971 19.7598 84.9991V23.5886C19.7598 22.8907 20.037 22.2213 20.5305 21.7278C21.0241 21.2343 21.6934 20.957 22.3913 20.957V20.957Z\"\n fill=\"#F9F9F9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M28.2124 27.5049H61.2631C61.612 27.5049 61.9467 27.6435 62.1935 27.8903C62.4402 28.137 62.5789 28.4717 62.5789 28.8207V45.2398C62.5789 45.5887 62.4402 45.9234 62.1935 46.1702C61.9467 46.4169 61.612 46.5555 61.2631 46.5555H28.2124C27.8634 46.5555 27.5288 46.4169 27.282 46.1702C27.0353 45.9234 26.8966 45.5887 26.8966 45.2398V28.8207C26.8966 28.4717 27.0353 28.137 27.282 27.8903C27.5288 27.6435 27.8634 27.5049 28.2124 27.5049ZM28.3848 53.6983H61.0907C61.4854 53.6983 61.8639 53.8551 62.143 54.1342C62.4221 54.4133 62.5789 54.7918 62.5789 55.1865C62.5789 55.5811 62.4221 55.9597 62.143 56.2387C61.8639 56.5178 61.4854 56.6746 61.0907 56.6746H28.3848C27.9901 56.6746 27.6116 56.5178 27.3325 56.2387C27.0534 55.9597 26.8966 55.5811 26.8966 55.1865C26.8966 54.7918 27.0534 54.4133 27.3325 54.1342C27.6116 53.8551 27.9901 53.6983 28.3848 53.6983ZM28.3848 61.4371H61.0907C61.4855 61.4371 61.8641 61.5939 62.1432 61.8731C62.4224 62.1522 62.5792 62.5308 62.5792 62.9256C62.5792 63.3204 62.4224 63.699 62.1432 63.9781C61.8641 64.2573 61.4855 64.4141 61.0907 64.4141H28.3848C27.99 64.4141 27.6114 64.2573 27.3323 63.9781C27.0531 63.699 26.8963 63.3204 26.8963 62.9256C26.8963 62.5308 27.0531 62.1522 27.3323 61.8731C27.6114 61.5939 27.99 61.4371 28.3848 61.4371ZM80.2749 90.0569C79.7651 92.0772 77.9743 93.5832 75.844 93.5832H13.6315C11.5012 93.5832 9.71044 92.0766 9.20123 90.0569C9.10411 89.6718 9.05505 89.2763 9.05518 88.8792V66.7957H26.3696C28.2822 66.7957 29.8236 68.4062 29.8236 70.3615V70.3878C29.8236 72.3424 31.3828 73.9207 33.2953 73.9207H56.1802C58.0927 73.9207 59.6519 72.3279 59.6519 70.3726V70.3647C59.6519 68.4095 61.1933 66.795 63.1058 66.795H80.4203V88.8799C80.4203 89.2858 80.3697 89.6799 80.2749 90.0569Z\"\n fill=\"#DDEEE3\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M82.4512 22.0242L77.9577 23.7676C77.8423 23.8125 77.7165 23.8239 77.5949 23.8005C77.4733 23.7771 77.3608 23.7198 77.2703 23.6353C77.1797 23.5507 77.1149 23.4424 77.0833 23.3226C77.0516 23.2029 77.0544 23.0767 77.0913 22.9584L78.3656 18.8749C76.6623 16.938 75.6624 14.5762 75.6624 12.0275C75.6624 5.45185 82.3189 0.121582 90.5308 0.121582C98.7406 0.121582 105.398 5.45185 105.398 12.0275C105.398 18.6032 98.7413 23.9334 90.5301 23.9334C87.5512 23.9334 84.7775 23.2321 82.4512 22.0242Z\"\n fill=\"#DDEEE3\"\n />\n <path\n d=\"M96.3874 14.1776C97.4226 14.1776 98.2617 13.3484 98.2617 12.3256C98.2617 11.3028 97.4226 10.4736 96.3874 10.4736C95.3522 10.4736 94.5131 11.3028 94.5131 12.3256C94.5131 13.3484 95.3522 14.1776 96.3874 14.1776Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M86.5479 13.9459H82.7992L84.7058 10.7051L86.5479 13.9459ZM88.8906 10.7051H92.1702V13.9459H88.8906V10.7051Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport default NotFoundIcon;\n","import type { SVGProps } from \"react\";\nconst SuiSettingIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.406 3.26c.052.055 1.256.701 1.331.714.42.067 1.478-.527 2.084-.543.446-.01 1.138.21 1.517.45.454.284 2.42 3.361 2.558 3.907.418 1.629-.495 2.56-1.73 3.405l-.041 1.45c.033.29 1.67 1.242 1.828 2.253.137.86-.036 1.259-.39 1.983-.396.814-1.743 3.053-2.499 3.402-1.53.709-1.898-.129-3.113-.24-.209-.018-1.517.651-1.591.77-.604.952-.065 2.5-1.857 3.028-.658.194-4.207.217-4.888.044-.408-.103-1.001-.517-1.239-.869-.397-.59-.523-2.011-.76-2.262-.044-.047-1.03-.587-1.135-.63-.594-.241-1.633.477-2.412.46-.462-.011-1.187-.283-1.553-.567S.236 16.682.12 16.227c-.384-1.5.199-2.004 1.125-2.958.157-.163.492-.297.567-.419.1-.165.129-1.378.075-1.585-.05-.188-1.661-1.127-1.821-2.146a4.4 4.4 0 0 1 0-1.106c.064-.396 1.772-3.268 2.1-3.662 1.103-1.316 2.62-.889 4.01-.364l1.375-.68C8.103 1.929 8.103.29 9.965.062c.805-.098 3.836-.093 4.535.114.4.116.908.478 1.143.827.394.59.523 2.012.76 2.263zm-3.134-.243h-2.52c-.1.567-.19 1.386-.418 1.9-.36.813-1.217.924-1.932 1.304-.4.212-1.008.788-1.387.858-.934.179-1.845-.32-2.724-.545l-1.125 1.89c0 .134 1.685 1.169 1.808 1.975.083.546-.139 1.006-.144 1.534-.008.649.289 1.264.088 1.908-.181.579-1.752 1.623-1.752 1.748l1.125 1.89c.93-.24 1.95-.812 2.933-.476.28.096.827.605 1.178.791.818.434 1.576.458 1.966 1.41.108.263.369 1.791.459 1.806l2.443-.015c.1-.566.19-1.386.417-1.9.362-.812 1.218-.923 1.932-1.303.4-.213 1.009-.79 1.388-.859.934-.178 1.844.32 2.724.546l1.124-1.89c0-.135-1.684-1.17-1.808-1.976-.082-.545.14-1.006.145-1.533.008-.65-.29-1.264-.088-1.908.18-.58 1.751-1.624 1.751-1.748l-1.124-1.89c-.931.238-1.95.812-2.933.475-.273-.093-.596-.499-.892-.654-1.816-.94-2.471-.89-2.636-3.338z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M11.705 8.245c5.107-.422 5.406 7.472.371 7.555-4.715.077-5.174-7.16-.371-7.555\"\n />\n </svg>\n);\nexport default SuiSettingIcon;\n","import type { SVGProps } from \"react\";\nconst SuiTriangleDownIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 15\"\n {...props}\n >\n <path fill=\"currentColor\" d=\"m0 0 11.994 15L24 0z\" />\n </svg>\n);\nexport default SuiTriangleDownIcon;\n","import type { SVGProps } from \"react\";\nconst SuiWarningIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#warning_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M10.603.061c8.692-.837 15.37 7.07 12.864 15.498-2.772 9.323-15.222 11.462-21.079 3.694C-3.134 11.93 1.465.942 10.603.061m2.858 15.103.734-9.092c.287-3.574-4.695-3.575-4.408 0l.734 9.092h2.941m-1.92 1.916c-1.858.384-1.743 3.333.079 3.55 3.047.364 2.714-4.13-.079-3.55\"\n />\n <path\n fill=\"#fff\"\n d=\"M13.46 15.163h-2.94l-.735-9.091c-.285-3.576 4.695-3.575 4.409 0zM11.54 17.079c2.794-.58 3.127 3.915.08 3.551-1.822-.217-1.938-3.166-.08-3.551\"\n />\n </g>\n <defs>\n <clipPath id=\"warning_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiWarningIcon;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cn } from \"@/utils\";\nimport { ArrowIcon } from \"@/components/icons\";\n\nfunction Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return <AccordionPrimitive.Item data-slot=\"accordion-item\" className={cn(\"\", className)} {...props} />;\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-0\",\n className\n )}\n {...props}\n >\n {children}\n <ArrowIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 w-4 rotate-90\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport clsx from \"clsx\";\n\ntype ExpandCollapseProps = {\n title: ReactNode;\n children: ReactNode;\n portalId: string;\n};\n\nconst ExpandCollapse: React.FC<ExpandCollapseProps> = ({ title, children, portalId }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const Panel = (\n <div\n className={clsx(\n \"overflow-hidden transition-all duration-500 ease-in-out bg-white border-b shadow-md w-full\",\n isOpen ? \"max-h-[700px] opacity-100\" : \"max-h-0 opacity-0\"\n )}\n >\n <div className=\"relative p-6\">\n <button\n onClick={() => setIsOpen(false)}\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700\"\n data-testid=\"advsearch-icon-close\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n {children}\n </div>\n </div>\n );\n\n return (\n <>\n {/* ปุ่ม trigger อยู่ตรงไหนก็ได้ */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"px-4 py-2 text-sm text-gray-700 hover:text-black\"\n data-testid=\"advsearch-icon-search\"\n >\n {title}\n </button>\n\n {/* Render panel */}\n {portalId && typeof document !== \"undefined\" ?\n document.getElementById(portalId) ?\n createPortal(Panel, document.getElementById(portalId)!)\n : null\n : Panel}\n </>\n );\n};\n\nexport default ExpandCollapse;\n","// advance-search/operatorMap.ts\nimport type { FieldType, OperatorValue } from \"./types\";\n\nexport const OPERATOR_MAP: Record<FieldType, OperatorValue[]> = {\n text: [\n \"contains\",\n \"equals\",\n \"beginsWith\",\n \"endsWith\",\n \"notEquals\",\n \"notBeginsWith\",\n \"notEndsWith\",\n \"notContains\"\n ],\n number: [\"equals\", \"notEquals\", \"gt\", \"gte\", \"lt\", \"lte\"],\n date: [\"on\", \"after\", \"before\", \"between\"],\n datetime: [\"on\", \"after\", \"before\", \"between\"],\n datemonth: [\"on\", \"after\", \"before\", \"between\"],\n checkbox: [\"is\", \"isNot\"],\n dropdown: [\"is\", \"isNot\"],\n lookup: [\"containsAny\", \"containsOnly\", \"containsAll\", \"notContains\"],\n uuid: [\"equals\", \"notEquals\", \"gt\", \"gte\", \"lt\", \"lte\"],\n json: [\"equals\", \"notEquals\", \"containsAny\"]\n};\n","// advance-search/hooks/useAdvanceSearch.ts\nimport { useCallback, useMemo, useState } from \"react\";\nimport { OPERATOR_MAP } from \"../operatorMap\";\nimport { FieldSchema, FieldType, OperatorValue, RowState } from \"../types\";\n\nfunction findField(fields: FieldSchema[], name: string): FieldSchema | undefined {\n return fields.find((f) => f.name === name);\n}\n\nfunction getFieldType(fields: FieldSchema[], name: string): FieldType {\n return findField(fields, name)?.type ?? \"text\";\n}\n\nfunction firstOperatorFor(fields: FieldSchema[], fieldName: string): OperatorValue {\n const t = getFieldType(fields, fieldName);\n return OPERATOR_MAP[t][0];\n}\n\nfunction makeNewRow(field: FieldSchema): RowState {\n const op = OPERATOR_MAP[field.type][0];\n if (op === \"between\") {\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: \"between\",\n value: \"\",\n value2: \"\",\n multiTableSearch: field.multiTableSearch,\n lookupFieldName: field.lookupFieldName\n };\n }\n if (field.type === \"json\") {\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: op,\n value: \"\",\n multiTableSearch: field.multiTableSearch,\n jsonPath: field.jsonPath,\n lookupFieldName: field.lookupFieldName\n };\n }\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: op,\n value: \"\",\n multiTableSearch: field.multiTableSearch,\n lookupFieldName: field.lookupFieldName\n };\n}\n\nexport interface UseAdvanceSearchOptions {\n fields: FieldSchema[];\n limitRows?: number;\n}\n\nexport function useAdvanceSearch({ fields, limitRows }: UseAdvanceSearchOptions) {\n const [rows, setRows] = useState<RowState[]>([makeNewRow(fields[0])]);\n\n const updateRows = useCallback((next: RowState[]) => {\n setRows(next);\n }, []);\n\n const operatorsForField = useCallback(\n (fieldName: string): OperatorValue[] => {\n const t = getFieldType(fields, fieldName);\n return OPERATOR_MAP[t];\n },\n [fields]\n );\n\n const addRow = useCallback(() => {\n if (limitRows && rows.length >= limitRows) return;\n\n const lastRow = rows[rows.length - 1];\n const lastField = fields.find((f) => f.name === lastRow?.fieldName) ?? fields[0];\n updateRows([...rows, makeNewRow(lastField)]);\n }, [rows, fields, updateRows, limitRows]);\n\n const removeRow = useCallback(\n (id: string) => {\n if (rows.length === 1) return;\n updateRows(rows.filter((r) => r.id !== id));\n },\n [rows, updateRows]\n );\n\n const clearRow = useCallback(\n (id: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n const nextOp = firstOperatorFor(fields, r.fieldName);\n return nextOp === \"between\" ?\n {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n operator: \"between\",\n value: \"\",\n value2: \"\",\n multiTableSearch: r.multiTableSearch,\n jsonPath: r.jsonPath,\n lookupFieldName: r.lookupFieldName\n }\n : {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n operator: nextOp,\n value: \"\",\n multiTableSearch: r.multiTableSearch,\n jsonPath: r.jsonPath,\n lookupFieldName: r.lookupFieldName\n };\n })\n );\n },\n [rows, fields, updateRows]\n );\n\n const clearAllRow = useCallback(() => {\n updateRows([makeNewRow(fields[0])]);\n }, [fields, updateRows]);\n\n const changeField = useCallback(\n (id: string, fieldName: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n const newRow = makeNewRow(fields.find((f) => f.name === fieldName) || fields[0]);\n return { ...newRow, id: r.id }; // new row data but same id\n })\n );\n },\n [rows, fields, updateRows]\n );\n\n const changeOperator = useCallback(\n (id: string, operator: OperatorValue) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n if (operator === \"between\") {\n return {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n multiTableSearch: r.multiTableSearch,\n lookupFieldName: r.lookupFieldName,\n jsonPath: r.jsonPath,\n operator,\n value: \"\",\n value2: \"\"\n };\n }\n return {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n multiTableSearch: r.multiTableSearch,\n lookupFieldName: r.lookupFieldName,\n jsonPath: r.jsonPath,\n operator,\n value: \"\"\n };\n })\n );\n },\n [rows, updateRows]\n );\n\n const changeValue = useCallback(\n (id: string, which: \"value\" | \"value2\", val: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n if (which === \"value2\" && r.operator !== \"between\") return r;\n return { ...r, [which]: val } as RowState;\n })\n );\n },\n [rows, updateRows]\n );\n\n const fieldOptions = useMemo(\n () =>\n fields.map((f) => ({\n value: f.name,\n label: f.label ?? f.name\n })),\n [fields]\n );\n\n return {\n rows,\n addRow,\n removeRow,\n clearRow,\n clearAllRow,\n changeField,\n changeOperator,\n changeValue,\n operatorsForField,\n fieldOptions\n };\n}\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, Triangle, ChevronRight } from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-placeholder:text-gray-00 [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[state=open]:border-ring data-[state=open]:[&_svg]:text-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronRight className=\"h-4 w-4 rotate-90 text-gray-300\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"m-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"hover:bg-[#EAF5EE] hover:text-[#379A2A] [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 \",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-2 hover:text-[#379A2A]\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <Triangle className=\"size-2 fill-current\" style={{ transform: \"rotate(0deg)\" }} />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <Triangle className=\"size-2 fill-current\" style={{ transform: \"rotate(180deg)\" }} />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue\n};\n","import React from \"react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport type { Option, RowState } from \"@/components/advanceSearch/types\";\n\nexport const FieldSelect: React.FC<{\n row: RowState;\n fieldOptions: Option[];\n onChangeField: (fieldName: string) => void;\n}> = ({ row, fieldOptions, onChangeField }) => (\n <div className=\"w-full\">\n <Select value={row.fieldName} onValueChange={(value) => onChangeField(value)}>\n <SelectTrigger\n className=\"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\"\n data-testid=\"advsearch-dropdown-selectfield\"\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent className=\"w-full min-w-[unset]\">\n {fieldOptions.map((f) => (\n <SelectItem key={f.value} value={f.value}>\n {f.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n);\n","// advance-search/types.ts\nexport type FieldType =\n | \"text\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"datemonth\"\n | \"checkbox\"\n | \"dropdown\"\n | \"lookup\"\n | \"uuid\"\n | \"json\";\n\nexport type Option = { value: string; label: string };\n\nexport interface FieldSchemaBase<T extends FieldType> {\n name: string;\n type: T;\n label?: string;\n multiTableSearch?: boolean;\n lookupFieldName?: string;\n}\n\nexport interface DropdownFieldSchema extends FieldSchemaBase<\"dropdown\"> {\n options: Option[];\n}\nexport type TextFieldSchema = FieldSchemaBase<\"text\">;\nexport type NumberFieldSchema = FieldSchemaBase<\"number\">;\nexport type DateFieldSchema = FieldSchemaBase<\"date\">;\nexport type DateTimeFieldSchema = FieldSchemaBase<\"datetime\">;\nexport type DateMonthFieldSchema = FieldSchemaBase<\"datemonth\">;\nexport type CheckboxFieldSchema = FieldSchemaBase<\"checkbox\">;\nexport interface LookupFieldSchema extends FieldSchemaBase<\"lookup\"> {\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<Option[]>;\n suggestionDebounce?: number;\n placeholder?: string;\n noOptionsMessage?: string;\n loadingMessage?: string;\n}\nexport type UUIDFieldSchema = FieldSchemaBase<\"uuid\">;\nexport interface JSONFieldSchema extends FieldSchemaBase<\"json\"> {\n jsonPath?: string[];\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<Option[]>;\n suggestionDebounce?: number;\n placeholder?: string;\n noOptionsMessage?: string;\n loadingMessage?: string;\n}\n\nexport type FieldSchema =\n | DropdownFieldSchema\n | TextFieldSchema\n | NumberFieldSchema\n | DateFieldSchema\n | DateTimeFieldSchema\n | DateMonthFieldSchema\n | CheckboxFieldSchema\n | LookupFieldSchema\n | UUIDFieldSchema\n | JSONFieldSchema;\n\n// ตัวดำเนินการทั้งหมดที่รองรับ\nexport type OperatorValue =\n | \"contains\"\n | \"equals\"\n | \"beginsWith\"\n | \"endsWith\"\n | \"notEquals\"\n | \"notBeginsWith\"\n | \"notEndsWith\"\n | \"notContains\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"on\"\n | \"after\"\n | \"before\"\n | \"between\"\n | \"is\"\n | \"isNot\"\n | \"containsAny\"\n | \"containsOnly\"\n | \"containsAll\";\n\n// ใช้เป็น source of truth สำหรับ label\nexport const OPERATOR_LABEL: Record<OperatorValue, string> = {\n contains: \"Contains\",\n equals: \"Equals\",\n beginsWith: \"Begins with\",\n endsWith: \"Ends with\",\n notEquals: \"Not equals\",\n notBeginsWith: \"Not begins with\",\n notEndsWith: \"Not ends with\",\n notContains: \"Not contains\",\n gt: \"Greater than\",\n gte: \"Greater or equal\",\n lt: \"Less than\",\n lte: \"Less or equal\",\n on: \"On\",\n after: \"After\",\n before: \"Before\",\n between: \"Between\",\n is: \"Is\",\n isNot: \"Is not\",\n containsAny: \"Contains at least one of\",\n containsOnly: \"Contains only\",\n containsAll: \"Contains all of\"\n};\n\nexport type RowState =\n | {\n id: string;\n fieldName: string;\n fieldType: FieldType;\n operator: Exclude<OperatorValue, \"between\">;\n value: string | any[];\n value2?: undefined;\n multiTableSearch?: boolean;\n jsonPath?: string[];\n lookupFieldName?: string;\n }\n | {\n id: string;\n fieldName: string;\n fieldType: FieldType;\n operator: \"between\";\n value: string; // ช่องจาก\n value2: string; // ช่องถึง\n multiTableSearch?: boolean;\n jsonPath?: string[];\n lookupFieldName?: string;\n };\n\nexport interface Params {\n AND: Record<string, unknown>[];\n}\n\nexport interface AdvanceSearchProps {\n fields: FieldSchema[];\n portalId: string;\n limitRows?: number;\n iconColor?: string;\n onSearch?: (param: Params) => void;\n onClear?: () => void;\n shortDateFormat?: string;\n}\n\nexport interface ParamsBuilder {\n build(row: RowState): object;\n}\n","import React from \"react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport type { OperatorValue, RowState } from \"@/components/advanceSearch/types\";\nimport { OPERATOR_LABEL } from \"@/components/advanceSearch/types\";\n\nexport const OperatorSelect: React.FC<{\n row: RowState;\n operators: OperatorValue[];\n onChangeOperator: (op: OperatorValue) => void;\n error?: string;\n}> = ({ row, operators, onChangeOperator, error }) => {\n React.useEffect(() => {\n if (!operators.length) return;\n if (!operators.includes(row.operator)) {\n onChangeOperator(operators[0]);\n }\n }, [operators, row.operator, onChangeOperator]);\n\n return (\n <div className=\"w-full\">\n <Select value={row.operator} onValueChange={(value) => onChangeOperator(value as OperatorValue)}>\n <SelectTrigger\n aria-invalid={error ? \"true\" : \"false\"}\n className={`w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0 ${\n error ? \"border border-red-500\" : \"\"\n }`}\n data-testid=\"advsearch-dropdown-cond\"\n >\n <SelectValue placeholder=\"Select operator\" />\n </SelectTrigger>\n <SelectContent className=\"w-full min-w-[unset]\">\n {operators.map((op) => (\n <SelectItem key={op} value={op}>\n {OPERATOR_LABEL[op] ?? op}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && <span className=\"mt-1 block text-xs text-red-600\">{error}</span>}\n </div>\n );\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"@/utils\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues\n} from \"react-hook-form\";\n\nimport { CircleX } from \"lucide-react\";\nimport { cn } from \"@/utils\";\nimport { Label } from \"@/components/ui/label\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn(\"grid gap-2\", className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? \"\") : props.children;\n\n if (!body) return null;\n\n return (\n <div\n data-slot=\"form-message\"\n className={cn(\"text-xs leading-tight mt-1 flex items-center gap-1.5 text-destructive\", className)}\n id={formMessageId}\n {...props}\n >\n <CircleX className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <p>{body}</p>\n </div>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/utils\";\n\nconst spinnerVariants = cva(\"relative inline-block aspect-square transform-gpu\", {\n variants: {\n variant: {\n primary: \"[&>div]:bg-[#77ab8a]\",\n secondary: \"[&>div]:bg-[#ab9555]\",\n destructive: \"[&>div]:bg-destructive\",\n muted: \"[&>div]:bg-muted-foreground\"\n },\n size: {\n sm: \"size-7\",\n default: \"size-8\",\n lg: \"size-9\",\n xl: \"size-10\",\n \"2xl\": \"size-12\"\n }\n },\n defaultVariants: { variant: \"primary\", size: \"default\" }\n});\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<VariantProps<typeof spinnerVariants>, \"size\"> {\n className?: string;\n size?: VariantProps<typeof spinnerVariants>[\"size\"] | number;\n}\n\nconst Spinner = ({ className, variant, size = \"default\", ...props }: SpinnerProps) => (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n typeof size === \"string\" ? spinnerVariants({ variant, size }) : spinnerVariants({ variant }),\n className\n )}\n style={typeof size === \"number\" ? { width: size, height: size } : undefined}\n {...props}\n >\n {Array.from({ length: 12 }).map((_, i) => (\n <div\n key={i}\n className=\"animate-sus-spinner absolute left-[46.5%] top-[4.4%] h-[24%] w-[7%] origin-[center_190%] rounded-full opacity-[0.1] will-change-transform\"\n style={{\n transform: `rotate(${i * 30}deg)`,\n animationDelay: `${(i * 0.083).toFixed(3)}s`\n }}\n aria-hidden=\"true\"\n />\n ))}\n <span className=\"sr-only\">Loading...</span>\n </div>\n);\n\nexport { Spinner, spinnerVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CircleX } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\nimport { Spinner } from \"@/components/ui/spinner\";\n\nexport type InputPrimitiveProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst InputPrimitive = React.forwardRef<HTMLInputElement, InputPrimitiveProps>(\n ({ className, type = \"text\", ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n className={cn(\n \"placeholder:text-neutral-400 text-neutral-900 flex h-10 w-full min-w-0 items-center rounded-lg border bg-white px-4 text-sm transition-colors outline-none file:inline-flex file:h-7 file:rounded-md file:border-0 file:bg-transparent file:px-2 file:text-sm file:font-medium hover:border-neutral-500 focus-visible:border-neutral-900 focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-400 disabled:border-neutral-200 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n\nconst inputVariants = cva(\"\", {\n variants: {\n controlSize: {\n sm: \"h-9 rounded-md px-3 text-sm\",\n md: \"h-10 rounded-lg px-4 text-sm\",\n lg: \"h-12 rounded-xl px-5 text-base\"\n },\n fullWidth: {\n true: \"w-full\",\n false: \"w-auto\"\n },\n appearance: {\n filled: \"border-neutral-200 hover:border-neutral-500 focus-visible:border-neutral-900\",\n unfilled: \"bg-white border-neutral-300 hover:border-neutral-500 focus-visible:border-neutral-900\"\n }\n },\n defaultVariants: {\n controlSize: \"md\",\n fullWidth: true,\n appearance: \"filled\"\n }\n});\n\nexport type InputProps = Omit<InputPrimitiveProps, \"size\" | \"prefix\"> &\n VariantProps<typeof inputVariants> & {\n prefix?: React.ReactNode;\n prefixProps?: React.HTMLAttributes<HTMLSpanElement>;\n prefixInteractive?: boolean;\n suffix?: React.ReactNode;\n suffixProps?: React.HTMLAttributes<HTMLSpanElement>;\n suffixInteractive?: boolean;\n wrapperClassName?: string;\n invalid?: boolean;\n loading?: boolean;\n loadingIcon?: React.ReactNode;\n validationMessage?: React.ReactNode;\n validationIcon?: React.ReactNode;\n validationMessageProps?: React.HTMLAttributes<HTMLParagraphElement>;\n onValueChange?: (value: string) => void;\n };\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n wrapperClassName,\n controlSize,\n fullWidth,\n appearance,\n prefix,\n prefixProps,\n prefixInteractive,\n suffix,\n suffixProps,\n suffixInteractive,\n invalid,\n loading,\n loadingIcon,\n validationMessage,\n validationIcon,\n validationMessageProps,\n onValueChange,\n type = \"text\",\n ...rest\n },\n ref\n ) => {\n const inputProps = rest;\n\n const hasPrefix = Boolean(prefix);\n const hasSuffix = Boolean(suffix) || loading;\n const isFullWidth = fullWidth ?? true;\n\n const {\n \"aria-invalid\": ariaInvalidProp,\n \"aria-describedby\": ariaDescribedByProp,\n onChange: onChangeProp\n } = rest;\n\n const ariaInvalid = invalid ?? ariaInvalidProp;\n const messageId = React.useId();\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (event) => {\n onChangeProp?.(event);\n onValueChange?.(event.target.value);\n },\n [onChangeProp, onValueChange]\n );\n\n const resolvedAriaInvalid =\n typeof ariaInvalid === \"string\" ? ariaInvalid\n : ariaInvalid ? true\n : undefined;\n\n const describedBy =\n validationMessage ?\n [ariaDescribedByProp, messageId].filter(Boolean).join(\" \")\n : ariaDescribedByProp;\n\n const controlWrapperClassName = cn(\n \"relative inline-flex items-center\",\n isFullWidth ? \"w-full\" : \"w-fit\",\n !validationMessage && wrapperClassName\n );\n\n const inputElement = (\n <InputPrimitive\n ref={ref}\n type={type}\n data-slot=\"input\"\n className={cn(\n inputVariants({ controlSize, fullWidth: isFullWidth, appearance }),\n hasPrefix && \"pl-10\",\n hasSuffix && \"pr-10\",\n className\n )}\n aria-invalid={resolvedAriaInvalid}\n aria-describedby={describedBy || undefined}\n onChange={handleChange}\n {...inputProps}\n />\n );\n\n if (!hasPrefix && !hasSuffix && !validationMessage) {\n return inputElement;\n }\n\n const { className: prefixClassName, ...prefixRest } = prefixProps ?? {};\n const { className: suffixClassName, ...suffixRest } = suffixProps ?? {};\n const { className: validationMessageClassName, ...validationMessageRest } =\n validationMessageProps ?? {};\n\n const suffixContent = (\n <>\n {suffix}\n {loading && (loadingIcon ?? <Spinner size={16} variant=\"muted\" />)}\n </>\n );\n\n const inputWithAffixes = (\n <div data-slot=\"input-wrapper\" className={controlWrapperClassName}>\n {hasPrefix && (\n <span\n {...prefixRest}\n className={cn(\n \"absolute left-3 top-1/2 -translate-y-1/2 inline-flex items-center text-muted-foreground\",\n !prefixInteractive && \"pointer-events-none\",\n prefixClassName\n )}\n >\n {prefix}\n </span>\n )}\n\n {inputElement}\n\n {hasSuffix && (\n <span\n {...suffixRest}\n className={cn(\n \"absolute right-3 top-1/2 -translate-y-1/2 inline-flex items-center gap-2 text-muted-foreground\",\n !suffixInteractive && \"pointer-events-none\",\n suffixClassName\n )}\n >\n {suffixContent}\n </span>\n )}\n </div>\n );\n\n if (!validationMessage) {\n return inputWithAffixes;\n }\n\n return (\n <div className={cn(\"flex flex-col gap-1\", isFullWidth ? \"w-full\" : \"w-fit\", wrapperClassName)}>\n {inputWithAffixes}\n <p\n id={messageId}\n {...validationMessageRest}\n className={cn(\"flex items-center gap-2 text-sm text-destructive\", validationMessageClassName)}\n >\n {validationIcon ?? <CircleX className=\"size-4\" />}\n <span>{validationMessage}</span>\n </p>\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { InputPrimitive, Input, inputVariants };\n","import React from \"react\";\nimport { X } from \"lucide-react\";\nimport \"@/styles/index.css\";\n\ntype ClearButtonProps = {\n onClick?: () => void;\n title?: string;\n ariaLabel?: string;\n className?: string;\n};\n\nexport const ClearButton: React.FC<ClearButtonProps> = ({\n onClick,\n title = \"Clear\",\n ariaLabel = \"Clear value\",\n className = \"\"\n}) => {\n const triggerClear = () => {\n if (onClick) onClick();\n };\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n triggerClear();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.stopPropagation();\n triggerClear();\n }\n };\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`clear-button ${className}`.trim()}\n aria-label={ariaLabel}\n title={title}\n >\n <X className=\"icon\" />\n </span>\n );\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionTextInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative\">\n <FormControl>\n <Input\n {...field}\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"text\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n data-testid=\"advsearch-input-value\"\n />\n </FormControl>\n\n <span className=\"absolute inset-y-0 right-3 flex items-center\">\n {field.value && <ClearButton onClick={handleClear} />}\n </span>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionNumberInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative\">\n <FormControl>\n <Input\n {...field}\n type=\"number\"\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"numeric\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 \"\n />\n </FormControl>\n\n <span className=\"absolute inset-y-0 right-3 flex items-center\">\n {field.value && <ClearButton onClick={handleClear} />}\n </span>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/utils\";\n\nconst buttonVariants = cva(\n \"disabled:bg-[#E1E1E1] disabled:text-[#BBBBBB] inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"bg-sus-primary-1 hover:bg-sus-primary-1/50 text-primary-foreground shadow-xs hover:bg-sus-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n cancel:\n \"border bg-[#8B8B8B] text-accent-foreground shadow-xs hover:bg-accent hover:text-black dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n defaultSelect: \"bg-primary text-primary-foreground shadow-xs hover:bg-sus-primary/90 py-2\",\n defaultOutline:\n \"border bg-background py-2 shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n warning:\n \"border bg-[#f9d629] text-black shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-[#f9d629] dark:hover:bg-[#f9d629]/50\"\n },\n size: {\n default: \"h-9 px-4 has-[>svg]:px-3\",\n option: \"py-5 h-9 px-4 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-5\",\n \"icon-sm\": \"size-[22px]\",\n \"icon-md\": \"size-7\",\n \"icon-lg\": \"size-10\"\n },\n active: {\n true: \"bg-sus-primary-1 text-white\",\n false: \"\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n active,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n active?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className, active }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"@/utils\";\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverArrow(props: React.ComponentProps<typeof PopoverPrimitive.Arrow>) {\n return <PopoverPrimitive.Arrow {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverArrow };\n","\"use client\";\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"@/utils\";\n\ntype ButtonVariant =\n | \"default\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"destructive\"\n | \"secondary\"\n | null\n | undefined;\n\ntype DatePickerProps = {\n selectedDate?: Date;\n onDateSelect?: (date: Date) => void;\n onMonthForward?: () => void;\n onMonthBackward?: () => void;\n callbacks?: {\n yearLabel?: (year: number) => string;\n monthLabel?: (year: number, monthIndex: number) => string; // 0-11\n dayLabel?: (date: Date) => string | number; // สำหรับ custom แสดงเลขวัน\n weekdayLabel?: (index0Mon: number) => string; // 0 = Mon ... 6 = Sun\n };\n variant?: {\n day?: {\n main?: ButtonVariant;\n selected?: ButtonVariant;\n outside?: ButtonVariant; // วันที่นอกเดือน (optional)\n today?: ButtonVariant; // วันนี้ (optional)\n };\n chevrons?: ButtonVariant;\n };\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/** ---------- Utils ---------- */\nconst isSameDay = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n\nconst startOfDay = (d: Date) => {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n};\n\nconst clampToDay = (d?: Date) => (d ? startOfDay(d) : undefined);\n\nconst addMonths = (date: Date, n: number) => {\n const d = new Date(date);\n d.setMonth(d.getMonth() + n);\n return d;\n};\n\nconst daysInMonth = (year: number, monthIndex: number) => new Date(year, monthIndex + 1, 0).getDate();\n\nconst DEFAULT_MONTH_FORMATTER = new Intl.DateTimeFormat(\"en-US\", { month: \"short\" });\n\n/** คืน array 6 แถว x 7 คอลัมน์ ของวันที่ (รวมวันนอกเดือนเพื่อเติมตาราง) */\nfunction buildCalendarGrid(displayed: Date, weekStartsOnMonday = true) {\n const year = displayed.getFullYear();\n const month = displayed.getMonth();\n\n const firstOfMonth = new Date(year, month, 1);\n const firstWeekday = firstOfMonth.getDay(); // 0 Sun - 6 Sat\n const offset =\n weekStartsOnMonday ?\n firstWeekday === 0 ?\n 6\n : firstWeekday - 1\n : firstWeekday;\n\n const totalDays = daysInMonth(year, month);\n\n const prevMonth = addMonths(firstOfMonth, -1);\n const prevMonthDays = daysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());\n\n const grid: { date: Date; inCurrentMonth: boolean }[] = [];\n\n // เติมวันของเดือนก่อนหน้า\n for (let i = offset - 1; i >= 0; i--) {\n const d = new Date(prevMonth.getFullYear(), prevMonth.getMonth(), prevMonthDays - i);\n grid.push({ date: d, inCurrentMonth: false });\n }\n // เติมวันของเดือนนี้\n for (let d = 1; d <= totalDays; d++) {\n grid.push({ date: new Date(year, month, d), inCurrentMonth: true });\n }\n // เติมวันของเดือนถัดไปให้ครบ 42 ช่อง\n while (grid.length < 42) {\n const last = grid[grid.length - 1].date;\n const next = new Date(last);\n next.setDate(last.getDate() + 1);\n grid.push({ date: next, inCurrentMonth: false });\n }\n\n // แบ่งเป็น 6 แถว\n const rows: (typeof grid)[] = [];\n for (let r = 0; r < 6; r++) rows.push(grid.slice(r * 7, r * 7 + 7));\n return rows;\n}\n\n/** ---------- Component ---------- */\nexport function DatePicker({\n selectedDate,\n onDateSelect,\n callbacks,\n onMonthBackward,\n onMonthForward,\n variant,\n minDate,\n maxDate,\n disabledDates,\n className,\n ...props\n}: DatePickerProps) {\n const today = React.useMemo(() => startOfDay(new Date()), []);\n const [displayed, setDisplayed] = React.useState<Date>(\n selectedDate ? new Date(selectedDate) : new Date()\n );\n\n // sanitize\n minDate = clampToDay(minDate);\n maxDate = clampToDay(maxDate);\n\n const disabledSet = React.useMemo(() => {\n const s = new Set<string>();\n disabledDates?.forEach((d) => s.add(startOfDay(d).toISOString()));\n return s;\n }, [disabledDates]);\n\n const displayYear = displayed.getFullYear();\n const displayMonth = displayed.getMonth();\n\n const weekdays = React.useMemo(() => {\n // จันทร์-อาทิตย์\n const labels: string[] = [];\n for (let i = 0; i < 7; i++) {\n const idx = i; // 0 Mon ... 6 Sun\n const fallback = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"][idx];\n labels.push(callbacks?.weekdayLabel?.(idx) ?? fallback);\n }\n return labels;\n }, [callbacks]);\n\n const grid = React.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);\n\n const isDateDisabled = (date: Date) => {\n const d = startOfDay(date);\n if (minDate && d < minDate) return true;\n if (maxDate && d > maxDate) return true;\n if (disabledSet.has(d.toISOString())) return true;\n return false;\n };\n\n const minYear = minDate?.getFullYear();\n const maxYear = maxDate?.getFullYear();\n\n const getMonthLabel = React.useCallback(\n (year: number, monthIndex: number) => {\n const label = callbacks?.monthLabel?.(year, monthIndex);\n if (label === null || label === undefined) {\n return DEFAULT_MONTH_FORMATTER.format(new Date(year, monthIndex, 1));\n }\n return label;\n },\n [callbacks]\n );\n\n const getYearLabel = React.useCallback(\n (year: number) => {\n const label = callbacks?.yearLabel?.(year);\n if (label === null || label === undefined) return String(year);\n return typeof label === \"string\" ? label : String(label);\n },\n [callbacks]\n );\n\n const clampMonthToBounds = React.useCallback(\n (year: number, monthIndex: number) => {\n let output = monthIndex;\n if (typeof minYear === \"number\" && year === minYear && minDate) {\n const boundary = minDate.getMonth();\n if (output < boundary) output = boundary;\n }\n if (typeof maxYear === \"number\" && year === maxYear && maxDate) {\n const boundary = maxDate.getMonth();\n if (output > boundary) output = boundary;\n }\n return output;\n },\n [maxDate, minDate, maxYear, minYear]\n );\n\n const yearOptions = React.useMemo(() => {\n const fallbackWindow = 50;\n const start = typeof minYear === \"number\" ? minYear : displayYear - fallbackWindow;\n const end = typeof maxYear === \"number\" ? maxYear : displayYear + fallbackWindow;\n\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n\n if (!years.includes(displayYear)) {\n years.push(displayYear);\n years.sort((a, b) => a - b);\n }\n\n if (selectedDate) {\n const selectedYear = selectedDate.getFullYear();\n if (!years.includes(selectedYear)) {\n years.push(selectedYear);\n years.sort((a, b) => a - b);\n }\n }\n\n return years;\n }, [displayYear, maxYear, minYear, selectedDate]);\n\n const monthOptions = React.useMemo(() => {\n const months = Array.from({ length: 12 }, (_, monthIndex) => {\n const disabled =\n (typeof minYear === \"number\" &&\n displayYear === minYear &&\n minDate &&\n monthIndex < minDate.getMonth()) ||\n (typeof maxYear === \"number\" &&\n displayYear === maxYear &&\n maxDate &&\n monthIndex > maxDate.getMonth());\n\n return {\n value: monthIndex,\n disabled,\n label: getMonthLabel(displayYear, monthIndex)\n };\n });\n\n const currentMonthExists = months.some((option) => option.value === displayMonth);\n if (!currentMonthExists) {\n months.push({\n value: displayMonth,\n disabled: false,\n label: getMonthLabel(displayYear, displayMonth)\n });\n }\n\n return months\n .sort((a, b) => a.value - b.value)\n .filter((option, index, arr) => index === 0 || option.value !== arr[index - 1].value);\n }, [displayMonth, displayYear, getMonthLabel, maxDate, maxYear, minDate, minYear]);\n\n const handleMonthSelect = React.useCallback((nextValue: string) => {\n const nextMonth = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextMonth)) return;\n\n setDisplayed((prev) => {\n const next = new Date(prev);\n next.setDate(1);\n next.setMonth(nextMonth);\n return next;\n });\n }, []);\n\n const handleYearSelect = React.useCallback(\n (nextValue: string) => {\n const nextYear = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextYear)) return;\n\n setDisplayed((prev) => {\n const next = new Date(prev);\n next.setFullYear(nextYear);\n const adjustedMonth = clampMonthToBounds(nextYear, next.getMonth());\n next.setMonth(adjustedMonth);\n next.setDate(1);\n return next;\n });\n },\n [clampMonthToBounds]\n );\n\n return (\n <div className={cn(\"min-w-[260px] w-[300px] p-3\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-2\">\n <button\n onClick={() => {\n setDisplayed(addMonths(displayed, -1));\n onMonthBackward?.();\n }}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex h-8 w-8 items-center justify-center p-0\"\n )}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"h-4 w-4 opacity-70\" />\n </button>\n\n <Select value={String(displayMonth)} onValueChange={handleMonthSelect}>\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select month\"\n className=\"h-8 min-w-[110px] justify-between rounded-md border border-gray-200 bg-white px-3 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={getMonthLabel(displayYear, displayMonth)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {monthOptions.map((option) => (\n <SelectItem\n className=\"text-center w-full\"\n key={option.value}\n value={String(option.value)}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select value={String(displayYear)} onValueChange={handleYearSelect}>\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select year\"\n className=\"h-8 min-w-[90px] justify-between rounded-md border border-gray-200 bg-white px-3 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={getYearLabel(displayYear)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {yearOptions.map((year) => (\n <SelectItem\n key={year}\n value={String(year)}\n disabled={\n (typeof minYear === \"number\" && year < minYear) ||\n (typeof maxYear === \"number\" && year > maxYear)\n }\n >\n {getYearLabel(year)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <button\n onClick={() => {\n setDisplayed(addMonths(displayed, 1));\n onMonthForward?.();\n }}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex h-8 w-8 items-center justify-center p-0\"\n )}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"h-4 w-4 opacity-70\" />\n </button>\n </div>\n\n {/* Weekday header */}\n <div className=\"grid grid-cols-7 text-[11px] text-muted-foreground mb-1\">\n {weekdays.map((w, i) => (\n <div key={i} className=\"text-center py-1\">\n {w}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {grid.map((row, r) =>\n row.map(({ date, inCurrentMonth }, c) => {\n const selected = selectedDate && isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const disabled = isDateDisabled(date);\n\n // เลือก variant ของปุ่มวัน\n let variantName: ButtonVariant = variant?.day?.main ?? \"ghost\";\n if (!inCurrentMonth) variantName = variant?.day?.outside ?? \"ghost\";\n if (isToday && !selected) variantName = variant?.day?.today ?? variantName;\n if (selected) variantName = variant?.day?.selected ?? \"default\";\n\n const label = callbacks?.dayLabel?.(date) ?? date.getDate();\n\n return (\n <button\n key={`${r}-${c}`}\n onClick={() => !disabled && onDateSelect?.(date)}\n disabled={disabled || !inCurrentMonth}\n className={cn(\n buttonVariants({ variant: variantName }),\n \"h-9 w-full p-0 text-sm font-normal rounded-md transition-all duration-150\",\n \"border border-transparent\",\n !inCurrentMonth && \"opacity-50 pointer-events-none\",\n selected ? \"bg-[#379a2a] text-white\" : (\n \"bg-white text-black hover:border-[#379a2a] hover:bg-green-50 active:bg-green-100\"\n )\n )}\n aria-selected={selected}\n aria-label={date.toDateString()}\n >\n {label}\n </button>\n );\n })\n )}\n </div>\n </div>\n );\n}\n\n/* ===== Example usage =====\n<DatePicker\n selectedDate={value}\n onDateSelect={(d) => setValue(d)}\n minDate={new Date(2020,0,1)}\n maxDate={new Date(2030,11,31)}\n disabledDates={[new Date(2025,0,1)]}\n/>\n*/\n","import React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { format, isValid, parseISO } from \"date-fns\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { DatePicker as CalendarDatePicker } from \"@/components/ui/datepicker\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\n\ntype CalendarProps = React.ComponentProps<typeof CalendarDatePicker>;\n\nconst defaultDisplayFormatter = (date: Date) => format(date, \"dd/MM/yyyy\");\nconst defaultValueFormatter = (date: Date) => format(date, \"yyyy-MM-dd\");\nconst defaultValueParser = (value: string) => {\n const parsed = parseISO(value);\n return isValid(parsed) ? parsed : undefined;\n};\n\nexport type DatePickerProps = {\n value?: Date | string | null;\n onChange?: (date?: Date) => void;\n onValueChange?: (value?: string) => void;\n placeholder?: string;\n allowClear?: boolean;\n displayFormatter?: (date: Date) => string;\n valueFormatter?: (date: Date) => string;\n valueParser?: (value: string) => Date | undefined;\n buttonClassName?: string;\n wrapperClassName?: string;\n invalid?: boolean;\n calendarClassName?: string;\n popoverContentClassName?: string;\n disabled?: boolean;\n closeOnSelect?: boolean;\n clearAriaLabel?: string;\n ariaLabel?: string;\n} & Omit<CalendarProps, \"selectedDate\" | \"onDateSelect\" | \"className\">;\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onChange,\n onValueChange,\n placeholder = \"DD/MM/YYYY\",\n allowClear = true,\n displayFormatter,\n valueFormatter,\n valueParser,\n buttonClassName,\n wrapperClassName,\n invalid = false,\n calendarClassName,\n popoverContentClassName,\n disabled = false,\n closeOnSelect = true,\n clearAriaLabel = \"Clear date\",\n ariaLabel,\n ...calendarProps\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const parser = React.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);\n const outputFormatter = React.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);\n const labelFormatter = React.useMemo(\n () => displayFormatter ?? defaultDisplayFormatter,\n [displayFormatter]\n );\n\n const parsedValue = React.useMemo(() => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value;\n const parsed = parser(value);\n return parsed && isValid(parsed) ? parsed : undefined;\n }, [parser, value]);\n\n const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder;\n const buttonAriaLabel =\n ariaLabel ??\n (parsedValue ? `Change date, current selection ${labelFormatter(parsedValue)}` : \"Open date picker\");\n\n const shouldShowClear = allowClear && !disabled && !!parsedValue;\n\n const handleClose = React.useCallback(() => setOpen(false), []);\n const emitChange = React.useCallback(\n (next?: Date) => {\n onChange?.(next);\n onValueChange?.(next ? outputFormatter(next) : undefined);\n },\n [onChange, onValueChange, outputFormatter]\n );\n\n const handleSelect = React.useCallback(\n (next?: Date) => {\n emitChange(next);\n if (closeOnSelect && next) handleClose();\n },\n [closeOnSelect, emitChange, handleClose]\n );\n\n const handleClear = React.useCallback(() => {\n emitChange(undefined);\n handleClose();\n }, [emitChange, handleClose]);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n setOpen(nextOpen);\n },\n [disabled]\n );\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <div className=\"relative\">\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"relative !flex w-full items-center justify-between rounded-md bg-white pl-4 text-left text-sm font-medium shadow-none hover:bg-white focus-visible:ring-0 focus-visible:ring-offset-0\",\n \"min-h-[36px]\",\n !parsedValue ? \"text-gray-400\" : \"text-gray-700\",\n invalid &&\n \"border-destructive focus-visible:border-destructive focus-visible:ring-destructive/30\",\n shouldShowClear ? \"pr-8\" : \"pr-4\",\n buttonClassName\n )}\n aria-invalid={invalid || undefined}\n aria-label={buttonAriaLabel}\n >\n <span className=\"flex-1 truncate\">{buttonLabel}</span>\n <span className=\"flex items-center gap-2 text-[#9CA3AF] shrink-0\">\n <CalendarIcon className=\"h-4 w-4\" />\n </span>\n </Button>\n </PopoverTrigger>\n\n <PopoverContent className={cn(\"w-auto p-0\", popoverContentClassName)} align=\"start\">\n <CalendarDatePicker\n {...calendarProps}\n className={calendarClassName}\n selectedDate={parsedValue}\n onDateSelect={handleSelect}\n />\n </PopoverContent>\n </Popover>\n {shouldShowClear && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearAriaLabel}\n title={clearAriaLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n </div>\n </div>\n );\n};\n","export const fallbackShortDateFormat = \"DD/MM/YYYY\";\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { DatePicker } from \"@/components/datePicker\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\nimport { fallbackShortDateFormat } from \"../../constants\";\nimport { formatISODate } from \"@/utils\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n shortDateFormat?: string;\n}\n\nexport const ConditionDateInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n shortDateFormat = fallbackShortDateFormat\n}) => {\n const isBetween = row.operator === \"between\";\n\n const buildAriaLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Select end date\";\n if (isBetween) return \"Select start date\";\n return \"Select date\";\n };\n\n const buildClearLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Clear end date\";\n if (isBetween) return \"Clear start date\";\n return \"Clear date\";\n };\n\n const renderPicker = (fieldName: string, which: \"value\" | \"value2\", options?: { isEnd?: boolean }) => (\n <FormField\n control={control}\n name={fieldName}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const handleValueChange = (next?: string) => {\n field.onChange(next ?? undefined);\n if (!next) {\n onClear(which);\n }\n };\n\n return (\n <FormItem className=\"relative w-full min-w-0\">\n <FormControl>\n <DatePicker\n {...field}\n value={field.value || undefined}\n onValueChange={handleValueChange}\n placeholder={shortDateFormat}\n ariaLabel={buildAriaLabel(options?.isEnd)}\n clearAriaLabel={buildClearLabel(options?.isEnd)}\n invalid={Boolean(fieldState.error)}\n displayFormatter={(d) => formatISODate(d, shortDateFormat)}\n wrapperClassName=\"min-w-0\"\n data-testid=\"advsearch-date-value\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n );\n\n if (isBetween) {\n return (\n <div className=\"grid items-center gap-3 md:grid-cols-[1fr_auto_1fr] max-w-full min-w-0\">\n <div className=\"min-w-0\">{renderPicker(`value_${row.id}`, \"value\")}</div>\n <span className=\"text-center font-bold text-inherit whitespace-nowrap\">To</span>\n <div className=\"min-w-0\">{renderPicker(`value2_${row.id}`, \"value2\", { isEnd: true })}</div>\n </div>\n );\n }\n\n return renderPicker(`value_${row.id}`, \"value\");\n};\n","\"use client\";\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"@/utils\";\n\ntype ButtonVariant =\n | \"default\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"destructive\"\n | \"secondary\"\n | null\n | undefined;\n\ntype MonthCell = {\n number: number;\n name: string;\n};\n\nconst MONTHS: MonthCell[][] = [\n [\n { number: 0, name: \"Jan\" },\n { number: 1, name: \"Feb\" },\n { number: 2, name: \"Mar\" },\n { number: 3, name: \"Apr\" }\n ],\n [\n { number: 4, name: \"May\" },\n { number: 5, name: \"Jun\" },\n { number: 6, name: \"Jul\" },\n { number: 7, name: \"Aug\" }\n ],\n [\n { number: 8, name: \"Sep\" },\n { number: 9, name: \"Oct\" },\n { number: 10, name: \"Nov\" },\n { number: 11, name: \"Dec\" }\n ]\n];\n\ntype MonthPickerCallbacks = {\n yearLabel?: (year: number) => string;\n monthLabel?: (month: MonthCell) => string;\n};\n\ntype MonthPickerVariant = {\n calendar?: {\n main?: ButtonVariant;\n selected?: ButtonVariant;\n };\n chevrons?: ButtonVariant;\n};\n\nexport type MonthPickerProps = {\n selectedDate?: Date;\n onDateSelect?: (date?: Date) => void;\n onYearForward?: () => void;\n onYearBackward?: () => void;\n callbacks?: MonthPickerCallbacks;\n variant?: MonthPickerVariant;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\ntype MonthCalProps = Pick<\n MonthPickerProps,\n | \"selectedDate\"\n | \"onDateSelect\"\n | \"onYearForward\"\n | \"onYearBackward\"\n | \"callbacks\"\n | \"variant\"\n | \"minDate\"\n | \"maxDate\"\n | \"disabledDates\"\n>;\n\nconst normalizeMonth = (input?: Date) => {\n if (!input) return undefined;\n const next = new Date(input);\n next.setDate(1);\n next.setHours(0, 0, 0, 0);\n return next;\n};\n\nfunction MonthPicker({\n selectedDate,\n onDateSelect,\n minDate,\n maxDate,\n disabledDates,\n callbacks,\n onYearBackward,\n onYearForward,\n variant,\n className,\n ...props\n}: MonthPickerProps) {\n return (\n <div className={cn(\"min-w-[200px] w-[280px] p-3\", className)} {...props}>\n <div className=\"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\">\n <div className=\"space-y-4 w-full\">\n <MonthCal\n selectedDate={selectedDate}\n onDateSelect={onDateSelect}\n callbacks={callbacks}\n onYearBackward={onYearBackward}\n onYearForward={onYearForward}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction MonthCal({\n selectedDate,\n onDateSelect,\n callbacks,\n variant,\n minDate,\n maxDate,\n disabledDates,\n onYearBackward,\n onYearForward\n}: MonthCalProps) {\n const today = React.useMemo(() => {\n const now = new Date();\n now.setDate(1);\n now.setHours(0, 0, 0, 0);\n return now;\n }, []);\n\n const selectedMonthDate = React.useMemo(() => normalizeMonth(selectedDate), [selectedDate]);\n const min = React.useMemo(() => normalizeMonth(minDate), [minDate]);\n const max = React.useMemo(() => normalizeMonth(maxDate), [maxDate]);\n\n let effectiveMin = min;\n if (min && max && min > max) {\n effectiveMin = max;\n }\n\n const minYear = effectiveMin?.getFullYear();\n const minMonth = effectiveMin?.getMonth();\n const maxYear = max?.getFullYear();\n const maxMonth = max?.getMonth();\n\n const [menuYear, setMenuYear] = React.useState(\n () => selectedMonthDate?.getFullYear() ?? today.getFullYear()\n );\n\n React.useEffect(() => {\n if (selectedMonthDate) {\n const year = selectedMonthDate.getFullYear();\n if (year !== menuYear) {\n setMenuYear(year);\n }\n }\n }, [selectedMonthDate, menuYear]);\n\n React.useEffect(() => {\n if (typeof minYear === \"number\" && menuYear < minYear) {\n setMenuYear(minYear);\n return;\n }\n if (typeof maxYear === \"number\" && menuYear > maxYear) {\n setMenuYear(maxYear);\n }\n }, [minYear, maxYear, menuYear]);\n\n const disablePrevYear = typeof minYear === \"number\" ? menuYear <= minYear : false;\n const disableNextYear = typeof maxYear === \"number\" ? menuYear >= maxYear : false;\n\n const yearOptions = React.useMemo(() => {\n const fallbackWindow = 50;\n const start = typeof minYear === \"number\" ? minYear : menuYear - fallbackWindow;\n const end = typeof maxYear === \"number\" ? maxYear : menuYear + fallbackWindow;\n\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n\n if (!years.includes(menuYear)) {\n years.push(menuYear);\n years.sort((a, b) => a - b);\n }\n\n return years;\n }, [maxYear, menuYear, minYear]);\n\n const formatYearLabel = React.useCallback(\n (year: number) => {\n const raw = callbacks?.yearLabel?.(year);\n if (raw === null || raw === undefined) return String(year);\n return typeof raw === \"string\" ? raw : String(raw);\n },\n [callbacks]\n );\n\n const handleYearSelect = React.useCallback(\n (nextValue: string) => {\n const nextYear = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextYear)) return;\n if (typeof minYear === \"number\" && nextYear < minYear) return;\n if (typeof maxYear === \"number\" && nextYear > maxYear) return;\n setMenuYear(nextYear);\n },\n [maxYear, minYear]\n );\n\n const disabledPairs = React.useMemo(() => {\n if (!disabledDates?.length) return [] as { year: number; month: number }[];\n const pairs: { year: number; month: number }[] = [];\n disabledDates.forEach((date) => {\n const normalized = normalizeMonth(date);\n if (normalized) {\n pairs.push({\n year: normalized.getFullYear(),\n month: normalized.getMonth()\n });\n }\n });\n return pairs;\n }, [disabledDates]);\n\n return (\n <>\n <div className=\"flex items-center justify-between\">\n <button\n onClick={() => {\n if (disablePrevYear) return;\n setMenuYear((prev) => prev - 1);\n onYearBackward?.();\n }}\n disabled={disablePrevYear}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex items-center justify-center h-7 w-7 p-0\"\n )}\n >\n <ChevronLeft className=\"opacity-50 h-4 w-4\" />\n </button>\n\n <Select\n value={String(menuYear)}\n onValueChange={handleYearSelect}\n disabled={disablePrevYear && disableNextYear}\n >\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select year\"\n className=\"h-7 w-[100px] justify-center rounded-md border border-gray-200 bg-white px-2 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={formatYearLabel(menuYear)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {yearOptions.map((year) => (\n <SelectItem\n key={year}\n value={String(year)}\n disabled={\n (typeof minYear === \"number\" && year < minYear) ||\n (typeof maxYear === \"number\" && year > maxYear)\n }\n >\n {formatYearLabel(year)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <button\n onClick={() => {\n if (disableNextYear) return;\n setMenuYear((prev) => prev + 1);\n onYearForward?.();\n }}\n disabled={disableNextYear}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex items-center justify-center h-7 w-7 p-0\"\n )}\n >\n <ChevronRight className=\"opacity-50 h-4 w-4\" />\n </button>\n </div>\n\n <table className=\"w-full border-collapse space-y-1\">\n <tbody>\n {MONTHS.map((row, rowIndex) => (\n <tr key={\"row-\" + rowIndex} className=\"flex w-full mt-2 gap-2\">\n {row.map((m) => {\n const afterMax =\n maxMonth !== undefined && maxYear !== undefined ?\n menuYear > maxYear || (menuYear === maxYear && m.number > maxMonth)\n : false;\n const beforeMin =\n minMonth !== undefined && minYear !== undefined ?\n menuYear < minYear || (menuYear === minYear && m.number < minMonth)\n : false;\n const disabledByList = disabledPairs.some(\n (d) => d.year === menuYear && d.month === m.number\n );\n\n const isDisabled = afterMax || beforeMin || disabledByList;\n const isSelected =\n !isDisabled &&\n !!selectedMonthDate &&\n selectedMonthDate.getFullYear() === menuYear &&\n selectedMonthDate.getMonth() === m.number;\n\n return (\n <td key={m.number} className=\"h-10 w-1/4 text-center text-sm p-0 relative\">\n <button\n onClick={() => {\n if (isDisabled) return;\n if (\n selectedMonthDate &&\n selectedMonthDate.getFullYear() === menuYear &&\n selectedMonthDate.getMonth() === m.number\n ) {\n onDateSelect?.(undefined);\n } else {\n const next = new Date(menuYear, m.number, 1);\n next.setHours(0, 0, 0, 0);\n onDateSelect?.(next);\n }\n }}\n disabled={isDisabled}\n className={cn(\n buttonVariants({\n variant:\n isSelected ?\n (variant?.calendar?.selected ?? \"default\")\n : (variant?.calendar?.main ?? \"ghost\")\n }),\n \"h-9 w-full p-0 text-sm font-normal rounded-md transition-all duration-150\",\n \"border border-transparent\",\n\n isDisabled && \"opacity-50 pointer-events-none\",\n\n isSelected ?\n \"bg-[#379a2a] text-white hover:bg-[#2f8524] active:bg-[#276f1e]\"\n : \"bg-white text-black hover:border-[#379a2a] hover:bg-green-50 active:bg-green-100\"\n )}\n >\n {callbacks?.monthLabel ? callbacks.monthLabel(m) : m.name}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </>\n );\n}\n\nMonthPicker.displayName = \"MonthPicker\";\n\nexport { MonthPicker };\n","import React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { format, isValid, parseISO } from \"date-fns\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { MonthPicker as CalendarMonthPicker } from \"@/components/ui/monthpicker\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\n\ntype CalendarProps = React.ComponentProps<typeof CalendarMonthPicker>;\n\nconst normalizeMonth = (input?: Date | null) => {\n if (!input || !isValid(input)) return undefined;\n const normalized = new Date(input);\n normalized.setDate(1);\n normalized.setHours(0, 0, 0, 0);\n return normalized;\n};\n\nconst defaultDisplayFormatter = (month: Date) => format(month, \"MMM yyyy\");\nconst defaultValueFormatter = (month: Date) => format(month, \"yyyy-MM\");\nconst defaultValueParser = (value: string) => normalizeMonth(parseISO(value));\n\nexport type MonthPickerProps = {\n value?: Date | string | null;\n onChange?: (month?: Date) => void;\n onValueChange?: (value?: string) => void;\n placeholder?: string;\n allowClear?: boolean;\n displayFormatter?: (month: Date) => string;\n valueFormatter?: (month: Date) => string;\n valueParser?: (value: string) => Date | undefined;\n buttonClassName?: string;\n wrapperClassName?: string;\n invalid?: boolean;\n calendarClassName?: string;\n popoverContentClassName?: string;\n disabled?: boolean;\n closeOnSelect?: boolean;\n clearAriaLabel?: string;\n ariaLabel?: string;\n} & Omit<CalendarProps, \"selectedDate\" | \"onDateSelect\" | \"className\">;\n\nexport const MonthPicker: React.FC<MonthPickerProps> = ({\n value,\n onChange,\n onValueChange,\n placeholder = \"MM/YYYY\",\n allowClear = true,\n displayFormatter,\n valueFormatter,\n valueParser,\n buttonClassName,\n wrapperClassName,\n invalid = false,\n calendarClassName,\n popoverContentClassName,\n disabled = false,\n closeOnSelect = true,\n clearAriaLabel = \"Clear month\",\n ariaLabel,\n ...calendarProps\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const parser = React.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);\n const outputFormatter = React.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);\n const labelFormatter = React.useMemo(\n () => displayFormatter ?? defaultDisplayFormatter,\n [displayFormatter]\n );\n\n const parsedValue = React.useMemo(() => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return normalizeMonth(value);\n if (typeof value === \"string\") {\n const parsed = parser(value);\n return parsed ? normalizeMonth(parsed) : undefined;\n }\n return undefined;\n }, [parser, value]);\n\n const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder;\n const buttonAriaLabel =\n ariaLabel ??\n (parsedValue ?\n `Change month, current selection ${labelFormatter(parsedValue)}`\n : \"Open month picker\");\n\n const shouldShowClear = allowClear && !disabled && !!parsedValue;\n\n const handleClose = React.useCallback(() => setOpen(false), []);\n const emitChange = React.useCallback(\n (next?: Date) => {\n const normalized = next ? normalizeMonth(next) : undefined;\n onChange?.(normalized);\n onValueChange?.(normalized ? outputFormatter(normalized) : undefined);\n },\n [onChange, onValueChange, outputFormatter]\n );\n\n const handleSelect = React.useCallback(\n (next?: Date) => {\n emitChange(next);\n if (closeOnSelect && next) handleClose();\n },\n [closeOnSelect, emitChange, handleClose]\n );\n\n const handleClear = React.useCallback(() => {\n emitChange(undefined);\n handleClose();\n }, [emitChange, handleClose]);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n setOpen(nextOpen);\n },\n [disabled]\n );\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <div className=\"relative\">\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"relative !flex w-full items-center justify-between rounded-md bg-white pl-4 text-left text-sm font-medium shadow-none hover:bg-white focus-visible:ring-0 focus-visible:ring-offset-0\",\n \"min-h-[36px]\",\n !parsedValue ? \"text-gray-400\" : \"text-gray-700\",\n invalid &&\n \"border-destructive focus-visible:border-destructive focus-visible:ring-destructive/30\",\n shouldShowClear ? \"pr-8\" : \"pr-4\",\n buttonClassName\n )}\n aria-invalid={invalid || undefined}\n aria-label={buttonAriaLabel}\n >\n <span className=\"flex-1 truncate\">{buttonLabel}</span>\n <span className=\"flex items-center gap-2 text-[#9CA3AF] shrink-0\">\n <CalendarIcon className=\"h-4 w-4\" />\n </span>\n </Button>\n </PopoverTrigger>\n\n <PopoverContent className={cn(\"w-auto p-0\", popoverContentClassName)} align=\"start\">\n <CalendarMonthPicker\n {...calendarProps}\n className={calendarClassName}\n selectedDate={parsedValue}\n onDateSelect={handleSelect}\n />\n </PopoverContent>\n </Popover>\n {shouldShowClear && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearAriaLabel}\n title={clearAriaLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { format } from \"date-fns\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { MonthPicker } from \"@/components/monthPicker\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nconst placeholder = \"MM/YYYY\";\n\nexport const ConditionMonthInput: React.FC<Props> = ({ row, control, onClear }) => {\n const isBetween = row.operator === \"between\";\n\n const buildAriaLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Select end month\";\n if (isBetween) return \"Select start month\";\n return \"Select month\";\n };\n\n const buildClearLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Clear end month\";\n if (isBetween) return \"Clear start month\";\n return \"Clear month\";\n };\n\n const renderPicker = (fieldName: string, which: \"value\" | \"value2\", options?: { isEnd?: boolean }) => (\n <FormField\n control={control}\n name={fieldName}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = field.value || undefined;\n\n const handleValueChange = (next?: string) => {\n field.onChange(next ?? undefined);\n if (!next) {\n onClear(which);\n }\n };\n\n return (\n <FormItem className=\"relative w-full min-w-0\">\n <FormControl>\n <MonthPicker\n {...field}\n value={value}\n onValueChange={handleValueChange}\n placeholder={placeholder}\n ariaLabel={buildAriaLabel(options?.isEnd)}\n clearAriaLabel={buildClearLabel(options?.isEnd)}\n displayFormatter={(month) => format(month, \"MM/yyyy\")}\n invalid={Boolean(fieldState.error)}\n wrapperClassName=\"min-w-0\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n );\n\n if (isBetween) {\n return (\n <div className=\"grid items-center gap-3 md:grid-cols-[1fr_auto_1fr] max-w-full min-w-0\">\n <div className=\"min-w-0\">{renderPicker(`value_${row.id}`, \"value\")}</div>\n\n <span className=\"text-center font-bold text-inherit whitespace-nowrap\">To</span>\n\n <div className=\"min-w-0\">{renderPicker(`value2_${row.id}`, \"value2\", { isEnd: true })}</div>\n </div>\n );\n }\n\n return renderPicker(`value_${row.id}`, \"value\");\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\nimport type { RowState, FieldSchema } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n fieldSchema?: FieldSchema;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionDropdownInput: React.FC<Props> = ({ row, control, fieldSchema, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n const hasValue = Boolean(field.value);\n const clearLabel = \"Clear selected value\";\n\n return (\n <FormItem className=\"relative\">\n <Select value={field.value ?? \"\"} onValueChange={field.onChange}>\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\",\n hasValue ? \"pr-8\" : \"pr-4\"\n )}\n data-testid=\"advsearch-dropdown-value\"\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"w-full min-w-[unset]\">\n {fieldSchema &&\n \"options\" in fieldSchema &&\n fieldSchema.options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {hasValue && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearLabel}\n title={clearLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionCheckboxInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n const hasValue = Boolean(field.value);\n const clearLabel = \"Clear selected value\";\n\n return (\n <FormItem className=\"relative w-full\">\n <Select value={field.value ?? \"\"} onValueChange={field.onChange}>\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\",\n hasValue ? \"pr-8\" : \"pr-4\"\n )}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"w-full min-w-[unset]\">\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n {hasValue && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearLabel}\n title={clearLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Search, X } from \"lucide-react\";\nimport { NotFoundIcon } from \"@/components/icons\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\n\nexport interface LookupSelectOption {\n value: string;\n label: string;\n}\n\nexport interface LookupSelectProps {\n value?: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n onClear?: () => void;\n error?: boolean;\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<LookupSelectOption[]>;\n suggestionDebounce?: number;\n noOptionsMessage?: string;\n loadingMessage?: string;\n dropdownPortalId?: string;\n}\n\nexport const LookupSelect: React.FC<LookupSelectProps> = ({\n value = [],\n onChange,\n onClear,\n error,\n placeholder,\n maxTags = 10,\n fetchSuggestions,\n suggestionDebounce = 250,\n noOptionsMessage = \"No records found. Please try a different search.\",\n loadingMessage = \"Loading...\",\n dropdownPortalId\n}) => {\n const [inputValue, setInputValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [suggestions, setSuggestions] = useState<LookupSelectOption[]>([]);\n const [optionLabels, setOptionLabels] = useState<Record<string, string>>({});\n const [loading, setLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const fetchDelayRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const requestIdRef = useRef(0);\n const [dropdownStyles, setDropdownStyles] = useState<React.CSSProperties>();\n const dropdownContentRef = useRef<HTMLDivElement | null>(null);\n const assignDropdownContentRef = useCallback((node: HTMLDivElement | null) => {\n dropdownContentRef.current = node;\n }, []);\n\n const dropdownPortalElement = useMemo(() => {\n if (typeof document === \"undefined\") return null;\n if (dropdownPortalId) {\n const element = document.getElementById(dropdownPortalId);\n if (element) return element;\n }\n\n return document.body;\n }, [dropdownPortalId]);\n\n const limitReached = value.length >= maxTags;\n\n const upsertOptionLabels = useCallback((options: LookupSelectOption[]) => {\n setOptionLabels((prev) => {\n let next: Record<string, string> | null = null;\n options.forEach((opt) => {\n if (prev[opt.value] === opt.label) return;\n if (!next) {\n next = { ...prev };\n }\n next[opt.value] = opt.label;\n });\n return next ?? prev;\n });\n }, []);\n\n const addTag = useCallback(\n (val: string) => {\n const trimmed = val.trim();\n if (!trimmed) return;\n if (value.includes(trimmed)) return;\n if (value.length >= maxTags) return;\n\n onChange([...value, trimmed]);\n setInputValue(\"\");\n setSuggestions([]);\n setIsDropdownOpen(false);\n },\n [value, onChange, maxTags]\n );\n\n const removeTag = useCallback(\n (index: number) => {\n if (index < 0) return;\n const newTags = value.filter((_, i) => i !== index);\n onChange(newTags);\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n }\n if (e.key === \"Backspace\" && !inputValue) {\n removeTag(value.length - 1);\n }\n },\n [inputValue, removeTag, value.length]\n );\n\n const handleClear = useCallback(() => {\n setInputValue(\"\");\n setSuggestions([]);\n setIsDropdownOpen(false);\n setFetchError(null);\n if (onClear) onClear();\n }, [onClear]);\n\n const handleSuggestionSelect = useCallback(\n (option: LookupSelectOption) => {\n upsertOptionLabels([option]);\n addTag(option.value);\n inputRef.current?.focus();\n setTimeout(() => {\n inputRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, 100);\n },\n [addTag, upsertOptionLabels]\n );\n\n const updateDropdownPosition = useCallback(() => {\n if (!dropdownPortalElement || !containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n setDropdownStyles({\n position: \"absolute\",\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n zIndex: 50\n });\n }, [dropdownPortalElement]);\n\n useEffect(() => {\n if (!fetchSuggestions) return;\n\n if (fetchDelayRef.current) {\n clearTimeout(fetchDelayRef.current);\n }\n\n const query = inputValue.trim();\n\n if (!query) {\n setSuggestions([]);\n setIsDropdownOpen(false);\n setLoading(false);\n setFetchError(null);\n return;\n }\n\n setLoading(true);\n setFetchError(null);\n const requestId = ++requestIdRef.current;\n\n fetchDelayRef.current = setTimeout(() => {\n fetchSuggestions(query)\n .then((items) => {\n if (requestIdRef.current !== requestId) return;\n setSuggestions(items);\n upsertOptionLabels(items);\n setIsDropdownOpen(true);\n })\n .catch((err) => {\n if (requestIdRef.current !== requestId) return;\n console.error(\"Failed to fetch lookup options\", err);\n setSuggestions([]);\n setIsDropdownOpen(false);\n setFetchError(\"Failed to load options\");\n })\n .finally(() => {\n if (requestIdRef.current === requestId) {\n setLoading(false);\n }\n });\n }, suggestionDebounce);\n\n return () => {\n if (fetchDelayRef.current) {\n clearTimeout(fetchDelayRef.current);\n }\n };\n }, [inputValue, fetchSuggestions, suggestionDebounce, upsertOptionLabels]);\n\n useEffect(() => {\n const handleDocumentClick = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target)) return;\n if (dropdownContentRef.current?.contains(target)) return;\n setIsDropdownOpen(false);\n };\n\n document.addEventListener(\"mousedown\", handleDocumentClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleDocumentClick);\n };\n }, []);\n\n useEffect(() => {\n if (!limitReached) return;\n setIsDropdownOpen(false);\n }, [limitReached]);\n\n useEffect(() => {\n if (!dropdownPortalElement) return;\n if (!isDropdownOpen) return;\n\n updateDropdownPosition();\n\n const handleReposition = () => updateDropdownPosition();\n\n window.addEventListener(\"resize\", handleReposition);\n window.addEventListener(\"scroll\", handleReposition, true);\n\n return () => {\n window.removeEventListener(\"resize\", handleReposition);\n window.removeEventListener(\"scroll\", handleReposition, true);\n };\n }, [dropdownPortalElement, isDropdownOpen, updateDropdownPosition]);\n\n const resolvedPlaceholder = placeholder ?? \"Select\";\n const showDropdown = isDropdownOpen && !fetchError;\n\n const dropdownContent = (\n <div className=\"overflow-hidden rounded-md border border-gray-200 bg-white shadow-lg\">\n {loading ?\n <div className=\"px-3 py-2 text-sm text-inherit\">{loadingMessage}</div>\n : suggestions.length === 0 ?\n <div className=\"flex flex-col items-center justify-center px-3 py-4 text-sm text-inherit text-center\">\n <NotFoundIcon className=\"w-full max-w-[80px] h-auto\" />\n <span className=\"pt-3\">{noOptionsMessage}</span>\n </div>\n : <ul className=\"max-h-48 overflow-y-auto py-1\">\n {suggestions.map((option) => {\n const disabled = value.includes(option.value) || limitReached;\n return (\n <li key={option.value}>\n <button\n type=\"button\"\n className={`flex w-full items-center justify-between px-3 py-2 text-left text-sm transition hover:bg-gray-100\n ${disabled ? \"cursor-not-allowed text-gray-400\" : \"text-gray-700\"}`}\n onClick={() => handleSuggestionSelect(option)}\n disabled={disabled}\n >\n <span className=\"truncate\">{option.label}</span>\n </button>\n </li>\n );\n })}\n </ul>\n }\n </div>\n );\n\n const renderDropdown = () => {\n if (!showDropdown) return null;\n\n if (dropdownPortalElement && dropdownStyles) {\n return createPortal(\n <div ref={assignDropdownContentRef} style={dropdownStyles}>\n {dropdownContent}\n </div>,\n dropdownPortalElement\n );\n }\n\n return (\n <div ref={assignDropdownContentRef} className=\"absolute left-0 right-0 top-full z-10 mt-1\">\n {dropdownContent}\n </div>\n );\n };\n\n return (\n <div className=\"relative w-full\" ref={containerRef}>\n <div\n className={`flex min-h-[36px] items-center gap-3 rounded-md border bg-white px-3 transition-all \n ${error ? \"border-red-500 focus-within:ring-red-500\" : \"border-gray-300 \"}`}\n >\n <div className=\"flex flex-1 flex-wrap content-start gap-1 overflow-y-auto max-h-[72px] hide-scrollbar pr-4\">\n {value.map((tag, i) => {\n const label = optionLabels[tag] ?? tag;\n return (\n <span\n key={`${tag}-${i}`}\n className=\"flex items-center gap-1 rounded-lg border border-[#f0f0f0] bg-[#f9f9f9] px-2 py-1 my-1 text-sm text-inherit max-w-full break-words\"\n >\n <span className=\"whitespace-pre-wrap break-all\">{label}</span>\n <button\n type=\"button\"\n onClick={() => removeTag(i)}\n className=\"text-inherit transition hover:text-red-500\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n );\n })}\n {!limitReached && (\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (suggestions.length > 0 && !fetchError) {\n setIsDropdownOpen(true);\n }\n }}\n placeholder={(value.length === 0 && resolvedPlaceholder) || \"\"}\n className=\"min-w-[120px] flex-1 border-none bg-transparent py-1 text-sm text-gray-600 placeholder:text-gray-400 outline-none\"\n disabled={limitReached}\n />\n )}\n </div>\n\n <div className=\"flex justify-end items-center gap-2 pointer-events-auto h-fit\">\n {value.length === 0 ?\n <span className=\"flex h-7 w-7 items-center justify-center text-inherit\">\n <Search className=\"h-4 w-4\" />\n </span>\n : <ClearButton\n onClick={handleClear}\n className=\"flex h-7 w-7 items-center justify-center rounded-full text-inherit transition hover:text-red-500\"\n aria-label=\"Clear selected values\"\n />\n }\n </div>\n </div>\n\n {renderDropdown()}\n\n {fetchError && <p className=\"mt-1 text-xs text-red-600\">{fetchError}</p>}\n {limitReached && !fetchError && maxTags !== 1 && (\n <p className=\"mt-1 text-xs text-inherit\">Maximum {maxTags} tags reached.</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { LookupSelect } from \"@/components/lookupSelect\";\nimport type { LookupFieldSchema, RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n fieldSchema?: LookupFieldSchema;\n dropdownPortalId?: string;\n}\n\nexport const ConditionLookupInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n fieldSchema,\n dropdownPortalId\n}) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = Array.isArray(field.value) ? field.value : [];\n\n const handleChange = (tags: string[]) => {\n field.onChange(tags);\n };\n\n const handleClear = () => {\n field.onChange([]);\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative w-full overflow-x-hidden\">\n <FormControl>\n <LookupSelect\n value={value}\n onChange={handleChange}\n onClear={handleClear}\n error={Boolean(fieldState.error)}\n placeholder={fieldSchema?.placeholder}\n maxTags={fieldSchema?.maxTags}\n fetchSuggestions={fieldSchema?.fetchSuggestions}\n suggestionDebounce={fieldSchema?.suggestionDebounce}\n noOptionsMessage={fieldSchema?.noOptionsMessage}\n loadingMessage={fieldSchema?.loadingMessage}\n dropdownPortalId={dropdownPortalId}\n data-testid=\"advsearch-lookup-list\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { LookupSelect } from \"@/components/lookupSelect\";\nimport type { JSONFieldSchema, RowState } from \"@/components/advanceSearch/types\";\nimport { Input } from \"@/components/input\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n fieldSchema?: JSONFieldSchema;\n dropdownPortalId?: string;\n}\n\nexport const ConditionJSONInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n fieldSchema,\n dropdownPortalId\n}) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = Array.isArray(field.value) ? field.value : [];\n\n const handleChange = (tags: string[]) => {\n field.onChange(tags);\n };\n\n const handleClear = () => {\n field.onChange([]);\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative w-full overflow-x-hidden\">\n <FormControl>\n {fieldSchema?.fetchSuggestions ?\n <LookupSelect\n value={value}\n onChange={handleChange}\n onClear={handleClear}\n error={Boolean(fieldState.error)}\n placeholder={fieldSchema?.placeholder}\n maxTags={row.operator === \"containsAny\" ? fieldSchema?.maxTags : 1}\n fetchSuggestions={fieldSchema?.fetchSuggestions}\n suggestionDebounce={fieldSchema?.suggestionDebounce}\n noOptionsMessage={fieldSchema?.noOptionsMessage}\n loadingMessage={fieldSchema?.loadingMessage}\n dropdownPortalId={dropdownPortalId}\n />\n : <Input\n {...field}\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"text\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n }\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport type {\n FieldSchema,\n JSONFieldSchema,\n LookupFieldSchema,\n RowState\n} from \"@/components/advanceSearch/types\";\nimport { useFormContext } from \"react-hook-form\";\nimport { ConditionTextInput } from \"./types/ConditionTextInput\";\nimport { ConditionNumberInput } from \"./types/ConditionNumberInput\";\nimport { ConditionDateInput } from \"./types/ConditionDateInput\";\nimport { ConditionMonthInput } from \"./types/ConditionMonthInput\";\nimport { ConditionDropdownInput } from \"./types/ConditionDropdownInput\";\nimport { ConditionCheckboxInput } from \"./types/ConditionCheckboxInput\";\nimport { ConditionLookupInput } from \"./types/ConditionLookupInput\";\nimport { ConditionJSONInput } from \"./types/ConditionJSONInput\";\n\ntype Props = {\n row: RowState;\n fields: FieldSchema[];\n onClearValue: (which: \"value\" | \"value2\") => void;\n dropdownPortalId?: string;\n shortDateFormat?: string;\n};\n\nexport const ConditionValue: React.FC<Props> = ({\n row,\n fields,\n onClearValue,\n dropdownPortalId,\n shortDateFormat\n}) => {\n const { control } = useFormContext();\n const fieldSchema = fields.find((f) => f.name === row.fieldName);\n const fieldType = fieldSchema?.type ?? \"text\";\n\n switch (fieldType) {\n case \"number\":\n return <ConditionNumberInput row={row} control={control} onClear={onClearValue} />;\n case \"date\":\n case \"datetime\":\n return (\n <ConditionDateInput\n row={row}\n control={control}\n onClear={onClearValue}\n shortDateFormat={shortDateFormat}\n />\n );\n case \"datemonth\":\n return <ConditionMonthInput row={row} control={control} onClear={onClearValue} />;\n case \"dropdown\":\n return (\n <ConditionDropdownInput\n row={row}\n control={control}\n fieldSchema={fieldSchema}\n onClear={onClearValue}\n />\n );\n case \"checkbox\":\n return <ConditionCheckboxInput row={row} control={control} onClear={onClearValue} />;\n case \"lookup\":\n return (\n <ConditionLookupInput\n row={row}\n control={control}\n onClear={onClearValue}\n fieldSchema={fieldSchema as LookupFieldSchema}\n dropdownPortalId={dropdownPortalId}\n />\n );\n case \"json\": {\n return (\n <ConditionJSONInput\n row={row}\n control={control}\n onClear={onClearValue}\n fieldSchema={fieldSchema as JSONFieldSchema}\n dropdownPortalId={dropdownPortalId}\n />\n );\n }\n default:\n return <ConditionTextInput row={row} control={control} onClear={onClearValue} />;\n }\n};\n","// AddRemoveButtons.tsx\nimport React from \"react\";\nimport { Plus, Minus } from \"lucide-react\";\nimport { Button } from \"@/components/button\";\n\nexport const AddRemoveButtons: React.FC<{\n isFirst: boolean;\n onAdd: () => void;\n onRemove: () => void;\n disableAdd?: boolean;\n}> = ({ isFirst, onAdd, onRemove, disableAdd }) => (\n <div className=\"flex items-center justify-end gap-2\">\n {isFirst ?\n <Button\n type=\"button\"\n size=\"icon-sm\"\n onClick={onAdd}\n disabled={disableAdd}\n className={`circle-btn border transition-colors ${\n disableAdd ?\n \"cursor-not-allowed border-[#5a5a5a] bg-[#5a5a5a] text-[#e1e1e1]\"\n : \"border-[#379a2a] bg-[#379a2a] text-white\"\n }`}\n aria-label=\"Add row\"\n title={disableAdd ? \"Cannot add more rows\" : \"Add condition\"}\n data-testid=\"advsearch-btn-add\"\n >\n <Plus className=\"h-3 w-3 stroke-[2]\" />\n </Button>\n : <Button\n type=\"button\"\n size=\"icon-sm\"\n onClick={onRemove}\n className=\"circle-btn border border-[#379a2a] bg-white text-[#379a2a]\"\n aria-label=\"Remove row\"\n title=\"Remove condition\"\n data-testid=\"advsearch-btn-remove\"\n >\n <Minus className=\"h-3 w-3 stroke-[2]\" />\n </Button>\n }\n </div>\n);\n","import React from \"react\";\nimport type { FieldSchema, OperatorValue, RowState, Option } from \"../../types\";\nimport { FieldSelect } from \"./FieldSelect\";\nimport { OperatorSelect } from \"./OperatorSelect\";\nimport { ConditionValue } from \"./ConditionValue\";\nimport { AddRemoveButtons } from \"./AddRemoveButtons\";\n\ninterface Props {\n row: RowState;\n isFirst: boolean;\n fields: FieldSchema[];\n fieldOptions: Option[];\n operators: OperatorValue[];\n operatorError?: string;\n onChangeField: (fieldName: string) => void;\n onChangeOperator: (op: OperatorValue) => void;\n onAdd: () => void;\n onRemove: () => void;\n onClearValue: (which: \"value\" | \"value2\") => void;\n disableAdd?: boolean;\n dropdownPortalId?: string;\n shortDateFormat?: string;\n}\n\nexport const AdvanceSearchRow: React.FC<Props> = ({\n row,\n isFirst,\n fields,\n fieldOptions,\n operators,\n operatorError,\n onChangeField,\n onChangeOperator,\n onAdd,\n onRemove,\n onClearValue,\n disableAdd,\n dropdownPortalId,\n shortDateFormat\n}) => {\n return (\n <div className=\"grid gap-3 rounded-lg bg-white md:grid-cols-[minmax(150px,0.85fr)_minmax(140px,0.75fr)_minmax(260px,1fr)_auto] md:items-start\">\n <FieldSelect row={row} fieldOptions={fieldOptions} onChangeField={onChangeField} />\n\n <OperatorSelect\n row={row}\n operators={operators}\n onChangeOperator={onChangeOperator}\n error={operatorError}\n />\n\n <ConditionValue\n row={row}\n fields={fields}\n onClearValue={onClearValue}\n dropdownPortalId={dropdownPortalId}\n shortDateFormat={shortDateFormat}\n />\n\n <div className=\"flex h-full\">\n <AddRemoveButtons isFirst={isFirst} onAdd={onAdd} onRemove={onRemove} disableAdd={disableAdd} />\n </div>\n </div>\n );\n};\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class CheckboxBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"is\":\n return { [row.fieldName]: row.value };\n case \"isNot\":\n return { [row.fieldName]: { not: row.value } };\n default:\n return {};\n }\n }\n}\n","export const helper = (\n prismaFilter: object,\n options?: { multiTableSearch?: boolean; insensitive?: boolean }\n) => {\n return options?.multiTableSearch ?\n {\n some: {\n value: { ...prismaFilter, ...(options?.insensitive ? { mode: \"insensitive\" } : undefined) }\n }\n }\n : { ...prismaFilter, ...(options?.insensitive ? { mode: \"insensitive\" } : undefined) };\n};\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst normalizeBetween = (startValue?: string, endValue?: string) => {\n if (!startValue || !endValue) return undefined;\n const start = new Date(startValue);\n const end = new Date(endValue);\n if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return undefined;\n const [minRaw, maxRaw] = start <= end ? [start, end] : [end, start];\n const min = new Date(minRaw);\n min.setHours(0, 0, 0, 0);\n const max = new Date(maxRaw);\n max.setHours(23, 59, 59, 999);\n return { min, max };\n};\n\nexport class DatetimeBuilder implements ParamsBuilder {\n build(row: RowState): object {\n try {\n const baseDate = new Date(row.value);\n if (Number.isNaN(baseDate.getTime())) return {};\n\n const dayStart = new Date(baseDate);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(baseDate);\n dayEnd.setHours(23, 59, 59, 999);\n\n switch (row.operator) {\n case \"on\":\n return {\n [row.fieldName]: helper(\n { gte: dayStart.toISOString(), lt: dayEnd.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"after\":\n return {\n [row.fieldName]: helper(\n { gte: dayStart.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"before\":\n return {\n [row.fieldName]: helper(\n { lt: dayStart.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"between\": {\n const normalized = normalizeBetween(row.value, row.value2);\n if (!normalized) return {};\n return {\n [row.fieldName]: helper(\n { gte: normalized.min.toISOString(), lt: normalized.max.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n }\n default:\n return {};\n }\n } catch {\n return {};\n }\n }\n}\n","import { parse, isValid, format, compareAsc } from \"date-fns\";\nimport type { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst parseMonth = (value?: string) => {\n if (!value) return undefined;\n const parsed = parse(value, \"yyyy-MM\", new Date());\n if (!isValid(parsed)) return undefined;\n parsed.setDate(1);\n parsed.setHours(0, 0, 0, 0);\n return parsed;\n};\n\nconst toMonthToken = (date: Date) => format(date, \"yyyy-MM\");\n\nexport class DateMonthBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const month = parseMonth(row.value);\n const sharedOptions = { multiTableSearch: row.multiTableSearch } as const;\n\n switch (row.operator) {\n case \"on\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ equals: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"after\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ gt: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"before\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ lt: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"between\": {\n const endMonth = parseMonth(row.value2);\n if (!month || !endMonth) return {};\n const [min, max] = compareAsc(month, endMonth) <= 0 ? [month, endMonth] : [endMonth, month];\n return {\n [row.fieldName]: helper({ gte: toMonthToken(min), lte: toMonthToken(max) }, sharedOptions)\n };\n }\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class DropdownBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"is\":\n return { [row.fieldName]: row.value };\n case \"isNot\":\n return { [row.fieldName]: { not: row.value } };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class JSONBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const isArray = Array.isArray(row.value);\n switch (row.operator) {\n case \"equals\":\n return { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } };\n\n case \"notEquals\":\n return {\n NOT: { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } }\n };\n case \"containsAny\":\n if (!isArray)\n return { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } };\n return {\n OR: (row.value as any[]).map((v) => ({ [row.fieldName]: { path: row.jsonPath, equals: v } }))\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class LookupBuilder implements ParamsBuilder {\n build(row: RowState): object {\n if (!Array.isArray(row.value)) {\n return {};\n }\n const lookupField = row.lookupFieldName ?? \"id\";\n switch (row.operator) {\n case \"containsAny\":\n return {\n OR: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }))\n };\n case \"containsOnly\":\n return {\n AND: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }))\n };\n case \"containsAll\": {\n const includes = row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }));\n const excludes = { [row.fieldName]: { none: { [lookupField]: { notIn: row.value } } } };\n return {\n AND: [...includes, excludes]\n };\n }\n case \"notContains\":\n return {\n NOT: { OR: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } })) }\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nexport class NumberBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const value = Number(row.value);\n switch (row.operator) {\n case \"gt\":\n return {\n [row.fieldName]: helper({ gt: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"gte\":\n return {\n [row.fieldName]: helper({ gte: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lt\":\n return {\n [row.fieldName]: helper({ lt: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lte\":\n return {\n [row.fieldName]: helper({ lte: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nexport class TextBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"contains\":\n return {\n [row.fieldName]: helper(\n { contains: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"beginsWith\":\n return {\n [row.fieldName]: helper(\n { startsWith: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"endsWith\":\n return {\n [row.fieldName]: helper(\n { endsWith: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notBeginsWith\":\n return {\n [row.fieldName]: helper(\n { not: { startsWith: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notEndsWith\":\n return {\n [row.fieldName]: helper(\n { not: { endsWith: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notContains\":\n return {\n [row.fieldName]: helper(\n { not: { contains: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport class UUIDBuilder implements ParamsBuilder {\n build(row: RowState): object {\n if (!regex.test(row.value)) {\n return { [row.fieldName]: {} };\n }\n switch (row.operator) {\n case \"gt\":\n return {\n [row.fieldName]: helper({ gt: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"gte\":\n return {\n [row.fieldName]: helper({ gte: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lt\":\n return {\n [row.fieldName]: helper({ lt: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lte\":\n return {\n [row.fieldName]: helper({ lte: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: row.value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: row.value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { FieldType, ParamsBuilder } from \"../types\";\nimport { CheckboxBuilder } from \"./checkbox\";\nimport { DatetimeBuilder } from \"./datetime\";\nimport { DateMonthBuilder } from \"./datemonth\";\nimport { DropdownBuilder } from \"./dropdown\";\nimport { JSONBuilder } from \"./json\";\nimport { LookupBuilder } from \"./lookup\";\nimport { NumberBuilder } from \"./number\";\nimport { TextBuilder } from \"./text\";\nimport { UUIDBuilder } from \"./uuid\";\n\nexport function getBuilder(fieldType: FieldType): ParamsBuilder {\n switch (fieldType) {\n case \"text\":\n return new TextBuilder();\n case \"number\":\n return new NumberBuilder();\n case \"date\":\n return new DatetimeBuilder();\n case \"datetime\":\n return new DatetimeBuilder();\n case \"datemonth\":\n return new DateMonthBuilder();\n case \"checkbox\":\n return new CheckboxBuilder();\n case \"dropdown\":\n return new DropdownBuilder();\n case \"lookup\":\n return new LookupBuilder();\n case \"uuid\":\n return new UUIDBuilder();\n case \"json\":\n return new JSONBuilder();\n }\n}\n","import React, { useMemo, useCallback } from \"react\";\nimport { isAfter, isValid, parseISO } from \"date-fns\";\nimport { Search } from \"lucide-react\";\nimport ExpandCollapse from \"./conditions/ExpandCollapse\";\nimport { useAdvanceSearch } from \"../hooks/useAdvanceSearch\";\nimport type { AdvanceSearchProps } from \"../types\";\nimport { AdvanceSearchRow } from \"./conditions/AdvanceSearchRow\";\nimport { Label } from \"@/components/ui/label\";\nimport { Button } from \"@/components/button\";\nimport { useForm } from \"react-hook-form\";\nimport { Form } from \"@/components/ui/form\";\nimport { getBuilder } from \"../builder\";\n\nconst AdvanceSearch: React.FC<AdvanceSearchProps> = ({\n fields,\n portalId,\n iconColor = \"#ffffff\",\n limitRows = 4,\n onSearch,\n onClear,\n shortDateFormat\n}) => {\n const fieldsData = useMemo(() => {\n if (fields.length === 0) throw new Error(\"fields cannot be an empty array\");\n return fields || [];\n }, [fields]);\n\n const {\n rows,\n addRow,\n removeRow,\n clearAllRow,\n changeField,\n changeOperator,\n operatorsForField,\n fieldOptions\n } = useAdvanceSearch({ fields: fieldsData, limitRows });\n\n const form = useForm<{ [key: string]: string | undefined }>({\n mode: \"onSubmit\",\n reValidateMode: \"onSubmit\",\n defaultValues: {}\n });\n\n const { handleSubmit, unregister, resetField, getValues, clearErrors, setError } = form;\n\n const [operatorErrors, setOperatorErrors] = React.useState<Record<string, string>>({});\n const clearOperatorError = useCallback(\n (rowId: string) => {\n setOperatorErrors((prev) => {\n if (!(rowId in prev)) return prev;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [rowId]: _removed, ...rest } = prev;\n return rest;\n });\n },\n [setOperatorErrors]\n );\n\n const clearValue = useCallback(\n (rowId: string, which: \"value\" | \"value2\") => {\n const fieldName = `${which}_${rowId}` as `value_${string}` | `value2_${string}`;\n resetField(fieldName, { defaultValue: undefined });\n clearErrors(fieldName);\n\n const counterpart =\n which === \"value\" ?\n (`value2_${rowId}` as `value2_${string}`)\n : (`value_${rowId}` as `value_${string}`);\n clearErrors(counterpart);\n },\n [resetField, clearErrors]\n );\n\n const parseRangeValue = useCallback((raw: string, fieldType: string) => {\n if (!raw) return undefined;\n const normalized = fieldType === \"datemonth\" ? `${raw}-01` : raw;\n const parsed = parseISO(normalized);\n return isValid(parsed) ? parsed : undefined;\n }, []);\n\n const onSubmit = useCallback(() => {\n const operatorValidation: Record<string, string> = {};\n\n rows.forEach((r) => {\n const availableOperators = operatorsForField(r.fieldName);\n if (!availableOperators.length || !availableOperators.includes(r.operator)) {\n operatorValidation[r.id] = \"Please select an operator.\";\n }\n });\n\n setOperatorErrors(operatorValidation);\n if (Object.keys(operatorValidation).length > 0) {\n return;\n }\n\n const currentValues = getValues();\n let hasRangeError = false;\n\n const rawRows = rows.map((r) => {\n const startFieldName = `value_${r.id}` as `value_${string}`;\n const startValue = currentValues[startFieldName] ?? \"\";\n\n if (r.operator === \"between\") {\n const endFieldName = `value2_${r.id}` as `value2_${string}`;\n const endValue = currentValues[endFieldName] ?? \"\";\n\n if (startValue && endValue) {\n const startDate = parseRangeValue(startValue, r.fieldType);\n const endDate = parseRangeValue(endValue, r.fieldType);\n\n if (startDate && endDate && isAfter(startDate, endDate)) {\n hasRangeError = true;\n setError(startFieldName, {\n type: \"validate\",\n message: \"Start value must be before end value.\"\n });\n setError(endFieldName, {\n type: \"validate\",\n message: \"End value must be after start value.\"\n });\n } else {\n clearErrors([startFieldName, endFieldName]);\n }\n }\n\n return {\n ...r,\n value: startValue ?? \"\",\n value2: endValue ?? \"\"\n };\n }\n\n return {\n ...r,\n value: startValue ?? \"\"\n };\n });\n\n if (hasRangeError) {\n return;\n }\n\n const param = {\n AND: rawRows\n .map((r) => {\n const builder = getBuilder(r.fieldType);\n return builder.build(r);\n })\n .filter(Boolean) as Record<string, unknown>[]\n };\n\n if (onSearch) {\n onSearch(param);\n }\n }, [\n clearErrors,\n getValues,\n onSearch,\n operatorsForField,\n parseRangeValue,\n rows,\n setError,\n setOperatorErrors\n ]);\n\n return (\n <ExpandCollapse\n title={<Search className=\"w-5 h-5\" style={{ color: iconColor }} />}\n portalId={portalId}\n >\n <Form {...form}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"flex justify-center w-full\">\n <div className=\"w-full max-w-4xl rounded-xl bg-white\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-semibold text-gray-700\">Select Field</Label>\n </div>\n <div className=\"space-y-6\">\n {rows.map((row, idx) => (\n <AdvanceSearchRow\n key={row.id}\n row={row}\n shortDateFormat={shortDateFormat}\n isFirst={idx === 0}\n fields={fieldsData}\n fieldOptions={fieldOptions}\n operators={operatorsForField(row.fieldName)}\n operatorError={operatorErrors[row.id]}\n onChangeField={(f) => {\n changeField(row.id, f);\n clearOperatorError(row.id);\n clearValue(row.id, \"value\");\n clearValue(row.id, \"value2\");\n }}\n onChangeOperator={(op) => {\n changeOperator(row.id, op);\n clearOperatorError(row.id);\n clearValue(row.id, \"value\");\n clearValue(row.id, \"value2\");\n }}\n onAdd={addRow}\n onRemove={() => {\n clearOperatorError(row.id);\n removeRow(row.id);\n unregister(`value_${row.id}`);\n unregister(`value2_${row.id}`);\n }}\n onClearValue={(which) => {\n clearValue(row.id, which);\n }}\n disableAdd={limitRows !== undefined && rows.length >= limitRows}\n />\n ))}\n </div>\n <div className=\"mt-6 flex flex-col-reverse gap-3 pt-4 md:flex-row md:justify-end\">\n <Button\n type=\"button\"\n className=\"w-full bg-[#8b8b8b] text-white md:w-auto md:min-w-[120px]\"\n onClick={() => {\n clearAllRow();\n setOperatorErrors({});\n Object.keys(getValues()).forEach((k) => resetField(k));\n if (onClear) onClear();\n }}\n data-testid=\"advsearch-btn-clear\"\n >\n Clear Search\n </Button>\n <Button\n type=\"submit\"\n className=\"w-full bg-[#379a2a] text-white hover:bg-[#2f7c21] md:w-auto md:min-w-[120px]\"\n data-testid=\"advsearch-btn-search\"\n >\n Search\n </Button>\n </div>\n </div>\n </form>\n </Form>\n </ExpandCollapse>\n );\n};\n\nexport default AdvanceSearch;\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nfunction Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />;\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />;\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","import { reSplitAlphaNumeric } from \"@tanstack/react-table\";\n\nexport function compareAlphanumeric(aStr: string, bStr: string) {\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n while (a.length && b.length) {\n const aa = a.shift()!;\n const bb = b.shift()!;\n\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n\n const combo = [an, bn].sort();\n\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1;\n }\n\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n\n return a.length - b.length;\n}\n","export function booleanToSelectValue(\n value: boolean | undefined,\n options?: {\n fallbackUndefinedValue?: string;\n }\n): string {\n if (value === true) return \"true\";\n if (value === false) return \"false\";\n return options?.fallbackUndefinedValue ?? \"\";\n}\n\nexport function selectValueToBoolean(value: string): boolean | undefined {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n return undefined;\n}\n","import React, { useCallback, useRef, useState } from \"react\";\n\nexport type UseHoverResult = {\n ref: React.RefCallback<HTMLElement>;\n hovering: boolean;\n};\n\nconst useHover = (): UseHoverResult => {\n const [hovering, setHovering] = useState<boolean>(false);\n const prevRef = useRef<HTMLElement>(null);\n\n const onMouseEnter = useCallback(() => setHovering(true), []);\n const onMouseLeave = useCallback(() => setHovering(false), []);\n\n const nodeRefCallback = useCallback<UseHoverResult[\"ref\"]>(\n (node) => {\n if (prevRef.current) {\n prevRef.current.removeEventListener(\"mouseenter\", onMouseEnter);\n prevRef.current.removeEventListener(\"mouseleave\", onMouseLeave);\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n node.addEventListener(\"mouseenter\", onMouseEnter);\n node.addEventListener(\"mouseleave\", onMouseLeave);\n }\n\n prevRef.current = node;\n },\n [onMouseEnter, onMouseLeave]\n );\n\n return {\n ref: nodeRefCallback,\n hovering\n };\n};\n\nexport default useHover;\n","import { useEffect, useRef, useState } from \"react\";\n\ntype State = {\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\n\ntype UseIntersectionObserverOptions = {\n root?: Element | Document | null;\n rootMargin?: string;\n threshold?: number | number[];\n freezeOnceVisible?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n initialIsIntersecting?: boolean;\n};\n\ntype IntersectionReturn = [\n (node?: Element | null) => void,\n boolean,\n IntersectionObserverEntry | undefined\n] & {\n ref: (node?: Element | null) => void;\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\n\nconst useIntersectionObserver = ({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n}: UseIntersectionObserverOptions = {}): IntersectionReturn => {\n const [ref, setRef] = useState<Element | null>(null);\n\n const [state, setState] = useState<State>(() => ({\n isIntersecting: initialIsIntersecting,\n entry: undefined\n }));\n\n const callbackRef = useRef<UseIntersectionObserverOptions[\"onChange\"]>(null);\n\n callbackRef.current = onChange;\n\n const frozen = state.entry?.isIntersecting && freezeOnceVisible;\n\n useEffect(() => {\n // Ensure we have a ref to observe\n if (!ref) return;\n\n // Ensure the browser supports the Intersection Observer API\n if (!(\"IntersectionObserver\" in window)) return;\n\n // Skip if frozen\n if (frozen) return;\n\n let unobserve: (() => void) | undefined;\n\n const observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]): void => {\n const thresholds =\n Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n\n entries.forEach((entry) => {\n const isIntersecting =\n entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n\n setState({ isIntersecting, entry });\n\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = undefined;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => {\n observer.disconnect();\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n\n const prevRef = useRef<Element | null>(null);\n\n useEffect(() => {\n if (\n !ref &&\n state.entry?.target &&\n !freezeOnceVisible &&\n !frozen &&\n prevRef.current !== state.entry.target\n ) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: undefined });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n\n const result = [setRef, !!state.isIntersecting, state.entry] as IntersectionReturn;\n\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n\n return result;\n};\n\nexport default useIntersectionObserver;\n","import { useEffect, useState } from \"react\";\n\nexport type UseMediaQueryOptions = {\n query: string;\n};\n\nexport type UseMediaQueryResult = boolean;\n\nconst isValidMediaQueryString = (query: string): boolean => {\n return query !== \"not all\";\n};\n\nconst useMediaQuery = ({ query }: UseMediaQueryOptions): UseMediaQueryResult => {\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const mql = window.matchMedia(query);\n\n if (!isValidMediaQueryString(mql.media)) {\n throw new Error(`${query}: invalid media query string.`);\n }\n\n const detectMediaChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n setMatches(mql.matches);\n\n mql.addEventListener(\"change\", detectMediaChange);\n return () => {\n mql.removeEventListener(\"change\", detectMediaChange);\n };\n }, [query]);\n\n return matches;\n};\n\nexport default useMediaQuery;\n","import { useMediaQuery } from \"../useMediaQuery\";\n\nexport type UseScreenSizeResult = {\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n};\n\nexport type Breakpoints = {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n};\n\nconst useScreenSize = (breakpoints?: Breakpoints): UseScreenSizeResult => {\n const isMobile = useMediaQuery({ query: breakpoints?.mobile ?? \"(max-width: 767px)\" });\n const isTablet = useMediaQuery({\n query: breakpoints?.tablet ?? \"(min-width: 768px) and (max-width: 1023px)\"\n });\n const isDesktop = useMediaQuery({ query: breakpoints?.desktop ?? \"(min-width: 1024px)\" });\n\n return { isMobile, isTablet, isDesktop };\n};\n\nexport default useScreenSize;\n","import { useEffect, useState } from \"react\";\nimport { debounce } from \"../../utils\";\n\nexport type UseTruncatedOptions<T> = {\n elementRef: React.RefObject<T | null>;\n onChange?: (isTruncated: boolean) => void;\n resizeDetectDelay?: number;\n};\n\nexport type UseTruncatedResult = boolean;\n\nconst useTruncated = <T extends HTMLElement = any>({\n elementRef,\n onChange,\n resizeDetectDelay = 150\n}: UseTruncatedOptions<T>): UseTruncatedResult => {\n const [isTruncated, setIsTruncated] = useState(false);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n const checkTruncate = debounce(() => {\n const truncated = element.scrollWidth > element.clientWidth;\n setIsTruncated((prev) => {\n if (prev !== truncated) {\n onChange?.(truncated);\n }\n return truncated;\n });\n }, resizeDetectDelay);\n\n checkTruncate();\n\n const observer = new ResizeObserver(checkTruncate);\n observer.observe(element);\n window.addEventListener(\"resize\", checkTruncate);\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", checkTruncate);\n };\n }, [elementRef, onChange, resizeDetectDelay]);\n\n return isTruncated;\n};\n\nexport default useTruncated;\n","import type { HeaderContext } from \"@tanstack/react-table\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useHover } from \"../../../hooks\";\nimport { cn } from \"../../../utils\";\n\nexport type SorterProps = {\n show?: boolean;\n};\n\nexport type HeaderCellProps<TData = any, TValue = any> = {\n label: React.ReactNode;\n context: HeaderContext<TData, TValue>;\n rootClassName?: string;\n labelClassName?: string;\n sorterProps?: SorterProps;\n align?: \"left\" | \"center\" | \"right\";\n};\n\nconst HeaderCell = ({\n rootClassName,\n labelClassName,\n context,\n label,\n sorterProps,\n align = \"left\"\n}: HeaderCellProps) => {\n const { ref, hovering } = useHover();\n\n const showSorter = sorterProps?.show ?? context.column.getCanSort();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-2\",\n {\n \"cursor-pointer\": context?.column?.getCanSort()\n },\n rootClassName\n )}\n onClick={(event) => {\n if (!showSorter) return;\n event.preventDefault();\n\n if (context?.column?.getCanSort()) {\n context?.column?.toggleSorting();\n }\n }}\n >\n <div\n className={cn(\"flex-1 flex items-center\", {\n \"justify-start\": align === \"left\",\n \"justify-center\": align === \"center\",\n \"justify-end\": align === \"right\"\n })}\n >\n <span className={cn(\"inline-block font-bold\", labelClassName)}>{label}</span>\n </div>\n {showSorter && (\n <div\n className=\"flex flex-col -space-y-2\"\n title={\n context.column.getCanSort() ?\n context.column.getNextSortingOrder() === \"asc\" ?\n \"Sort ascending\"\n : context.column.getNextSortingOrder() === \"desc\" ?\n \"Sort descending\"\n : \"Clear sort\"\n : undefined\n }\n >\n <ChevronUp\n className={cn(\"stroke-[#BBBBBB]\", {\n \"stroke-sus-gray-5\": context?.column?.getIsSorted() === \"asc\",\n \"stroke-sus-gray-5/45\": context?.column?.getNextSortingOrder() === \"asc\" && hovering\n })}\n size={16}\n strokeWidth={3}\n />\n <ChevronDown\n className={cn(\"stroke-[#BBBBBB]\", {\n \"stroke-sus-gray-5\": context?.column?.getIsSorted() === \"desc\",\n \"stroke-sus-gray-5/45\": context?.column?.getNextSortingOrder() === \"desc\" && hovering\n })}\n size={16}\n strokeWidth={3}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default HeaderCell;\n","import * as React from \"react\";\nimport { cn } from \"@/utils\";\n\nfunction TableContainer({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"table-container\"\n className={cn(\"relative w-full overflow-x-auto\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm border-separate border-spacing-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b bg-[#f7f4f4]\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\"data-[state=selected]:bg-[#dfeae3]\", className)}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-9 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] hover:bg-gray-200 bg-[#F0F0F0] truncate\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 h-10 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] border-b truncate\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n TableContainer,\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption\n};\n","import type { Header } from \"@tanstack/react-table\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ColumnResizerProps = {\n header: Header<any, any>;\n className?: string;\n style?: CSSProperties;\n};\n\nconst ColumnResizer = ({ header, className, style }: ColumnResizerProps) => {\n if (!header.column.getCanResize()) {\n return null;\n }\n\n const resizeHandler = header.getResizeHandler();\n\n return (\n <div\n className={cn(\n \"z-[2] absolute top-0 right-0 h-full w-1 select-none touch-none cursor-col-resize hover:bg-[#41875c]/45 active:bg-[#41875c]\",\n className\n )}\n onDoubleClick={() => header.column.resetSize()}\n onTouchStart={resizeHandler}\n onMouseDown={resizeHandler}\n style={style}\n />\n );\n};\n\nexport default ColumnResizer;\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ColumnSeparatorProps = {\n show?: boolean;\n className?: string;\n style?: React.CSSProperties;\n};\n\nconst ColumnSeparator = ({ show, className, ...props }: ColumnSeparatorProps) => {\n if (!show) return null;\n return (\n <span\n data-slot=\"table-head-separator\"\n className={cn(\"absolute right-0 top-1/2 h-4 w-px -translate-y-1/2 bg-gray-300\", className)}\n {...props}\n />\n );\n};\n\nexport default React.memo(ColumnSeparator);\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ContentSlot = {\n content?: React.ReactNode;\n icon?: React.ReactNode;\n wrapperProps?: React.ComponentProps<\"div\">;\n};\n\nexport type StatusContentSlotProps = ContentSlot & {\n defaultWrapperProps?: React.ComponentProps<\"div\">;\n defaultIcon?: React.ReactNode;\n};\n\nconst StatusContentSlot = ({\n content,\n icon,\n wrapperProps = {},\n defaultWrapperProps,\n defaultIcon\n}: StatusContentSlotProps) => {\n if (!content && !icon && !defaultIcon) return null;\n\n const mergedProps: React.ComponentProps<\"div\"> = {\n ...defaultWrapperProps,\n ...wrapperProps,\n className: cn(defaultWrapperProps?.className, wrapperProps?.className)\n };\n\n return (\n <div {...mergedProps}>\n {icon ?? defaultIcon}\n {content}\n </div>\n );\n};\n\nexport default React.memo(StatusContentSlot);\n","import { type Table } from \"@tanstack/react-table\";\nimport { Bug } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype StateKey =\n | \"columnFilters\"\n | \"globalFilter\"\n | \"sorting\"\n | \"pagination\"\n | \"columnVisibility\"\n | \"columnOrder\"\n | \"rowSelection\"\n | \"expanded\"\n | \"grouping\"\n | \"columnPinning\"\n | \"columnSizing\"\n | \"columnSizingInfo\"\n | \"rowPinning\";\n\nconst stateOptions: readonly StateKey[] = [\n \"columnFilters\",\n \"globalFilter\",\n \"sorting\",\n \"pagination\",\n \"columnVisibility\",\n \"columnOrder\",\n \"rowSelection\",\n \"expanded\",\n \"grouping\",\n \"columnPinning\",\n \"columnSizing\",\n \"columnSizingInfo\",\n \"rowPinning\"\n];\n\ntype ModelKey = keyof Table<any>;\n\nconst modelOptions: readonly ModelKey[] = [\n \"getRowModel\",\n \"getGroupedRowModel\",\n \"getPaginationRowModel\",\n \"getCoreRowModel\",\n \"getFilteredRowModel\",\n \"getFilteredSelectedRowModel\",\n \"getSortedRowModel\",\n \"getPreExpandedRowModel\",\n \"getGroupedSelectedRowModel\",\n \"getPrePaginationRowModel\",\n \"getPreSelectedRowModel\",\n \"getPreSortedRowModel\",\n \"getSelectedRowModel\",\n \"getExpandedRowModel\",\n \"getIsAllColumnsVisible\",\n \"getIsSomeColumnsPinned\",\n \"getIsSomeColumnsVisible\",\n \"getHeaderGroups\",\n \"getFlatHeaders\",\n \"getLeafHeaders\",\n \"getLeftFlatHeaders\",\n \"getCenterLeafHeaders\",\n \"getRightFlatHeaders\",\n \"getAllColumns\",\n \"getAllFlatColumns\",\n \"getAllLeafColumns\",\n \"getLeftLeafColumns\",\n \"getCenterLeafColumns\",\n \"getRightLeafColumns\",\n \"getVisibleFlatColumns\",\n \"getVisibleLeafColumns\",\n \"getLeftVisibleLeafColumns\",\n \"getRightVisibleLeafColumns\",\n \"getCenterVisibleLeafColumns\"\n];\n\nconst DataTableDevTool = ({ table }: { table: Table<any> }) => {\n const [open, setOpen] = useState(false);\n const [visibleStates, setVisibleStates] = useState<StateKey[]>([]);\n const [visibleModels, setVisibleModels] = useState<ModelKey[]>([]);\n const tableState = table.getState();\n\n const toggleValue = <U extends string>(arr: U[], value: U): U[] =>\n arr.includes(value) ? arr.filter((v) => v !== value) : [...arr, value];\n\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_key: string, value: any) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n return value;\n };\n };\n\n const renderStateValue = (key: StateKey) => {\n const value = tableState[key];\n if (value == null) return null;\n return (\n <div key={key} className=\"mt-4\">\n <div className=\"font-bold capitalize\">{key}</div>\n <pre className=\"bg-gray-100 text-xs p-2 rounded overflow-x-auto whitespace-pre-wrap\">\n {JSON.stringify(value, null, 2)}\n </pre>\n </div>\n );\n };\n\n const renderModelValue = (key: ModelKey) => {\n let value: unknown;\n try {\n value = (table as any)[key]();\n } catch {\n value = undefined;\n }\n if (value == null) return null;\n let jsonString = \"\";\n try {\n jsonString = JSON.stringify(value, getCircularReplacer(), 2);\n } catch {\n jsonString = \"[Cannot stringify]\";\n }\n\n return (\n <div key={key} className=\"mt-4\">\n <div className=\"font-bold capitalize\">{key}</div>\n <pre className=\"bg-gray-100 text-xs p-2 rounded overflow-x-auto whitespace-pre-wrap\">\n {jsonString}\n </pre>\n </div>\n );\n };\n\n if (process.env.NODE_ENV === \"production\") return null;\n\n return (\n <div>\n {/* Floating Button */}\n <button\n onClick={() => setOpen(true)}\n className=\"fixed bottom-6 right-6 z-50 rounded-full bg-white border shadow p-3\"\n aria-label=\"Open debug panel\"\n >\n <Bug className=\"w-5 h-5\" />\n </button>\n\n {/* Sidebar Debug Panel */}\n {open && (\n <aside className=\"fixed top-0 right-0 h-full w-[420px] bg-white shadow-lg border-l border-gray-200 z-50 flex flex-col\">\n {/* Header */}\n <header className=\"flex items-center justify-between p-4 border-b border-gray-200\">\n <h2 className=\"text-lg font-semibold\">Debug Table State & Models</h2>\n <button onClick={() => setOpen(false)} className=\"text-xl font-bold\" aria-label=\"Close\">\n ×\n </button>\n </header>\n\n {/* Main Content */}\n <main className=\"overflow-auto p-4 flex-grow space-y-4\">\n <section className=\"max-h-80 overflow-y-auto overflow-x-hidden\">\n {/* Select Table States */}\n <fieldset>\n <legend className=\"block text-sm font-medium mb-1\">Show Table State</legend>\n <div className=\"space-y-1\">\n {stateOptions.map((stateKey) => (\n <label\n key={stateKey}\n className=\"flex items-center gap-2 cursor-pointer hover:bg-gray-50 p-1 rounded\"\n >\n <input\n type=\"checkbox\"\n className=\"accent-blue-500\"\n checked={visibleStates.includes(stateKey)}\n onChange={() => setVisibleStates(toggleValue(visibleStates, stateKey))}\n />\n <span className=\"truncate\">{stateKey}</span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Select Table Models */}\n <fieldset>\n <legend className=\"block text-sm font-medium mb-1\">Show Table Models</legend>\n <div className=\"space-y-1\">\n {modelOptions.map((modelKey) => (\n <label\n key={modelKey}\n className=\"flex items-center gap-2 cursor-pointer hover:bg-gray-50 p-1 rounded\"\n >\n <input\n type=\"checkbox\"\n className=\"accent-green-500\"\n checked={visibleModels.includes(modelKey)}\n onChange={() => setVisibleModels(toggleValue(visibleModels, modelKey))}\n />\n <span className=\"truncate\">{modelKey}</span>\n </label>\n ))}\n </div>\n </fieldset>\n </section>\n\n {/* JSON Outputs */}\n <hr className=\"my-2 border-gray-300\" />\n {visibleStates.map(renderStateValue)}\n {visibleModels.map(renderModelValue)}\n </main>\n </aside>\n )}\n </div>\n );\n};\n\nexport default DataTableDevTool;\n","import type { RowData, Column } from \"@tanstack/react-table\";\nimport type { CSSProperties } from \"react\";\nimport type { DataTableRowClickHandler } from \"./DataTable\";\nimport { cn } from \"../../utils\";\n\nexport function getColumnPinningInfo(column: Column<any, any>) {\n const isPinned = column.getIsPinned();\n\n const isLastLeftPinnedColumn = isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinnedColumn = isPinned === \"right\" && column.getIsFirstColumn(\"right\");\n\n return { isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn };\n}\n\nexport function getColumnPinningStyles(column: Column<any, any>): {\n classes: string;\n style: Pick<CSSProperties, \"left\" | \"right\">;\n} {\n const { isPinned, isFirstRightPinnedColumn, isLastLeftPinnedColumn } = getColumnPinningInfo(column);\n\n const classes = cn(\n isPinned ? \"sticky\" : \"relative\",\n isPinned ? \"z-[1]\" : \"z-0\",\n isLastLeftPinnedColumn && \"shadow-[inset_-1px_0_0_0_black]\",\n isFirstRightPinnedColumn && \"shadow-[inset_1px_0_0_0_black]\"\n );\n\n const style: CSSProperties = {\n left: isPinned === \"left\" ? column.getStart(\"left\") : undefined,\n right: isPinned === \"right\" ? column.getAfter(\"right\") : undefined\n };\n\n return { classes, style };\n}\n\ntype RowClickHandlers = {\n onClick: (event: React.MouseEvent<HTMLTableRowElement>) => void;\n};\n\ntype RowClickContext<TData extends RowData> = {\n rowData: Parameters<DataTableRowClickHandler<TData>>[0];\n row: Parameters<DataTableRowClickHandler<TData>>[1][\"row\"];\n table: Parameters<DataTableRowClickHandler<TData>>[1][\"table\"];\n};\n\nexport function getRowClickHandlers<TData extends RowData>(\n handler: DataTableRowClickHandler<TData>,\n { rowData, row, table }: RowClickContext<TData>\n): RowClickHandlers {\n const handleClick = (event: React.MouseEvent<HTMLTableRowElement>) => {\n if (event.detail === 1) {\n handler(rowData, { event, row, table, clickType: \"single\" });\n }\n if (event.detail >= 2) {\n handler(rowData, { event, row, table, clickType: \"double\" });\n }\n };\n return {\n onClick: handleClick\n };\n}\n","import React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n getFilteredRowModel,\n getSortedRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n type Table as TanstackTableType,\n type Column,\n type RowData,\n type TableOptions,\n type ColumnFiltersState,\n type TableState,\n type SortingState,\n type OnChangeFn,\n type FilterFnOption,\n type Row,\n type Cell,\n type Header,\n type ColumnDef,\n type HeaderGroup,\n type ColumnOrderState,\n type VisibilityState,\n type ColumnPinningState,\n type RowSelectionState,\n type ExpandedState,\n type GroupingState,\n type GroupingOptions,\n type ColumnResizeMode\n} from \"@tanstack/react-table\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableHeader,\n TableRow\n} from \"../ui/table\";\nimport ColumnResizer, { type ColumnResizerProps } from \"./ColumnResizer\";\nimport ColumnSeparator, { type ColumnSeparatorProps } from \"./ColumnSeparator\";\nimport StatusContentSlot, { type ContentSlot } from \"./StatusContentSlot\";\nimport DataTableDevTool from \"./DataTableDevTool\";\nimport { SuiEmptyDataIcon } from \"../icons\";\nimport { Spinner } from \"../ui/spinner\";\nimport { cn } from \"../../utils\";\nimport { stripNullishObject } from \"../../utils/filters\";\nimport { getColumnPinningInfo, getColumnPinningStyles, getRowClickHandlers } from \"./helpers\";\n\nexport type DataTableColumnFilterProps<TData extends RowData> = {\n column: Column<TData>;\n table: TanstackTableType<TData>;\n};\n\nexport type DataTableFilterConfig = {\n enabled: boolean;\n manual?: boolean;\n maxDepth?: number;\n filterFromLeafRows?: boolean;\n};\n\nexport type DataTableColumnFilter = {\n enabled?: boolean;\n initialState?: ColumnFiltersState;\n state?: ColumnFiltersState;\n onFilterChange?: OnChangeFn<ColumnFiltersState>;\n};\n\nexport type DataTableGlobalFilter<TData extends RowData> = {\n enabled?: boolean;\n initialState?: any;\n state?: any;\n filterFn?: FilterFnOption<TData>;\n onFilterChange?: OnChangeFn<any>;\n canColumnFilterable?: (column: Column<TData, unknown>) => boolean;\n};\n\nexport type DataTableFilters<TData extends RowData> = DataTableFilterConfig & {\n column?: DataTableColumnFilter;\n global?: DataTableGlobalFilter<TData>;\n};\n\nexport type DataTableColumnSorting = {\n enabled: boolean;\n manual?: boolean;\n initialState?: SortingState;\n state?: SortingState;\n sortDescFirst?: boolean;\n onSortingChange?: OnChangeFn<SortingState>;\n};\n\nexport type DataTableRowSelection<TData> = {\n enabled: boolean;\n initialState?: RowSelectionState;\n state?: RowSelectionState;\n canRowSelectable?: boolean | ((row: Row<TData>) => boolean);\n multiSelect?: boolean;\n onSelectionChange?: OnChangeFn<RowSelectionState>;\n};\n\nexport type DataTableColumnPinning = {\n enabled: boolean;\n initialState?: ColumnPinningState;\n state?: ColumnPinningState;\n onPinningChange?: OnChangeFn<ColumnPinningState>;\n};\n\nexport type DataTableColumnOrdering = {\n enabled: boolean;\n initialState?: string[];\n state?: string[];\n onOrderChange?: OnChangeFn<ColumnOrderState>;\n};\n\nexport type DataTableColumnVisibility = {\n enabled: boolean;\n initialState?: VisibilityState;\n state?: VisibilityState;\n onVisibilityChange?: OnChangeFn<VisibilityState>;\n};\n\nexport type DataTableRowExpansion<TData extends RowData> = {\n enabled: boolean;\n manual?: boolean;\n initialState?: ExpandedState;\n state?: ExpandedState;\n onExpandedChange?: OnChangeFn<ExpandedState>;\n isRowExpanded?: (row: Row<TData>) => boolean;\n canRowExpand?: (row: Row<TData>) => boolean;\n};\n\nexport type DataTableColumnGrouping = {\n manual?: boolean;\n enabled: boolean;\n groupedMode?: false | \"reorder\" | \"remove\";\n initialState?: GroupingState;\n state?: GroupingState;\n customAggregationFns?: GroupingOptions[\"aggregationFns\"];\n onGroupingChange?: OnChangeFn<GroupingState>;\n};\n\nexport type RowClickType = \"single\" | \"double\";\n\nexport type DataTableRowClickHandler<TData extends RowData> = (\n rowData: TData,\n info: {\n event: React.MouseEvent<HTMLTableRowElement>;\n row: Row<TData>;\n table: TanstackTableType<TData>;\n clickType: RowClickType;\n }\n) => void;\n\nexport type DataTableRowIdKeyHandler<TData extends RowData> = (\n originalRow: TData,\n index: number,\n parent?: Row<TData>\n) => string;\n\nexport type DataTableHeaderCell<TData extends RowData> = {\n id: string;\n columnId: string;\n content: React.ReactNode;\n originalCell: Header<TData, unknown>;\n};\n\nexport type DataTableRenderHeaderProps<TData extends RowData> = {\n headerGroup: HeaderGroup<TData>;\n table: TanstackTableType<TData>;\n cells: DataTableHeaderCell<TData>[];\n};\n\nexport type DataTableRenderHeaderHandler<TData extends RowData> = (\n props: DataTableRenderHeaderProps<TData>\n) => React.ReactNode;\n\nexport type DataTableRowCell<TData extends RowData> = {\n id: string;\n columnId: string;\n content: React.ReactNode;\n originalCell: Cell<TData, unknown>;\n};\n\nexport type DataTableRenderRowProps<TData extends RowData> = {\n row: Row<TData>;\n cells: DataTableRowCell<TData>[];\n table: TanstackTableType<TData>;\n};\n\nexport type DataTableRenderRowHandler<TData extends RowData> = (\n props: DataTableRenderRowProps<TData>\n) => React.ReactNode;\n\nexport type DataTableChildrenKeyHandler<TData> = (\n originalRow: TData,\n index: number\n) => TData[] | undefined;\n\nexport type DatatableColumnResizing = {\n enabled: boolean;\n resizeMode?: ColumnResizeMode;\n};\n\nexport type DataTableColumnSeparatorProps = {\n headerCell?: ColumnSeparatorProps;\n};\n\nexport type DataTableComponentProps<TData> = {\n containerProps?: React.ComponentProps<typeof TableContainer>;\n tableProps?: React.ComponentProps<typeof Table>;\n tableHeaderProps?: React.ComponentProps<typeof TableHeader>;\n tableHeadCellProps?:\n | React.ComponentProps<typeof TableHead>\n | ((info: {\n header: Header<TData, unknown>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableHead>);\n tableBodyProps?: React.ComponentProps<typeof TableBody>;\n tableDataRowProps?:\n | React.ComponentProps<typeof TableRow>\n | ((info: {\n row: Row<TData>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableRow>);\n tableDataCellProps?:\n | React.ComponentProps<typeof TableCell>\n | ((info: {\n row: Row<TData>;\n cell: Cell<TData, unknown>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableCell>);\n tableFilterCellProps?:\n | React.ComponentProps<typeof TableCell>\n | ((info: {\n column: Column<TData>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableCell>);\n columnResizerProps?: Omit<ColumnResizerProps, \"header\">;\n columnSeparatorProps?: DataTableColumnSeparatorProps;\n};\n\nexport type DataTableStatusContent = {\n initialLoading?: ContentSlot;\n fetchingMore?: ContentSlot;\n noMoreData?: ContentSlot;\n emptyData?: ContentSlot;\n emptyFilteredData?: ContentSlot;\n};\n\nexport type StatusContentKey = keyof DataTableStatusContent;\n\nexport type ScrollInfo = {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n scrollableHeight: number;\n distanceToBottom: number;\n ratioToBottom: number;\n isTopReached: boolean;\n isBottomReached: boolean;\n};\n\nexport type DataTableScrollFetch = {\n enabled: boolean;\n fetchMore?: () => void;\n hasMore?: boolean;\n isFetchingMore?: boolean;\n scrollThreshold?: number | ((info: ScrollInfo) => boolean);\n};\n\nexport type DataTableProps<TData extends RowData> = {\n data: TData[];\n columns: ColumnDef<TData, any>[];\n filters?: DataTableFilters<TData>;\n sorting?: DataTableColumnSorting;\n columnOrder?: DataTableColumnOrdering;\n columnVisibility?: DataTableColumnVisibility;\n columnPinning?: DataTableColumnPinning;\n columnGrouping?: DataTableColumnGrouping;\n columnResizing?: DatatableColumnResizing;\n rowSelection?: DataTableRowSelection<TData>;\n rowExpansion?: DataTableRowExpansion<TData>;\n scrollFetch?: DataTableScrollFetch;\n components?: DataTableComponentProps<TData>;\n activeStatusContent?:\n | (StatusContentKey | null)\n | ((info: { defaultComputedValue: StatusContentKey | null }) => StatusContentKey | null);\n statusContent?: DataTableStatusContent;\n tableRef?: React.RefObject<TanstackTableType<TData> | null>;\n isInitialLoading?: boolean;\n debug?: boolean;\n rowIdKey?: DataTableRowIdKeyHandler<TData>;\n childrenKey?: DataTableChildrenKeyHandler<TData>;\n onRowClick?: DataTableRowClickHandler<TData>;\n};\n\nconst fallbackData: unknown[] = [];\n\nconst DataTable = <TData extends RowData>({\n tableRef,\n isInitialLoading,\n columns,\n data,\n filters,\n sorting,\n columnOrder,\n columnVisibility,\n columnPinning,\n columnGrouping,\n columnResizing,\n rowSelection,\n rowExpansion,\n scrollFetch,\n activeStatusContent,\n statusContent,\n rowIdKey,\n childrenKey,\n onRowClick,\n debug,\n components\n}: DataTableProps<TData>) => {\n const table = useReactTable<TData>({\n // required properties\n columns,\n data: data || fallbackData,\n getCoreRowModel: getCoreRowModel(),\n // optional properties\n ...stripNullishObject<TableOptions<TData>>({\n // state for filters, sorting, pinning, row selection, etc.\n initialState: stripNullishObject<TableState>({\n columnFilters:\n filters?.enabled && (filters?.column?.enabled ?? true) ?\n filters?.column?.initialState\n : undefined,\n globalFilter: filters?.enabled ? filters?.global?.initialState : undefined,\n sorting: sorting?.enabled ? sorting?.initialState : undefined,\n columnOrder: columnOrder?.enabled ? columnOrder?.initialState : undefined,\n columnVisibility: columnVisibility?.enabled ? columnVisibility?.initialState : undefined,\n columnPinning: columnPinning?.enabled ? columnPinning?.initialState : undefined,\n rowSelection: rowSelection?.enabled ? rowSelection?.initialState : undefined,\n expanded: rowExpansion?.enabled ? rowExpansion?.initialState : undefined,\n grouping: columnGrouping?.enabled ? columnGrouping?.initialState : undefined\n }),\n state: stripNullishObject<TableState>({\n columnFilters:\n filters?.enabled && (filters?.column?.enabled ?? true) ? filters?.column?.state : undefined,\n globalFilter: filters?.enabled ? filters?.global?.state : undefined,\n sorting: sorting?.enabled ? sorting?.state : undefined,\n columnOrder: columnOrder?.enabled ? columnOrder?.state : undefined,\n columnVisibility: columnVisibility?.enabled ? columnVisibility?.state : undefined,\n columnPinning: columnPinning?.enabled ? columnPinning?.state : undefined,\n rowSelection: rowSelection?.enabled ? rowSelection?.state : undefined,\n expanded: rowExpansion?.enabled ? rowExpansion?.state : undefined,\n grouping: columnGrouping?.enabled ? columnGrouping?.state : undefined\n }),\n // common\n getRowId: rowIdKey,\n getSubRows: childrenKey,\n // shared configs filters column and global\n enableFilters: filters?.enabled ?? false,\n filterFromLeafRows: filters?.enabled && (filters?.filterFromLeafRows ?? false),\n manualFiltering: filters?.enabled && (filters?.manual ?? false),\n maxLeafRowFilterDepth: filters?.enabled ? filters?.maxDepth : undefined,\n // column filters\n getFilteredRowModel: !filters?.manual && filters?.enabled ? getFilteredRowModel() : undefined,\n enableColumnFilters: filters?.enabled && (filters?.column?.enabled ?? true),\n onColumnFiltersChange:\n filters?.enabled && (filters?.column?.enabled ?? true) ?\n filters?.column?.onFilterChange\n : undefined,\n // global filters\n enableGlobalFilter: filters?.enabled && (filters?.global?.enabled ?? true),\n globalFilterFn:\n filters?.enabled && (filters?.global?.enabled ?? true) ? filters?.global?.filterFn : undefined,\n onGlobalFilterChange:\n filters?.enabled && (filters?.global?.enabled ?? true) ?\n filters?.global?.onFilterChange\n : undefined,\n getColumnCanGlobalFilter:\n filters?.enabled && (filters?.global?.enabled ?? true) ?\n (filters?.global?.canColumnFilterable ?? (() => true))\n : undefined,\n // sorting\n getSortedRowModel: !sorting?.manual && sorting?.enabled ? getSortedRowModel() : undefined,\n manualSorting: sorting?.enabled && (sorting?.manual ?? false),\n enableSorting: sorting?.enabled ?? false,\n // default behavior: column with type number is sort by desc and string sort by asc first, we fix force always asc\n sortDescFirst: sorting?.enabled ? (sorting?.sortDescFirst ?? false) : false,\n onSortingChange: sorting?.enabled ? sorting?.onSortingChange : undefined,\n // ordering\n onColumnOrderChange: columnOrder?.enabled ? columnOrder?.onOrderChange : undefined,\n // visibility\n onColumnVisibilityChange:\n columnVisibility?.enabled ? columnVisibility?.onVisibilityChange : undefined,\n // pinning\n enableColumnPinning: columnPinning?.enabled ?? false,\n onColumnPinningChange: columnPinning?.enabled ? columnPinning?.onPinningChange : undefined,\n // row selection\n enableRowSelection: rowSelection?.enabled ? rowSelection?.canRowSelectable : false,\n enableMultiRowSelection: rowSelection?.enabled ? (rowSelection?.multiSelect ?? true) : true,\n onRowSelectionChange: rowSelection?.enabled ? rowSelection?.onSelectionChange : undefined,\n // row expanded\n getExpandedRowModel:\n // when grouping is use then we should open this\n !rowExpansion?.manual && rowExpansion?.enabled ? getExpandedRowModel() : undefined,\n manualExpanding: rowExpansion?.enabled && (rowExpansion?.manual ?? false),\n enableExpanding: rowExpansion?.enabled ?? false,\n getIsRowExpanded: rowExpansion?.enabled ? rowExpansion?.isRowExpanded : undefined,\n getRowCanExpand: rowExpansion?.enabled ? rowExpansion?.canRowExpand : undefined,\n onExpandedChange: rowExpansion?.enabled ? rowExpansion?.onExpandedChange : undefined,\n // grouping\n getGroupedRowModel:\n !columnGrouping?.manual && columnGrouping?.enabled ? getGroupedRowModel() : undefined,\n enableGrouping: columnGrouping?.enabled ?? false,\n manualGrouping: columnGrouping?.enabled && (columnGrouping?.manual ?? false),\n groupedColumnMode: columnGrouping?.enabled ? (columnGrouping?.groupedMode ?? false) : false,\n aggregationFns: columnGrouping?.enabled ? columnGrouping?.customAggregationFns : undefined,\n onGroupingChange: columnGrouping?.enabled ? columnGrouping?.onGroupingChange : undefined,\n // column sizing\n enableColumnResizing: columnResizing?.enabled ?? false,\n columnResizeMode: columnResizing?.enabled ? (columnResizing?.resizeMode ?? \"onChange\") : \"onChange\"\n })\n });\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n const isTableEmpty = table.getCoreRowModel().rows.length === 0;\n const isTableEmptyAfterFiltering = table.getRowModel().rows.length === 0;\n const isFiltering = table.getState().columnFilters.length > 0 || !!table.getState().globalFilter;\n\n const leftVisibleLeftColumns = table.getLeftVisibleLeafColumns();\n const centerVisibleLeafColumns = table.getCenterVisibleLeafColumns();\n const rightVisibleLeafColumns = table.getRightVisibleLeafColumns();\n\n const { isSomeColumnsFilterable, filterableColumns } = useMemo(() => {\n const mergedColumns: Column<TData, any>[] = [\n ...leftVisibleLeftColumns,\n ...centerVisibleLeafColumns,\n ...rightVisibleLeafColumns\n ];\n\n const isSomeColumnsFilterable = mergedColumns.some(\n (column) => column.getCanFilter() && column.columnDef.meta?.renderColumnFilter\n );\n\n return { isSomeColumnsFilterable, filterableColumns: mergedColumns };\n }, [centerVisibleLeafColumns, leftVisibleLeftColumns, rightVisibleLeafColumns]);\n\n const autoStatusKey = useMemo<StatusContentKey | null>(() => {\n if (isInitialLoading) return \"initialLoading\";\n if (isTableEmpty) return \"emptyData\";\n if (isTableEmptyAfterFiltering) return \"emptyFilteredData\";\n if (scrollFetch?.enabled && !isFiltering && !isInitialLoading) {\n if (scrollFetch.isFetchingMore) return \"fetchingMore\";\n if (scrollFetch.hasMore === false && !scrollFetch.isFetchingMore) return \"noMoreData\";\n }\n return null;\n }, [\n isInitialLoading,\n isFiltering,\n isTableEmpty,\n isTableEmptyAfterFiltering,\n scrollFetch?.enabled,\n scrollFetch?.hasMore,\n scrollFetch?.isFetchingMore\n ]);\n\n const activeStatusContentComputed = useMemo<StatusContentKey | null>(() => {\n if (!activeStatusContent) return autoStatusKey;\n if (typeof activeStatusContent === \"function\") {\n return activeStatusContent({ defaultComputedValue: autoStatusKey });\n }\n return activeStatusContent;\n }, [activeStatusContent, autoStatusKey]);\n\n const fetchMoreOnScrollReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n if (\n !scrollFetch?.enabled ||\n !containerRefElement ||\n scrollFetch?.isFetchingMore ||\n !scrollFetch?.hasMore ||\n !scrollFetch?.fetchMore\n ) {\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n\n const scrollableHeight = scrollHeight - clientHeight;\n const distanceToBottom = scrollableHeight - scrollTop;\n const ratioToBottom = scrollableHeight > 0 ? scrollTop / scrollableHeight : 1;\n\n const info: ScrollInfo = {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollableHeight,\n distanceToBottom,\n ratioToBottom,\n isTopReached: scrollTop === 0,\n isBottomReached: distanceToBottom <= 0\n };\n\n let shouldTrigger = false;\n if (typeof scrollFetch.scrollThreshold === \"number\") {\n shouldTrigger = info.ratioToBottom >= scrollFetch.scrollThreshold;\n } else if (typeof scrollFetch.scrollThreshold === \"function\") {\n shouldTrigger = scrollFetch.scrollThreshold(info);\n } else {\n shouldTrigger = info.ratioToBottom >= 0.7; // default 70%\n }\n\n if (shouldTrigger) {\n scrollFetch.fetchMore();\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollFetch?.enabled, scrollFetch?.isFetchingMore, scrollFetch?.hasMore, scrollFetch?.fetchMore]\n );\n\n useEffect(() => {\n if (!tableRef) return;\n tableRef.current = table;\n return () => {\n tableRef.current = null;\n };\n }, [tableRef, table]);\n\n useEffect(() => {\n fetchMoreOnScrollReached(tableContainerRef.current);\n }, [fetchMoreOnScrollReached]);\n\n return (\n <TableContainer\n ref={tableContainerRef}\n {...components?.containerProps}\n className={cn(\n \"relative w-full overflow-auto h-full max-h-dvh max-w-full bg-white\",\n components?.containerProps?.className\n )}\n onScroll={(e) => fetchMoreOnScrollReached(e.currentTarget)}\n >\n {activeStatusContentComputed === \"initialLoading\" ?\n <StatusContentSlot\n content={statusContent?.initialLoading?.content ?? \"Loading...\"}\n icon={statusContent?.initialLoading?.icon}\n wrapperProps={statusContent?.initialLoading?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col h-full items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-initial-loading\"\n }}\n defaultIcon={<Spinner size={48} />}\n />\n : activeStatusContentComputed === \"emptyData\" ?\n <StatusContentSlot\n content={statusContent?.emptyData?.content ?? \"There's nothing here yet.\"}\n icon={statusContent?.emptyData?.icon}\n wrapperProps={statusContent?.emptyData?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col h-full items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-empty-data\"\n }}\n defaultIcon={<SuiEmptyDataIcon className=\"text-[128px]\" />}\n />\n : <>\n <Table {...components?.tableProps}>\n {/* header */}\n <TableHeader\n className={cn(\"sticky top-0 z-10\", components?.tableHeaderProps?.className)}\n {...components?.tableHeaderProps}\n >\n {table.getHeaderGroups().map((headerGroup) => {\n return (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const { classes, style } = getColumnPinningStyles(header.column);\n const useColumnSizing =\n header.column.columnDef?.meta?.useColumnSizing ??\n columnResizing?.enabled ??\n false;\n\n const tableHeadCellProps =\n typeof components?.tableHeadCellProps === \"function\" ?\n components?.tableHeadCellProps({ header, table })\n : components?.tableHeadCellProps;\n\n const nextHeader = headerGroup.headers?.[header.index + 1] || header;\n const { isLastLeftPinnedColumn } = getColumnPinningInfo(header.column);\n const { isFirstRightPinnedColumn } = getColumnPinningInfo(nextHeader.column);\n const headerGroupLength = header.headerGroup.headers.length;\n const showSeparator =\n header.index !== headerGroupLength - 1 &&\n !isLastLeftPinnedColumn &&\n !isFirstRightPinnedColumn;\n\n return (\n <TableHead\n data-testid={`table-head-${header.id}`}\n key={header.id}\n colSpan={header.colSpan}\n {...tableHeadCellProps}\n {...header.column.columnDef?.meta?.headerProps}\n className={cn(\n classes,\n tableHeadCellProps?.className,\n header.column.columnDef?.meta?.headerProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? header.column.getSize() : undefined,\n minWidth: useColumnSizing ? header.column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? header.column.columnDef.maxSize : undefined,\n ...tableHeadCellProps?.style,\n ...header.column.columnDef?.meta?.headerProps?.style\n }}\n >\n {header.isPlaceholder ? null : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n <ColumnSeparator\n {...components?.columnSeparatorProps?.headerCell}\n {...header.column.columnDef?.meta?.columnSeparatorProps}\n show={\n header.column.columnDef?.meta?.columnSeparatorProps?.show ??\n components?.columnSeparatorProps?.headerCell?.show ??\n showSeparator\n }\n />\n <ColumnResizer header={header} {...components?.columnResizerProps} />\n </TableHead>\n );\n })}\n </TableRow>\n );\n })}\n\n {/* filter row */}\n {isSomeColumnsFilterable && (\n <TableRow data-testid=\"table-filter-row\">\n {filterableColumns.map((column) => {\n const { classes, style } = getColumnPinningStyles(column);\n const useColumnSizing =\n column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;\n\n const tableFilterCellProps =\n typeof components?.tableFilterCellProps === \"function\" ?\n components?.tableFilterCellProps({ column, table })\n : components?.tableFilterCellProps;\n\n return (\n <TableCell\n data-testid={`table-filter-cell-${column.id}`}\n key={column.id}\n {...tableFilterCellProps}\n {...column.columnDef?.meta?.filterCellProps}\n className={cn(\n \"bg-white border-b\",\n classes,\n tableFilterCellProps?.className,\n column.columnDef?.meta?.filterCellProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? column.getSize() : undefined,\n minWidth: useColumnSizing ? column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? column.columnDef.maxSize : undefined,\n ...tableFilterCellProps?.style,\n ...column.columnDef?.meta?.filterCellProps?.style\n }}\n >\n {column.getCanFilter() &&\n column.columnDef.meta?.renderColumnFilter?.({\n column,\n table\n })}\n </TableCell>\n );\n })}\n </TableRow>\n )}\n </TableHeader>\n\n {/* data rows */}\n <TableBody {...components?.tableBodyProps}>\n {table.getRowModel().rows.map((row) => {\n const tableDataRowProps =\n typeof components?.tableDataRowProps === \"function\" ?\n components.tableDataRowProps({ row, table }) || {}\n : components?.tableDataRowProps || {};\n\n return (\n <TableRow\n data-testid={`table-data-row-${row.id}`}\n {...tableDataRowProps}\n key={row.id}\n className={cn(\"group\", tableDataRowProps?.className)}\n data-state={row.getIsSelected() ? \"selected\" : \"non-selected\"}\n {...getRowClickHandlers(onRowClick ?? (() => {}), {\n rowData: row.original,\n row,\n table\n })}\n >\n {row.getVisibleCells().map((cell) => {\n const { classes, style } = getColumnPinningStyles(cell.column);\n const useColumnSizing =\n cell.column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;\n\n const tableDataCellProps =\n typeof components?.tableDataCellProps === \"function\" ?\n components?.tableDataCellProps({ row, cell, table })\n : components?.tableDataCellProps;\n\n return (\n <TableCell\n data-testid={`table-data-cell-${cell.id}`}\n data-row-id={row.id}\n data-column-id={cell.column.id}\n key={cell.id}\n {...tableDataCellProps}\n {...cell.column.columnDef?.meta?.cellProps}\n className={cn(\n {\n \"bg-[#dfeae3]\": row.getIsSelected(),\n \"bg-white group-hover:bg-[#eff5f1]\": !row.getIsSelected()\n },\n classes,\n tableDataCellProps?.className,\n cell.column.columnDef?.meta?.cellProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? cell.column.getSize() : undefined,\n minWidth: useColumnSizing ? cell.column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? cell.column.columnDef.maxSize : undefined,\n ...tableDataCellProps?.style,\n ...cell.column.columnDef?.meta?.cellProps?.style\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n\n {activeStatusContentComputed === \"emptyFilteredData\" && (\n <StatusContentSlot\n content={\n statusContent?.emptyFilteredData?.content ??\n \"No records found. Please try a different search.\"\n }\n icon={statusContent?.emptyFilteredData?.icon}\n wrapperProps={statusContent?.emptyFilteredData?.wrapperProps}\n defaultWrapperProps={{\n className:\n \"flex flex-col h-[calc(100%-76px)] items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-empty-filtered-data\"\n }}\n defaultIcon={<SuiEmptyDataIcon className=\"text-[128px]\" />}\n />\n )}\n\n {activeStatusContentComputed === \"fetchingMore\" && (\n <StatusContentSlot\n content={statusContent?.fetchingMore?.content ?? \"Loading more...\"}\n wrapperProps={statusContent?.fetchingMore?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-fetching-more\"\n }}\n />\n )}\n\n {activeStatusContentComputed === \"noMoreData\" && (\n <StatusContentSlot\n content={statusContent?.noMoreData?.content}\n icon={statusContent?.noMoreData?.icon}\n wrapperProps={statusContent?.noMoreData?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-no-more-data\"\n }}\n />\n )}\n </>\n }\n\n {/* devtool */}\n {debug && <DataTableDevTool table={table} />}\n </TableContainer>\n );\n};\n\nexport default DataTable;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\n// ──────────────────────────────\n// Root-level wrappers\n// ──────────────────────────────\nfunction Dialog(props: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger(props: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal(props: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ──────────────────────────────\n// Header (optional)\n// ──────────────────────────────\nfunction DialogHeader({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n \"relative flex items-center justify-between bg-[#82b495] text-white rounded-t-md px-4 py-3\",\n className\n )}\n {...props}\n >\n <div className=\"text-lg font-semibold\">{children}</div>\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute right-4 top-4 rounded-xs opacity-80 hover:opacity-100 transition-opacity focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </div>\n );\n}\n\n// ──────────────────────────────\n// Content (flex layout + sticky footer ready)\n// ──────────────────────────────\nexport interface DialogContentProps extends React.ComponentProps<typeof DialogPrimitive.Content> {\n header?: React.ReactNode;\n showOverlay?: boolean;\n}\n\nfunction DialogContent({\n className,\n children,\n header,\n showOverlay = true,\n ...props\n}: DialogContentProps) {\n return (\n <DialogPortal>\n {showOverlay && <DialogOverlay />}\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 flex min-h-0 max-h-[90vh] w-full max-w-[80vw] translate-x-[-50%] translate-y-[-50%] flex-col rounded-lg border bg-background shadow-lg duration-200 sm:max-w-7xl\",\n className\n )}\n {...props}\n >\n {/* Header */}\n {header && <DialogHeader>{header}</DialogHeader>}\n\n <div className=\"flex-1 overflow-auto\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ──────────────────────────────\n// Footer / Title / Description\n// ──────────────────────────────\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end border-t bg-white p-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\n// ──────────────────────────────\n// Export\n// ──────────────────────────────\nexport { Dialog, DialogTrigger, DialogContent, DialogFooter, DialogTitle, DialogDescription };\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\nexport const preserveNewlines = (s?: string) => (s ? s.replace(/\\r\\n/g, \"\\n\") : undefined);\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-white data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"border bg-[#8B8B8B] text-white shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:hover:bg-input/50\",\n success: \"bg-sus-primary-1 text-primary-foreground shadow-xs hover:bg-sus-primary/90\",\n error:\n \"border border-[#BB0B0E] text-[#BB0B0E] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\",\n warning: \"bg-yellow-500 text-black shadow-xs hover:bg-yellow-600 dark:hover:bg-yellow-400\",\n cancel:\n \"border bg-[#8B8B8B] text-white shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:hover:bg-input/50\",\n confirm:\n \"border border-[#BB0B0E] text-[#BB0B0E] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\",\n \"confirm-green\":\n \"border border-[#379A2A] text-[#379A2A] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\"\n },\n\n size: {\n default: \"h-9 px-4 has-[>svg]:px-3\",\n option: \"py-5 h-9 px-4 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-5\",\n \"icon-sm\": \"size-[22px]\",\n \"icon-md\": \"size-7\",\n \"icon-lg\": \"size-10\"\n },\n\n active: {\n true: \"opacity-90 ring-2 ring-offset-1 ring-ring\",\n false: \"\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n active,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n active?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, active, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","export const DIALOG_ALERT_I18N_SUBNAMESPACE = \"dialog_alert\";\nexport const i18nPrefix = `translation:${DIALOG_ALERT_I18N_SUBNAMESPACE}.`;\n","import { DIALOG_ALERT_I18N_SUBNAMESPACE } from \"../lib/constants\";\nimport { DialogAlertI18nResource } from \"../types\";\n\nexport const defaultResource: DialogAlertI18nResource = {\n sharedui: {\n translation: {\n [DIALOG_ALERT_I18N_SUBNAMESPACE]: {\n cancel: \"Cancel\",\n close: \"Close\",\n \"success.saved\": {\n title: \"Successfully\",\n description: \"Data has been successfully saved\"\n },\n \"success.deleted\": {\n title: \"Successfully\",\n description: \"Data has been successfully deleted\"\n },\n \"success.removed\": {\n title: \"Successfully\",\n description: \"Data has been successfully removed\"\n },\n \"error.api_db_error\": {\n title: \"API/Database Error\",\n description: \"Failed to connect to the system. Please check API or database connection.\"\n },\n \"error.permission_denied\": {\n title: \"Permission Denied\",\n description: \"You do not have permission to delete this data.\",\n confirm_text: \"Discard\"\n },\n \"error.session_expired\": {\n title: \"Session Expired\",\n description: \"Your session has expired or you have been logged out. Please sign in again.\",\n confirm_text: \"Logout\"\n },\n \"error.user_not_found\": {\n title: \"User Not Found\",\n description: \"The system could not locate the user account.\",\n confirm_text: \"Logout\"\n },\n \"error.data_not_found\": {\n title: \"Data Not Found\",\n description: \"The data has already been deleted or does not exist in the system.\"\n },\n \"error.data_restrict_editing\": {\n title: \"Data Status Restricts Editing\",\n description: \"Data status does not allow editing.\"\n },\n \"error.network_timeout_error\": {\n title: \"Network Error / Timeout\",\n description:\n \"The system could not connect to the network or the request took too long to process.\"\n },\n \"error.queue_full\": {\n title: \"Queue Full\",\n description: \"The notification queue has reached its limit. Please try again later.\"\n },\n \"error.invalid_data_format\": {\n title: \"Invalid Data Format\",\n description: \"Data creation failed due to invalid or incorrectly formatted data.\"\n },\n \"error.data_linked_to_system_data\": {\n title: \"Data Linked to System Data\",\n description: \"Cannot delete data because they are linked to existing system data.\"\n },\n \"error.pending_workflow_conflict\": {\n title: \"Pending Workflow Conflict \",\n description:\n \"The data is currently involved in a pending workflow or approval process and cannot be deactivated.\"\n },\n \"error.invalid_incomplete_data\": {\n title: \"Invalid or Incomplete Data\",\n description: \"Data status cannot be changed due to incomplete or invalid information.\"\n },\n \"error.client_side_error\": {\n title: \"Client-Side Error\",\n description: \"An error occurred on the client side. Please refresh the page or try again.\"\n },\n \"error.system_limitation\": {\n title: \"System Limitation\",\n description:\n \"The search cannot be completed due to system limitations. Please simplify your query.\"\n },\n \"error.timeout\": {\n title: \"Timeout\",\n description: \"Request failed due to a system error or timeout. Please try again.\"\n },\n \"error.duplicate_data\": {\n title: \"Duplicate Data\",\n description: \"The data you entered already exists in the system.\"\n },\n \"error.something_went_wrong\": {\n title: \"Something Went Wrong\",\n description: \"An unknown error occurred.\"\n },\n \"confirm.delete\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to delete this item?\",\n confirm_text: \"Delete\"\n },\n \"confirm.inactive\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to inactive this item?\",\n confirm_text: \"Inactive\"\n },\n \"confirm.active\": {\n variant: \"confirm-green\",\n title: \"Confirmation\",\n description: \"Are you sure you want to active this item?\",\n confirm_text: \"Active\"\n },\n \"confirm.leave_page\": {\n title: \"Confirmation\",\n description: \"Unsaved changes. Do you want to leave this page?\",\n confirm_text: \"Leave\"\n },\n \"confirm.remove\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to remove this item?\",\n confirm_text: \"Remove\"\n },\n \"confirm.logout\": {\n title: \"Confirmation\",\n description: \"Do you want to log out?\",\n confirm_text: \"Logout\"\n }\n }\n }\n }\n};\n","// src/i18n.js\nimport i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport { defaultResource } from \"./default\";\n\ni18n.use(initReactI18next).init({\n resources: defaultResource,\n lng: \"sharedui\",\n fallbackLng: \"sharedui\",\n defaultNS: \"translation\",\n interpolation: {\n escapeValue: false // react already safes from xss\n }\n});\n\nexport default i18n;\n","import { useCallback } from \"react\";\nimport {\n Dialog as BaseDialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription\n} from \"./components/ui/dialog\";\nimport { Button } from \"./components/ui/button\";\nimport { DialogAlertProps, DialogVariant } from \"./types\";\nimport \"./locale/i18n\";\nimport { useTranslation } from \"react-i18next\";\n\nconst titleColorVariant: Record<DialogVariant, string> = {\n default: \"\",\n success: \"text-green-600\",\n error: \"text-red-600\",\n warning: \"text-yellow-600\",\n confirm: \"text-red-600\",\n \"confirm-green\": \"text-red-600\"\n};\n\nexport function DialogAlert({\n open,\n onOpenChange,\n title,\n description,\n variant = \"default\",\n confirmText,\n cancelText = \"cancel\",\n onConfirm,\n onCancel,\n showCancel = true,\n align = \"center\",\n outlet,\n persistent = false\n}: DialogAlertProps) {\n const alignClass =\n align === \"start\" ? \"justify-start\"\n : align === \"end\" ? \"justify-end\"\n : \"justify-center\";\n\n const { t } = useTranslation();\n\n const handleCancel = useCallback(() => {\n onCancel?.();\n onOpenChange(false);\n }, [onCancel, onOpenChange]);\n\n const handleConfirm = useCallback(() => {\n onConfirm?.();\n onOpenChange(false);\n }, [onConfirm, onOpenChange]);\n\n return (\n <BaseDialog open={open} onOpenChange={persistent ? () => {} : onOpenChange}>\n <DialogContent className=\"max-w-md\" showCloseButton={!persistent}>\n <DialogHeader>\n {title && <DialogTitle className={titleColorVariant[variant]}>{t(title)}</DialogTitle>}\n {description && <DialogDescription>{t(description)}</DialogDescription>}\n </DialogHeader>\n\n {outlet && outlet}\n\n <div className={`flex gap-3 mt-3 ${alignClass}`}>\n {showCancel && (\n <Button variant=\"cancel\" onClick={handleCancel}>\n {t(cancelText)}\n </Button>\n )}\n {confirmText && (\n <Button variant={variant} onClick={handleConfirm}>\n {t(confirmText)}\n </Button>\n )}\n </div>\n </DialogContent>\n </BaseDialog>\n );\n}\n","import { DialogAlertTemplates } from \"../types\";\n\ntype GetTemplatesPayload = {\n setOpen?: (data: boolean) => void;\n};\ntype GetTemplatesFunc = (payload: GetTemplatesPayload) => DialogAlertTemplates;\n\nexport const getDialogTemplates: GetTemplatesFunc = ({ setOpen = () => {} }) => ({\n \"success.saved\": {\n variant: \"success\",\n title: \"success.saved.title\",\n description: \"success.saved.description\",\n cancelText: \"close\"\n },\n \"success.deleted\": {\n variant: \"success\",\n title: \"success.deleted.title\",\n description: \"success.deleted.description\",\n cancelText: \"close\"\n },\n \"success.removed\": {\n variant: \"success\",\n title: \"success.removed.title\",\n description: \"success.removed.description\",\n cancelText: \"close\"\n },\n \"error.api_db_error\": {\n variant: \"error\",\n title: \"error.api_db_error.title\",\n description: \"error.api_db_error.description\",\n cancelText: \"close\"\n },\n \"error.permission_denied\": {\n variant: \"error\",\n title: \"error.permission_denied.title\",\n description: \"error.permission_denied.description\",\n confirmText: \"error.permission_denied.confirm_text\",\n showCancel: false,\n onConfirm: () => setOpen(false)\n },\n \"error.session_expired\": {\n variant: \"error\",\n title: \"error.session_expired.title\",\n description: \"error.session_expired.description\",\n confirmText: \"error.session_expired.confirm_text\",\n showCancel: false\n },\n \"error.user_not_found\": {\n variant: \"error\",\n title: \"error.user_not_found.title\",\n description: \"error.user_not_found.description\",\n confirmText: \"error.user_not_found.confirm_text\",\n showCancel: false\n },\n \"error.data_not_found\": {\n variant: \"error\",\n title: \"error.data_not_found.title\",\n description: \"error.data_not_found.description\",\n cancelText: \"close\"\n },\n \"error.data_restrict_editing\": {\n variant: \"error\",\n title: \"error.data_restrict_editing.title\",\n description: \"error.data_restrict_editing.description\",\n cancelText: \"close\"\n },\n \"error.network_timeout_error\": {\n variant: \"error\",\n title: \"error.network_timeout_error.title\",\n description: \"error.network_timeout_error.description\",\n cancelText: \"close\"\n },\n \"error.queue_full\": {\n variant: \"error\",\n title: \"error.queue_full.title\",\n description: \"error.queue_full.description\",\n cancelText: \"close\"\n },\n \"error.invalid_data_format\": {\n variant: \"error\",\n title: \"error.invalid_data_format.title\",\n description: \"error.invalid_data_format.description\",\n cancelText: \"close\"\n },\n \"error.data_linked_to_system_data\": {\n variant: \"error\",\n title: \"error.data_linked_to_system_data.title\",\n description: \"error.data_linked_to_system_data.description\",\n cancelText: \"close\"\n },\n \"error.pending_workflow_conflict\": {\n variant: \"error\",\n title: \"error.pending_workflow_conflict.title\",\n description: \"error.pending_workflow_conflict.description\",\n cancelText: \"close\"\n },\n \"error.invalid_incomplete_data\": {\n variant: \"error\",\n title: \"error.invalid_incomplete_data.title\",\n description: \"error.invalid_incomplete_data.description\",\n cancelText: \"close\"\n },\n \"error.client_side_error\": {\n variant: \"error\",\n title: \"error.client_side_error.title\",\n description: \"error.client_side_error.description\",\n cancelText: \"close\"\n },\n \"error.system_limitation\": {\n variant: \"error\",\n title: \"error.system_limitation.title\",\n description: \"error.system_limitation.description\",\n cancelText: \"close\"\n },\n \"error.timeout\": {\n variant: \"error\",\n title: \"error.timeout.title\",\n description: \"error.timeout.description\",\n cancelText: \"close\"\n },\n \"error.duplicate_data\": {\n variant: \"error\",\n title: \"error.duplicate_data.title\",\n description: \"error.duplicate_data.description\",\n cancelText: \"close\"\n },\n \"error.something_went_wrong\": {\n variant: \"error\",\n title: \"error.something_went_wrong.title\",\n description: \"error.something_went_wrong.description\",\n cancelText: \"close\"\n },\n \"confirm.delete\": {\n variant: \"confirm\",\n title: \"confirm.delete.title\",\n description: \"confirm.delete.description\",\n confirmText: \"confirm.delete.confirm_text\"\n },\n \"confirm.inactive\": {\n variant: \"confirm\",\n title: \"confirm.inactive.title\",\n description: \"confirm.inactive.description\",\n confirmText: \"confirm.inactive.confirm_text\"\n },\n \"confirm.active\": {\n variant: \"confirm-green\",\n title: \"confirm.active.title\",\n description: \"confirm.active.description\",\n confirmText: \"confirm.active.confirm_text\"\n },\n \"confirm.leave_page\": {\n variant: \"confirm\",\n title: \"confirm.leave_page.title\",\n description: \"confirm.leave_page.description\",\n confirmText: \"confirm.leave_page.confirm_text\"\n },\n \"confirm.remove\": {\n variant: \"confirm\",\n title: \"confirm.remove.title\",\n description: \"confirm.remove.description\",\n confirmText: \"confirm.remove.confirm_text\"\n },\n \"confirm.logout\": {\n variant: \"confirm\",\n title: \"confirm.logout.title\",\n description: \"confirm.logout.description\",\n confirmText: \"confirm.logout.confirm_text\"\n }\n});\n","import { DialogAlert } from \"../DialogAlert\";\nimport {\n DialogAlertI18nResource,\n DialogAlertProps,\n DialogAlertTemplateUnit,\n TemplateKeys\n} from \"../types\";\nimport { getDialogTemplates } from \"../templates\";\nimport { create } from \"zustand\";\nimport i18n from \"../locale/i18n\";\nimport { useEffect } from \"react\";\nimport { i18nPrefix } from \"../lib/constants\";\n\ntype OpenDialogAlert = Omit<DialogAlertProps, \"open\" | \"onOpenChange\">;\ntype State = {\n open: boolean;\n setOpen: (data: boolean) => void;\n dialogProps: OpenDialogAlert;\n setDialogProps: (data: OpenDialogAlert) => void;\n openDialogAlert: (payload?: { template?: TemplateKeys; props?: OpenDialogAlert }) => void;\n closeDialogAlert: () => void;\n};\n\nconst useDialogAlertStore = create<State>((set, get) => ({\n open: false,\n dialogProps: {},\n setOpen: (data) => set({ open: data }),\n setDialogProps: (data) => set({ dialogProps: data }),\n\n openDialogAlert: (payload) => {\n let templateVal: DialogAlertTemplateUnit | undefined;\n if (payload?.template) {\n templateVal = getDialogTemplates({ setOpen: get().setOpen })[payload.template];\n // add prefix\n templateVal.title = templateVal.title ? i18nPrefix + templateVal.title : undefined;\n templateVal.description =\n templateVal.description ? i18nPrefix + templateVal.description : undefined;\n templateVal.confirmText =\n templateVal.confirmText ? i18nPrefix + templateVal.confirmText : undefined;\n templateVal.cancelText = templateVal.cancelText ? i18nPrefix + templateVal.cancelText : undefined;\n }\n get().setDialogProps({ ...templateVal, ...payload?.props });\n get().setOpen(true);\n },\n closeDialogAlert: () => {\n set({ open: false });\n }\n}));\n\ninterface DialogAlertProviderProps extends React.PropsWithChildren {\n /**\n * @description i18n resource for dialogAlert to use\n * @example \n * ``` \n * {\n * en: {\n * translation: {\n * dialog_alert: {\n * close: \"Close\",\n * cancel: \"Cancel\",\n * \"success.saved\": {\n title: \"Successfully\",\n description: \"Data has been successfully saved\"\n },\n * ....\n * }\n * }\n * }\n * }\n * ```\n */\n i18nResource?: DialogAlertI18nResource;\n /**\n * @description specify language to use\n */\n i18nLang?: string;\n}\nexport const DialogAlertProvider = ({ children, i18nResource, i18nLang }: DialogAlertProviderProps) => {\n const open = useDialogAlertStore((state) => state.open);\n const setOpen = useDialogAlertStore((state) => state.setOpen);\n const dialogProps = useDialogAlertStore((state) => state.dialogProps);\n\n useEffect(() => {\n if (!i18nResource) {\n i18n.changeLanguage(\"sharedui\");\n return;\n }\n try {\n const langs = Object.keys(i18nResource);\n for (const lang of langs) {\n i18n.addResourceBundle(lang, \"translation\", i18nResource[lang][\"translation\"], false, true);\n }\n i18n.changeLanguage(i18nLang);\n } catch {\n i18n.changeLanguage(\"sharedui\");\n return;\n }\n }, [i18nLang, i18nResource]);\n\n return (\n <>\n {children}\n <DialogAlert open={open} onOpenChange={setOpen} {...dialogProps} />\n </>\n );\n};\n\nconst openDialogAlert = useDialogAlertStore.getState().openDialogAlert;\nconst closeDialogAlert = useDialogAlertStore.getState().closeDialogAlert;\n/**\n * @description open error dialog based on given error, if the error is javascript Error instance\n * it will use error.message as dialog description, if the error is AxiosError it will use error template\n * based on error.response.status\n * @param error - Accept Error or AxiosError\n */\nconst openErrorDialogAlert = (error: unknown) => {\n if (error instanceof Error) {\n openDialogAlert({ template: \"error.something_went_wrong\", props: { description: error.message } });\n } else if ((error as any).isAxiosError) {\n let template: TemplateKeys = \"error.something_went_wrong\";\n switch ((error as any).response?.status) {\n case 400:\n template = \"error.invalid_incomplete_data\";\n break;\n case 401:\n template = \"error.session_expired\";\n break;\n case 403:\n template = \"error.permission_denied\";\n break;\n case 404:\n template = \"error.data_not_found\";\n break;\n case 409:\n template = \"error.duplicate_data\";\n break;\n case 500:\n template = \"error.api_db_error\";\n break;\n }\n openDialogAlert({ template });\n } else {\n openDialogAlert({ template: \"error.something_went_wrong\" });\n }\n};\n\nexport const getDialogAlertControls = () => ({\n openDialogAlert,\n closeDialogAlert,\n openErrorDialogAlert\n});\n","import { Spinner } from \"@/components/spinner\";\nimport { cn } from \"@/utils\";\n\ntype LoadingOverlayProps = React.ComponentProps<\"div\"> & {\n fullscreen?: boolean;\n spinnerClassName?: string;\n};\n\nexport default function LoadingOverlay({\n className,\n fullscreen = true,\n spinnerClassName,\n ...props\n}: LoadingOverlayProps) {\n return (\n <div\n data-slot=\"loading-overlay\"\n className={cn(\n fullscreen ? \"fixed z-100\" : \"absolute z-10\",\n \"inset-0 flex items-center justify-center transition-opacity duration-300\",\n className\n )}\n {...props}\n >\n <Spinner className={cn(\"size-50\", spinnerClassName)} />\n </div>\n );\n}\n","import type { FormulaOperator } from \"../types\";\n\nexport const defaultOperators: FormulaOperator[] = [\n { value: \"(\", label: \"(\" },\n { value: \")\", label: \")\" },\n { value: \"%\", label: \"%\" },\n { value: \"&\", label: \"&\" },\n { value: \"+\", label: \"+\" },\n { value: \"-\", label: \"-\" },\n { value: \"*\", label: \"×\" },\n { value: \"/\", label: \"÷\" },\n { value: \"=\", label: \"=\" },\n { value: \"≠\", label: \"≠\" },\n { value: \"#NULL\", label: \"#NULL\" }\n];\n\nexport const defaultOperatorShortcuts: Record<string, string> = {\n \"(\": \"(\",\n \")\": \")\",\n \"%\": \"%\",\n \"&\": \"&\",\n \"+\": \"+\",\n \"-\": \"-\",\n \"*\": \"*\",\n \"/\": \"/\",\n \"=\": \"=\",\n \"≠\": \"≠\",\n \"#NULL\": \"#NULL\"\n};\n","import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport type { SuggestionProps } from \"@tiptap/suggestion\";\n\nimport { cn } from \"@/utils\";\nimport type { FormulaTokenAttributes } from \"../types\";\n\nconst DEFAULT_DEBOUNCE = 200;\n\ninterface SuggestionListProps extends SuggestionProps<FormulaTokenAttributes> {\n editor: Editor;\n fetchItems: (query: string) => Promise<any[]>;\n mapItem: (item: any) => FormulaTokenAttributes;\n normalizeToken: (attrs: Partial<FormulaTokenAttributes>) => FormulaTokenAttributes;\n debounceMs?: number;\n}\n\nfunction useKeyboardNavigation(\n itemsLength: number,\n onSelect: (index: number) => void,\n isLocked: boolean\n) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % Math.max(itemsLength, 1));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev - 1 + Math.max(itemsLength, 1)) % Math.max(itemsLength, 1));\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \"Tab\") {\n event.preventDefault();\n if (!isLocked) onSelect(selectedIndex);\n }\n };\n\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [itemsLength, onSelect, selectedIndex, isLocked]);\n\n return [selectedIndex, setSelectedIndex] as const;\n}\n\nfunction useDropdownPosition(clientRect?: (() => DOMRect | null) | null, itemsCount?: number) {\n const [rect, setRect] = useState<DOMRect | null>(null);\n const [style, setStyle] = useState<React.CSSProperties>({});\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!clientRect) return;\n\n const update = () => {\n const nextRect = clientRect();\n if (nextRect) setRect(nextRect);\n };\n\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(document.body);\n\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n resizeObserver.disconnect();\n };\n }, [clientRect]);\n\n useLayoutEffect(() => {\n if (!rect || !ref.current) return;\n const dropdown = ref.current;\n const dropdownRect = dropdown.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let top = rect.bottom + window.scrollY + 6;\n let left = rect.left + window.scrollX;\n\n if (top + dropdownRect.height > viewportHeight + window.scrollY) {\n top = rect.top + window.scrollY - dropdownRect.height - 6;\n }\n\n if (left + dropdownRect.width > viewportWidth + window.scrollX) {\n left = Math.max(viewportWidth + window.scrollX - dropdownRect.width - 8, 0);\n }\n\n setStyle({ position: \"absolute\", zIndex: 50, top, left });\n }, [rect, itemsCount]);\n\n return { ref, style, rect };\n}\n\nexport const SuggestionList: React.FC<SuggestionListProps> = ({\n clientRect,\n command,\n fetchItems,\n mapItem,\n normalizeToken,\n debounceMs = DEFAULT_DEBOUNCE,\n query\n}) => {\n const [items, setItems] = useState<FormulaTokenAttributes[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const fetchId = useRef(0);\n const debounceHandle = useRef<number | null>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const { ref, style, rect } = useDropdownPosition(clientRect, items.length);\n const normalizedMap = useMemo(() => mapItem, [mapItem]);\n const normalizeItem = useMemo(() => normalizeToken, [normalizeToken]);\n\n useEffect(() => {\n const runFetch = (input: string) => {\n fetchId.current += 1;\n const currentId = fetchId.current;\n if (debounceHandle.current) clearTimeout(debounceHandle.current);\n\n debounceHandle.current = window.setTimeout(async () => {\n setIsLoading(true);\n try {\n const results = await fetchItems(input);\n if (fetchId.current !== currentId) return;\n const mapped =\n Array.isArray(results) ? results.map((item) => normalizeItem(normalizedMap(item))) : [];\n setItems(mapped);\n } catch {\n if (fetchId.current === currentId) {\n setItems([]);\n }\n } finally {\n if (fetchId.current === currentId) {\n setIsLoading(false);\n }\n }\n }, debounceMs);\n };\n\n runFetch(query ?? \"\");\n\n return () => {\n if (debounceHandle.current) {\n clearTimeout(debounceHandle.current);\n }\n fetchId.current += 1;\n };\n }, [query, fetchItems, normalizedMap, normalizeItem, debounceMs]);\n\n const handleSelect = useMemo(\n () => (item: FormulaTokenAttributes) => {\n if (isLoading) return;\n command(item);\n },\n [command, isLoading]\n );\n\n const [selectedIndex, setSelectedIndex] = useKeyboardNavigation(\n items.length,\n (index) => {\n if (!items.length) return;\n handleSelect(items[index]);\n },\n isLoading\n );\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [items, setSelectedIndex]);\n\n useEffect(() => {\n const element = itemRefs.current[selectedIndex];\n if (element) element.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n if (!rect) return null;\n\n const showEmptyState = !isLoading && items.length === 0;\n\n return (\n <div\n ref={ref}\n style={style}\n className=\"w-80 max-h-60 overflow-y-auto rounded-lg border bg-white p-1 shadow-lg\"\n >\n {isLoading && <div className=\"px-3 py-2 text-sm text-muted-foreground\">Loading suggestions…</div>}\n {showEmptyState && <div className=\"px-3 py-2 text-sm text-muted-foreground\">No matches</div>}\n {items.map((item, idx) => (\n <button\n key={item.id}\n ref={(el) => {\n itemRefs.current[idx] = el;\n }}\n type=\"button\"\n onClick={() => handleSelect(item)}\n onMouseMove={() => setSelectedIndex(idx)}\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-3 py-2 text-left text-sm\",\n selectedIndex === idx ? \"bg-muted\" : \"hover:bg-muted\",\n isLoading && \"pointer-events-none opacity-60\"\n )}\n disabled={isLoading}\n >\n <span>{item.label ?? item.code}</span>\n <span className=\"text-xs text-muted-foreground\">\n {item.prefix ?? \"\"}\n {item.code ?? \"\"}\n </span>\n </button>\n ))}\n </div>\n );\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { Editor, Node, mergeAttributes } from \"@tiptap/core\";\nimport { NodeViewWrapper, ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Suggestion from \"@tiptap/suggestion\";\nimport type { SuggestionProps } from \"@tiptap/suggestion\";\nimport { Plugin, PluginKey } from \"prosemirror-state\";\n\nimport { cn } from \"@/utils\";\n\nimport { SuggestionList } from \"./SuggestionList\";\nimport type { FormulaTokenAttributes, FormulaTokenConfig } from \"../types\";\n\nconst DISALLOWED_MARKS = [\"bold\", \"italic\", \"link\"];\nconst SUGGESTION_DEBOUNCE = 200;\n\nexport type TokenOptions = {\n configs: FormulaTokenConfig[];\n onSelect?: (token: FormulaTokenAttributes, config: FormulaTokenConfig) => void;\n};\n\nexport type OperatorOptions = {\n shortcuts?: Record<string, string>;\n};\n\ntype SuggestionPluginOptions = {\n config: FormulaTokenConfig;\n onSelect?: (token: FormulaTokenAttributes, config: FormulaTokenConfig) => void;\n nodeName: string;\n editor: Editor;\n register: (entry: SuggestionRegistration) => void;\n};\n\ntype SuggestionRegistration = { key: PluginKey; config: FormulaTokenConfig };\n\nconst DEFAULT_CHIP_CLASS = \"outline-1 outline-muted bg-muted/40 text-foreground\";\n\nconst TokenView: React.FC<any> = ({ node, editor, getPos }) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n React.useEffect(() => {\n const handler = () => {\n const { from, to } = editor.state.selection;\n const position = getPos();\n if (position >= from && position + node.nodeSize <= to) {\n setIsFocused(true);\n } else {\n setIsFocused(false);\n }\n };\n\n editor.on(\"selectionUpdate\", handler);\n return () => {\n editor.off(\"selectionUpdate\", handler);\n };\n }, [editor, getPos, node.nodeSize]);\n\n const remove = () => {\n const pos = getPos();\n editor\n .chain()\n .focus()\n .deleteRange({ from: pos, to: pos + node.nodeSize })\n .run();\n };\n\n return (\n <NodeViewWrapper\n as=\"span\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-sm px-2 py-0.5 mx-2 text-sm font-medium\",\n DEFAULT_CHIP_CLASS,\n node.attrs.chipClassName,\n isFocused && \"ring-2 ring-offset-1 ring-ring\"\n )}\n >\n <span>{node.attrs.label ?? node.attrs.code ?? node.attrs.rawValue}</span>\n {(node.attrs.code || node.attrs.prefix) && (\n <span className=\"text-xs font-normal opacity-80\">\n ({node.attrs.prefix}\n {node.attrs.code ?? \"\"})\n </span>\n )}\n <button\n type=\"button\"\n onClick={remove}\n className=\"ml-1 cursor-pointer rounded-sm px-1 text-xs leading-none hover:bg-sus-primary-1/30\"\n aria-label={`Remove ${node.attrs.label ?? node.attrs.code ?? \"token\"}`}\n >\n ×\n </button>\n </NodeViewWrapper>\n );\n};\n\nfunction normalizeTokenAttrs(\n attrs: Partial<FormulaTokenAttributes>,\n config: FormulaTokenConfig\n): FormulaTokenAttributes {\n const idSource = attrs.id ?? attrs.code ?? attrs.label ?? Math.random().toString(36).slice(2);\n const prefix = attrs.prefix ?? config.prefix;\n const suffix = attrs.code ?? attrs.label ?? \"\";\n const outputType = attrs.outputType ?? config.outputType ?? config.type;\n return {\n ...attrs,\n id: String(idSource),\n type: config.type,\n prefix,\n chipClassName: attrs.chipClassName ?? config.chipClassName,\n rawValue: attrs.rawValue ?? (suffix ? `${prefix}${suffix}` : prefix),\n outputType\n } as FormulaTokenAttributes;\n}\n\nconst isPlainTextContext = (state: any, range: { from: number; to: number }) => {\n const { doc, schema } = state;\n const $from = doc.resolve(range.from);\n if ($from.parent.type.name !== \"paragraph\") return false;\n const marks = $from.marks();\n if (marks.some((mark: any) => DISALLOWED_MARKS.includes(mark.type.name))) return false;\n const linkMark = schema.marks.link;\n if (linkMark && linkMark.isInSet(marks)) return false;\n const nodeBefore = $from.nodeBefore;\n if (nodeBefore && nodeBefore.type.name === \"token\") return false;\n const nodeAfter = $from.nodeAfter;\n if (nodeAfter && nodeAfter.type.name === \"token\") return false;\n return true;\n};\n\nfunction suggestionPlugin({ config, onSelect, nodeName, editor, register }: SuggestionPluginOptions) {\n const pluginKey = new PluginKey(`formula-token-${config.type}-${config.prefix}`);\n const fetchItems = config.fetchItems ?? (async () => []);\n const mapItem = config.mapItem ?? ((item: any) => item as FormulaTokenAttributes);\n const normalizeForConfig = (attrs: Partial<FormulaTokenAttributes>) =>\n normalizeTokenAttrs(attrs, config);\n register({ key: pluginKey, config });\n\n return Suggestion<FormulaTokenAttributes>({\n editor,\n char: config.prefix,\n pluginKey,\n allowSpaces: true,\n startOfLine: false,\n items: () => [],\n allow: ({ state, range }) => {\n if (editor.view.composing) return false;\n return isPlainTextContext(state, range);\n },\n render: () => {\n let reactRoot: ReactDOM.Root | null = null;\n let container: HTMLDivElement | null = null;\n\n return {\n onStart: (props: SuggestionProps<FormulaTokenAttributes>) => {\n container = document.createElement(\"div\");\n document.body.appendChild(container);\n reactRoot = ReactDOM.createRoot(container);\n reactRoot.render(\n <SuggestionList\n {...props}\n editor={editor as any}\n fetchItems={fetchItems}\n mapItem={mapItem}\n normalizeToken={normalizeForConfig}\n debounceMs={SUGGESTION_DEBOUNCE}\n />\n );\n },\n onUpdate: (props: SuggestionProps<FormulaTokenAttributes>) => {\n reactRoot?.render(\n <SuggestionList\n {...props}\n editor={editor as any}\n fetchItems={fetchItems}\n mapItem={mapItem}\n normalizeToken={normalizeForConfig}\n debounceMs={SUGGESTION_DEBOUNCE}\n />\n );\n },\n onKeyDown: ({ event }) => {\n if (event.key === \"Escape\" || event.key === \"Enter\" || event.key === \"Tab\") {\n event.preventDefault();\n return true;\n }\n return false;\n },\n onExit: () => {\n reactRoot?.unmount();\n reactRoot = null;\n container?.remove();\n container = null;\n }\n };\n },\n command: ({ range, props, editor }) => {\n const attrs = normalizeTokenAttrs(props, config);\n const nextChar = editor.state.doc.textBetween(range.to, range.to + 1, \"\\n\", \"\\n\");\n const shouldInsertSpace = !nextChar || !/\\s/.test(nextChar);\n const content =\n shouldInsertSpace ?\n [\n { type: nodeName, attrs },\n { type: \"text\", text: \" \" }\n ]\n : { type: nodeName, attrs };\n\n editor.chain().focus().insertContentAt(range, content).run();\n onSelect?.(attrs, config);\n }\n }) as any;\n}\n\nconst createSuggestionMonitorPlugin = (registrations: SuggestionRegistration[]) =>\n new Plugin({\n key: new PluginKey(\"formula-token-suggestion-guard\"),\n view(editorView) {\n const ensureValid = () => {\n registrations.forEach(({ key, config }) => {\n const state = key.getState(editorView.state);\n if (!state?.active) return;\n const currentText = editorView.state.doc.textBetween(\n state.range.from,\n state.range.to,\n \"\\n\",\n \"\\n\"\n );\n if (!currentText || !currentText.startsWith(config.prefix)) {\n const tr = editorView.state.tr.setMeta(key, { exit: true });\n editorView.dispatch(tr);\n }\n });\n };\n\n ensureValid();\n return {\n update: () => ensureValid()\n };\n }\n });\n\nconst createTokenSpacingPlugin = (nodeName: string) =>\n new Plugin({\n key: new PluginKey(`formula-token-spacing-${nodeName}`),\n appendTransaction(transactions, oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) return null;\n\n const insertions: { pos: number; text: string }[] = [];\n newState.doc.descendants((node: any, pos: number) => {\n if (node.type.name !== nodeName) return;\n\n const beforePos = pos - 1;\n if (beforePos >= 0) {\n const beforeChar = newState.doc.textBetween(beforePos, pos, \"\\n\", \"\\n\");\n if (beforeChar && !/\\s/.test(beforeChar)) {\n insertions.push({ pos, text: \" \" });\n }\n }\n\n const afterPos = pos + node.nodeSize;\n if (afterPos < newState.doc.content.size) {\n const afterChar = newState.doc.textBetween(afterPos, afterPos + 1, \"\\n\", \"\\n\");\n if (afterChar && !/\\s/.test(afterChar)) {\n insertions.push({ pos: afterPos, text: \" \" });\n }\n }\n });\n\n if (!insertions.length) return null;\n const tr = newState.tr;\n insertions\n .sort((a, b) => b.pos - a.pos)\n .forEach(({ pos, text }) => {\n tr.insertText(text, pos);\n });\n return tr;\n }\n });\n\nexport const Token = Node.create<TokenOptions>({\n name: \"token\",\n inline: true,\n group: \"inline\",\n atom: true,\n selectable: false,\n draggable: false,\n\n addAttributes() {\n return {\n type: { default: \"\" },\n id: { default: \"\" },\n code: { default: \"\" },\n label: { default: \"\" },\n prefix: { default: \"\" },\n rawValue: { default: \"\" },\n chipClassName: { default: \"\" },\n outputType: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [{ tag: \"token-chip\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"token-chip\", mergeAttributes(HTMLAttributes), HTMLAttributes.label || \"\"];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(TokenView);\n },\n\n addProseMirrorPlugins() {\n const configs = this.options.configs ?? [];\n const registrations: SuggestionRegistration[] = [];\n const suggestionPlugins = configs.map((config) =>\n suggestionPlugin({\n config,\n onSelect: this.options.onSelect,\n nodeName: this.name,\n editor: this.editor,\n register: (entry) => registrations.push(entry)\n })\n );\n\n return [\n ...suggestionPlugins,\n createTokenSpacingPlugin(this.name),\n createSuggestionMonitorPlugin(registrations)\n ];\n }\n});\n\nexport const Operator = Node.create<OperatorOptions>({\n name: \"operator\",\n inline: true,\n group: \"inline\",\n atom: true,\n selectable: false,\n\n addAttributes() {\n return {\n value: { default: null }\n };\n },\n\n parseHTML() {\n return [{ tag: \"span[operator]\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"span\", mergeAttributes({ operator: HTMLAttributes.value }), HTMLAttributes.value];\n },\n\n addKeyboardShortcuts() {\n const shortcuts = this.options.shortcuts ?? {};\n return Object.fromEntries(\n Object.entries(shortcuts).map(([key, value]) => [\n key,\n ({ editor }) => {\n editor.chain().insertContent({ type: \"operator\", attrs: { value } }).insertContent(\" \").run();\n return true;\n }\n ])\n );\n }\n});\n","import type { FormulaTokenAttributes, FormulaTokenConfig, FormulaTokenType } from \"../types\";\n\nconst DEFAULT_PARENTHESIS_MAP: Record<string, string> = {\n \"(\": \")\",\n \"[\": \"]\",\n \"{\": \"}\"\n};\n\nexport type PrefixMap = Record<string, string>;\nexport type RawFormulaSegment =\n | { kind: \"text\"; value: string }\n | { kind: \"token\"; prefix: string; code: string };\n\nconst createSortedPrefixes = (prefixMap: PrefixMap) =>\n Object.keys(prefixMap).sort((a, b) => b.length - a.length);\n\nconst findPrefixAt = (value: string, start: number, prefixes: string[]) =>\n prefixes.find((prefix) => value.startsWith(prefix, start));\n\nconst pushVariableAndInner = (\n tokens: FormulaTokenType[],\n value: string,\n prefixMap: PrefixMap,\n prefixes: string[]\n) => {\n if (!value) return;\n tokens.push({ type: \"variable\", value });\n\n for (let cursor = 0; cursor < value.length; ) {\n const prefix = findPrefixAt(value, cursor, prefixes);\n if (!prefix) {\n cursor += 1;\n continue;\n }\n\n cursor += prefix.length;\n const rest = value.slice(cursor);\n const codeMatch = rest.match(/^\\w+/);\n if (codeMatch) {\n tokens.push({ type: prefixMap[prefix], code: codeMatch[0] });\n cursor += codeMatch[0].length;\n }\n }\n};\n\nexport const buildPrefixMap = (configs: FormulaTokenConfig[]): PrefixMap => {\n return configs.reduce((acc, config) => {\n const outputType = config.outputType ?? config.type;\n if (!acc[config.prefix]) acc[config.prefix] = outputType;\n return acc;\n }, {} as PrefixMap);\n};\n\nexport const tokenizeFormulaString = (raw: string, prefixMap: PrefixMap): RawFormulaSegment[] => {\n const segments: RawFormulaSegment[] = [];\n if (!raw) return segments;\n\n const prefixes = createSortedPrefixes(prefixMap);\n let buffer = \"\";\n\n const flushBuffer = () => {\n if (buffer) {\n segments.push({ kind: \"text\", value: buffer });\n buffer = \"\";\n }\n };\n\n for (let i = 0; i < raw.length; ) {\n const prefix = findPrefixAt(raw, i, prefixes);\n if (prefix) {\n const rest = raw.slice(i + prefix.length);\n const codeMatch = rest.match(/^\\w+/);\n if (codeMatch) {\n flushBuffer();\n segments.push({ kind: \"token\", prefix, code: codeMatch[0] });\n i += prefix.length + codeMatch[0].length;\n continue;\n }\n }\n\n buffer += raw[i];\n i += 1;\n }\n\n flushBuffer();\n return segments;\n};\n\nexport const parseFormulaToToken = (text: string, prefixMap: PrefixMap): FormulaTokenType[] => {\n const tokens: FormulaTokenType[] = [];\n if (!text) return tokens;\n\n const prefixes = createSortedPrefixes(prefixMap);\n const leadingPrefix = findPrefixAt(text, 0, prefixes);\n\n if (!leadingPrefix) {\n pushVariableAndInner(tokens, text, prefixMap, prefixes);\n return tokens;\n }\n\n const afterPrefix = text.slice(leadingPrefix.length);\n const codeMatch = afterPrefix.match(/^\\w+/);\n\n if (!codeMatch) {\n pushVariableAndInner(tokens, text, prefixMap, prefixes);\n return tokens;\n }\n\n tokens.push({ type: prefixMap[leadingPrefix], code: codeMatch[0] });\n const remaining = afterPrefix.slice(codeMatch[0].length);\n if (remaining) {\n let variablePart = remaining;\n\n if (remaining.startsWith(\":\") && remaining.includes(\"(\")) {\n let depth = 0;\n let endIndex = -1;\n for (let i = 0; i < remaining.length; i++) {\n if (remaining[i] === \"(\") depth += 1;\n else if (remaining[i] === \")\") depth -= 1;\n if (depth === 0 && remaining[i] === \")\") {\n endIndex = i;\n break;\n }\n }\n if (endIndex !== -1) {\n variablePart = remaining.slice(0, endIndex + 1);\n }\n }\n\n pushVariableAndInner(tokens, variablePart, prefixMap, prefixes);\n }\n\n return tokens;\n};\n\nexport const splitOperators = (value: string, allowedOperators: string[]): FormulaTokenType[] => {\n const result: FormulaTokenType[] = [];\n if (!value) return result;\n\n const sortedOperators = [...allowedOperators].sort((a, b) => b.length - a.length);\n let buffer = \"\";\n\n for (let i = 0; i < value.length; i += 1) {\n let matched = false;\n for (const operator of sortedOperators) {\n if (operator && value.startsWith(operator, i)) {\n if (buffer) {\n result.push({ type: \"variable\", value: buffer });\n buffer = \"\";\n }\n result.push({ type: \"operator\", value: operator });\n i += operator.length - 1;\n matched = true;\n break;\n }\n }\n\n if (!matched) buffer += value[i];\n }\n\n if (buffer) result.push({ type: \"variable\", value: buffer });\n return result;\n};\n\nexport const parseFormula = (\n editorJson: any,\n prefixMap: PrefixMap,\n allowedOperators: string[]\n): { raw: string; token: FormulaTokenType[] } => {\n const rawParts: string[] = [];\n const tokens: FormulaTokenType[] = [];\n\n const traverse = (nodes: any[] = []) => {\n nodes.forEach((node) => {\n if (!node) return;\n\n switch (node.type) {\n case \"text\": {\n const text = node.text ?? \"\";\n if (!text) return;\n rawParts.push(text);\n if (text.trim()) {\n tokens.push({ type: \"variable\", value: text });\n }\n break;\n }\n case \"operator\": {\n rawParts.push(node.attrs?.value ?? \"\");\n tokens.push({ type: \"operator\", value: node.attrs?.value ?? \"\" });\n break;\n }\n case \"op-library\": {\n rawParts.push(node.attrs?.value ?? \"\");\n tokens.push(...splitOperators(node.attrs?.value ?? \"\", allowedOperators));\n break;\n }\n case \"token\": {\n const attrs = node.attrs ?? {};\n const rawValue = attrs.rawValue ?? `${attrs.prefix ?? \"\"}${attrs.code ?? \"\"}`;\n rawParts.push(rawValue);\n const outputType = attrs.outputType ?? attrs.type ?? prefixMap[attrs.prefix ?? \"\"];\n tokens.push({ ...attrs, type: outputType });\n break;\n }\n default:\n if (node.content) traverse(node.content);\n }\n });\n };\n\n traverse(editorJson?.content ?? []);\n return { raw: rawParts.join(\"\"), token: tokens };\n};\n\nexport const validateTokenPrefixes = (\n rawFormula: string,\n prefixMap: PrefixMap\n): {\n isValid: boolean;\n message?: string;\n} => {\n const prefixes = Object.keys(prefixMap);\n if (prefixes.length === 0) return { isValid: true };\n\n const missingTypes = new Set<string>();\n for (let i = 0; i < rawFormula.length; i += 1) {\n const prefix = prefixes.find((key) => rawFormula.startsWith(key, i));\n if (prefix) {\n const nextChar = rawFormula[i + prefix.length];\n if (!nextChar || !/\\w/.test(nextChar)) {\n missingTypes.add(prefixMap[prefix]);\n }\n i += prefix.length;\n }\n }\n\n if (missingTypes.size > 0) {\n return {\n isValid: false,\n message: `Invalid token for ${Array.from(missingTypes).join(\" and \")}`\n };\n }\n\n return { isValid: true };\n};\n\nexport const isValidParentheses = (input: string): { valid: boolean; message?: string } => {\n const stack: string[] = [];\n const openers = Object.keys(DEFAULT_PARENTHESIS_MAP);\n const closers = Object.values(DEFAULT_PARENTHESIS_MAP);\n\n for (const char of input) {\n if (openers.includes(char)) {\n stack.push(char);\n } else if (closers.includes(char)) {\n const last = stack.pop();\n if (!last || DEFAULT_PARENTHESIS_MAP[last] !== char) {\n return { valid: false };\n }\n }\n }\n\n if (stack.length > 0) {\n return { valid: false };\n }\n\n return { valid: true };\n};\n\nexport const mapTokensToOutput = (tokens: FormulaTokenType[], configs: FormulaTokenConfig[]): any[] => {\n const prefixLookup = new Map<string, FormulaTokenConfig>();\n const typeLookup = new Map<string, FormulaTokenConfig>();\n\n configs.forEach((config) => {\n prefixLookup.set(config.prefix, config);\n typeLookup.set(config.outputType ?? config.type, config);\n });\n\n return tokens.map((token) => {\n if (!token || typeof token !== \"object\") return token;\n\n const tokenPrefix = \"prefix\" in token ? (token as FormulaTokenAttributes).prefix : undefined;\n const tokenType = \"type\" in token ? (token as FormulaTokenAttributes).type : undefined;\n\n const config =\n (tokenPrefix ? prefixLookup.get(tokenPrefix) : undefined) ??\n (tokenType ? typeLookup.get(String(tokenType)) : undefined);\n\n if (config?.mapOutput) {\n return config.mapOutput(token as FormulaTokenAttributes);\n }\n\n return token;\n });\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport { Maximize2, Minimize2 } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport LoadingOverlay from \"@/components/ui/LoadingOverlay\";\nimport { cn } from \"@/utils\";\n\nimport { defaultOperators, defaultOperatorShortcuts } from \"./constants/formulaOperation\";\nimport { Operator, Token } from \"./editor/EditorExtension\";\nimport {\n buildPrefixMap,\n mapTokensToOutput,\n parseFormula,\n tokenizeFormulaString\n} from \"./utils/parseFormulaToken\";\nimport type { PrefixMap } from \"./utils/parseFormulaToken\";\nimport type { FormulaEditorProps, FormulaTokenAttributes, FormulaTokenConfig } from \"./types\";\n\nconst DEFAULT_TOKEN_CONFIGS: FormulaTokenConfig[] = [\n {\n type: \"position\",\n prefix: \"$\",\n chipClassName: \"text-black border border-sus-primary-1 outline-sus-primary-1\",\n fetchItems: async () => []\n },\n {\n type: \"impact\",\n prefix: \"#\",\n chipClassName: \"text-black border border-sus-primary-1 outline-sus-primary-1\",\n fetchItems: async () => []\n }\n];\n\nconst defaultMapItem = (item: Record<string, any>) => {\n const id = item?.id ?? item?.code ?? item?.label ?? Math.random().toString(36).slice(2);\n return {\n id: String(id),\n label: item?.label ?? item?.name ?? String(item?.code ?? item?.id ?? \"\"),\n code: item?.code ?? String(item?.id ?? \"\")\n };\n};\n\ntype NormalizedTokenConfig = FormulaTokenConfig & {\n fetchItems: NonNullable<FormulaTokenConfig[\"fetchItems\"]>;\n mapItem: NonNullable<FormulaTokenConfig[\"mapItem\"]>;\n outputType: string;\n mapOutput?: (attrs: FormulaTokenAttributes) => any;\n};\n\ntype JSONContent = {\n type: string;\n text?: string;\n attrs?: Record<string, any>;\n content?: JSONContent[];\n};\n\ntype JSONDoc = {\n type: \"doc\";\n content: JSONContent[];\n};\n\nconst looksLikeHTML = (value: string) => /<\\/?[a-z][\\s\\S]*>/i.test(value.trim());\n\nconst tryParseJSON = (value: string) => {\n try {\n const parsed = JSON.parse(value);\n if (parsed && typeof parsed === \"object\") {\n return parsed;\n }\n } catch {\n // ignore\n }\n return null;\n};\n\nconst buildDocFromRaw = (\n raw: string,\n prefixMap: PrefixMap,\n configLookup: Map<string, NormalizedTokenConfig>\n): JSONDoc => {\n const lines = raw.split(/\\r?\\n/);\n let tokenCounter = 0;\n\n const paragraphs = lines.map((line) => {\n const segments = tokenizeFormulaString(line, prefixMap);\n const content = segments\n .map<JSONContent | null>((segment) => {\n if (segment.kind === \"text\") {\n return segment.value ? { type: \"text\", text: segment.value } : null;\n }\n\n const config = configLookup.get(segment.prefix);\n const fallbackType = prefixMap[segment.prefix];\n const displayType = config?.type ?? fallbackType;\n const outputType = config?.outputType ?? fallbackType;\n\n if (!displayType && !outputType) {\n return { type: \"text\", text: `${segment.prefix}${segment.code}` };\n }\n\n const attrs: FormulaTokenAttributes = {\n id: `token-${tokenCounter++}`,\n type: displayType ?? outputType ?? \"token\",\n code: segment.code,\n prefix: segment.prefix,\n rawValue: `${segment.prefix}${segment.code}`,\n chipClassName: config?.chipClassName,\n label: segment.code,\n outputType: outputType ?? displayType\n };\n\n return { type: \"token\", attrs };\n })\n .filter((node): node is JSONContent => Boolean(node));\n\n return {\n type: \"paragraph\",\n content: content.length > 0 ? content : [{ type: \"text\", text: \"\" }]\n };\n });\n\n return { type: \"doc\", content: paragraphs };\n};\n\nexport const FormulaEditor: React.FC<FormulaEditorProps> = ({\n value,\n disabled,\n loading = false,\n className,\n editorClassName,\n errorMessage,\n tokenConfigs,\n operators = defaultOperators,\n operatorShortcuts = defaultOperatorShortcuts,\n onChange,\n onSelectSuggestion,\n field,\n fieldState\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const lastEmittedValueRef = useRef<string | undefined>(null);\n const ignorePropValueRef = useRef(false);\n\n const normalizedConfigs = useMemo<NormalizedTokenConfig[]>(() => {\n const configsToUse = tokenConfigs?.length ? tokenConfigs : DEFAULT_TOKEN_CONFIGS;\n return configsToUse.map((config) => ({\n ...config,\n fetchItems: config.fetchItems ?? (async () => []),\n mapItem: config.mapItem ?? ((item: Record<string, any>) => ({ ...item, ...defaultMapItem(item) })),\n outputType: config.outputType ?? config.type\n })) as NormalizedTokenConfig[];\n }, [tokenConfigs]);\n\n const prefixMap = useMemo(() => buildPrefixMap(normalizedConfigs), [normalizedConfigs]);\n const configLookup = useMemo(() => {\n const lookup = new Map<string, NormalizedTokenConfig>();\n normalizedConfigs.forEach((config) => {\n lookup.set(config.prefix, config);\n });\n return lookup;\n }, [normalizedConfigs]);\n const allowedOperators = useMemo(() => operators.map((operator) => operator.value), [operators]);\n const displayError = errorMessage ?? fieldState?.error?.message;\n const hasError = Boolean(displayError);\n const isInteractionDisabled = Boolean(disabled || loading);\n\n const convertValueToContent = useCallback(\n (input?: string): string | JSONDoc => {\n if (!input) return \"\";\n const trimmed = input.trim();\n if (!trimmed) return \"\";\n\n const parsedJSON = tryParseJSON(trimmed);\n if (parsedJSON && parsedJSON.type === \"doc\") {\n return parsedJSON;\n }\n\n if (looksLikeHTML(trimmed)) {\n return input;\n }\n\n return buildDocFromRaw(input, prefixMap, configLookup);\n },\n [configLookup, prefixMap]\n );\n\n const resolvedContent = useMemo(() => convertValueToContent(value), [convertValueToContent, value]);\n\n const extensions = useMemo(\n () => [\n StarterKit.configure({ bold: false, italic: false }),\n Token.configure({ configs: normalizedConfigs, onSelect: onSelectSuggestion }),\n Operator.configure({ shortcuts: operatorShortcuts })\n ],\n [normalizedConfigs, onSelectSuggestion, operatorShortcuts]\n );\n\n const editor = useEditor({\n extensions,\n content: resolvedContent ?? \"\",\n onUpdate: ({ editor: nextEditor }) => {\n const { raw, token } = parseFormula(nextEditor.getJSON(), prefixMap, allowedOperators);\n const mappedTokens = mapTokensToOutput(token, normalizedConfigs);\n lastEmittedValueRef.current = raw;\n ignorePropValueRef.current = true;\n onChange?.(raw, mappedTokens);\n },\n editorProps: {\n attributes: {\n class: cn(\n isExpanded ? \"min-h-[300px] max-h-[300px]\" : \"min-h-[150px] max-h-[150px]\",\n hasError ? \"border border-destructive\" : \"border focus-visible:border-ring\",\n \"w-full rounded-lg bg-white px-4 py-3\",\n \"overflow-y-auto whitespace-pre-wrap wrap-break-word focus:outline-none\",\n isInteractionDisabled && \"pointer-events-none opacity-60\",\n editorClassName\n ),\n ...(loading ? { \"aria-busy\": \"true\" } : {})\n }\n }\n });\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!isInteractionDisabled);\n }, [editor, isInteractionDisabled]);\n\n useEffect(() => {\n if (!editor || resolvedContent === undefined) return;\n\n if (\n ignorePropValueRef.current &&\n typeof value === \"string\" &&\n value === lastEmittedValueRef.current\n ) {\n ignorePropValueRef.current = false;\n return;\n }\n\n ignorePropValueRef.current = false;\n\n if (typeof resolvedContent === \"string\") {\n const currentHTML = editor.getHTML();\n if (resolvedContent !== currentHTML) {\n editor.commands.setContent(resolvedContent, { emitUpdate: false });\n }\n return;\n }\n\n const currentJSON = JSON.stringify(editor.getJSON());\n const nextJSON = JSON.stringify(resolvedContent);\n if (currentJSON !== nextJSON) {\n editor.commands.setContent(resolvedContent, { emitUpdate: false });\n }\n }, [editor, resolvedContent, value]);\n\n const insertOperator = (operator: string) => {\n editor\n ?.chain()\n .focus()\n .insertContent({ type: \"operator\", attrs: { value: operator } })\n .insertContent(\" \")\n .run();\n };\n\n return (\n <div className={cn(\"w-full space-y-2\", className)}>\n <div\n ref={field?.ref}\n onBlur={field?.onBlur}\n tabIndex={0}\n className=\"relative\"\n aria-busy={loading}\n onFocus={() => {\n if (editor && !editor.isFocused) {\n editor.chain().focus().run();\n }\n }}\n >\n <EditorContent editor={editor} />\n {loading && (\n <LoadingOverlay\n fullscreen={false}\n className=\"rounded-lg bg-white/80 backdrop-blur-sm\"\n spinnerClassName=\"size-6 text-sus-blue-3\"\n />\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute bottom-2 right-4 h-6 w-6 rounded-full bg-white shadow\"\n disabled={isInteractionDisabled}\n onClick={() => setIsExpanded((prev) => !prev)}\n >\n {isExpanded ?\n <Minimize2 className=\"h-4 w-4\" />\n : <Maximize2 className=\"h-4 w-4\" />}\n </Button>\n </div>\n {hasError && (\n <p className=\"text-xs text-destructive\" role=\"alert\">\n {displayError}\n </p>\n )}\n <div className=\"flex flex-wrap justify-end gap-2 py-2\">\n {operators.map((operator) => (\n <Button\n key={operator.value}\n type=\"button\"\n onClick={() => insertOperator(operator.value)}\n className=\"min-w-10 rounded-sm px-3 bg-sus-blue-3\"\n disabled={isInteractionDisabled}\n >\n {operator.label}\n </Button>\n ))}\n </div>\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport cn from \"../../utils/cn\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipArrow(props: React.ComponentProps<typeof TooltipPrimitive.Arrow>) {\n return <TooltipPrimitive.Arrow {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"relative bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md rounded-tl-none px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider,TooltipArrow }\n","// src/components/gridSettings/SortableRow.tsx\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { CircleMinus, GripVertical, Info } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Control, useWatch } from \"react-hook-form\";\nimport { cn } from \"@/utils\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/tooltip\";\nimport type { GridSettingsValues } from \"./schema\";\nimport type { Column } from \"./types\";\n\ninterface SortableRowProps {\n value: string;\n control: Control<GridSettingsValues>;\n name: `columns.${number}.id`;\n isDragging: boolean;\n availableColumns: Column[];\n onRemove?: () => void;\n}\n\nexport default function SortableRow({\n availableColumns,\n control,\n name,\n value,\n isDragging,\n onRemove\n}: SortableRowProps) {\n const { attributes, listeners, setNodeRef, transform, transition } = useSortable({\n id: value,\n disabled: name === \"columns.0.id\"\n });\n\n const style = React.useMemo<React.CSSProperties>(\n () => ({\n transform: CSS.Transform.toString(transform),\n transition\n }),\n [transform, transition]\n );\n\n const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n const currentFormColumns = useWatch({\n control,\n name: \"columns\"\n }) as GridSettingsValues[\"columns\"] | undefined;\n\n return (\n <div ref={setNodeRef} style={style} className=\"flex items-center rounded-md bg-white\">\n <FormField\n control={control}\n name={name}\n render={({ field }) => {\n const options = availableColumns\n .filter((col) => col.id === field.value || !currentFormColumns?.some((c) => c.id === col.id))\n .map((col) => ({ id: col.id, label: col?.label ? col.label : capitalize(col.id) }));\n\n return (\n <FormItem className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <GripVertical\n {...attributes}\n {...listeners}\n className={cn(\n \"h-5 w-5 text-[#B9B9B9] focus:outline-none cursor-grab\",\n name === \"columns.0.id\" && \"opacity-0 pointer-events-none\"\n )}\n />\n\n <Select\n value={field.value}\n onValueChange={field.onChange}\n disabled={name === \"columns.0.id\"}\n >\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full border-[#DDDDDD] data-[disabled]:opacity-100 aria-invalid:border-[#BB0B0E]\",\n name === \"columns.0.id\" ?\n \"text-[#8B8B8B] bg-[#EAEAEA] cursor-not-allowed\"\n : \"cursor-pointer\"\n )}\n >\n <SelectValue placeholder=\"Choose column...\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"cursor-pointer overflow-hidden rounded-md [&_[data-radix-select-viewport]]:m-0\">\n {options\n .sort((a, b) =>\n a.id === field.value ? -1\n : b.id === field.value ? 1\n : 0\n )\n .map((opt) => (\n <SelectItem\n key={opt.id}\n value={opt.id}\n className={cn(\n \"cursor-pointer focus:bg-[#e8edea] first:rounded-t-md last:rounded-b-md hover:text-inherit\",\n opt.id === field.value ? \"font-bold bg-[#dae5de] focus:bg-[#dae5de]\" : \"\"\n )}\n >\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {name === \"columns.0.id\" ?\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Info className=\"h-5 w-5\" stroke=\"white\" fill=\"#8B8B8B\" />\n </TooltipTrigger>\n <TooltipContent\n align=\"start\"\n alignOffset={10}\n className=\"bg-[#8B8B8B] rounded-none\"\n >\n <p>Column cannot be removed.</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n : <CircleMinus\n onClick={onRemove}\n className=\"h-5 w-5 cursor-pointer\"\n stroke=\"white\"\n fill=\"#C32A2C\"\n />\n }\n </div>\n {!isDragging && <FormMessage className={cn(\"pl-6 text-[#BB0B0E]\")} />}\n </FormItem>\n );\n }}\n />\n </div>\n );\n}\n","import { z } from \"zod\";\n\nexport const ColumnSchema = z.object({\n id: z.string().nonempty(\"This field is required\"),\n label: z.string().optional()\n});\n\nexport const GridSettingsSchema = z.object({\n columns: z.array(ColumnSchema).min(1, \"At least one column is required\")\n});\nexport type GridSettingsValues = z.infer<typeof GridSettingsSchema>;\n","import { useEffect, useState, useRef } from \"react\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useFieldArray, useForm } from \"react-hook-form\";\nimport { Form } from \"@/components/ui/form\";\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle\n} from \"@/components/dialog\";\nimport { cn } from \"@/utils\";\nimport SortableRow from \"./SortableRow\";\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { restrictToParentElement, restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport { Plus, X } from \"lucide-react\";\nimport { Button } from \"@/components/button\";\nimport { GridSettingsSchema } from \"./schema\";\nimport type { GridSettingsValues } from \"./schema\";\nimport type { GridPayload, Column } from \"./types\";\n\nexport type GridSettingsModalProps = {\n isOpen: boolean;\n headerClassname?: string;\n descriptionClassname?: string;\n addButtonClassname?: string;\n saveButtonClassname?: string;\n availableColumns: Column[];\n currentColumns: Column[];\n limit?: number;\n onClose: () => void;\n onSaveColumns?: (payload: GridPayload, currentColumns: Column[]) => void;\n};\n\nconst GridSettingsModal = ({\n isOpen = false,\n headerClassname,\n descriptionClassname,\n addButtonClassname,\n saveButtonClassname,\n availableColumns,\n currentColumns,\n limit = availableColumns.length,\n onClose,\n onSaveColumns\n}: GridSettingsModalProps) => {\n const [isDragging, setIsDragging] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const form = useForm<GridSettingsValues>({\n resolver: zodResolver(GridSettingsSchema),\n defaultValues: { columns: currentColumns },\n mode: \"onChange\"\n });\n const { control, trigger } = form;\n const { fields, append, remove, move } = useFieldArray({\n control,\n name: \"columns\",\n keyName: \"fieldId\"\n });\n\n useEffect(() => {\n if (isOpen) {\n form.reset({ columns: currentColumns });\n }\n }, [isOpen, currentColumns, form]);\n\n const addColumn = async () => {\n const isValid = await trigger(\"columns\");\n\n if (isValid) {\n append({ id: \"\" });\n\n // Auto scroll\n requestAnimationFrame(() => {\n const container = scrollRef.current;\n if (container) {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\"\n });\n }\n });\n } else {\n return;\n }\n };\n\n const onSubmit = (data: GridSettingsValues) => {\n const ordering = data.columns.map((i) => i.id);\n const visibility = Object.fromEntries(\n availableColumns.map((col) => [col.id, data.columns.some((c) => c.id === col.id)])\n );\n const pinning = { left: [data.columns[0].id] };\n\n if (onSaveColumns) {\n onSaveColumns({ ordering, visibility, pinning }, data.columns);\n }\n };\n\n // DnD\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIndex = fields.findIndex((f) => f.fieldId === active.id);\n const newIndex = fields.findIndex((f) => f.fieldId === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n move(oldIndex, newIndex);\n }\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"sm:max-w-xl border-0 p-0 rounded-lg\">\n {/* Modal container */}\n <div className=\"flex flex-col min-h-[550px] rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"flex-shrink-0\">\n <div\n className={cn(\n \"flex items-center justify-between bg-[#41875C] text-white px-4 py-2\",\n headerClassname\n )}\n >\n <DialogTitle className=\"text-xl\">Grid Settings</DialogTitle>\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className=\"flex items-center justify-center rounded-md hover:bg-white/10 transition cursor-pointer\"\n >\n <X className=\"h-6 w-6 text-white\" />\n </button>\n </div>\n\n <div\n className={cn(\n \"bg-[#818181] text-white px-4 py-2.5 flex items-center\",\n descriptionClassname\n )}\n >\n <DialogDescription className=\"text-white text-sm\">\n Add or remove columns. To change the column order, drag and drop a field.\n </DialogDescription>\n </div>\n </div>\n\n {/* Scrollable */}\n <div className=\"flex flex-col flex-1 px-12 my-10 overflow-hidden\">\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"flex flex-col flex-1\">\n <div\n ref={scrollRef}\n className=\"flex-1 overflow-y-auto overflow-x-hidden max-h-[35vh] [scrollbar-gutter:stable_both-edges]\"\n >\n <div className=\"space-y-3 px-6\">\n <div className=\"[&_button:not([disabled])]:cursor-pointer\">\n <SortableRow\n key={fields[0]?.fieldId}\n value={fields[0]?.fieldId}\n control={control}\n name={`columns.0.id`}\n isDragging={isDragging}\n availableColumns={availableColumns}\n />\n </div>\n\n <div className=\"space-y-3 [&_button:not([disabled])]:cursor-pointer\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToParentElement, restrictToVerticalAxis]}\n onDragStart={() => setIsDragging(true)}\n onDragEnd={(event) => {\n setIsDragging(false);\n handleDragEnd(event);\n }}\n >\n <SortableContext\n items={fields?.slice(1).map((c) => c?.fieldId)}\n strategy={verticalListSortingStrategy}\n >\n {fields?.slice(1).map((col, index) => (\n <SortableRow\n key={col?.fieldId}\n value={col?.fieldId}\n control={control}\n name={`columns.${index + 1}.id`}\n isDragging={isDragging}\n availableColumns={availableColumns}\n onRemove={() => remove(index + 1)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n </div>\n </div>\n\n <div className=\"sticky bottom-0 z-20 flex justify-center bg-white pt-3\">\n <Button\n type=\"button\"\n className={cn(\n \"bg-[#49865d] hover:bg-[#326446] text-white w-[350px] rounded-t-lg transition-colors\",\n addButtonClassname\n )}\n onClick={addColumn}\n disabled={fields.length >= limit}\n >\n <Plus className=\"h-4 w-4 mr-1\" /> Add column\n </Button>\n </div>\n </form>\n </Form>\n </div>\n\n {/* Footer */}\n <DialogFooter className=\"bottom-0 border-t bg-white\">\n <div className=\"flex gap-2 px-4 justify-end w-full\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n className=\"w-18 text-[#8B8B8B] border-[#B9B9B9]\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n className={cn(\"w-18 bg-[#379A2A] hover:bg-[#2f8524] text-white\", saveButtonClassname)}\n onClick={form.handleSubmit(onSubmit)}\n >\n Save\n </Button>\n </div>\n </DialogFooter>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default GridSettingsModal;\n","import { create } from \"zustand\";\nimport type { Column, GridPayload } from \"../types\";\nimport type { RowData, Table } from \"@tanstack/react-table\";\n\ntype KeyOrString<T> = keyof T | (string & {});\n\ntype TanstackTableInstance = {\n getAllColumns(): any[];\n getVisibleLeafColumns(): any[];\n};\n\ntype UseGridSettingsStoreActions = {\n setAvailableColumns: (cols: Column[]) => void;\n setCurrentColumns: (cols: Column[]) => void;\n setPayload: (payload: GridPayload) => void;\n reset: () => void;\n extractColumns: (table: TanstackTableInstance) => {\n availableColumns: Column[];\n currentColumns: Column[];\n };\n syncColumnsState: <TData = RowData>(\n table: Table<TData>,\n options?: {\n excludeColumns: KeyOrString<TData>[];\n labelMap?: Partial<Record<KeyOrString<TData>, string>>;\n visibility?: Record<keyof TData, boolean>;\n }\n ) => void;\n};\n\ntype UseGridSettingsStoreState = {\n availableColumns: Column[];\n currentColumns: Column[];\n payload: GridPayload;\n};\n\nconst useGridSettingsStore = create<UseGridSettingsStoreState & UseGridSettingsStoreActions>(\n (set, get) => ({\n availableColumns: [],\n currentColumns: [],\n payload: {\n ordering: [],\n visibility: {},\n pinning: { left: [] }\n },\n setAvailableColumns: (cols: Column[]) => set({ availableColumns: cols }),\n setCurrentColumns: (cols: Column[]) => set({ currentColumns: cols }),\n setPayload: (payload: GridPayload) => set({ payload }),\n reset: () =>\n set({\n availableColumns: [],\n currentColumns: [],\n payload: { ordering: [], visibility: {}, pinning: { left: [] } }\n }),\n extractColumns: (table: TanstackTableInstance) => {\n const availableColumns = table.getAllColumns().map((col) => ({ id: col.id }));\n const currentColumns = table.getVisibleLeafColumns().map((col) => ({ id: col.id }));\n return { availableColumns, currentColumns };\n },\n syncColumnsState: <TData = RowData>(\n table: Table<TData>,\n options?: {\n excludeColumns?: KeyOrString<TData>[];\n labelMap?: Partial<Record<KeyOrString<TData>, string>>;\n visibility?: Record<keyof TData, boolean>;\n }\n ) => {\n const { availableColumns, currentColumns } = get().extractColumns(table);\n const { excludeColumns = [], labelMap = {}, visibility = {} } = options || {};\n\n const filteredExcludeColumnFn = (column: Column) => !excludeColumns.includes(column.id as any);\n\n const mapLabel = (col: Column) => ({\n id: col.id,\n label: labelMap?.[col.id as keyof typeof labelMap] ?? col.label ?? col.id\n });\n\n set({\n availableColumns: availableColumns.filter(filteredExcludeColumnFn).map(mapLabel),\n currentColumns: currentColumns\n .filter(filteredExcludeColumnFn)\n .filter((column) => {\n for (const [columnId, isVisible] of Object.entries(visibility)) {\n if (column.id === columnId && !isVisible) {\n return false;\n }\n }\n return true;\n })\n .map(mapLabel)\n });\n }\n })\n);\n\nexport default useGridSettingsStore;\n","import * as React from \"react\";\nimport LoadingOverlay from \"@/components/ui/LoadingOverlay\";\nimport { cn } from \"@/utils\";\n\nconst DEVICE_SIZES = [320, 420, 640, 768, 1024, 1280, 1536, 1920];\nconst IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];\n\nexport type ImageLoaderProps = {\n src: string;\n width: number;\n quality?: number;\n};\n\nexport type ImageLoader = (props: ImageLoaderProps) => string;\n\nexport interface ImageProps\n extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"width\" | \"height\"> {\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n fill?: boolean;\n sizes?: string;\n quality?: number;\n priority?: boolean;\n placeholder?: \"empty\" | \"blur\";\n blurDataURL?: string;\n loader?: ImageLoader;\n unoptimized?: boolean;\n wrapperClassName?: string;\n objectFit?: React.CSSProperties[\"objectFit\"];\n objectPosition?: React.CSSProperties[\"objectPosition\"];\n onLoadingComplete?: (img: HTMLImageElement) => void;\n}\n\nconst defaultLoader: ImageLoader = ({ src }) => src;\n\nfunction toNumber(value?: number | string): number | undefined {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === \"string\") {\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n return undefined;\n}\n\nfunction formatDimension(value?: number | string): string | undefined {\n if (typeof value === \"number\") {\n return `${value}px`;\n }\n\n return value;\n}\n\nfunction matchClosestSize(target: number): number {\n for (const size of IMAGE_SIZES) {\n if (size >= target) {\n return size;\n }\n }\n return DEVICE_SIZES[DEVICE_SIZES.length - 1];\n}\n\nfunction getCandidateWidths({\n width,\n sizes,\n fill\n}: {\n width?: number;\n sizes?: string;\n fill?: boolean;\n}): number[] {\n if (fill || sizes) {\n return DEVICE_SIZES;\n }\n\n if (typeof width === \"number\" && width > 0) {\n const targets = new Set<number>([width, width * 2]);\n return Array.from(targets)\n .map((target) => matchClosestSize(target))\n .sort((a, b) => a - b);\n }\n\n return DEVICE_SIZES;\n}\n\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(function Image(\n {\n src,\n alt,\n width,\n height,\n fill = false,\n sizes,\n quality = 75,\n priority = false,\n placeholder = \"empty\",\n blurDataURL,\n loader = defaultLoader,\n unoptimized = false,\n wrapperClassName,\n className,\n objectFit,\n objectPosition,\n onLoadingComplete,\n style,\n ...imgProps\n },\n ref\n) {\n const {\n loading: loadingProp,\n fetchPriority: fetchPriorityProp,\n decoding: decodingProp,\n onLoad: onLoadProp,\n ...restImgProps\n } = imgProps;\n\n const widthNumber = toNumber(width);\n const heightNumber = toNumber(height);\n\n React.useEffect(() => {\n if (!fill && (!widthNumber || !heightNumber)) {\n console.warn(\n \"[Image] When `fill` is false you should provide both `width` and `height` to prevent layout shifts.\"\n );\n }\n }, [fill, heightNumber, widthNumber]);\n\n const candidateWidths = React.useMemo(\n () => getCandidateWidths({ width: widthNumber, sizes, fill }),\n [fill, sizes, widthNumber]\n );\n\n // Keep blurDataURL around to avoid passing it through to the DOM while the API transitions.\n void blurDataURL;\n\n const largestWidth =\n candidateWidths[candidateWidths.length - 1] ?? widthNumber ?? DEVICE_SIZES[DEVICE_SIZES.length - 1];\n\n const computedSrc = React.useMemo(() => {\n if (unoptimized) {\n return src;\n }\n\n return loader({ src, width: largestWidth, quality });\n }, [largestWidth, loader, quality, src, unoptimized]);\n\n const computedSrcSet = React.useMemo(() => {\n if (unoptimized) {\n return undefined;\n }\n\n return candidateWidths\n .map((currentWidth) => `${loader({ src, width: currentWidth, quality })} ${currentWidth}w`)\n .join(\", \");\n }, [candidateWidths, loader, quality, src, unoptimized]);\n\n const sizesValue =\n sizes ??\n (fill ? \"100vw\"\n : widthNumber ? `${widthNumber}px`\n : undefined);\n\n const [isLoaded, setIsLoaded] = React.useState(false);\n const internalRef = React.useRef<HTMLImageElement | null>(null);\n\n const setRefs = React.useCallback(\n (node: HTMLImageElement | null) => {\n internalRef.current = node;\n if (!ref) {\n return;\n }\n if (typeof ref === \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n },\n [ref]\n );\n\n React.useEffect(() => {\n const image = internalRef.current;\n if (!image) {\n return;\n }\n\n if (image.complete && image.naturalWidth > 0) {\n setIsLoaded(true);\n onLoadingComplete?.(image);\n } else {\n setIsLoaded(false);\n }\n }, [onLoadingComplete, src]);\n\n const handleLoad = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setIsLoaded(true);\n onLoadProp?.(event);\n onLoadingComplete?.(event.currentTarget);\n },\n [onLoadProp, onLoadingComplete]\n );\n\n const loading = priority ? \"eager\" : (loadingProp ?? \"lazy\");\n const fetchPriority = priority ? \"high\" : fetchPriorityProp;\n const decoding = decodingProp ?? \"async\";\n\n const resolvedObjectFit = objectFit ?? (fill ? \"cover\" : undefined);\n\n const wrapperStyle = React.useMemo<React.CSSProperties>(\n () => ({\n position: \"relative\",\n display: fill ? \"block\" : \"inline-block\",\n overflow: \"hidden\",\n width: fill ? \"100%\" : (formatDimension(width) ?? undefined),\n height: fill ? \"100%\" : (formatDimension(height) ?? undefined)\n }),\n [fill, height, width]\n );\n\n const imageStyle = React.useMemo<React.CSSProperties>(\n () => ({\n width: fill ? \"100%\" : (formatDimension(width) ?? undefined),\n height: fill ? \"100%\" : (formatDimension(height) ?? undefined),\n position: fill ? \"absolute\" : undefined,\n inset: fill ? 0 : undefined,\n objectFit: resolvedObjectFit,\n objectPosition,\n ...style\n }),\n [fill, height, objectPosition, resolvedObjectFit, style, width]\n );\n\n const shouldShowLoadingOverlay = placeholder === \"blur\";\n\n return (\n <span\n data-slot=\"image\"\n className={cn(\"relative overflow-hidden\", fill ? \"block\" : \"inline-block\", wrapperClassName)}\n style={wrapperStyle}\n >\n {shouldShowLoadingOverlay && (\n <LoadingOverlay\n aria-hidden\n fullscreen={false}\n spinnerClassName=\"size-6\"\n className={cn(\n // \"bg-white/75!\",\n isLoaded ? \"opacity-0 pointer-events-none\" : \"opacity-100\"\n )}\n />\n )}\n <img\n ref={setRefs}\n className={cn(\n \"block transition-opacity duration-300\",\n fill && \"absolute inset-0 size-full\",\n shouldShowLoadingOverlay && !isLoaded ? \"opacity-0\" : \"opacity-100\",\n className\n )}\n src={computedSrc}\n srcSet={computedSrcSet}\n sizes={sizesValue}\n width={fill ? undefined : widthNumber}\n height={fill ? undefined : heightNumber}\n alt={alt}\n loading={loading}\n fetchPriority={fetchPriority}\n decoding={decoding}\n onLoad={handleLoad}\n style={imageStyle}\n {...restImgProps}\n />\n </span>\n );\n});\n\nImage.displayName = \"Image\";\n","import * as React from \"react\";\n\nimport type { GridPayload } from \"../../grid-settings/types\";\n\nexport interface ListTableProps {\n gridSettingPayload?: GridPayload;\n onCreateExample?: () => void;\n onViewExample?: (exampleId: string) => void;\n onEditExample?: (exampleId: string) => void;\n onDeleteExample?: (exampleId: string) => void;\n selectedRowId?: string;\n onTableReady?: (table: unknown) => void;\n children?: React.ReactNode;\n}\n\nconst ListTable: React.FC<ListTableProps> = ({ onTableReady, children }) => {\n React.useEffect(() => {\n if (onTableReady) {\n onTableReady({ ready: true });\n }\n }, [onTableReady]);\n\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n {children ?? \"Provide your table implementation here.\"}\n </div>\n );\n};\n\nexport default ListTable;\n","import * as React from \"react\";\n\nimport { cn } from \"../../../utils\";\n\nexport interface ListContainerProps {\n className?: string;\n isLeftExpanded: boolean;\n children: React.ReactNode;\n}\n\nconst ListContainer: React.FC<ListContainerProps> = ({ className, isLeftExpanded, children }) => {\n return (\n <div\n className={cn(\n \"h-[calc(100vh-140px)] min-w-full overflow-hidden rounded-2xl border border-slate-300 bg-white shadow-lg transition-all duration-300 ease-in-out\",\n {\n \"w-full\": isLeftExpanded,\n \"md:w-full\": isLeftExpanded,\n \"w-full lg:w-1/2\": !isLeftExpanded\n },\n className\n )}\n style={{\n position: \"relative\",\n transitionProperty: \"width, transform\",\n transitionDuration: \"300ms\"\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default ListContainer;\n","import * as React from \"react\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { SuiSettingIcon } from \"../../icons\";\nimport { cn } from \"../../../utils\";\n\nexport interface ListHeaderProps {\n title: string | React.ReactNode;\n isExpanded?: boolean;\n onSettingClick?: () => void;\n onExpandClick?: () => void;\n bgColor?: string;\n textClassName?: string;\n titleIcon?: React.ReactNode;\n rightActions?: React.ReactNode;\n className?: string;\n}\n\nconst ListHeader: React.FC<ListHeaderProps> = ({\n title,\n titleIcon,\n isExpanded = false,\n bgColor = \"bg-[#82B495]\",\n textClassName = \"text-white\",\n onSettingClick,\n onExpandClick,\n rightActions,\n className\n}) => {\n return (\n <div data-testid=\"list-header\" className={cn(\"rounded-t-lg px-4 py-2\", bgColor, className)}>\n <div className=\"flex items-center justify-between\">\n <div className={cn(\"flex items-center gap-2 text-lg\", textClassName)}>\n {titleIcon}\n <p className=\"leading-none\">{title}</p>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {rightActions ?? (\n <>\n {onSettingClick && (\n <button\n onClick={onSettingClick}\n title=\"Settings\"\n className=\"rounded p-1 hover:cursor-pointer hover:bg-white/20\"\n >\n <SuiSettingIcon className=\"text-white\" />\n </button>\n )}\n\n {onSettingClick && onExpandClick && (\n <div className={cn(\"h-8 w-px\", textClassName.replace(\"text-\", \"bg-\"))} />\n )}\n\n {onExpandClick && (\n <button\n data-testid=\"list-expand-button\"\n onClick={onExpandClick}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n className=\"rounded p-1 hover:cursor-pointer hover:bg-white/20\"\n >\n <span className=\"flex items-center gap-[2px] text-white\">\n {isExpanded ?\n <>\n <ChevronLeft className=\"h-4 w-4\" />\n <ChevronRight className=\"h-4 w-4 -ml-2\" />\n </>\n : <>\n <ChevronRight className=\"h-4 w-4\" />\n <ChevronLeft className=\"h-4 w-4 -ml-2\" />\n </>\n }\n </span>\n </button>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ListHeader;\n","import * as React from \"react\";\nimport { CircleUserRound as UserIcon } from \"lucide-react\";\n\nimport type { GridPayload } from \"../grid-settings/types\";\nimport ListTable from \"./components/table\";\nimport ListContainer from \"./components/container\";\nimport ListHeader from \"./components/header\";\n\nexport type ListProps = {\n gridSettingPayload: GridPayload;\n isLeftExpanded: boolean;\n handleSettingClick: () => void;\n handleExpandClick: () => void;\n onCreateExample: () => void;\n onViewExample: (exampleId: string) => void;\n onEditExample: (exampleId: string) => void;\n onDeleteExample: (exampleId: string) => void;\n selectedRowId?: string;\n onTableReady?: (table: unknown) => void;\n children?: React.ReactNode;\n};\n\nconst List: React.FC<ListProps> = ({\n isLeftExpanded,\n handleSettingClick,\n handleExpandClick,\n onTableReady,\n children\n}) => {\n return (\n <ListContainer className=\"flex flex-col bg-white shadow-lg\" isLeftExpanded={isLeftExpanded}>\n <ListHeader\n title=\"Previous Example\"\n isExpanded={isLeftExpanded}\n onSettingClick={handleSettingClick}\n onExpandClick={handleExpandClick}\n titleIcon={<UserIcon className=\"h-6 w-6 text-white\" />}\n />\n\n <div className=\"flex h-full\">\n <ListTable onTableReady={onTableReady}>{children}</ListTable>\n </div>\n </ListContainer>\n );\n};\n\nexport default List;\n","import React from \"react\";\n\nconst InfoIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.0013 18.3327C14.6037 18.3327 18.3346 14.6017 18.3346 9.99935C18.3346 5.39698 14.6037 1.66602 10.0013 1.66602C5.39893 1.66602 1.66797 5.39698 1.66797 9.99935C1.66797 14.6017 5.39893 18.3327 10.0013 18.3327Z\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 13.3333V10\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 6.66602H10.0083\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default React.memo(InfoIcon);\n","// core\nimport React, { isValidElement } from \"react\";\n\n// components\nimport { CircleHelp } from \"lucide-react\";\nimport InfoIcon from \"../../assets/icon/InfoIcon\";\nimport { Button } from \"../button\";\n\n// hooks\nimport useScreenSize from \"../../hooks/useScreenSize/useScreenSize\";\n\n// utils\nimport cn from \"../../utils/cn\";\nimport { Tooltip, TooltipArrow, TooltipContent, TooltipTrigger } from \"../tooltip\";\n\ntype RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\ntype NavbarBaseProps = {\n className?: string;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n headImageURL?: string;\n headImageURLClassName?: string;\n tooltipContentClassName?: string;\n tooltipTitle?: string;\n tooltipIcon?: React.ReactNode;\n tooltipdescription?: React.ReactNode;\n tooltipDescriptionWrapperClassName?: string;\n mainButtonText?: React.ReactNode;\n mainButtonClassName?: string;\n mainButtonDisable?: boolean;\n subButtonText?: React.ReactNode;\n subButtonClassName?: string;\n subButtonDisable?: boolean;\n onMainButtonClick?: () => void;\n onSubButtonClick?: () => void;\n searchButton?: React.ReactNode;\n separatorDisable?: boolean;\n};\n\n// 👇 ใช้ utility type เพื่อบังคับว่า ต้องมีอย่างน้อย title หรือ headImageURL\nexport type NavbarProps = RequireAtLeastOne<NavbarBaseProps, \"title\">;\n\nconst Navbar = ({\n className,\n title,\n subTitle,\n headImageURL = \"\",\n headImageURLClassName,\n tooltipContentClassName = \"w-[450px] lg:!w-[630px]\",\n tooltipTitle,\n tooltipIcon,\n tooltipdescription,\n tooltipDescriptionWrapperClassName,\n mainButtonText,\n mainButtonClassName,\n mainButtonDisable = false,\n subButtonText,\n subButtonClassName,\n subButtonDisable = false,\n onMainButtonClick,\n onSubButtonClick,\n separatorDisable = false,\n searchButton\n}: NavbarProps) => {\n const { isMobile, isTablet, isDesktop } = useScreenSize();\n const Icon = CircleHelp;\n const shouldShowSeparator = !separatorDisable && isValidElement(searchButton);\n\n return (\n <nav\n className={cn(\n \"py-3 px-8 w-full h-16 bg-sus-primary-1 flex items-center justify-between\",\n className\n )}\n >\n {/* left content */}\n <div className=\"flex items-center gap-2.5\">\n {headImageURL !== \"\" ?\n <img src={headImageURL} alt=\"\" className={cn(\"w-full h-full\", headImageURLClassName)} />\n : <div className=\"flex flex-col\">\n {isValidElement(title) ? title : <h1 className=\"text-white text-xl font-bold\">{title}</h1>}\n {isValidElement(subTitle) ?\n subTitle\n : <h1 className=\"text-white text-sm font-semibold\">{subTitle}</h1>}\n </div>\n }\n {tooltipTitle && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"text-white hover:opacity-80 \">\n <InfoIcon className=\"w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent\n forceMount\n side={isDesktop ? \"right\" : \"bottom\"}\n align=\"start\"\n avoidCollisions={false}\n className={cn(\n \"bg-white border border-black p-6\",\n \"transition-all duration-150 ease-out origin-top top-1 left-4\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"data-[state=closed]:scale-95 data-[state=open]:scale-100\",\n { \"mt-5\": isDesktop },\n tooltipContentClassName\n )}\n >\n <div\n role=\"tooltip\"\n aria-label={tooltipTitle}\n className={cn(\n \"flex flex-col gap-4 text-sm text-black text-pretty \",\n tooltipDescriptionWrapperClassName\n )}\n >\n {tooltipTitle && (\n <div className=\"flex items-center gap-3\">\n {isValidElement(tooltipIcon) ? tooltipIcon : <Icon size={32} aria-hidden=\"true\" />}\n <h3 className=\"text-xl font-bold\">{tooltipTitle}</h3>\n </div>\n )}\n {isValidElement(tooltipdescription) && tooltipdescription}\n </div>\n <TooltipArrow className=\"-my-px border-none fill-white\" asChild>\n <svg\n width={isDesktop ? 35 : 33}\n height={35}\n viewBox=\"0 0 40 35\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn({\n \"rotate-90 visible\": isTablet || isMobile,\n \"\": isDesktop\n })}\n >\n <path d=\"M0 0 L40 0 L0 35 Z\" fill=\"white\" />\n {isDesktop ?\n <>\n <line x1=\"0\" y1=\"40\" x2=\"0\" y2=\"0\" stroke=\"black\" strokeWidth=\"2.5\" />\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"35\" stroke=\"black\" strokeWidth=\"1\" />\n </>\n : <>\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"black\" strokeWidth=\"2\" />\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"35\" stroke=\"black\" strokeWidth=\"1\" />\n </>\n }\n </svg>\n </TooltipArrow>\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {/* right content */}\n <div className=\"flex items-center gap-3\">\n {mainButtonText && (\n <Button\n disabled={mainButtonDisable}\n className={cn(\"bg-sus-secondary-1 hover:bg-sus-secondary-hover\", mainButtonClassName)}\n size=\"lg\"\n onClick={onMainButtonClick}\n >\n {mainButtonText}\n </Button>\n )}\n {subButtonText && (\n <Button\n disabled={subButtonDisable}\n className={cn(\"bg-sus-primary-2 hover:bg-sus-primary-2-hover\", subButtonClassName)}\n size=\"lg\"\n onClick={onSubButtonClick}\n >\n {subButtonText}\n </Button>\n )}\n {shouldShowSeparator && <div role=\"separator\" className=\"ml-1 w-[1px] h-10 bg-white\" />}\n {isValidElement(searchButton) ? searchButton : \"\"}\n </div>\n </nav>\n );\n};\n\nexport default React.memo(Navbar);\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-1.5 p-4\", className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription\n};\n","import { create } from \"zustand\";\n\ntype PreventPageLeaveStore = {\n isPreventing: boolean;\n setPreventing: (value: boolean) => void;\n};\n\nexport const usePreventPageLeaveStore = create<PreventPageLeaveStore>((set) => ({\n isPreventing: false,\n setPreventing: (value) => set({ isPreventing: value })\n}));\n\nexport default usePreventPageLeaveStore;\n","import React, { useEffect } from \"react\";\nimport { usePreventPageLeaveStore } from \"./store/usePreventPageLeaveStore\";\n\nconst PreventPageLeave = ({ children }: React.PropsWithChildren) => {\n const { isPreventing } = usePreventPageLeaveStore();\n\n useEffect(() => {\n if (!isPreventing || typeof window === \"undefined\") {\n return;\n }\n\n function beforeUnload(event: BeforeUnloadEvent) {\n event.preventDefault();\n\n // Included for legacy support, e.g. Chrome/Edge < 119\n event.returnValue = true;\n }\n\n window.addEventListener(\"beforeunload\", beforeUnload);\n return () => {\n window.removeEventListener(\"beforeunload\", beforeUnload);\n };\n }, [isPreventing]);\n\n return children;\n};\n\nexport default PreventPageLeave;\n","import { useEffect } from \"react\";\nimport { usePreventPageLeaveStore } from \"../store\";\n\nexport type UsePreventPageLeaveOptions = {\n isPrevening: boolean;\n};\n\nconst usePreventPageLeave = ({ isPrevening }: UsePreventPageLeaveOptions) => {\n const setPreventing = usePreventPageLeaveStore((state) => state.setPreventing);\n\n useEffect(() => {\n setPreventing(isPrevening);\n }, [isPrevening, setPreventing]);\n};\n\nexport default usePreventPageLeave;\n","import { cn } from \"@/utils\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nexport function RadioGroupRoot({\n children,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <form>\n <RadioGroupPrimitive.Root {...props}>{children}</RadioGroupPrimitive.Root>\n </form>\n );\n}\n\nexport function RadioGroupItem({\n id,\n value,\n children,\n className,\n containerProps,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item> & {\n value: string;\n containerProps?: React.ComponentProps<\"div\">;\n}) {\n return (\n <div className=\"flex items-center\" {...containerProps}>\n <RadioGroupPrimitive.Item\n className={cn(\n \"size-5 cursor-default rounded-full border-2 border-black bg-white outline-none focus:shadow-black data-[state=checked]:border-[#5181B8] data-[state=checked]:scale-90 data-[state=checked]:border-1\",\n className\n )}\n value={value}\n id={id}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"relative flex size-full items-center justify-center after:block after:size-[11px] after:rounded-full after:bg-[#5181B8]\" />\n </RadioGroupPrimitive.Item>\n {children}\n </div>\n );\n}\n\nexport function RadioLabel({ children, htmlFor, className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label className={cn(\"pl-4 leading-none text-black\", className)} htmlFor={htmlFor} {...props}>\n {children}\n </label>\n );\n}\n","import * as React from \"react\";\nimport type { LexicalNode, NodeKey, SerializedLexicalNode, Spread } from \"lexical\";\nimport { DecoratorNode } from \"lexical\";\n\nimport { cn } from \"@/utils\";\n\nexport type ImagePayload = {\n src: string;\n altText?: string;\n width?: number | \"inherit\";\n height?: number | \"inherit\";\n};\n\nexport type SerializedImageNode = Spread<\n {\n type: \"image\";\n version: 1;\n },\n {\n src: string;\n altText: string;\n width: number | \"inherit\";\n height: number | \"inherit\";\n } & SerializedLexicalNode\n>;\n\nconst defaultDimensions = {\n width: \"inherit\" as const,\n height: \"inherit\" as const\n};\n\nfunction ImageComponent({\n altText,\n src,\n width,\n height\n}: {\n altText: string;\n src: string;\n width: number | \"inherit\";\n height: number | \"inherit\";\n}) {\n const style: React.CSSProperties = {\n width: typeof width === \"number\" ? `${width}px` : undefined,\n height: typeof height === \"number\" ? `${height}px` : undefined\n };\n\n return (\n <span className=\"block max-w-full\" contentEditable={false}>\n <img\n src={src}\n alt={altText || \"\"}\n draggable={false}\n className={cn(\n \"max-w-full rounded-md border border-border/60 bg-muted object-contain\",\n \"shadow-sm transition-transform hover:shadow\"\n )}\n style={style}\n />\n </span>\n );\n}\n\nexport class ImageNode extends DecoratorNode<React.ReactNode> {\n __src: string;\n __altText: string;\n __width: number | \"inherit\";\n __height: number | \"inherit\";\n\n static getType(): string {\n return \"image\";\n }\n\n static clone(node: ImageNode): ImageNode {\n return new ImageNode(\n node.__src,\n {\n altText: node.__altText,\n width: node.__width,\n height: node.__height\n },\n node.getKey()\n );\n }\n\n constructor(src: string, payload?: Omit<ImagePayload, \"src\">, key?: NodeKey) {\n super(key);\n const {\n altText = \"\",\n width = defaultDimensions.width,\n height = defaultDimensions.height\n } = payload ?? {};\n\n this.__src = src;\n this.__altText = altText;\n this.__width = width;\n this.__height = height;\n }\n\n static importJSON(serializedNode: SerializedImageNode): ImageNode {\n const { src, altText, width, height } = serializedNode;\n return new ImageNode(src, {\n altText,\n width,\n height\n });\n }\n\n exportJSON(): SerializedImageNode {\n return {\n type: \"image\",\n version: 1,\n src: this.__src,\n altText: this.__altText,\n width: this.__width,\n height: this.__height\n };\n }\n\n createDOM(): HTMLElement {\n return document.createElement(\"span\");\n }\n\n updateDOM(): false {\n return false;\n }\n\n decorate(): React.ReactNode {\n return (\n <ImageComponent\n src={this.__src}\n altText={this.__altText}\n width={this.__width}\n height={this.__height}\n />\n );\n }\n\n isInline(): false {\n return false;\n }\n\n extractWithChild(): boolean {\n return false;\n }\n\n exportDOM(): { element: HTMLElement } {\n const element = document.createElement(\"img\");\n element.setAttribute(\"src\", this.__src);\n if (this.__altText) {\n element.setAttribute(\"alt\", this.__altText);\n }\n\n return { element };\n }\n\n getTextContent(): string {\n return this.__altText;\n }\n\n setSrc(src: string): void {\n const writable = this.getWritable();\n writable.__src = src;\n }\n\n setAltText(altText: string): void {\n const writable = this.getWritable();\n writable.__altText = altText;\n }\n\n setDimensions(width: number | \"inherit\", height: number | \"inherit\"): void {\n const writable = this.getWritable();\n writable.__width = width;\n writable.__height = height;\n }\n\n getSrc(): string {\n return this.__src;\n }\n\n getAltText(): string {\n return this.__altText;\n }\n\n getWidth(): number | \"inherit\" {\n return this.__width;\n }\n\n getHeight(): number | \"inherit\" {\n return this.__height;\n }\n}\n\nexport function $createImageNode({ src, altText, width, height }: ImagePayload): ImageNode {\n return new ImageNode(src, {\n altText,\n width: width ?? defaultDimensions.width,\n height: height ?? defaultDimensions.height\n });\n}\n\nexport function $isImageNode(node?: LexicalNode | null): node is ImageNode {\n return node instanceof ImageNode;\n}\n","import * as React from \"react\";\nimport { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport type {\n EditorState,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedEditorState,\n SerializedLexicalNode\n} from \"lexical\";\nimport {\n $createParagraphNode,\n $createTextNode,\n $getNodeByKey,\n $getSelection,\n $insertNodes,\n $isRangeSelection,\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_NORMAL,\n FORMAT_ELEMENT_COMMAND,\n FORMAT_TEXT_COMMAND,\n REDO_COMMAND,\n SELECTION_CHANGE_COMMAND,\n UNDO_COMMAND,\n createCommand\n} from \"lexical\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { $generateHtmlFromNodes } from \"@lexical/html\";\nimport {\n HeadingNode,\n QuoteNode,\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode\n} from \"@lexical/rich-text\";\nimport {\n ListNode,\n ListItemNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n $isListNode\n} from \"@lexical/list\";\nimport { LinkNode, TOGGLE_LINK_COMMAND, $createLinkNode, $isLinkNode } from \"@lexical/link\";\nimport { CodeNode, $createCodeNode, $isCodeNode } from \"@lexical/code\";\nimport { TRANSFORMERS } from \"@lexical/markdown\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n Bold,\n Code as InlineCodeIcon,\n CodeSquare,\n Heading1,\n Heading2,\n Heading3,\n Italic,\n Image as ImageIcon,\n Link as LinkIcon,\n Link2Off,\n List as BulletListIcon,\n ListOrdered,\n Pilcrow,\n Quote as QuoteIcon,\n Redo,\n Strikethrough,\n Underline,\n Undo\n} from \"lucide-react\";\nimport { useForm } from \"react-hook-form\";\n\nimport { cn } from \"@/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Dialog, DialogContent, DialogFooter } from \"@/components/ui/dialog\";\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ImageNode, $createImageNode, $isImageNode, type ImagePayload } from \"./ImageNode\";\n\ntype RichTextSerializedState = string;\n\ntype ToolbarBlockType = \"paragraph\" | \"h1\" | \"h2\" | \"h3\" | \"bullet\" | \"number\" | \"quote\" | \"code\";\n\ntype EditorSerializedState = SerializedEditorState<SerializedLexicalNode>;\n\ntype ImageUploadResult = ImagePayload | string;\n\ntype RichTextProps = {\n value?: RichTextSerializedState;\n defaultValue?: RichTextSerializedState;\n onChange?: (serializedState: RichTextSerializedState, editorState: EditorState) => void;\n onHtmlChange?: (html: string, editorState: EditorState) => void;\n placeholder?: string;\n readOnly?: boolean;\n disabled?: boolean;\n editorClassName?: string;\n toolbarClassName?: string;\n autoFocus?: boolean;\n onImageUpload?: (file: File) => Promise<ImageUploadResult>;\n onImageUploadError?: (error: unknown) => void;\n acceptImageMimeTypes?: string;\n allowImageUrlInsert?: boolean;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst theme = {\n paragraph: \"mb-2 leading-6 text-sm text-foreground\",\n placeholder:\n \"pointer-events-none absolute left-0 top-0 px-3 py-2 text-sm text-muted-foreground select-none\",\n quote: \"border-l-2 border-border pl-3 italic text-muted-foreground\",\n heading: {\n h1: \"scroll-m-20 text-2xl font-semibold tracking-tight\",\n h2: \"scroll-m-20 text-xl font-semibold tracking-tight\",\n h3: \"scroll-m-20 text-lg font-semibold tracking-tight\"\n },\n list: {\n listitem: \"ml-4 marker:text-muted-foreground [&:not(:last-child)]:mb-1\",\n nested: {\n listitem: \"ml-4\"\n },\n ol: \"ml-4 list-decimal pl-1\",\n ul: \"ml-4 list-disc pl-1\"\n },\n text: {\n bold: \"font-semibold\",\n italic: \"italic\",\n underline: \"underline underline-offset-4\",\n strikethrough: \"line-through\",\n code: \"rounded bg-muted px-1 py-[2px] font-mono text-[13px]\"\n },\n link: \"text-primary underline underline-offset-4\",\n code: \"relative block overflow-x-auto rounded-md border border-border bg-muted px-3 py-2 font-mono text-sm text-foreground shadow-sm\"\n};\n\nconst nodes = [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode, CodeNode, ImageNode];\n\nconst INSERT_IMAGE_COMMAND = createCommand<ImagePayload>(\"INSERT_IMAGE_COMMAND\");\nconst DEFAULT_IMAGE_ACCEPT = \"image/*\";\n\nfunction parseSerializedEditorState(raw?: RichTextSerializedState): EditorSerializedState | undefined {\n if (!raw) {\n return undefined;\n }\n\n try {\n return JSON.parse(raw) as EditorSerializedState;\n } catch (error) {\n console.error(\"[RichText] Failed to parse editor state:\", error);\n return undefined;\n }\n}\n\nfunction Placeholder({ placeholder }: { placeholder: string }) {\n return <div className={theme.placeholder}>{placeholder}</div>;\n}\n\ntype ToolbarToggleState = {\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isStrikethrough: boolean;\n isCode: boolean;\n isLink: boolean;\n blockType: ToolbarBlockType;\n elementFormat: ElementFormatType | null;\n canUndo: boolean;\n canRedo: boolean;\n};\n\nconst initialToolbarState: ToolbarToggleState = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrikethrough: false,\n isCode: false,\n isLink: false,\n blockType: \"paragraph\",\n elementFormat: null,\n canUndo: false,\n canRedo: false\n};\n\ntype ToolbarButtonProps = {\n label: string;\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n onClick: () => void;\n active?: boolean;\n disabled?: boolean;\n};\n\nfunction ToolbarButton({ label, icon: Icon, onClick, active, disabled }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n title={label}\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md text-sm transition-colors\",\n \"text-muted-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n active ? \"bg-accent text-accent-foreground shadow-sm\" : \"\",\n disabled ? \"pointer-events-none opacity-40\" : \"\"\n )}\n >\n <Icon className=\"h-4 w-4\" aria-hidden />\n <span className=\"sr-only\">{label}</span>\n </button>\n );\n}\n\ntype ToolbarPluginProps = {\n disabled: boolean;\n onImageUpload?: (file: File) => Promise<ImageUploadResult>;\n onImageUploadError?: (error: unknown) => void;\n allowImageUrlInsert?: boolean;\n acceptImageMimeTypes?: string;\n};\n\ntype LinkFormValues = {\n url: string;\n label: string;\n};\n\ntype ImageFormValues = {\n url: string;\n alt: string;\n width: string;\n height: string;\n};\n\nfunction placeCaretAfterImage(imageNode: ImageNode) {\n const nextSibling = imageNode.getNextSibling();\n\n if (!nextSibling || $isImageNode(nextSibling)) {\n const paragraph = $createParagraphNode();\n const textNode = $createTextNode(\"\");\n paragraph.append(textNode);\n imageNode.insertAfter(paragraph);\n textNode.select(0, 0);\n return;\n }\n\n imageNode.selectNext(0, 0);\n}\n\nfunction ToolbarPlugin({\n disabled,\n onImageUpload,\n onImageUploadError,\n allowImageUrlInsert = true,\n acceptImageMimeTypes\n}: ToolbarPluginProps) {\n const [editor] = useLexicalComposerContext();\n const [state, setState] = useState<ToolbarToggleState>(initialToolbarState);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isLinkDialogOpen, setLinkDialogOpen] = useState(false);\n const [editingExistingLink, setEditingExistingLink] = useState(false);\n const [linkNodeKey, setLinkNodeKey] = useState<NodeKey | null>(null);\n const [isImageDialogOpen, setImageDialogOpen] = useState(false);\n const [editingExistingImage, setEditingExistingImage] = useState(false);\n const [imageNodeKey, setImageNodeKey] = useState<NodeKey | null>(null);\n\n const linkForm = useForm<LinkFormValues>({\n defaultValues: { url: \"\", label: \"\" }\n });\n\n const imageForm = useForm<ImageFormValues>({\n defaultValues: { url: \"\", alt: \"\", width: \"\", height: \"\" }\n });\n\n const openImageDialog = useCallback(() => {\n if (disabled || !allowImageUrlInsert) {\n return;\n }\n\n const targetImage = editor.getEditorState().read((): ReturnType<typeof $createImageNode> | null => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const nodes = selection.getNodes();\n for (const node of nodes) {\n if ($isImageNode(node)) {\n return node;\n }\n }\n\n return null;\n });\n\n const width = targetImage?.getWidth();\n const height = targetImage?.getHeight();\n const initialUrl = targetImage?.getSrc() ?? \"\";\n const initialAlt = targetImage?.getAltText() ?? \"\";\n const initialWidth = typeof width === \"number\" ? String(width) : \"\";\n const initialHeight = typeof height === \"number\" ? String(height) : \"\";\n\n imageForm.clearErrors();\n imageForm.reset({\n url: initialUrl,\n alt: initialAlt,\n width: initialWidth,\n height: initialHeight\n });\n setEditingExistingImage(Boolean(targetImage));\n setImageNodeKey(targetImage?.getKey() ?? null);\n setImageDialogOpen(true);\n }, [allowImageUrlInsert, disabled, editor, imageForm]);\n\n const closeImageDialog = useCallback(() => {\n setImageDialogOpen(false);\n setEditingExistingImage(false);\n setImageNodeKey(null);\n imageForm.reset();\n setTimeout(() => {\n editor.focus();\n }, 0);\n }, [editor, imageForm]);\n\n const openLinkDialog = useCallback(() => {\n if (disabled) {\n return;\n }\n\n const { initialUrl, initialLabel, detectedLink } = editor.getEditorState().read(\n (): {\n initialUrl: string;\n initialLabel: string;\n detectedLink: ReturnType<typeof $createLinkNode> | null;\n } => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return { initialUrl: \"\", initialLabel: \"\", detectedLink: null };\n }\n\n const nodes = selection.getNodes();\n let label = selection.getTextContent().trim();\n let url = \"\";\n let found: ReturnType<typeof $createLinkNode> | null = null;\n\n for (const node of nodes) {\n const linkNode =\n $isLinkNode(node) ? node\n : $isLinkNode(node.getParent()) ? (node.getParent() as LinkNode)\n : null;\n\n if (linkNode) {\n url = linkNode.getURL();\n if (!label) {\n label = linkNode.getTextContent().trim();\n }\n found = linkNode;\n break;\n }\n }\n\n if (!label && url) {\n label = url;\n }\n\n return { initialUrl: url, initialLabel: label, detectedLink: found };\n }\n );\n\n linkForm.clearErrors();\n linkForm.reset({\n url: initialUrl,\n label: initialLabel\n });\n setEditingExistingLink(Boolean(detectedLink));\n setLinkNodeKey(detectedLink?.getKey() ?? null);\n setLinkDialogOpen(true);\n }, [disabled, editor, linkForm]);\n\n const closeLinkDialog = useCallback(() => {\n setLinkDialogOpen(false);\n setEditingExistingLink(false);\n setLinkNodeKey(null);\n linkForm.reset();\n setTimeout(() => {\n editor.focus();\n }, 0);\n }, [editor, linkForm]);\n\n const handleLinkSubmit = linkForm.handleSubmit(({ url, label }) => {\n const trimmedUrl = url.trim();\n const trimmedLabel = label.trim();\n\n if (!trimmedUrl) {\n linkForm.setError(\"url\", { type: \"required\", message: \"Please enter a URL.\" });\n return;\n }\n\n editor.focus();\n\n editor.update(() => {\n const labelToApply = trimmedLabel || trimmedUrl;\n\n if (editingExistingLink && linkNodeKey) {\n const existingNode = $getNodeByKey<LexicalNode>(linkNodeKey);\n if ($isLinkNode(existingNode)) {\n existingNode.setURL(trimmedUrl);\n existingNode.clear();\n existingNode.append($createTextNode(labelToApply));\n existingNode.select();\n return;\n }\n }\n\n const selection = $getSelection();\n const linkNode = $createLinkNode(trimmedUrl);\n linkNode.append($createTextNode(labelToApply));\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([linkNode]);\n } else {\n $insertNodes([linkNode]);\n }\n\n linkNode.select();\n });\n\n closeLinkDialog();\n });\n\n const handleRemoveLink = useCallback(() => {\n editor.focus();\n editor.update(() => {\n if (linkNodeKey) {\n const node = $getNodeByKey<LexicalNode>(linkNodeKey);\n if ($isLinkNode(node)) {\n node.remove();\n return;\n }\n }\n\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n });\n\n closeLinkDialog();\n }, [closeLinkDialog, editor, linkNodeKey]);\n\n const handleLinkDialogOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n setLinkDialogOpen(true);\n } else {\n closeLinkDialog();\n }\n },\n [closeLinkDialog]\n );\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const anchorNode = selection.anchor.getNode();\n const element = anchorNode.getKey() === \"root\" ? anchorNode : anchorNode.getTopLevelElementOrThrow();\n let blockType: ToolbarBlockType = \"paragraph\";\n\n let parentNode: LexicalNode | null = anchorNode;\n\n while (parentNode) {\n if ($isListNode(parentNode)) {\n blockType = parentNode.getTag() === \"ol\" ? \"number\" : \"bullet\";\n break;\n }\n parentNode = parentNode.getParent();\n }\n\n if (blockType === \"paragraph\") {\n if ($isHeadingNode(element)) {\n blockType = element.getTag() as ToolbarBlockType;\n } else if ($isCodeNode(element)) {\n blockType = \"code\";\n } else if (element.getType() === \"quote\") {\n blockType = \"quote\";\n }\n }\n\n const nodes = selection.getNodes();\n const hasLink = nodes.some((node) => $isLinkNode(node) || $isLinkNode(node.getParent()));\n const elementFormat =\n (element as unknown as { getFormatType?: () => ElementFormatType | null }).getFormatType?.() ??\n null;\n\n setState((current) => ({\n ...current,\n blockType,\n elementFormat,\n isBold: selection.hasFormat(\"bold\"),\n isItalic: selection.hasFormat(\"italic\"),\n isUnderline: selection.hasFormat(\"underline\"),\n isStrikethrough: selection.hasFormat(\"strikethrough\"),\n isCode: selection.hasFormat(\"code\"),\n isLink: hasLink\n }));\n }, []);\n\n React.useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setState((current) => ({ ...current, canUndo: payload }));\n return false;\n },\n COMMAND_PRIORITY_NORMAL\n ),\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setState((current) => ({ ...current, canRedo: payload }));\n return false;\n },\n COMMAND_PRIORITY_NORMAL\n ),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateToolbar();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n ),\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(updateToolbar);\n })\n );\n }, [editor, updateToolbar]);\n\n const applyBlock = useCallback(\n (nextBlock: ToolbarBlockType) => {\n if (disabled) {\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n switch (nextBlock) {\n case \"paragraph\": {\n $setBlocksType(selection, () => $createParagraphNode());\n break;\n }\n case \"h1\":\n case \"h2\":\n case \"h3\": {\n if (state.blockType === nextBlock) {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createHeadingNode(nextBlock));\n }\n break;\n }\n case \"bullet\": {\n if (state.blockType === \"bullet\") {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n break;\n }\n case \"number\": {\n if (state.blockType === \"number\") {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n break;\n }\n case \"quote\": {\n if (state.blockType === \"quote\") {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createQuoteNode());\n }\n break;\n }\n case \"code\": {\n if (state.blockType === \"code\") {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createCodeNode());\n }\n break;\n }\n default:\n break;\n }\n });\n },\n [disabled, editor, state.blockType]\n );\n\n const toggleFormat = useCallback(\n (format: \"bold\" | \"italic\" | \"underline\" | \"strikethrough\" | \"code\") => {\n if (disabled) {\n return;\n }\n\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, format);\n },\n [disabled, editor]\n );\n\n const toggleLink = useCallback(() => {\n openLinkDialog();\n }, [openLinkDialog]);\n\n const applyElementFormat = useCallback(\n (format: ElementFormatType) => {\n if (disabled) {\n return;\n }\n\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, format);\n },\n [disabled, editor]\n );\n\n const canInsertImage = allowImageUrlInsert || Boolean(onImageUpload);\n const imageAccept = acceptImageMimeTypes ?? DEFAULT_IMAGE_ACCEPT;\n\n const handleInsertImage = useCallback(() => {\n if (disabled || !canInsertImage) {\n return;\n }\n\n editor.focus();\n\n if (onImageUpload) {\n fileInputRef.current?.click();\n return;\n }\n\n openImageDialog();\n }, [canInsertImage, disabled, editor, onImageUpload, openImageDialog]);\n\n const handleFileChange = useCallback(\n async (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!onImageUpload) {\n return;\n }\n\n const file = event.target.files?.[0];\n\n try {\n if (!file) {\n return;\n }\n\n const result = await onImageUpload(file);\n const payload =\n typeof result === \"string\" ?\n { src: result, altText: file.name }\n : {\n src: result.src,\n altText: result.altText ?? file.name,\n width: result.width,\n height: result.height\n };\n\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, payload);\n editor.focus();\n } catch (error) {\n onImageUploadError?.(error);\n console.error(\"[RichText] Failed to upload image:\", error);\n } finally {\n event.target.value = \"\";\n }\n },\n [editor, onImageUpload, onImageUploadError]\n );\n\n const handleImageSubmit = imageForm.handleSubmit(({ url, alt, width, height }) => {\n const trimmedUrl = url.trim();\n const trimmedAlt = alt.trim();\n const trimmedWidth = width.trim();\n const trimmedHeight = height.trim();\n\n if (!trimmedUrl) {\n imageForm.setError(\"url\", { type: \"required\", message: \"Please enter an image URL.\" });\n return;\n }\n\n let parsedWidth: number | undefined;\n if (trimmedWidth) {\n const widthValue = Number(trimmedWidth);\n if (Number.isNaN(widthValue) || widthValue <= 0) {\n imageForm.setError(\"width\", {\n type: \"validate\",\n message: \"Width must be a positive number.\"\n });\n return;\n }\n parsedWidth = widthValue;\n }\n\n let parsedHeight: number | undefined;\n if (trimmedHeight) {\n const heightValue = Number(trimmedHeight);\n if (Number.isNaN(heightValue) || heightValue <= 0) {\n imageForm.setError(\"height\", {\n type: \"validate\",\n message: \"Height must be a positive number.\"\n });\n return;\n }\n parsedHeight = heightValue;\n }\n\n editor.focus();\n\n editor.update(() => {\n const payload: ImagePayload = {\n src: trimmedUrl,\n altText: trimmedAlt || undefined,\n width: parsedWidth ?? undefined,\n height: parsedHeight ?? undefined\n };\n\n if (editingExistingImage && imageNodeKey) {\n const existingNode = $getNodeByKey<LexicalNode>(imageNodeKey);\n if ($isImageNode(existingNode)) {\n existingNode.setSrc(payload.src);\n existingNode.setAltText(payload.altText ?? \"\");\n existingNode.setDimensions(payload.width ?? \"inherit\", payload.height ?? \"inherit\");\n placeCaretAfterImage(existingNode);\n return;\n }\n }\n\n const selection = $getSelection();\n const imageNode = $createImageNode(payload);\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([imageNode]);\n } else {\n $insertNodes([imageNode]);\n }\n\n placeCaretAfterImage(imageNode);\n });\n\n closeImageDialog();\n });\n\n const handleImageDialogOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n setImageDialogOpen(true);\n } else {\n closeImageDialog();\n }\n },\n [closeImageDialog]\n );\n\n const handleRemoveImage = useCallback(() => {\n if (!imageNodeKey) {\n closeImageDialog();\n return;\n }\n\n editor.focus();\n editor.update(() => {\n const existingNode = $getNodeByKey<LexicalNode>(imageNodeKey);\n if ($isImageNode(existingNode)) {\n existingNode.remove();\n }\n });\n\n closeImageDialog();\n }, [closeImageDialog, editor, imageNodeKey]);\n\n return (\n <>\n <div className=\"flex flex-wrap items-center gap-1\">\n <ToolbarButton\n label=\"Undo\"\n icon={Undo}\n onClick={() => editor.dispatchCommand(UNDO_COMMAND, undefined)}\n disabled={disabled || !state.canUndo}\n />\n <ToolbarButton\n label=\"Redo\"\n icon={Redo}\n onClick={() => editor.dispatchCommand(REDO_COMMAND, undefined)}\n disabled={disabled || !state.canRedo}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Bold\"\n icon={Bold}\n onClick={() => toggleFormat(\"bold\")}\n active={state.isBold}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Italic\"\n icon={Italic}\n onClick={() => toggleFormat(\"italic\")}\n active={state.isItalic}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Underline\"\n icon={Underline}\n onClick={() => toggleFormat(\"underline\")}\n active={state.isUnderline}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Strikethrough\"\n icon={Strikethrough}\n onClick={() => toggleFormat(\"strikethrough\")}\n active={state.isStrikethrough}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Inline code\"\n icon={InlineCodeIcon}\n onClick={() => toggleFormat(\"code\")}\n active={state.isCode}\n disabled={disabled}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Paragraph\"\n icon={Pilcrow}\n onClick={() => applyBlock(\"paragraph\")}\n active={state.blockType === \"paragraph\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 1\"\n icon={Heading1}\n onClick={() => applyBlock(\"h1\")}\n active={state.blockType === \"h1\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 2\"\n icon={Heading2}\n onClick={() => applyBlock(\"h2\")}\n active={state.blockType === \"h2\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 3\"\n icon={Heading3}\n onClick={() => applyBlock(\"h3\")}\n active={state.blockType === \"h3\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Bulleted list\"\n icon={BulletListIcon}\n onClick={() => applyBlock(\"bullet\")}\n active={state.blockType === \"bullet\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Numbered list\"\n icon={ListOrdered}\n onClick={() => applyBlock(\"number\")}\n active={state.blockType === \"number\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Quote\"\n icon={QuoteIcon}\n onClick={() => applyBlock(\"quote\")}\n active={state.blockType === \"quote\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Code block\"\n icon={CodeSquare}\n onClick={() => applyBlock(\"code\")}\n active={state.blockType === \"code\"}\n disabled={disabled}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label={state.isLink ? \"Edit link\" : \"Insert link\"}\n icon={LinkIcon}\n onClick={toggleLink}\n active={state.isLink}\n disabled={disabled}\n />\n {state.isLink ?\n <ToolbarButton\n label=\"Remove link\"\n icon={Link2Off}\n onClick={handleRemoveLink}\n disabled={disabled}\n />\n : null}\n <ToolbarButton\n label=\"Insert image\"\n icon={ImageIcon}\n onClick={handleInsertImage}\n disabled={disabled || !canInsertImage}\n />\n {onImageUpload ?\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={imageAccept}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n : null}\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Align left\"\n icon={AlignLeft}\n onClick={() => applyElementFormat(\"left\")}\n active={state.elementFormat === \"left\" || state.elementFormat === null}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Align center\"\n icon={AlignCenter}\n onClick={() => applyElementFormat(\"center\")}\n active={state.elementFormat === \"center\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Align right\"\n icon={AlignRight}\n onClick={() => applyElementFormat(\"right\")}\n active={state.elementFormat === \"right\"}\n disabled={disabled}\n />\n </div>\n <Dialog open={isLinkDialogOpen} onOpenChange={handleLinkDialogOpenChange}>\n <DialogContent\n className=\"min-w-[70vw] max-w-7xl\"\n header={editingExistingLink ? \"Edit link\" : \"Insert link\"}\n >\n <Form {...linkForm}>\n <form className=\"grid gap-4 p-6\" onSubmit={handleLinkSubmit}>\n <FormField\n control={linkForm.control}\n name=\"url\"\n rules={{ required: \"Please enter a URL.\" }}\n render={({ field }) => (\n <FormItem>\n <FormLabel>URL</FormLabel>\n <FormControl>\n <Input placeholder=\"https://example.com\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={linkForm.control}\n name=\"label\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Link label</FormLabel>\n <FormControl>\n <Input placeholder=\"Display text\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <DialogFooter className=\"pt-2\">\n <Button type=\"button\" variant=\"cancel\" onClick={closeLinkDialog}>\n Cancel\n </Button>\n {editingExistingLink ?\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveLink}\n className=\"text-destructive\"\n >\n Remove link\n </Button>\n : null}\n <Button type=\"submit\">Save link</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n <Dialog open={isImageDialogOpen} onOpenChange={handleImageDialogOpenChange}>\n <DialogContent header={editingExistingImage ? \"Edit image\" : \"Insert image\"}>\n <Form {...imageForm}>\n <form className=\"grid gap-4 p-6\" onSubmit={handleImageSubmit}>\n <FormField\n control={imageForm.control}\n name=\"url\"\n rules={{ required: \"Please enter an image URL.\" }}\n render={({ field }) => (\n <FormItem>\n <FormLabel>Image URL</FormLabel>\n <FormControl>\n <Input placeholder=\"https://example.com/image.jpg\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={imageForm.control}\n name=\"alt\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Alt text</FormLabel>\n <FormControl>\n <Input placeholder=\"Describe the image\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <FormField\n control={imageForm.control}\n name=\"width\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Width (px)</FormLabel>\n <FormControl>\n <Input placeholder=\"Auto\" inputMode=\"numeric\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={imageForm.control}\n name=\"height\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Height (px)</FormLabel>\n <FormControl>\n <Input placeholder=\"Auto\" inputMode=\"numeric\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button type=\"button\" variant=\"cancel\" onClick={closeImageDialog}>\n Cancel\n </Button>\n {editingExistingImage ?\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveImage}\n className=\"text-destructive\"\n >\n Remove image\n </Button>\n : null}\n <Button type=\"submit\">{editingExistingImage ? \"Save changes\" : \"Insert image\"}</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nfunction ControlledValuePlugin({\n value,\n trackAppliedValue\n}: {\n value?: RichTextSerializedState;\n trackAppliedValue: React.MutableRefObject<RichTextSerializedState | undefined>;\n}) {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n if (value == null || trackAppliedValue.current === value) {\n return;\n }\n\n let parsed: EditorSerializedState | undefined;\n\n try {\n parsed = JSON.parse(value) as EditorSerializedState;\n } catch (error) {\n console.error(\"[RichText] Failed to sync controlled value:\", error);\n return;\n }\n\n editor.update(() => {\n const newState = editor.parseEditorState(parsed!);\n const current = editor.getEditorState();\n\n // Compare serialized versions to avoid redundant updates\n if (JSON.stringify(current.toJSON()) !== JSON.stringify(newState.toJSON())) {\n editor.setEditorState(newState);\n }\n\n // Track the latest applied value so we don't reapply unnecessarily\n trackAppliedValue.current = value;\n });\n }, [editor, trackAppliedValue, value]);\n\n return null;\n}\n\nfunction EditableStatePlugin({ editable }: { editable: boolean }) {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n editor.setEditable(editable);\n }, [editor, editable]);\n\n return null;\n}\n\nfunction ImagesPlugin() {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n return editor.registerCommand(\n INSERT_IMAGE_COMMAND,\n (payload) => {\n if (!payload?.src) {\n return false;\n }\n\n editor.update(() => {\n const imageNode = $createImageNode(payload);\n $insertNodes([imageNode]);\n placeCaretAfterImage(imageNode);\n });\n\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n }, [editor]);\n\n return null;\n}\n\nconst RichText = forwardRef<HTMLDivElement, RichTextProps>(function RichText(\n {\n value,\n defaultValue,\n onChange,\n onHtmlChange,\n placeholder,\n readOnly,\n disabled,\n editorClassName,\n toolbarClassName,\n autoFocus,\n onImageUpload,\n onImageUploadError,\n acceptImageMimeTypes = DEFAULT_IMAGE_ACCEPT,\n allowImageUrlInsert = true,\n className,\n id,\n ...rest\n },\n ref\n) {\n const initialSerializedStateRef = useRef<EditorSerializedState | undefined>(undefined);\n\n if (initialSerializedStateRef.current === undefined) {\n initialSerializedStateRef.current = parseSerializedEditorState(value ?? defaultValue);\n }\n\n const initialConfig = useMemo(\n () => ({\n namespace: \"RichTextEditor\",\n editable: !(readOnly || disabled),\n theme,\n onError(error: Error) {\n throw error;\n },\n nodes,\n editorState:\n initialSerializedStateRef.current ? JSON.stringify(initialSerializedStateRef.current) : undefined\n }),\n [disabled, readOnly]\n );\n\n const appliedValueRef = useRef<RichTextSerializedState | undefined>(value ?? defaultValue);\n\n const handleChange = useCallback(\n (editorState: EditorState, editor: LexicalEditor) => {\n const serialized = JSON.stringify(editorState.toJSON());\n appliedValueRef.current = serialized;\n\n if (onChange) {\n onChange(serialized, editorState);\n }\n\n if (onHtmlChange) {\n let html = \"\";\n editorState.read(() => {\n html = $generateHtmlFromNodes(editor, null);\n });\n onHtmlChange(html, editorState);\n }\n },\n [onChange, onHtmlChange]\n );\n\n const editable = !(readOnly || disabled);\n\n return (\n <LexicalComposer initialConfig={initialConfig}>\n <div\n ref={ref}\n aria-disabled={disabled}\n data-disabled={disabled ? \"true\" : undefined}\n className={cn(\n \"border-input focus-within:border-ring focus-within:ring-ring/50 bg-background text-sm shadow-sm focus-within:ring-[3px]\",\n \"flex min-h-[12rem] flex-col rounded-md border transition-[color,box-shadow]\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-60\",\n className\n )}\n {...rest}\n >\n {editable ?\n <div className={cn(\"border-b border-border bg-muted/40 px-2 py-1.5\", toolbarClassName)}>\n <ToolbarPlugin\n disabled={Boolean(disabled)}\n onImageUpload={onImageUpload}\n onImageUploadError={onImageUploadError}\n allowImageUrlInsert={allowImageUrlInsert}\n acceptImageMimeTypes={acceptImageMimeTypes}\n />\n </div>\n : null}\n <div className=\"relative flex-1 overflow-auto\">\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n id={id}\n className={cn(\n \"h-full min-h-[10rem] whitespace-pre-wrap break-words px-3 py-2 text-sm leading-6 text-foreground outline-none\",\n editorClassName\n )}\n />\n }\n placeholder={<Placeholder placeholder={placeholder || \"\"} />}\n ErrorBoundary={LexicalErrorBoundary}\n />\n <HistoryPlugin />\n <ListPlugin />\n <LinkPlugin />\n <ImagesPlugin />\n <MarkdownShortcutPlugin transformers={TRANSFORMERS} />\n {autoFocus ?\n <AutoFocusPlugin />\n : null}\n <EditableStatePlugin editable={editable} />\n <ControlledValuePlugin value={value} trackAppliedValue={appliedValueRef} />\n <OnChangePlugin onChange={handleChange} ignoreSelectionChange />\n </div>\n </div>\n </LexicalComposer>\n );\n});\n\nRichText.displayName = \"RichText\";\n\nexport { RichText };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"@/utils\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","// /hooks/use-mobile.ts\n\"use client\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Hook ตรวจสอบว่า viewport ปัจจุบันเป็นขนาด “mobile” หรือไม่\n * @param breakpoint จุดตัด (px) — ถ้า width < breakpoint => ถือเป็น mobile\n */\nexport function useIsMobile(breakpoint: number = 768): boolean {\n const [isMobile, setIsMobile] = useState<boolean>(() => {\n if (typeof window === \"undefined\") {\n // ใน SSR, เราต้องกำหนดค่าเริ่มต้น (ใน client มันจะถูกอัปเดตใน useEffect)\n return false;\n }\n return window.innerWidth < breakpoint;\n });\n\n useEffect(() => {\n function onResize() {\n setIsMobile(window.innerWidth < breakpoint);\n }\n\n window.addEventListener(\"resize\", onResize);\n // คุณอาจจะเพิ่ม “orientationchange” ก็ได้\n window.addEventListener(\"orientationchange\", onResize);\n\n // เรียกครั้งแรก\n onResize();\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"orientationchange\", onResize);\n };\n }, [breakpoint]);\n\n return isMobile;\n}\n","import { cn } from \"@/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","export * from \"./accordion\";\n\nexport * from \"./button\";\n\nexport * from \"./checkbox\";\n\nexport * from \"./collapsible\";\n\nexport * from \"./ClearButton\";\n\nexport * from \"./datepicker\";\n\nexport * from \"./dialog\";\n\nexport * from \"./form\";\n\nexport * from \"./input\";\n\nexport * from \"./label\";\n\nexport * from \"./monthpicker\";\n\nexport * from \"./popover\";\n\nexport * from \"./radio\";\n\nexport * from \"./richtext\";\n\nexport * from \"./select\";\n\nexport * from \"./separator\";\n\nexport * from \"./sheet\";\n\nexport * from \"./sidebar\";\n\nexport * from \"./skeleton\";\n\nexport * from \"./spinner\";\n\nexport * from \"./switch\";\n\nexport * from \"./table\";\n\nexport * from \"./textarea\";\n\nexport * from \"./tooltip\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"@/utils\";\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer inline-flex h-[1.15rem] w-10 shrink-0 items-center rounded-full border border-transparent transition-all outline-none focus-visible:ring-[3px]\",\n \"data-[state=checked]:bg-[#379A2A] data-[state=unchecked]:bg-[#EFEFEF]\",\n \"dark:data-[state=unchecked]:bg-input/80\",\n \"focus-visible:border-ring focus-visible:ring-ring/50\",\n \"disabled:bg-gray-300 disabled:data-[state=checked]:bg-[#A5D6A7] disabled:data-[state=unchecked]:bg-[#E0E0E0]\",\n \"disabled:cursor-not-allowed disabled:opacity-70\",\n \"shadow-inner\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-white block size-3.5 rounded-full ring-0 transition-transform\",\n \"data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5\",\n \"disabled:bg-gray-100\"\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from \"react\";\nimport { cn } from \"@/utils\";\n\ntype TextareaProps = React.ComponentProps<\"textarea\"> & {\n autoResize?: boolean;\n};\n\nfunction Textarea({ className, autoResize = true, ...props }: TextareaProps) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n autoResize ? \"field-sizing-content min-h-16\" : \"field-sizing-fixed\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"@/utils\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />\n );\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n arrowClassName,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n arrowClassName?: string;\n}) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow\n className={cn(\n \"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\",\n arrowClassName\n )}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, VariantProps } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { cn } from \"@/utils\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n InputPrimitive,\n Button,\n Separator,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger\n} from \"@/components/ui\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\" ?\n \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\" ?\n \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\" ?\n \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof InputPrimitive>) {\n return (\n <InputPrimitive\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\"\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\ntype SidebarLayoutProps = Omit<React.ComponentProps<typeof SidebarProvider>, \"children\"> & {\n sidebar: React.ReactNode;\n children?: React.ReactNode;\n layoutProps?: React.HTMLAttributes<HTMLDivElement>;\n sidebarProps?: Omit<React.ComponentProps<typeof Sidebar>, \"children\">;\n insetProps?: Omit<React.ComponentProps<typeof SidebarInset>, \"children\">;\n};\n\nfunction SidebarLayout({\n sidebar,\n children,\n layoutProps,\n sidebarProps,\n insetProps,\n ...providerProps\n}: SidebarLayoutProps) {\n const { className: layoutClassName, ...restLayoutProps } = layoutProps ?? {};\n\n return (\n <SidebarProvider {...providerProps}>\n <div data-slot=\"sidebar-layout\" {...restLayoutProps} className={cn(\"flex\", layoutClassName)}>\n <Sidebar {...sidebarProps}>{sidebar}</Sidebar>\n <SidebarInset {...insetProps}>{children}</SidebarInset>\n </div>\n </SidebarProvider>\n );\n}\n\nexport {\n Sidebar,\n SidebarLayout,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar\n};\n","import { DialogContentProps } from \"@radix-ui/react-dialog\";\nimport { Area, CropperProps } from \"react-easy-crop\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nexport interface CroppedImagePayload {\n crop: { x: number; y: number };\n croppedAreaPixels: Area | null;\n}\n\nexport interface CroppedImagePayloadWithBlobUrl extends CroppedImagePayload {\n croppedImageBlobUrl: string;\n}\n\ninterface CropperModalBaseProps {\n open?: boolean;\n onOpenChange: (open: boolean) => void;\n onCancel?: () => void;\n onError?: (e: CropperModalError | unknown) => void;\n imageSrc?: string | null;\n isSVG?: boolean;\n cropSize?: { width: number; height: number };\n /**\n * @property {boolean} outputExactCropSize - Determine whether to ouput image with the exact size given in cropSize attribute\n * @description an original image dimension is 1000x1000px, if cropSize is 500x500px, the output image will be exactly 500x500px\n */\n outputExactCropSize?: boolean;\n targetFileSizeKB?: number;\n title?: string;\n props?: {\n dialogTitleContainer?: React.ComponentProps<\"div\">;\n dialogTitle?: React.ComponentProps<typeof DialogPrimitive.Title>;\n dialogContent?: DialogContentProps;\n cropper?: CropperProps;\n cropperContainer?: React.ComponentProps<\"div\">;\n };\n}\n\ninterface CropperModalWithBlobUrlOutputProps extends CropperModalBaseProps {\n onConfirm?: (payload: CroppedImagePayloadWithBlobUrl) => void;\n generateBlobUrlOutput: true;\n}\n\ninterface CropperModalNormalProps extends CropperModalBaseProps {\n onConfirm?: (payload: CroppedImagePayload) => void;\n generateBlobUrlOutput: undefined | false;\n}\n\nexport type CropperModalProps = CropperModalWithBlobUrlOutputProps | CropperModalNormalProps;\n\nexport type CropperModalErrorType =\n | \"ERROR_GENERATE_BLOB\"\n | \"ERROR_CREATE_CANVAS\"\n | \"ERROR_INVALID_SVG\"\n | \"ERROR_COMPRESSION\"\n | \"ERROR_SVG_EXCEED_SIZE\";\n\nexport class CropperModalError extends Error {\n public readonly error: CropperModalErrorType;\n constructor(errorType: CropperModalErrorType, message: string) {\n super(message);\n this.error = errorType;\n }\n}\n\nexport const ErrorGeneratingBlob = new CropperModalError(\n \"ERROR_GENERATE_BLOB\",\n \"failed to generate a valid Blob\"\n);\n\nexport const ErrorCreateCanvas = new CropperModalError(\"ERROR_CREATE_CANVAS\", \"Failed to create canvas\");\n\nexport const ErrorInvalidSVG = new CropperModalError(\n \"ERROR_INVALID_SVG\",\n \"The file is not a valid SVG document root\"\n);\n\nexport const ErrorCompression = new CropperModalError(\n \"ERROR_COMPRESSION\",\n \"Compression failed to generate a valid Blob\"\n);\n\nexport const ErrorSVGExceedSize = new CropperModalError(\n \"ERROR_SVG_EXCEED_SIZE\",\n \"The SVG file is too large\"\n);\n","import { Area } from \"react-easy-crop\";\nimport { ErrorCompression, ErrorCreateCanvas, ErrorInvalidSVG, ErrorSVGExceedSize } from \"./type\";\n\nexport function readFile(file: File): Promise<string> {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => resolve(reader.result as string), false);\n reader.readAsDataURL(file); // read as base64-encoded\n });\n}\n\nexport const createImage = (url: string) =>\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", (error) => reject(error));\n image.setAttribute(\"crossOrigin\", \"anonymous\"); // needed to avoid cross-origin issues on CodeSandbox\n image.src = url;\n });\n\nfunction toBlobPromise(canvas: HTMLCanvasElement, quality: number): Promise<Blob | null> {\n return new Promise((resolve) => {\n canvas.toBlob((blob) => resolve(blob), \"image/jpeg\", quality);\n });\n}\n\nasync function resizeImage(canvas: HTMLCanvasElement, targetSizeKB: number): Promise<string> {\n const targetSizeBytes = targetSizeKB * 1024;\n let quality = 1;\n const qualityStep = 0.05;\n let compressedBlob: Blob | null = null;\n let currentSize = Infinity;\n\n while (currentSize > targetSizeBytes && quality > 0.0) {\n compressedBlob = await toBlobPromise(canvas, quality);\n if (compressedBlob === null) {\n throw ErrorCompression;\n }\n currentSize = compressedBlob.size;\n\n if (currentSize > targetSizeBytes) {\n quality = Math.max(0.0, quality - qualityStep);\n }\n }\n\n if (compressedBlob && currentSize <= targetSizeBytes) {\n return URL.createObjectURL(compressedBlob);\n }\n throw ErrorCompression;\n}\n\nexport async function getCroppedImg(\n imageSrc: string,\n pixelCrop: Area,\n desiredDimension?: { width: number; height: number },\n targetSizeKB: number = Infinity\n): Promise<string> {\n const image = await createImage(imageSrc);\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n throw ErrorCreateCanvas;\n }\n\n canvas.width = image.width;\n canvas.height = image.height;\n ctx.drawImage(image, 0, 0);\n\n const croppedCanvas = document.createElement(\"canvas\");\n\n const croppedCtx = croppedCanvas.getContext(\"2d\");\n\n if (!croppedCtx) {\n throw ErrorCreateCanvas;\n }\n\n // Set the size of the cropped canvas\n croppedCanvas.width = desiredDimension?.width ?? pixelCrop.width;\n croppedCanvas.height = desiredDimension?.height ?? pixelCrop.height;\n\n // Draw the cropped image onto the new canvas\n croppedCtx.drawImage(\n canvas,\n pixelCrop.x,\n pixelCrop.y,\n pixelCrop.width,\n pixelCrop.height,\n 0,\n 0,\n desiredDimension?.width ?? pixelCrop.width,\n desiredDimension?.height ?? pixelCrop.height\n );\n\n return resizeImage(croppedCanvas, targetSizeKB);\n}\n\nexport async function getCroppedSVG(\n imageSrc: string, // Expects data:image/svg+xml;...\n pixelCrop: Area,\n desiredDimension?: { width: number; height: number },\n targetSizeKB: number = Infinity\n): Promise<string> {\n let svgString: string;\n const parts = imageSrc.split(\",\");\n const meta = parts[0]; // \"data:image/svg+xml;base64\" or \"data:image/svg+xml\"\n const data = parts[1];\n\n if (meta.includes(\"base64\")) {\n svgString = atob(data); // Decode base64\n } else {\n svgString = decodeURIComponent(data); // Decode URL-encoded\n }\n\n // Parse the SVG string into an XML Document\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, \"image/svg+xml\");\n const svgElement = svgDoc.documentElement;\n\n if (svgElement.tagName.toLowerCase() !== \"svg\") {\n throw ErrorInvalidSVG;\n }\n\n // Set the new viewBox to the crop area\n const newViewBox = `${pixelCrop.x} ${pixelCrop.y} ${pixelCrop.width} ${pixelCrop.height}`;\n svgElement.setAttribute(\"viewBox\", newViewBox);\n\n // Set the output diensions\n const outputWidth = desiredDimension?.width ?? pixelCrop.width;\n const outputHeight = desiredDimension?.height ?? pixelCrop.height;\n svgElement.setAttribute(\"width\", String(outputWidth));\n svgElement.setAttribute(\"height\", String(outputHeight));\n\n // Serialize the modified SVG back to a string\n const serializer = new XMLSerializer();\n const croppedSvgString = serializer.serializeToString(svgElement);\n\n // Create a Blob and Object URL\n const blob = new Blob([croppedSvgString], { type: \"image/svg+xml\" });\n\n // Throw error if svg is too large\n const targetSizeBytes = targetSizeKB * 1024;\n if (blob.size > targetSizeBytes) {\n throw ErrorSVGExceedSize;\n }\n\n return URL.createObjectURL(blob);\n}\n","import { getCroppedImg, getCroppedSVG } from \"./helper\";\nimport { Dialog, DialogContent, DialogTitle } from \"../dialog\";\nimport { Button } from \"../button\";\nimport { XIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport Cropper, { Area } from \"react-easy-crop\";\nimport { CropperModalProps } from \"./type\";\n\nexport const CropperModal = ({\n open,\n onOpenChange,\n imageSrc,\n isSVG,\n onConfirm,\n onCancel,\n onError,\n cropSize,\n outputExactCropSize,\n targetFileSizeKB,\n generateBlobUrlOutput,\n title,\n props\n}: CropperModalProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState<number | undefined>();\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleCancel = useCallback(() => {\n if (onCancel) {\n onCancel();\n }\n handleClose();\n }, [handleClose, onCancel]);\n\n const handleCropComplete = useCallback((_: Area, croppedAreaPixels: Area) => {\n setCroppedAreaPixels(croppedAreaPixels);\n }, []);\n\n const handleConfirm = async () => {\n if (!imageSrc || !onConfirm) {\n handleClose();\n return;\n }\n if (!generateBlobUrlOutput) {\n onConfirm({ crop, croppedAreaPixels });\n return;\n }\n if (!croppedAreaPixels) {\n // return original image\n onConfirm({ crop, croppedAreaPixels, croppedImageBlobUrl: imageSrc });\n return;\n }\n setIsLoading(true);\n try {\n const desiredDimension = outputExactCropSize ? cropSize : undefined;\n const croppedImage =\n isSVG ?\n await getCroppedSVG(imageSrc, croppedAreaPixels, desiredDimension, targetFileSizeKB)\n : await getCroppedImg(imageSrc, croppedAreaPixels, desiredDimension, targetFileSizeKB);\n onConfirm({ crop, croppedAreaPixels, croppedImageBlobUrl: croppedImage });\n } catch (e: unknown) {\n if (onError) {\n onError(e);\n }\n } finally {\n setIsLoading(false);\n handleClose();\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n if (!nextOpen) {\n handleClose();\n } else {\n onOpenChange(true);\n }\n }}\n >\n <DialogContent\n className=\"flex flex-col w-fit !max-w-6xl p-0 overflow-clip gap-0 border-0\"\n {...props?.dialogContent}\n >\n <div\n className=\"flex w-full bg-[#82B495] text-white justify-between items-center p-4\"\n {...props?.dialogTitleContainer}\n >\n <DialogTitle className=\"text-2xl font-semibold\" {...props?.dialogTitle}>\n {title ?? \"Crop Image\"}\n </DialogTitle>\n <button\n type=\"button\"\n className=\"text-white hover:text-gray-100 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n <XIcon className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"w-120 md:w-[50vw] h-[70vh] mx-auto\" {...props?.cropperContainer}>\n <Cropper\n image={imageSrc ?? undefined}\n crop={crop}\n onCropChange={setCrop}\n zoom={zoom}\n onZoomChange={setZoom}\n style={{ containerStyle: { position: \"relative\", width: \"100%\", height: \"100%\" } }}\n onCropComplete={handleCropComplete}\n aspect={cropSize ? cropSize.width / cropSize.height : undefined}\n zoomWithScroll\n showGrid\n restrictPosition\n {...props?.cropper}\n />\n </div>\n\n {/* Footer */}\n <div className=\"w-full py-4 px-8 min-h-10\">\n <div className=\"flex w-full justify-between\">\n <Button type=\"button\" variant=\"cancel\" onClick={handleCancel} disabled={isLoading}>\n Cancel\n </Button>\n <div className=\"ml-auto flex gap-x-2\">\n <Button type=\"button\" variant=\"default\" onClick={handleConfirm} disabled={isLoading}>\n Confirm\n </Button>\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default CropperModal;\n","import React, { useRef, useState, useEffect, ReactNode, type CSSProperties, useMemo } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { cn, debounce } from \"@/utils\";\n\nexport type EllipsisConfig =\n | boolean\n | { content?: ReactNode; lineClamp?: number; side?: \"top\" | \"bottom\" | \"left\" | \"right\" }\n | number; // number = line-clamp-N\n\nexport type TruncatedProps = {\n className?: string;\n ellipsis?: EllipsisConfig;\n children: ReactNode;\n as?: keyof React.JSX.IntrinsicElements;\n style?: CSSProperties;\n};\n\nconst Truncated = ({ children, className, ellipsis = true, as = \"p\", style }: TruncatedProps) => {\n const elementRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState<boolean>(false);\n const [isTruncated, setIsTruncated] = useState<boolean>(false);\n\n const Comp = as as React.ElementType;\n\n const normalizedChildren = typeof children === \"string\" ? children.replace(/>/g, \">\\u200B\") : children;\n\n useEffect(() => {\n const el = elementRef.current;\n if (!el) return;\n\n const checkTruncate = debounce(() => {\n const overflowX = el.scrollWidth > el.clientWidth;\n const overflowY = el.scrollHeight > el.clientHeight;\n setIsTruncated(overflowX || overflowY);\n }, 300);\n\n const resizeObserver = new ResizeObserver(checkTruncate);\n resizeObserver.observe(el);\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const lineClampLines =\n typeof ellipsis === \"number\" ? ellipsis\n : typeof ellipsis === \"object\" ? (ellipsis.lineClamp ?? 3)\n : null;\n\n const truncationClass = useMemo(() => {\n if (!ellipsis) return \"\";\n if (typeof ellipsis === \"number\") return `line-clamp-${ellipsis}`;\n if (typeof ellipsis === \"object\") return `line-clamp-${lineClampLines ?? 3}`;\n return \"truncate\";\n }, [ellipsis, lineClampLines]);\n\n const clampedStyle = useMemo(() => {\n if (!lineClampLines) return style;\n return {\n ...style,\n display: \"-webkit-box\",\n WebkitLineClamp: lineClampLines,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\"\n };\n }, [lineClampLines, style]);\n\n const baseContent = (\n <Comp ref={elementRef} className={cn(truncationClass, className)} style={clampedStyle}>\n {normalizedChildren}\n </Comp>\n );\n\n let tooltipContent: ReactNode = normalizedChildren;\n let tooltipSide: \"top\" | \"bottom\" | \"left\" | \"right\" = \"top\";\n\n if (typeof ellipsis === \"object\") {\n tooltipContent = ellipsis?.content ?? normalizedChildren;\n tooltipSide = ellipsis?.side ?? \"top\";\n }\n\n return (\n <Tooltip\n open={open}\n onOpenChange={(open) => {\n setOpen(isTruncated && open);\n }}\n >\n <TooltipTrigger asChild>{baseContent}</TooltipTrigger>\n <TooltipContent\n side={tooltipSide}\n className={cn(\"text-white bg-[#8B8B8B] max-w-md wrap-break-word shadow-lg\")}\n arrowClassName=\"bg-[#8B8B8B] fill-[#8B8B8B]\"\n >\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n );\n};\n\nexport default Truncated;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/common.ts","../src/utils/filters.ts","../src/utils/date.ts","../src/utils/cn.ts","../src/components/icons/arrow.tsx","../src/components/icons/calendar.tsx","../src/components/icons/check.tsx","../src/components/icons/dots-vertical.tsx","../src/components/icons/empty-data.tsx","../src/components/icons/expand.tsx","../src/components/icons/filter.tsx","../src/components/icons/not-found.tsx","../src/components/icons/setting.tsx","../src/components/icons/triangle-down.tsx","../src/components/icons/warning.tsx","../src/components/ui/accordion.tsx","../src/components/advanceSearch/components/conditions/ExpandCollapse.tsx","../src/components/advanceSearch/operatorMap.ts","../src/components/advanceSearch/hooks/useAdvanceSearch.ts","../src/components/ui/select.tsx","../src/components/advanceSearch/components/conditions/FieldSelect.tsx","../src/components/advanceSearch/types.ts","../src/components/advanceSearch/components/conditions/OperatorSelect.tsx","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../src/components/ui/spinner.tsx","../src/components/ui/input.tsx","../src/components/ui/ClearButton.tsx","../src/components/advanceSearch/components/conditions/types/ConditionTextInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionNumberInput.tsx","../src/components/ui/button.tsx","../src/components/ui/popover.tsx","../src/components/ui/datepicker.tsx","../src/components/datePicker/DatePicker.tsx","../src/components/advanceSearch/components/constants/index.ts","../src/components/advanceSearch/components/conditions/types/ConditionDateInput.tsx","../src/components/ui/monthpicker.tsx","../src/components/monthPicker/MonthPicker.tsx","../src/components/advanceSearch/components/conditions/types/ConditionMonthInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionDropdownInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionCheckboxInput.tsx","../src/components/lookupSelect/LookupSelect.tsx","../src/components/advanceSearch/components/conditions/types/ConditionLookupInput.tsx","../src/components/advanceSearch/components/conditions/types/ConditionJSONInput.tsx","../src/components/advanceSearch/components/conditions/ConditionValue.tsx","../src/components/advanceSearch/components/conditions/AddRemoveButtons.tsx","../src/components/advanceSearch/components/conditions/AdvanceSearchRow.tsx","../src/components/advanceSearch/builder/checkbox.ts","../src/components/advanceSearch/builder/helper.ts","../src/components/advanceSearch/builder/datetime.ts","../src/components/advanceSearch/builder/datemonth.ts","../src/components/advanceSearch/builder/dropdown.ts","../src/components/advanceSearch/builder/json.ts","../src/components/advanceSearch/builder/lookup.ts","../src/components/advanceSearch/builder/number.ts","../src/components/advanceSearch/builder/text.ts","../src/components/advanceSearch/builder/uuid.ts","../src/components/advanceSearch/builder/index.ts","../src/components/advanceSearch/components/AdvanceSearch.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/data-table/sortingFns.ts","../src/components/data-table/utils.tsx","../src/hooks/useHover/useHover.ts","../src/hooks/useIntersectionObserver/useIntersectionObserver.ts","../src/hooks/useMediaQuery/useMediaQuery.ts","../src/hooks/useScreenSize/useScreenSize.ts","../src/hooks/useTruncated/useTruncated.ts","../src/components/data-table/cells/HeaderCell.tsx","../src/components/ui/table.tsx","../src/components/data-table/ColumnResizer.tsx","../src/components/data-table/ColumnSeparator.tsx","../src/components/data-table/StatusContentSlot.tsx","../src/components/data-table/DataTableDevTool.tsx","../src/components/data-table/helpers.ts","../src/components/data-table/DataTable.tsx","../src/components/ui/dialog.tsx","../src/components/dialog-alert/lib/utils.ts","../src/components/dialog-alert/components/ui/dialog.tsx","../src/components/dialog-alert/components/ui/button.tsx","../src/components/dialog-alert/lib/constants.ts","../src/components/dialog-alert/locale/default.ts","../src/components/dialog-alert/locale/i18n.ts","../src/components/dialog-alert/DialogAlert.tsx","../src/components/dialog-alert/templates/index.ts","../src/components/dialog-alert/hooks/DialogAlertStore.tsx","../src/components/ui/LoadingOverlay.tsx","../src/components/formulaEditor/constants/formulaOperation.ts","../src/components/formulaEditor/editor/SuggestionList.tsx","../src/components/formulaEditor/editor/EditorExtension.tsx","../src/components/formulaEditor/utils/parseFormulaToken.ts","../src/components/formulaEditor/FormulaEditor.tsx","../src/components/tooltip/tooltip.tsx","../src/components/grid-settings/SortableRow.tsx","../src/components/grid-settings/schema.tsx","../src/components/grid-settings/GridSettingsModal.tsx","../src/components/grid-settings/store/useGridSettingsStore.ts","../src/components/image/image.tsx","../src/components/list/components/table.tsx","../src/components/list/components/container.tsx","../src/components/list/components/header.tsx","../src/components/list/List.tsx","../src/assets/icon/InfoIcon.tsx","../src/components/navbar/navbar.tsx","../src/components/ui/sheet.tsx","../src/components/prevent-page-leave/store/usePreventPageLeaveStore.ts","../src/components/prevent-page-leave/PreventPageLeave.tsx","../src/components/prevent-page-leave/hooks/usePreventPageLeave.ts","../src/components/ui/radio.tsx","../src/components/ui/ImageNode.tsx","../src/components/ui/richtext.tsx","../src/components/ui/separator.tsx","../src/hooks/use-mobile.ts","../src/components/ui/skeleton.tsx","../src/components/ui/index.ts","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/sidebar.tsx","../src/components/cropperModal/type.ts","../src/components/cropperModal/helper.ts","../src/components/cropperModal/cropperModal.tsx","../src/components/truncated/truncated.tsx","../src/components/inputNumber/BaseInput.tsx","../src/components/inputNumber/InputNumber.tsx"],"names":["format","twMerge","clsx","jsx","jsxs","AccordionPrimitive","useState","X","Fragment","createPortal","useCallback","useMemo","SelectPrimitive","ChevronRight","CheckIcon","Triangle","React","Label","LabelPrimitive","FormProvider","React2","Controller","useFormContext","useFormState","Slot","CircleX","cva","React3","PopoverPrimitive","React4","ChevronLeft","parseISO","isValid","DatePicker","placeholder","CalendarIcon","React6","normalizeMonth","defaultDisplayFormatter","defaultValueFormatter","defaultValueParser","MonthPicker","useRef","useEffect","Search","Plus","Minus","parse","compareAsc","useForm","isAfter","CheckboxPrimitive","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","reSplitAlphaNumeric","threshold","ChevronUp","ChevronDown","Bug","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getExpandedRowModel","getGroupedRowModel","isSomeColumnsFilterable","flexRender","createElement","DialogPrimitive","XIcon","cn","Dialog","DialogPrimitive2","DialogPortal","DialogOverlay","DialogContent","DialogHeader","DialogTitle","DialogDescription","buttonVariants","Button","i18n","initReactI18next","create","useLayoutEffect","NodeViewWrapper","PluginKey","Suggestion","ReactDOM","editor","Plugin","tr","Node","mergeAttributes","ReactNodeViewRenderer","nodes","StarterKit","useEditor","EditorContent","Minimize2","Maximize2","TooltipPrimitive","useSortable","React17","CSS","useWatch","GripVertical","Info","CircleMinus","z","zodResolver","useFieldArray","useSensors","useSensor","PointerSensor","DndContext","closestCenter","restrictToParentElement","restrictToVerticalAxis","SortableContext","verticalListSortingStrategy","Image","React18","React19","UserIcon","Icon","CircleHelp","isValidElement","SheetPrimitive","RadioGroupPrimitive","DecoratorNode","HeadingNode","QuoteNode","ListNode","ListItemNode","LinkNode","CodeNode","createCommand","$createParagraphNode","$createTextNode","useLexicalComposerContext","$getSelection","$isRangeSelection","$isLinkNode","$getNodeByKey","$createLinkNode","$insertNodes","TOGGLE_LINK_COMMAND","$isListNode","$isHeadingNode","$isCodeNode","React23","mergeRegister","CAN_UNDO_COMMAND","COMMAND_PRIORITY_NORMAL","CAN_REDO_COMMAND","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_CRITICAL","selection","$setBlocksType","$createHeadingNode","REMOVE_LIST_COMMAND","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","$createQuoteNode","$createCodeNode","FORMAT_TEXT_COMMAND","FORMAT_ELEMENT_COMMAND","Undo","UNDO_COMMAND","Redo","REDO_COMMAND","Bold","Italic","Underline","Strikethrough","InlineCodeIcon","Pilcrow","Heading1","Heading2","Heading3","BulletListIcon","ListOrdered","QuoteIcon","CodeSquare","LinkIcon","Link2Off","ImageIcon","AlignLeft","AlignCenter","AlignRight","COMMAND_PRIORITY_EDITOR","forwardRef","RichText","html","$generateHtmlFromNodes","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","HistoryPlugin","ListPlugin","LinkPlugin","MarkdownShortcutPlugin","TRANSFORMERS","AutoFocusPlugin","OnChangePlugin","Separator","SeparatorPrimitive","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","SwitchPrimitive","TooltipPrimitive2","React24","open","PanelLeftIcon","croppedAreaPixels","Cropper","InputPrimitive","React26","inputVariants","Input","NumericFormat"],"mappings":"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","file":"index.js","sourcesContent":["export function isDefined(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyObject(value: any) {\n return !!value && Object.keys(value).length === 0 && value.constructor === Object;\n}\n\nexport type DebounceOptions = {\n leading?: boolean;\n trailing?: boolean;\n maxWait?: number;\n};\n\nexport type DebouncedFunction<T extends (...args: any[]) => any> = {\n (...args: Parameters<T>): ReturnType<T> | undefined;\n cancel: () => void;\n flush: () => ReturnType<T> | undefined;\n};\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number = 150,\n options?: DebounceOptions\n): DebouncedFunction<T> {\n let lastArgs: Parameters<T> | undefined,\n lastThis: any,\n maxWait: number | undefined,\n result: ReturnType<T> | undefined,\n timerId: ReturnType<typeof setTimeout> | undefined,\n lastCallTime: number | undefined,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func !== \"function\") {\n throw new TypeError(\"Expected a function\");\n }\n\n wait = Number(wait) || 0;\n\n if (options && typeof options === \"object\") {\n leading = !!options.leading;\n maxing = \"maxWait\" in options;\n maxWait = maxing ? Math.max(Number(options.maxWait) || 0, wait) : undefined;\n trailing = \"trailing\" in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs!;\n const thisArg = lastThis!;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time: number) {\n lastInvokeTime = time;\n timerId = setTimeout(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime ?? 0);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const remaining = wait - timeSinceLastCall;\n return maxing ? Math.min(remaining, (maxWait ?? 0) - timeSinceLastInvoke) : remaining;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime ?? 0);\n const timeSinceLastInvoke = time - lastInvokeTime;\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= (maxWait ?? 0))\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\n timerId = undefined;\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function debounced(this: any, ...args: Parameters<T>): ReturnType<T> | undefined {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n lastArgs = args;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n options?: Pick<DebounceOptions, \"leading\" | \"trailing\">\n): DebouncedFunction<T> {\n let leading = true,\n trailing = true;\n\n if (typeof func !== \"function\") {\n throw new TypeError(\"Expected a function\");\n }\n\n if (options) {\n leading = \"leading\" in options ? !!options.leading : leading;\n trailing = \"trailing\" in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n leading,\n maxWait: wait,\n trailing\n });\n}\n","import { isDefined } from \"./common\";\n\nexport function stripNullishObject<T extends Record<string, any>>(value: Partial<T>) {\n if (!isDefined(value)) {\n return {};\n }\n\n try {\n return Object.fromEntries(Object.entries(value).filter(([, propValue]) => isDefined(propValue)));\n } catch {\n return {};\n }\n}\n","const pad = (num: number): string => String(num).padStart(2, \"0\");\n/**\n * Formats an ISO date string according to a specified format.\n *\n * @param isoDateString The input ISO 8601 date string (e.g., '2025-09-22T08:47:15.627Z') or javascript Date object\n * @param format The format string (e.g., 'd/m/Y H:i:s')\n * - d / DD: Day (01-31)\n * - m / MM: Month (01-12)\n * - Y / YYYY: Full Year (e.g., 2025)\n * - H: Hour (00-23)\n * - i: Minute (00-59)\n * - s: Second (00-59)\n * @returns A formatted date string.\n */\nexport function formatISODate(isoDate: string | Date, format: string = \"d/m/Y H:i\"): string {\n const date = new Date(isoDate);\n\n if (isNaN(date.getTime())) {\n return \"Invalid Date\";\n }\n // Note: .getMonth() is 0-indexed (0-11), so we add 1.\n const parts = {\n d: pad(date.getDate()),\n m: pad(date.getMonth() + 1),\n Y: String(date.getFullYear()),\n H: pad(date.getHours()),\n i: pad(date.getMinutes()),\n s: pad(date.getSeconds())\n };\n\n const tokenMap: { [key: string]: PartKey } = {\n // Day\n d: \"d\",\n DD: \"d\",\n // Month\n m: \"m\",\n MM: \"m\",\n // Year\n Y: \"Y\", // 'Y' and 'YYYY' will both map to the 4-digit year\n YYYY: \"Y\",\n // Hour\n H: \"H\",\n // Minute\n i: \"i\",\n // Second\n s: \"s\"\n };\n\n // Define the type for our map keys for type safety\n type PartKey = keyof typeof parts;\n\n return format.replace(/YYYY|Y|MM|m|DD|d|H|i|s/g, (match) => {\n const partKey = tokenMap[match];\n return partKey ? parts[partKey] : match;\n });\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to intelligently combine class names using `clsx`\n * and resolve Tailwind CSS class conflicts using `tailwind-merge`.\n *\n * This function is commonly used in React or other frontend frameworks\n * to conditionally merge Tailwind classes and avoid class duplication or conflict,\n * especially when combining utility variants like `bg-red-500` and `bg-blue-500`.\n *\n * @param {...ClassValue[]} args - A variadic list of class values. Each can be:\n * - string: e.g. `\"px-4 py-2\"`\n * - object: e.g. `{ 'text-red-500': isError }`\n * - array: e.g. `['bg-blue-500', conditionalClass]`\n * These will be normalized and merged by `clsx`, then conflict-resolved by `tailwind-merge`.\n *\n * @returns {string} A single string of valid Tailwind class names with conflicts resolved.\n *\n * @example\n * ```tsx\n * <button className={cn(\"px-4 py-2\", isPrimary && \"bg-blue-500\", \"bg-red-500\")} />\n * // Result: \"px-4 py-2 bg-blue-500\" (if isPrimary is true)\n * ```\n *\n * @see https://github.com/lukeed/clsx - `clsx` docs for conditional class logic\n * @see https://github.com/dcastil/tailwind-merge - `tailwind-merge` docs for conflict resolution\n */\nexport default function cn(...args: ClassValue[]): string {\n return twMerge(clsx(args));\n}\n","import * as React from \"react\";\nimport type { SVGProps } from \"react\";\n\nconst ArrowIcon: React.FC<SVGProps<SVGSVGElement>> = ({\n width = \"1em\",\n height = \"1em\",\n fill = \"none\",\n ...props\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 9\"\n width={width}\n height={height}\n fill={fill}\n {...props}\n >\n <path d=\"M0.293 0.723L6.79 8.723L13.293 0.723H0.293Z\" fill={props.color || \"#127035\"} />\n </svg>\n);\n\nexport default ArrowIcon;\n","import type { SVGProps } from \"react\";\nconst SuiCalendarIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M8.504 11.205H5.837v2.4h2.667zm5.333 0h-2.666v2.4h2.666zm5.334 0h-2.667v2.4h2.667zm2.666-8.4h-1.333v-2.4h-2.667v2.4H7.171v-2.4H4.504v2.4H3.17c-1.48 0-2.654 1.08-2.654 2.4l-.013 16.8c0 1.32 1.187 2.4 2.667 2.4h18.666c1.467 0 2.667-1.08 2.667-2.4v-16.8c0-1.32-1.2-2.4-2.667-2.4m0 19.2H3.171v-13.2h18.666z\"\n />\n </svg>\n);\nexport default SuiCalendarIcon;\n","import type { SVGProps } from \"react\";\nconst SuiCheckIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#check_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M10.976.043c9.629-.793 16.248 9.583 11.392 18.002-4.252 7.37-14.736 8.025-19.907 1.26C-3.276 11.799 1.616.815 10.976.044m5.59 7.791c-.284.048-.555.25-.775.428l-5.159 4.944c-.188.033-2.31-2.268-2.865-2.51-1.413-.619-2.427 1.01-1.22 2.22.73.733 2.573 2.531 3.354 3.044.407.267.853.335 1.295.104 1.429-1.295 2.87-2.6 4.249-3.948.647-.633 1.63-1.47 2.186-2.112.825-.95.12-2.369-1.065-2.169\"\n />\n <path\n fill=\"#fff\"\n d=\"M16.567 7.835c1.186-.2 1.89 1.218 1.065 2.169-.557.64-1.54 1.479-2.187 2.112-1.379 1.348-2.818 2.653-4.248 3.948-.442.23-.889.162-1.295-.105-.782-.512-2.625-2.31-3.355-3.043-1.206-1.21-.192-2.84 1.221-2.221.556.243 2.677 2.544 2.865 2.51l5.16-4.943c.219-.178.489-.38.774-.429z\"\n />\n </g>\n <defs>\n <clipPath id=\"check_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiCheckIcon;\n","import type { SVGProps } from \"react\";\nconst SuiDotsVerticalIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n {...props}\n >\n <g clipPath=\"url(#dots-vertical_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M12.504 9.03a3.373 3.373 0 0 1 3.375 3.375 3.373 3.373 0 0 1-3.375 3.375 3.373 3.373 0 0 1-3.375-3.375 3.373 3.373 0 0 1 3.375-3.375M9.129 4.155a3.373 3.373 0 0 0 3.375 3.375 3.373 3.373 0 0 0 3.375-3.375A3.373 3.373 0 0 0 12.504.78a3.373 3.373 0 0 0-3.375 3.375m0 16.5a3.373 3.373 0 0 0 3.375 3.375 3.373 3.373 0 0 0 3.375-3.375 3.373 3.373 0 0 0-3.375-3.375 3.373 3.373 0 0 0-3.375 3.375\"\n />\n </g>\n <defs>\n <clipPath id=\"dots-vertical_svg__a\">\n <path fill=\"#fff\" d=\"M.504.405h24v24h-24z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiDotsVerticalIcon;\n","import type { SVGProps } from \"react\";\nconst SuiEmptyDataIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 184 152\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse fillOpacity=\".8\" cx=\"67.797\" cy=\"106.89\" rx=\"67.797\" ry=\"12.668\" fill=\"#B0DFAA\" />\n <path\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n fill=\"#CEE5D6\"\n />\n <path\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n fill=\"#DDEEE3\"\n transform=\"translate(13.56)\"\n />\n <path\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n fill=\"#F9F9F9\"\n />\n <path\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n fill=\"#DDEEE3\"\n />\n </g>\n <path\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n fill=\"#DDEEE3\"\n />\n <g transform=\"translate(149.65 15.383)\" fill=\"#FFF\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n);\nexport default SuiEmptyDataIcon;\n","import type { SVGProps } from \"react\";\nconst SuiExpandIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g fill=\"currentColor\" clipPath=\"url(#expand_svg__a)\">\n <path d=\"M11.674.038c.69-.18 1.498.305 1.69 1.2.283 6.934.043 13.962.122 20.93-.128 2.08-2.27 2.537-2.852.602-.282-6.934-.042-13.962-.122-20.93.072-.855.481-1.623 1.163-1.802M19.93 10.11c.024-.474-.188-2.095.498-1.842L24 11.947l-.2.504-3.37 3.288c-.687.252-.475-1.368-.5-1.843h-4.312c-.187 0-.664-.575-.718-.852-.066-.33-.066-1.751 0-2.083.054-.277.531-.852.718-.852h4.313M4.07 13.898c-.025.473.187 2.095-.5 1.842L0 12.06l.2-.504 3.37-3.288c.687-.253.475 1.367.5 1.842h4.312c.187 0 .664.576.718.852.066.33.066 1.752 0 2.084-.054.276-.531.852-.718.852z\" />\n </g>\n <defs>\n <clipPath id=\"expand_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiExpandIcon;\n","import type { SVGProps } from \"react\";\nconst SuiFilterIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#filter_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M.29.332a.85.85 0 0 0-.258.505c-.057.443-.053 2.439.125 2.752l8.58 8.904c.236 2.44-.221 5.164.023 7.57.049.464.147.525.494.83.675.59 3.539 2.57 4.326 2.94s1.45.15 1.654-.619l.022-10.721 8.585-8.904c.178-.317.187-2.313.13-2.752-.085-.639-.748-.793-1.352-.838H1.379C1.034.027.545.105.29.332\"\n />\n </g>\n <defs>\n <clipPath id=\"filter_svg__a\">\n <path fill=\"#fff\" d=\"M24-.001H0v24h24z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiFilterIcon;\n","import React from \"react\";\n\nconst NotFoundIcon: React.FC<React.SVGProps<SVGSVGElement>> = ({\n width = 24,\n height = 24,\n fill = \"currentColor\",\n className = \"\",\n ...props\n}) => (\n <svg\n viewBox=\"0 0 106 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width={width}\n height={height}\n fill={fill}\n className={className}\n {...props}\n >\n <path\n d=\"M44.7381 99.6137C69.3718 99.6137 89.3413 95.8824 89.3413 91.2795C89.3413 86.6767 69.3718 82.9453 44.7381 82.9453C20.1043 82.9453 0.134766 86.6767 0.134766 91.2795C0.134766 95.8824 20.1043 99.6137 44.7381 99.6137Z\"\n fill=\"#B0DFAA\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M80.4202 66.795L64.6801 47.4233C63.9249 46.5114 62.8209 45.9595 61.6584 45.9595H27.8163C26.6545 45.9595 25.5505 46.5114 24.7953 47.4233L9.05579 66.795V76.9154H80.4209V66.795H80.4202Z\"\n fill=\"#CEE5D6\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.3913 20.957H67.0841C67.782 20.957 68.4514 21.2343 68.9449 21.7278C69.4384 22.2213 69.7157 22.8907 69.7157 23.5886V84.9991C69.7157 85.6971 69.4384 86.3664 68.9449 86.8599C68.4514 87.3534 67.782 87.6307 67.0841 87.6307H22.3913C21.6934 87.6307 21.0241 87.3534 20.5305 86.8599C20.037 86.3664 19.7598 85.6971 19.7598 84.9991V23.5886C19.7598 22.8907 20.037 22.2213 20.5305 21.7278C21.0241 21.2343 21.6934 20.957 22.3913 20.957V20.957Z\"\n fill=\"#F9F9F9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M28.2124 27.5049H61.2631C61.612 27.5049 61.9467 27.6435 62.1935 27.8903C62.4402 28.137 62.5789 28.4717 62.5789 28.8207V45.2398C62.5789 45.5887 62.4402 45.9234 62.1935 46.1702C61.9467 46.4169 61.612 46.5555 61.2631 46.5555H28.2124C27.8634 46.5555 27.5288 46.4169 27.282 46.1702C27.0353 45.9234 26.8966 45.5887 26.8966 45.2398V28.8207C26.8966 28.4717 27.0353 28.137 27.282 27.8903C27.5288 27.6435 27.8634 27.5049 28.2124 27.5049ZM28.3848 53.6983H61.0907C61.4854 53.6983 61.8639 53.8551 62.143 54.1342C62.4221 54.4133 62.5789 54.7918 62.5789 55.1865C62.5789 55.5811 62.4221 55.9597 62.143 56.2387C61.8639 56.5178 61.4854 56.6746 61.0907 56.6746H28.3848C27.9901 56.6746 27.6116 56.5178 27.3325 56.2387C27.0534 55.9597 26.8966 55.5811 26.8966 55.1865C26.8966 54.7918 27.0534 54.4133 27.3325 54.1342C27.6116 53.8551 27.9901 53.6983 28.3848 53.6983ZM28.3848 61.4371H61.0907C61.4855 61.4371 61.8641 61.5939 62.1432 61.8731C62.4224 62.1522 62.5792 62.5308 62.5792 62.9256C62.5792 63.3204 62.4224 63.699 62.1432 63.9781C61.8641 64.2573 61.4855 64.4141 61.0907 64.4141H28.3848C27.99 64.4141 27.6114 64.2573 27.3323 63.9781C27.0531 63.699 26.8963 63.3204 26.8963 62.9256C26.8963 62.5308 27.0531 62.1522 27.3323 61.8731C27.6114 61.5939 27.99 61.4371 28.3848 61.4371ZM80.2749 90.0569C79.7651 92.0772 77.9743 93.5832 75.844 93.5832H13.6315C11.5012 93.5832 9.71044 92.0766 9.20123 90.0569C9.10411 89.6718 9.05505 89.2763 9.05518 88.8792V66.7957H26.3696C28.2822 66.7957 29.8236 68.4062 29.8236 70.3615V70.3878C29.8236 72.3424 31.3828 73.9207 33.2953 73.9207H56.1802C58.0927 73.9207 59.6519 72.3279 59.6519 70.3726V70.3647C59.6519 68.4095 61.1933 66.795 63.1058 66.795H80.4203V88.8799C80.4203 89.2858 80.3697 89.6799 80.2749 90.0569Z\"\n fill=\"#DDEEE3\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M82.4512 22.0242L77.9577 23.7676C77.8423 23.8125 77.7165 23.8239 77.5949 23.8005C77.4733 23.7771 77.3608 23.7198 77.2703 23.6353C77.1797 23.5507 77.1149 23.4424 77.0833 23.3226C77.0516 23.2029 77.0544 23.0767 77.0913 22.9584L78.3656 18.8749C76.6623 16.938 75.6624 14.5762 75.6624 12.0275C75.6624 5.45185 82.3189 0.121582 90.5308 0.121582C98.7406 0.121582 105.398 5.45185 105.398 12.0275C105.398 18.6032 98.7413 23.9334 90.5301 23.9334C87.5512 23.9334 84.7775 23.2321 82.4512 22.0242Z\"\n fill=\"#DDEEE3\"\n />\n <path\n d=\"M96.3874 14.1776C97.4226 14.1776 98.2617 13.3484 98.2617 12.3256C98.2617 11.3028 97.4226 10.4736 96.3874 10.4736C95.3522 10.4736 94.5131 11.3028 94.5131 12.3256C94.5131 13.3484 95.3522 14.1776 96.3874 14.1776Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M86.5479 13.9459H82.7992L84.7058 10.7051L86.5479 13.9459ZM88.8906 10.7051H92.1702V13.9459H88.8906V10.7051Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport default NotFoundIcon;\n","import type { SVGProps } from \"react\";\nconst SuiSettingIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.406 3.26c.052.055 1.256.701 1.331.714.42.067 1.478-.527 2.084-.543.446-.01 1.138.21 1.517.45.454.284 2.42 3.361 2.558 3.907.418 1.629-.495 2.56-1.73 3.405l-.041 1.45c.033.29 1.67 1.242 1.828 2.253.137.86-.036 1.259-.39 1.983-.396.814-1.743 3.053-2.499 3.402-1.53.709-1.898-.129-3.113-.24-.209-.018-1.517.651-1.591.77-.604.952-.065 2.5-1.857 3.028-.658.194-4.207.217-4.888.044-.408-.103-1.001-.517-1.239-.869-.397-.59-.523-2.011-.76-2.262-.044-.047-1.03-.587-1.135-.63-.594-.241-1.633.477-2.412.46-.462-.011-1.187-.283-1.553-.567S.236 16.682.12 16.227c-.384-1.5.199-2.004 1.125-2.958.157-.163.492-.297.567-.419.1-.165.129-1.378.075-1.585-.05-.188-1.661-1.127-1.821-2.146a4.4 4.4 0 0 1 0-1.106c.064-.396 1.772-3.268 2.1-3.662 1.103-1.316 2.62-.889 4.01-.364l1.375-.68C8.103 1.929 8.103.29 9.965.062c.805-.098 3.836-.093 4.535.114.4.116.908.478 1.143.827.394.59.523 2.012.76 2.263zm-3.134-.243h-2.52c-.1.567-.19 1.386-.418 1.9-.36.813-1.217.924-1.932 1.304-.4.212-1.008.788-1.387.858-.934.179-1.845-.32-2.724-.545l-1.125 1.89c0 .134 1.685 1.169 1.808 1.975.083.546-.139 1.006-.144 1.534-.008.649.289 1.264.088 1.908-.181.579-1.752 1.623-1.752 1.748l1.125 1.89c.93-.24 1.95-.812 2.933-.476.28.096.827.605 1.178.791.818.434 1.576.458 1.966 1.41.108.263.369 1.791.459 1.806l2.443-.015c.1-.566.19-1.386.417-1.9.362-.812 1.218-.923 1.932-1.303.4-.213 1.009-.79 1.388-.859.934-.178 1.844.32 2.724.546l1.124-1.89c0-.135-1.684-1.17-1.808-1.976-.082-.545.14-1.006.145-1.533.008-.65-.29-1.264-.088-1.908.18-.58 1.751-1.624 1.751-1.748l-1.124-1.89c-.931.238-1.95.812-2.933.475-.273-.093-.596-.499-.892-.654-1.816-.94-2.471-.89-2.636-3.338z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M11.705 8.245c5.107-.422 5.406 7.472.371 7.555-4.715.077-5.174-7.16-.371-7.555\"\n />\n </svg>\n);\nexport default SuiSettingIcon;\n","import type { SVGProps } from \"react\";\nconst SuiTriangleDownIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 15\"\n {...props}\n >\n <path fill=\"currentColor\" d=\"m0 0 11.994 15L24 0z\" />\n </svg>\n);\nexport default SuiTriangleDownIcon;\n","import type { SVGProps } from \"react\";\nconst SuiWarningIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n {...props}\n >\n <g clipPath=\"url(#warning_svg__a)\">\n <path\n fill=\"currentColor\"\n d=\"M10.603.061c8.692-.837 15.37 7.07 12.864 15.498-2.772 9.323-15.222 11.462-21.079 3.694C-3.134 11.93 1.465.942 10.603.061m2.858 15.103.734-9.092c.287-3.574-4.695-3.575-4.408 0l.734 9.092h2.941m-1.92 1.916c-1.858.384-1.743 3.333.079 3.55 3.047.364 2.714-4.13-.079-3.55\"\n />\n <path\n fill=\"#fff\"\n d=\"M13.46 15.163h-2.94l-.735-9.091c-.285-3.576 4.695-3.575 4.409 0zM11.54 17.079c2.794-.58 3.127 3.915.08 3.551-1.822-.217-1.938-3.166-.08-3.551\"\n />\n </g>\n <defs>\n <clipPath id=\"warning_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport default SuiWarningIcon;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cn } from \"@/utils\";\nimport { ArrowIcon } from \"@/components/icons\";\n\nfunction Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return <AccordionPrimitive.Item data-slot=\"accordion-item\" className={cn(\"\", className)} {...props} />;\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-0\",\n className\n )}\n {...props}\n >\n {children}\n <ArrowIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 w-4 rotate-90\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport clsx from \"clsx\";\n\ntype ExpandCollapseProps = {\n title: ReactNode;\n children: ReactNode;\n portalId: string;\n};\n\nconst ExpandCollapse: React.FC<ExpandCollapseProps> = ({ title, children, portalId }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const Panel = (\n <div\n className={clsx(\n \"overflow-hidden transition-all duration-500 ease-in-out bg-white border-b shadow-md w-full\",\n isOpen ? \"max-h-[700px] opacity-100\" : \"max-h-0 opacity-0\"\n )}\n >\n <div className=\"relative p-6\">\n <button\n onClick={() => setIsOpen(false)}\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700\"\n data-testid=\"advsearch-icon-close\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n {children}\n </div>\n </div>\n );\n\n return (\n <>\n {/* ปุ่ม trigger อยู่ตรงไหนก็ได้ */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"px-4 py-2 text-sm text-gray-700 hover:text-black\"\n data-testid=\"advsearch-icon-search\"\n >\n {title}\n </button>\n\n {/* Render panel */}\n {portalId && typeof document !== \"undefined\" ?\n document.getElementById(portalId) ?\n createPortal(Panel, document.getElementById(portalId)!)\n : null\n : Panel}\n </>\n );\n};\n\nexport default ExpandCollapse;\n","// advance-search/operatorMap.ts\nimport type { FieldType, OperatorValue } from \"./types\";\n\nexport const OPERATOR_MAP: Record<FieldType, OperatorValue[]> = {\n text: [\n \"contains\",\n \"equals\",\n \"beginsWith\",\n \"endsWith\",\n \"notEquals\",\n \"notBeginsWith\",\n \"notEndsWith\",\n \"notContains\"\n ],\n number: [\"equals\", \"notEquals\", \"gt\", \"gte\", \"lt\", \"lte\"],\n date: [\"on\", \"after\", \"before\", \"between\"],\n datetime: [\"on\", \"after\", \"before\", \"between\"],\n datemonth: [\"on\", \"after\", \"before\", \"between\"],\n checkbox: [\"is\", \"isNot\"],\n dropdown: [\"is\", \"isNot\"],\n lookup: [\"containsAny\", \"containsOnly\", \"containsAll\", \"notContains\"],\n uuid: [\"equals\", \"notEquals\", \"gt\", \"gte\", \"lt\", \"lte\"],\n json: [\"equals\", \"notEquals\", \"containsAny\"]\n};\n","// advance-search/hooks/useAdvanceSearch.ts\nimport { useCallback, useMemo, useState } from \"react\";\nimport { OPERATOR_MAP } from \"../operatorMap\";\nimport { FieldSchema, FieldType, OperatorValue, RowState } from \"../types\";\n\nfunction findField(fields: FieldSchema[], name: string): FieldSchema | undefined {\n return fields.find((f) => f.name === name);\n}\n\nfunction getFieldType(fields: FieldSchema[], name: string): FieldType {\n return findField(fields, name)?.type ?? \"text\";\n}\n\nfunction firstOperatorFor(fields: FieldSchema[], fieldName: string): OperatorValue {\n const t = getFieldType(fields, fieldName);\n return OPERATOR_MAP[t][0];\n}\n\nfunction makeNewRow(field: FieldSchema): RowState {\n const op = OPERATOR_MAP[field.type][0];\n if (op === \"between\") {\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: \"between\",\n value: \"\",\n value2: \"\",\n multiTableSearch: field.multiTableSearch,\n lookupFieldName: field.lookupFieldName\n };\n }\n if (field.type === \"json\") {\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: op,\n value: \"\",\n multiTableSearch: field.multiTableSearch,\n jsonPath: field.jsonPath,\n lookupFieldName: field.lookupFieldName\n };\n }\n return {\n id: crypto.randomUUID(),\n fieldName: field.name,\n fieldType: field.type,\n operator: op,\n value: \"\",\n multiTableSearch: field.multiTableSearch,\n lookupFieldName: field.lookupFieldName\n };\n}\n\nexport interface UseAdvanceSearchOptions {\n fields: FieldSchema[];\n limitRows?: number;\n}\n\nexport function useAdvanceSearch({ fields, limitRows }: UseAdvanceSearchOptions) {\n const [rows, setRows] = useState<RowState[]>([makeNewRow(fields[0])]);\n\n const updateRows = useCallback((next: RowState[]) => {\n setRows(next);\n }, []);\n\n const operatorsForField = useCallback(\n (fieldName: string): OperatorValue[] => {\n const t = getFieldType(fields, fieldName);\n return OPERATOR_MAP[t];\n },\n [fields]\n );\n\n const addRow = useCallback(() => {\n if (limitRows && rows.length >= limitRows) return;\n\n const lastRow = rows[rows.length - 1];\n const lastField = fields.find((f) => f.name === lastRow?.fieldName) ?? fields[0];\n updateRows([...rows, makeNewRow(lastField)]);\n }, [rows, fields, updateRows, limitRows]);\n\n const removeRow = useCallback(\n (id: string) => {\n if (rows.length === 1) return;\n updateRows(rows.filter((r) => r.id !== id));\n },\n [rows, updateRows]\n );\n\n const clearRow = useCallback(\n (id: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n const nextOp = firstOperatorFor(fields, r.fieldName);\n return nextOp === \"between\" ?\n {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n operator: \"between\",\n value: \"\",\n value2: \"\",\n multiTableSearch: r.multiTableSearch,\n jsonPath: r.jsonPath,\n lookupFieldName: r.lookupFieldName\n }\n : {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n operator: nextOp,\n value: \"\",\n multiTableSearch: r.multiTableSearch,\n jsonPath: r.jsonPath,\n lookupFieldName: r.lookupFieldName\n };\n })\n );\n },\n [rows, fields, updateRows]\n );\n\n const clearAllRow = useCallback(() => {\n updateRows([makeNewRow(fields[0])]);\n }, [fields, updateRows]);\n\n const changeField = useCallback(\n (id: string, fieldName: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n const newRow = makeNewRow(fields.find((f) => f.name === fieldName) || fields[0]);\n return { ...newRow, id: r.id }; // new row data but same id\n })\n );\n },\n [rows, fields, updateRows]\n );\n\n const changeOperator = useCallback(\n (id: string, operator: OperatorValue) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n if (operator === \"between\") {\n return {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n multiTableSearch: r.multiTableSearch,\n lookupFieldName: r.lookupFieldName,\n jsonPath: r.jsonPath,\n operator,\n value: \"\",\n value2: \"\"\n };\n }\n return {\n id: r.id,\n fieldName: r.fieldName,\n fieldType: r.fieldType,\n multiTableSearch: r.multiTableSearch,\n lookupFieldName: r.lookupFieldName,\n jsonPath: r.jsonPath,\n operator,\n value: \"\"\n };\n })\n );\n },\n [rows, updateRows]\n );\n\n const changeValue = useCallback(\n (id: string, which: \"value\" | \"value2\", val: string) => {\n updateRows(\n rows.map((r) => {\n if (r.id !== id) return r;\n if (which === \"value2\" && r.operator !== \"between\") return r;\n return { ...r, [which]: val } as RowState;\n })\n );\n },\n [rows, updateRows]\n );\n\n const fieldOptions = useMemo(\n () =>\n fields.map((f) => ({\n value: f.name,\n label: f.label ?? f.name\n })),\n [fields]\n );\n\n return {\n rows,\n addRow,\n removeRow,\n clearRow,\n clearAllRow,\n changeField,\n changeOperator,\n changeValue,\n operatorsForField,\n fieldOptions\n };\n}\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, Triangle, ChevronRight } from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-placeholder:text-gray-00 [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[state=open]:border-ring data-[state=open]:[&_svg]:text-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronRight className=\"h-4 w-4 rotate-90 text-gray-300\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"m-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"hover:bg-[#EAF5EE] hover:text-[#379A2A] [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 \",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-2 hover:text-[#379A2A]\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <Triangle className=\"size-2 fill-current\" style={{ transform: \"rotate(0deg)\" }} />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <Triangle className=\"size-2 fill-current\" style={{ transform: \"rotate(180deg)\" }} />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue\n};\n","import React from \"react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport type { Option, RowState } from \"@/components/advanceSearch/types\";\n\nexport const FieldSelect: React.FC<{\n row: RowState;\n fieldOptions: Option[];\n onChangeField: (fieldName: string) => void;\n}> = ({ row, fieldOptions, onChangeField }) => (\n <div className=\"w-full\">\n <Select value={row.fieldName} onValueChange={(value) => onChangeField(value)}>\n <SelectTrigger\n className=\"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\"\n data-testid=\"advsearch-dropdown-selectfield\"\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent className=\"w-full min-w-[unset]\">\n {fieldOptions.map((f) => (\n <SelectItem key={f.value} value={f.value}>\n {f.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n);\n","// advance-search/types.ts\nexport type FieldType =\n | \"text\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"datemonth\"\n | \"checkbox\"\n | \"dropdown\"\n | \"lookup\"\n | \"uuid\"\n | \"json\";\n\nexport type Option = { value: string; label: string };\n\nexport interface FieldSchemaBase<T extends FieldType> {\n name: string;\n type: T;\n label?: string;\n multiTableSearch?: boolean;\n lookupFieldName?: string;\n}\n\nexport interface DropdownFieldSchema extends FieldSchemaBase<\"dropdown\"> {\n options: Option[];\n}\nexport type TextFieldSchema = FieldSchemaBase<\"text\">;\nexport type NumberFieldSchema = FieldSchemaBase<\"number\">;\nexport type DateFieldSchema = FieldSchemaBase<\"date\">;\nexport type DateTimeFieldSchema = FieldSchemaBase<\"datetime\">;\nexport type DateMonthFieldSchema = FieldSchemaBase<\"datemonth\">;\nexport type CheckboxFieldSchema = FieldSchemaBase<\"checkbox\">;\nexport interface LookupFieldSchema extends FieldSchemaBase<\"lookup\"> {\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<Option[]>;\n suggestionDebounce?: number;\n placeholder?: string;\n noOptionsMessage?: string;\n loadingMessage?: string;\n}\nexport type UUIDFieldSchema = FieldSchemaBase<\"uuid\">;\nexport interface JSONFieldSchema extends FieldSchemaBase<\"json\"> {\n jsonPath?: string[];\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<Option[]>;\n suggestionDebounce?: number;\n placeholder?: string;\n noOptionsMessage?: string;\n loadingMessage?: string;\n}\n\nexport type FieldSchema =\n | DropdownFieldSchema\n | TextFieldSchema\n | NumberFieldSchema\n | DateFieldSchema\n | DateTimeFieldSchema\n | DateMonthFieldSchema\n | CheckboxFieldSchema\n | LookupFieldSchema\n | UUIDFieldSchema\n | JSONFieldSchema;\n\n// ตัวดำเนินการทั้งหมดที่รองรับ\nexport type OperatorValue =\n | \"contains\"\n | \"equals\"\n | \"beginsWith\"\n | \"endsWith\"\n | \"notEquals\"\n | \"notBeginsWith\"\n | \"notEndsWith\"\n | \"notContains\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"on\"\n | \"after\"\n | \"before\"\n | \"between\"\n | \"is\"\n | \"isNot\"\n | \"containsAny\"\n | \"containsOnly\"\n | \"containsAll\";\n\n// ใช้เป็น source of truth สำหรับ label\nexport const OPERATOR_LABEL: Record<OperatorValue, string> = {\n contains: \"Contains\",\n equals: \"Equals\",\n beginsWith: \"Begins with\",\n endsWith: \"Ends with\",\n notEquals: \"Not equals\",\n notBeginsWith: \"Not begins with\",\n notEndsWith: \"Not ends with\",\n notContains: \"Not contains\",\n gt: \"Greater than\",\n gte: \"Greater or equal\",\n lt: \"Less than\",\n lte: \"Less or equal\",\n on: \"On\",\n after: \"After\",\n before: \"Before\",\n between: \"Between\",\n is: \"Is\",\n isNot: \"Is not\",\n containsAny: \"Contains at least one of\",\n containsOnly: \"Contains only\",\n containsAll: \"Contains all of\"\n};\n\nexport type RowState =\n | {\n id: string;\n fieldName: string;\n fieldType: FieldType;\n operator: Exclude<OperatorValue, \"between\">;\n value: string | any[];\n value2?: undefined;\n multiTableSearch?: boolean;\n jsonPath?: string[];\n lookupFieldName?: string;\n }\n | {\n id: string;\n fieldName: string;\n fieldType: FieldType;\n operator: \"between\";\n value: string; // ช่องจาก\n value2: string; // ช่องถึง\n multiTableSearch?: boolean;\n jsonPath?: string[];\n lookupFieldName?: string;\n };\n\nexport interface Params {\n AND: Record<string, unknown>[];\n}\n\nexport interface AdvanceSearchProps {\n fields: FieldSchema[];\n portalId: string;\n limitRows?: number;\n iconColor?: string;\n onSearch?: (param: Params) => void;\n onClear?: () => void;\n shortDateFormat?: string;\n}\n\nexport interface ParamsBuilder {\n build(row: RowState): object;\n}\n","import React from \"react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport type { OperatorValue, RowState } from \"@/components/advanceSearch/types\";\nimport { OPERATOR_LABEL } from \"@/components/advanceSearch/types\";\n\nexport const OperatorSelect: React.FC<{\n row: RowState;\n operators: OperatorValue[];\n onChangeOperator: (op: OperatorValue) => void;\n error?: string;\n}> = ({ row, operators, onChangeOperator, error }) => {\n React.useEffect(() => {\n if (!operators.length) return;\n if (!operators.includes(row.operator)) {\n onChangeOperator(operators[0]);\n }\n }, [operators, row.operator, onChangeOperator]);\n\n return (\n <div className=\"w-full\">\n <Select value={row.operator} onValueChange={(value) => onChangeOperator(value as OperatorValue)}>\n <SelectTrigger\n aria-invalid={error ? \"true\" : \"false\"}\n className={`w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0 ${\n error ? \"border border-red-500\" : \"\"\n }`}\n data-testid=\"advsearch-dropdown-cond\"\n >\n <SelectValue placeholder=\"Select operator\" />\n </SelectTrigger>\n <SelectContent className=\"w-full min-w-[unset]\">\n {operators.map((op) => (\n <SelectItem key={op} value={op}>\n {OPERATOR_LABEL[op] ?? op}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && <span className=\"mt-1 block text-xs text-red-600\">{error}</span>}\n </div>\n );\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"@/utils\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues\n} from \"react-hook-form\";\n\nimport { CircleX } from \"lucide-react\";\nimport { cn } from \"@/utils\";\nimport { Label } from \"@/components/ui/label\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn(\"grid gap-2\", className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? \"\") : props.children;\n\n if (!body) return null;\n\n return (\n <div\n data-slot=\"form-message\"\n className={cn(\"text-xs leading-tight mt-1 flex items-center gap-1.5 text-destructive\", className)}\n id={formMessageId}\n {...props}\n >\n <CircleX className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <p>{body}</p>\n </div>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/utils\";\n\nconst spinnerVariants = cva(\"relative inline-block aspect-square transform-gpu\", {\n variants: {\n variant: {\n primary: \"[&>div]:bg-[#77ab8a]\",\n secondary: \"[&>div]:bg-[#ab9555]\",\n destructive: \"[&>div]:bg-destructive\",\n muted: \"[&>div]:bg-muted-foreground\"\n },\n size: {\n sm: \"size-7\",\n default: \"size-8\",\n lg: \"size-9\",\n xl: \"size-10\",\n \"2xl\": \"size-12\"\n }\n },\n defaultVariants: { variant: \"primary\", size: \"default\" }\n});\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<VariantProps<typeof spinnerVariants>, \"size\"> {\n className?: string;\n size?: VariantProps<typeof spinnerVariants>[\"size\"] | number;\n}\n\nconst Spinner = ({ className, variant, size = \"default\", ...props }: SpinnerProps) => (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n typeof size === \"string\" ? spinnerVariants({ variant, size }) : spinnerVariants({ variant }),\n className\n )}\n style={typeof size === \"number\" ? { width: size, height: size } : undefined}\n {...props}\n >\n {Array.from({ length: 12 }).map((_, i) => (\n <div\n key={i}\n className=\"animate-sus-spinner absolute left-[46.5%] top-[4.4%] h-[24%] w-[7%] origin-[center_190%] rounded-full opacity-[0.1] will-change-transform\"\n style={{\n transform: `rotate(${i * 30}deg)`,\n animationDelay: `${(i * 0.083).toFixed(3)}s`\n }}\n aria-hidden=\"true\"\n />\n ))}\n <span className=\"sr-only\">Loading...</span>\n </div>\n);\n\nexport { Spinner, spinnerVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CircleX } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\nimport { Spinner } from \"@/components/ui/spinner\";\n\nexport type InputPrimitiveProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst InputPrimitive = React.forwardRef<HTMLInputElement, InputPrimitiveProps>(\n ({ className, type = \"text\", ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n className={cn(\n \"placeholder:text-neutral-400 text-neutral-900 flex h-10 w-full min-w-0 items-center rounded-lg border bg-white px-4 text-sm transition-colors outline-none file:inline-flex file:h-7 file:rounded-md file:border-0 file:bg-transparent file:px-2 file:text-sm file:font-medium hover:border-neutral-500 focus-visible:border-neutral-900 focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-400 disabled:border-neutral-200 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n\nconst inputVariants = cva(\"\", {\n variants: {\n controlSize: {\n sm: \"h-9 rounded-md px-3 text-sm\",\n md: \"h-10 rounded-lg px-4 text-sm\",\n lg: \"h-12 rounded-xl px-5 text-base\"\n },\n fullWidth: {\n true: \"w-full\",\n false: \"w-auto\"\n },\n appearance: {\n filled: \"border-neutral-200 hover:border-neutral-500 focus-visible:border-neutral-900\",\n unfilled: \"bg-white border-neutral-300 hover:border-neutral-500 focus-visible:border-neutral-900\"\n }\n },\n defaultVariants: {\n controlSize: \"md\",\n fullWidth: true,\n appearance: \"filled\"\n }\n});\n\nexport type InputProps = Omit<InputPrimitiveProps, \"size\" | \"prefix\"> &\n VariantProps<typeof inputVariants> & {\n prefix?: React.ReactNode;\n prefixProps?: React.HTMLAttributes<HTMLSpanElement>;\n prefixInteractive?: boolean;\n suffix?: React.ReactNode;\n suffixProps?: React.HTMLAttributes<HTMLSpanElement>;\n suffixInteractive?: boolean;\n wrapperClassName?: string;\n invalid?: boolean;\n loading?: boolean;\n loadingIcon?: React.ReactNode;\n validationMessage?: React.ReactNode;\n validationIcon?: React.ReactNode;\n validationMessageProps?: React.HTMLAttributes<HTMLParagraphElement>;\n onValueChange?: (value: string) => void;\n };\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n wrapperClassName,\n controlSize,\n fullWidth,\n appearance,\n prefix,\n prefixProps,\n prefixInteractive,\n suffix,\n suffixProps,\n suffixInteractive,\n invalid,\n loading,\n loadingIcon,\n validationMessage,\n validationIcon,\n validationMessageProps,\n onValueChange,\n type = \"text\",\n ...rest\n },\n ref\n ) => {\n const inputProps = rest;\n\n const hasPrefix = Boolean(prefix);\n const hasSuffix = Boolean(suffix) || loading;\n const isFullWidth = fullWidth ?? true;\n\n const {\n \"aria-invalid\": ariaInvalidProp,\n \"aria-describedby\": ariaDescribedByProp,\n onChange: onChangeProp\n } = rest;\n\n const ariaInvalid = invalid ?? ariaInvalidProp;\n const messageId = React.useId();\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (event) => {\n onChangeProp?.(event);\n onValueChange?.(event.target.value);\n },\n [onChangeProp, onValueChange]\n );\n\n const resolvedAriaInvalid =\n typeof ariaInvalid === \"string\" ? ariaInvalid\n : ariaInvalid ? true\n : undefined;\n\n const describedBy =\n validationMessage ?\n [ariaDescribedByProp, messageId].filter(Boolean).join(\" \")\n : ariaDescribedByProp;\n\n const controlWrapperClassName = cn(\n \"relative inline-flex items-center\",\n isFullWidth ? \"w-full\" : \"w-fit\",\n !validationMessage && wrapperClassName\n );\n\n const inputElement = (\n <InputPrimitive\n ref={ref}\n type={type}\n data-slot=\"input\"\n className={cn(\n inputVariants({ controlSize, fullWidth: isFullWidth, appearance }),\n hasPrefix && \"pl-10\",\n hasSuffix && \"pr-10\",\n className\n )}\n aria-invalid={resolvedAriaInvalid}\n aria-describedby={describedBy || undefined}\n onChange={handleChange}\n {...inputProps}\n />\n );\n\n if (!hasPrefix && !hasSuffix && !validationMessage) {\n return inputElement;\n }\n\n const { className: prefixClassName, ...prefixRest } = prefixProps ?? {};\n const { className: suffixClassName, ...suffixRest } = suffixProps ?? {};\n const { className: validationMessageClassName, ...validationMessageRest } =\n validationMessageProps ?? {};\n\n const suffixContent = (\n <>\n {suffix}\n {loading && (loadingIcon ?? <Spinner size={16} variant=\"muted\" />)}\n </>\n );\n\n const inputWithAffixes = (\n <div data-slot=\"input-wrapper\" className={controlWrapperClassName}>\n {hasPrefix && (\n <span\n {...prefixRest}\n className={cn(\n \"absolute left-3 top-1/2 -translate-y-1/2 inline-flex items-center text-muted-foreground\",\n !prefixInteractive && \"pointer-events-none\",\n prefixClassName\n )}\n >\n {prefix}\n </span>\n )}\n\n {inputElement}\n\n {hasSuffix && (\n <span\n {...suffixRest}\n className={cn(\n \"absolute right-3 top-1/2 -translate-y-1/2 inline-flex items-center gap-2 text-muted-foreground\",\n !suffixInteractive && \"pointer-events-none\",\n suffixClassName\n )}\n >\n {suffixContent}\n </span>\n )}\n </div>\n );\n\n if (!validationMessage) {\n return inputWithAffixes;\n }\n\n return (\n <div className={cn(\"flex flex-col gap-1\", isFullWidth ? \"w-full\" : \"w-fit\", wrapperClassName)}>\n {inputWithAffixes}\n <p\n id={messageId}\n {...validationMessageRest}\n className={cn(\"flex items-center gap-2 text-sm text-destructive\", validationMessageClassName)}\n >\n {validationIcon ?? <CircleX className=\"size-4\" />}\n <span>{validationMessage}</span>\n </p>\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { InputPrimitive, Input, inputVariants };\n","import React from \"react\";\nimport { X } from \"lucide-react\";\nimport \"@/styles/index.css\";\n\ntype ClearButtonProps = {\n onClick?: () => void;\n title?: string;\n ariaLabel?: string;\n className?: string;\n};\n\nexport const ClearButton: React.FC<ClearButtonProps> = ({\n onClick,\n title = \"Clear\",\n ariaLabel = \"Clear value\",\n className = \"\"\n}) => {\n const triggerClear = () => {\n if (onClick) onClick();\n };\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n triggerClear();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.stopPropagation();\n triggerClear();\n }\n };\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`clear-button ${className}`.trim()}\n aria-label={ariaLabel}\n title={title}\n >\n <X className=\"icon\" />\n </span>\n );\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionTextInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative\">\n <FormControl>\n <Input\n {...field}\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"text\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n data-testid=\"advsearch-input-value\"\n />\n </FormControl>\n\n <span className=\"absolute inset-y-0 right-3 flex items-center\">\n {field.value && <ClearButton onClick={handleClear} />}\n </span>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionNumberInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative\">\n <FormControl>\n <Input\n {...field}\n type=\"number\"\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"numeric\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 \"\n />\n </FormControl>\n\n <span className=\"absolute inset-y-0 right-3 flex items-center\">\n {field.value && <ClearButton onClick={handleClear} />}\n </span>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/utils\";\n\nconst buttonVariants = cva(\n \"disabled:bg-[#E1E1E1] disabled:text-[#BBBBBB] inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"bg-sus-primary-1 hover:bg-sus-primary-1/50 text-primary-foreground shadow-xs hover:bg-sus-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n cancel:\n \"border bg-[#8B8B8B] text-accent-foreground shadow-xs hover:bg-accent hover:text-black dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n defaultSelect: \"bg-primary text-primary-foreground shadow-xs hover:bg-sus-primary/90 py-2\",\n defaultOutline:\n \"border bg-background py-2 shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n warning:\n \"border bg-[#f9d629] text-black shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-[#f9d629] dark:hover:bg-[#f9d629]/50\"\n },\n size: {\n default: \"h-9 px-4 has-[>svg]:px-3\",\n option: \"py-5 h-9 px-4 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-5\",\n \"icon-sm\": \"size-[22px]\",\n \"icon-md\": \"size-7\",\n \"icon-lg\": \"size-10\"\n },\n active: {\n true: \"bg-sus-primary-1 text-white\",\n false: \"\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n active,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n active?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className, active }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"@/utils\";\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverArrow(props: React.ComponentProps<typeof PopoverPrimitive.Arrow>) {\n return <PopoverPrimitive.Arrow {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverArrow };\n","\"use client\";\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"@/utils\";\n\ntype ButtonVariant =\n | \"default\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"destructive\"\n | \"secondary\"\n | null\n | undefined;\n\ntype DatePickerProps = {\n selectedDate?: Date;\n onDateSelect?: (date: Date) => void;\n onMonthForward?: () => void;\n onMonthBackward?: () => void;\n callbacks?: {\n yearLabel?: (year: number) => string;\n monthLabel?: (year: number, monthIndex: number) => string; // 0-11\n dayLabel?: (date: Date) => string | number; // สำหรับ custom แสดงเลขวัน\n weekdayLabel?: (index0Mon: number) => string; // 0 = Mon ... 6 = Sun\n };\n variant?: {\n day?: {\n main?: ButtonVariant;\n selected?: ButtonVariant;\n outside?: ButtonVariant; // วันที่นอกเดือน (optional)\n today?: ButtonVariant; // วันนี้ (optional)\n };\n chevrons?: ButtonVariant;\n };\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/** ---------- Utils ---------- */\nconst isSameDay = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n\nconst startOfDay = (d: Date) => {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n};\n\nconst clampToDay = (d?: Date) => (d ? startOfDay(d) : undefined);\n\nconst addMonths = (date: Date, n: number) => {\n const d = new Date(date);\n d.setMonth(d.getMonth() + n);\n return d;\n};\n\nconst daysInMonth = (year: number, monthIndex: number) => new Date(year, monthIndex + 1, 0).getDate();\n\nconst DEFAULT_MONTH_FORMATTER = new Intl.DateTimeFormat(\"en-US\", { month: \"short\" });\n\n/** คืน array 6 แถว x 7 คอลัมน์ ของวันที่ (รวมวันนอกเดือนเพื่อเติมตาราง) */\nfunction buildCalendarGrid(displayed: Date, weekStartsOnMonday = true) {\n const year = displayed.getFullYear();\n const month = displayed.getMonth();\n\n const firstOfMonth = new Date(year, month, 1);\n const firstWeekday = firstOfMonth.getDay(); // 0 Sun - 6 Sat\n const offset =\n weekStartsOnMonday ?\n firstWeekday === 0 ?\n 6\n : firstWeekday - 1\n : firstWeekday;\n\n const totalDays = daysInMonth(year, month);\n\n const prevMonth = addMonths(firstOfMonth, -1);\n const prevMonthDays = daysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());\n\n const grid: { date: Date; inCurrentMonth: boolean }[] = [];\n\n // เติมวันของเดือนก่อนหน้า\n for (let i = offset - 1; i >= 0; i--) {\n const d = new Date(prevMonth.getFullYear(), prevMonth.getMonth(), prevMonthDays - i);\n grid.push({ date: d, inCurrentMonth: false });\n }\n // เติมวันของเดือนนี้\n for (let d = 1; d <= totalDays; d++) {\n grid.push({ date: new Date(year, month, d), inCurrentMonth: true });\n }\n // เติมวันของเดือนถัดไปให้ครบ 42 ช่อง\n while (grid.length < 42) {\n const last = grid[grid.length - 1].date;\n const next = new Date(last);\n next.setDate(last.getDate() + 1);\n grid.push({ date: next, inCurrentMonth: false });\n }\n\n // แบ่งเป็น 6 แถว\n const rows: (typeof grid)[] = [];\n for (let r = 0; r < 6; r++) rows.push(grid.slice(r * 7, r * 7 + 7));\n return rows;\n}\n\n/** ---------- Component ---------- */\nexport function DatePicker({\n selectedDate,\n onDateSelect,\n callbacks,\n onMonthBackward,\n onMonthForward,\n variant,\n minDate,\n maxDate,\n disabledDates,\n className,\n ...props\n}: DatePickerProps) {\n const today = React.useMemo(() => startOfDay(new Date()), []);\n const [displayed, setDisplayed] = React.useState<Date>(\n selectedDate ? new Date(selectedDate) : new Date()\n );\n\n // sanitize\n minDate = clampToDay(minDate);\n maxDate = clampToDay(maxDate);\n\n const disabledSet = React.useMemo(() => {\n const s = new Set<string>();\n disabledDates?.forEach((d) => s.add(startOfDay(d).toISOString()));\n return s;\n }, [disabledDates]);\n\n const displayYear = displayed.getFullYear();\n const displayMonth = displayed.getMonth();\n\n const weekdays = React.useMemo(() => {\n // จันทร์-อาทิตย์\n const labels: string[] = [];\n for (let i = 0; i < 7; i++) {\n const idx = i; // 0 Mon ... 6 Sun\n const fallback = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"][idx];\n labels.push(callbacks?.weekdayLabel?.(idx) ?? fallback);\n }\n return labels;\n }, [callbacks]);\n\n const grid = React.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);\n\n const isDateDisabled = (date: Date) => {\n const d = startOfDay(date);\n if (minDate && d < minDate) return true;\n if (maxDate && d > maxDate) return true;\n if (disabledSet.has(d.toISOString())) return true;\n return false;\n };\n\n const minYear = minDate?.getFullYear();\n const maxYear = maxDate?.getFullYear();\n\n const getMonthLabel = React.useCallback(\n (year: number, monthIndex: number) => {\n const label = callbacks?.monthLabel?.(year, monthIndex);\n if (label === null || label === undefined) {\n return DEFAULT_MONTH_FORMATTER.format(new Date(year, monthIndex, 1));\n }\n return label;\n },\n [callbacks]\n );\n\n const getYearLabel = React.useCallback(\n (year: number) => {\n const label = callbacks?.yearLabel?.(year);\n if (label === null || label === undefined) return String(year);\n return typeof label === \"string\" ? label : String(label);\n },\n [callbacks]\n );\n\n const clampMonthToBounds = React.useCallback(\n (year: number, monthIndex: number) => {\n let output = monthIndex;\n if (typeof minYear === \"number\" && year === minYear && minDate) {\n const boundary = minDate.getMonth();\n if (output < boundary) output = boundary;\n }\n if (typeof maxYear === \"number\" && year === maxYear && maxDate) {\n const boundary = maxDate.getMonth();\n if (output > boundary) output = boundary;\n }\n return output;\n },\n [maxDate, minDate, maxYear, minYear]\n );\n\n const yearOptions = React.useMemo(() => {\n const fallbackWindow = 50;\n const start = typeof minYear === \"number\" ? minYear : displayYear - fallbackWindow;\n const end = typeof maxYear === \"number\" ? maxYear : displayYear + fallbackWindow;\n\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n\n if (!years.includes(displayYear)) {\n years.push(displayYear);\n years.sort((a, b) => a - b);\n }\n\n if (selectedDate) {\n const selectedYear = selectedDate.getFullYear();\n if (!years.includes(selectedYear)) {\n years.push(selectedYear);\n years.sort((a, b) => a - b);\n }\n }\n\n return years;\n }, [displayYear, maxYear, minYear, selectedDate]);\n\n const monthOptions = React.useMemo(() => {\n const months = Array.from({ length: 12 }, (_, monthIndex) => {\n const disabled =\n (typeof minYear === \"number\" &&\n displayYear === minYear &&\n minDate &&\n monthIndex < minDate.getMonth()) ||\n (typeof maxYear === \"number\" &&\n displayYear === maxYear &&\n maxDate &&\n monthIndex > maxDate.getMonth());\n\n return {\n value: monthIndex,\n disabled,\n label: getMonthLabel(displayYear, monthIndex)\n };\n });\n\n const currentMonthExists = months.some((option) => option.value === displayMonth);\n if (!currentMonthExists) {\n months.push({\n value: displayMonth,\n disabled: false,\n label: getMonthLabel(displayYear, displayMonth)\n });\n }\n\n return months\n .sort((a, b) => a.value - b.value)\n .filter((option, index, arr) => index === 0 || option.value !== arr[index - 1].value);\n }, [displayMonth, displayYear, getMonthLabel, maxDate, maxYear, minDate, minYear]);\n\n const handleMonthSelect = React.useCallback((nextValue: string) => {\n const nextMonth = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextMonth)) return;\n\n setDisplayed((prev) => {\n const next = new Date(prev);\n next.setDate(1);\n next.setMonth(nextMonth);\n return next;\n });\n }, []);\n\n const handleYearSelect = React.useCallback(\n (nextValue: string) => {\n const nextYear = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextYear)) return;\n\n setDisplayed((prev) => {\n const next = new Date(prev);\n next.setFullYear(nextYear);\n const adjustedMonth = clampMonthToBounds(nextYear, next.getMonth());\n next.setMonth(adjustedMonth);\n next.setDate(1);\n return next;\n });\n },\n [clampMonthToBounds]\n );\n\n return (\n <div className={cn(\"min-w-[260px] w-[300px] p-3\", className)} {...props}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-2\">\n <button\n onClick={() => {\n setDisplayed(addMonths(displayed, -1));\n onMonthBackward?.();\n }}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex h-8 w-8 items-center justify-center p-0\"\n )}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"h-4 w-4 opacity-70\" />\n </button>\n\n <Select value={String(displayMonth)} onValueChange={handleMonthSelect}>\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select month\"\n className=\"h-8 min-w-[110px] justify-between rounded-md border border-gray-200 bg-white px-3 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={getMonthLabel(displayYear, displayMonth)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {monthOptions.map((option) => (\n <SelectItem\n className=\"text-center w-full\"\n key={option.value}\n value={String(option.value)}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select value={String(displayYear)} onValueChange={handleYearSelect}>\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select year\"\n className=\"h-8 min-w-[90px] justify-between rounded-md border border-gray-200 bg-white px-3 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={getYearLabel(displayYear)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {yearOptions.map((year) => (\n <SelectItem\n key={year}\n value={String(year)}\n disabled={\n (typeof minYear === \"number\" && year < minYear) ||\n (typeof maxYear === \"number\" && year > maxYear)\n }\n >\n {getYearLabel(year)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <button\n onClick={() => {\n setDisplayed(addMonths(displayed, 1));\n onMonthForward?.();\n }}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex h-8 w-8 items-center justify-center p-0\"\n )}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"h-4 w-4 opacity-70\" />\n </button>\n </div>\n\n {/* Weekday header */}\n <div className=\"grid grid-cols-7 text-[11px] text-muted-foreground mb-1\">\n {weekdays.map((w, i) => (\n <div key={i} className=\"text-center py-1\">\n {w}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {grid.map((row, r) =>\n row.map(({ date, inCurrentMonth }, c) => {\n const selected = selectedDate && isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const disabled = isDateDisabled(date);\n\n // เลือก variant ของปุ่มวัน\n let variantName: ButtonVariant = variant?.day?.main ?? \"ghost\";\n if (!inCurrentMonth) variantName = variant?.day?.outside ?? \"ghost\";\n if (isToday && !selected) variantName = variant?.day?.today ?? variantName;\n if (selected) variantName = variant?.day?.selected ?? \"default\";\n\n const label = callbacks?.dayLabel?.(date) ?? date.getDate();\n\n return (\n <button\n key={`${r}-${c}`}\n onClick={() => !disabled && onDateSelect?.(date)}\n disabled={disabled || !inCurrentMonth}\n className={cn(\n buttonVariants({ variant: variantName }),\n \"h-9 w-full p-0 text-sm font-normal rounded-md transition-all duration-150\",\n \"border border-transparent\",\n !inCurrentMonth && \"opacity-50 pointer-events-none\",\n selected ? \"bg-[#379a2a] text-white\" : (\n \"bg-white text-black hover:border-[#379a2a] hover:bg-green-50 active:bg-green-100\"\n )\n )}\n aria-selected={selected}\n aria-label={date.toDateString()}\n >\n {label}\n </button>\n );\n })\n )}\n </div>\n </div>\n );\n}\n\n/* ===== Example usage =====\n<DatePicker\n selectedDate={value}\n onDateSelect={(d) => setValue(d)}\n minDate={new Date(2020,0,1)}\n maxDate={new Date(2030,11,31)}\n disabledDates={[new Date(2025,0,1)]}\n/>\n*/\n","import React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { format, isValid, parseISO } from \"date-fns\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { DatePicker as CalendarDatePicker } from \"@/components/ui/datepicker\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\n\ntype CalendarProps = React.ComponentProps<typeof CalendarDatePicker>;\n\nconst defaultDisplayFormatter = (date: Date) => format(date, \"dd/MM/yyyy\");\nconst defaultValueFormatter = (date: Date) => format(date, \"yyyy-MM-dd\");\nconst defaultValueParser = (value: string) => {\n const parsed = parseISO(value);\n return isValid(parsed) ? parsed : undefined;\n};\n\nexport type DatePickerProps = {\n value?: Date | string | null;\n onChange?: (date?: Date) => void;\n onValueChange?: (value?: string) => void;\n placeholder?: string;\n allowClear?: boolean;\n displayFormatter?: (date: Date) => string;\n valueFormatter?: (date: Date) => string;\n valueParser?: (value: string) => Date | undefined;\n buttonClassName?: string;\n wrapperClassName?: string;\n invalid?: boolean;\n calendarClassName?: string;\n popoverContentClassName?: string;\n disabled?: boolean;\n closeOnSelect?: boolean;\n clearAriaLabel?: string;\n ariaLabel?: string;\n} & Omit<CalendarProps, \"selectedDate\" | \"onDateSelect\" | \"className\">;\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onChange,\n onValueChange,\n placeholder = \"DD/MM/YYYY\",\n allowClear = true,\n displayFormatter,\n valueFormatter,\n valueParser,\n buttonClassName,\n wrapperClassName,\n invalid = false,\n calendarClassName,\n popoverContentClassName,\n disabled = false,\n closeOnSelect = true,\n clearAriaLabel = \"Clear date\",\n ariaLabel,\n ...calendarProps\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const parser = React.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);\n const outputFormatter = React.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);\n const labelFormatter = React.useMemo(\n () => displayFormatter ?? defaultDisplayFormatter,\n [displayFormatter]\n );\n\n const parsedValue = React.useMemo(() => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value;\n const parsed = parser(value);\n return parsed && isValid(parsed) ? parsed : undefined;\n }, [parser, value]);\n\n const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder;\n const buttonAriaLabel =\n ariaLabel ??\n (parsedValue ? `Change date, current selection ${labelFormatter(parsedValue)}` : \"Open date picker\");\n\n const shouldShowClear = allowClear && !disabled && !!parsedValue;\n\n const handleClose = React.useCallback(() => setOpen(false), []);\n const emitChange = React.useCallback(\n (next?: Date) => {\n onChange?.(next);\n onValueChange?.(next ? outputFormatter(next) : undefined);\n },\n [onChange, onValueChange, outputFormatter]\n );\n\n const handleSelect = React.useCallback(\n (next?: Date) => {\n emitChange(next);\n if (closeOnSelect && next) handleClose();\n },\n [closeOnSelect, emitChange, handleClose]\n );\n\n const handleClear = React.useCallback(() => {\n emitChange(undefined);\n handleClose();\n }, [emitChange, handleClose]);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n setOpen(nextOpen);\n },\n [disabled]\n );\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <div className=\"relative\">\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"relative !flex w-full items-center justify-between rounded-md bg-white pl-4 text-left text-sm font-medium shadow-none hover:bg-white focus-visible:ring-0 focus-visible:ring-offset-0\",\n \"min-h-[36px]\",\n !parsedValue ? \"text-gray-400\" : \"text-gray-700\",\n invalid &&\n \"border-destructive focus-visible:border-destructive focus-visible:ring-destructive/30\",\n shouldShowClear ? \"pr-8\" : \"pr-4\",\n buttonClassName\n )}\n aria-invalid={invalid || undefined}\n aria-label={buttonAriaLabel}\n >\n <span className=\"flex-1 truncate\">{buttonLabel}</span>\n <span className=\"flex items-center gap-2 text-[#9CA3AF] shrink-0\">\n <CalendarIcon className=\"h-4 w-4\" />\n </span>\n </Button>\n </PopoverTrigger>\n\n <PopoverContent className={cn(\"w-auto p-0\", popoverContentClassName)} align=\"start\">\n <CalendarDatePicker\n {...calendarProps}\n className={calendarClassName}\n selectedDate={parsedValue}\n onDateSelect={handleSelect}\n />\n </PopoverContent>\n </Popover>\n {shouldShowClear && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearAriaLabel}\n title={clearAriaLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n </div>\n </div>\n );\n};\n","export const fallbackShortDateFormat = \"DD/MM/YYYY\";\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { DatePicker } from \"@/components/datePicker\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\nimport { fallbackShortDateFormat } from \"../../constants\";\nimport { formatISODate } from \"@/utils\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n shortDateFormat?: string;\n}\n\nexport const ConditionDateInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n shortDateFormat = fallbackShortDateFormat\n}) => {\n const isBetween = row.operator === \"between\";\n\n const buildAriaLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Select end date\";\n if (isBetween) return \"Select start date\";\n return \"Select date\";\n };\n\n const buildClearLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Clear end date\";\n if (isBetween) return \"Clear start date\";\n return \"Clear date\";\n };\n\n const renderPicker = (fieldName: string, which: \"value\" | \"value2\", options?: { isEnd?: boolean }) => (\n <FormField\n control={control}\n name={fieldName}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const handleValueChange = (next?: string) => {\n field.onChange(next ?? undefined);\n if (!next) {\n onClear(which);\n }\n };\n\n return (\n <FormItem className=\"relative w-full min-w-0\">\n <FormControl>\n <DatePicker\n {...field}\n value={field.value || undefined}\n onValueChange={handleValueChange}\n placeholder={shortDateFormat}\n ariaLabel={buildAriaLabel(options?.isEnd)}\n clearAriaLabel={buildClearLabel(options?.isEnd)}\n invalid={Boolean(fieldState.error)}\n displayFormatter={(d) => formatISODate(d, shortDateFormat)}\n wrapperClassName=\"min-w-0\"\n data-testid=\"advsearch-date-value\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n );\n\n if (isBetween) {\n return (\n <div className=\"grid items-center gap-3 md:grid-cols-[1fr_auto_1fr] max-w-full min-w-0\">\n <div className=\"min-w-0\">{renderPicker(`value_${row.id}`, \"value\")}</div>\n <span className=\"text-center font-bold text-inherit whitespace-nowrap\">To</span>\n <div className=\"min-w-0\">{renderPicker(`value2_${row.id}`, \"value2\", { isEnd: true })}</div>\n </div>\n );\n }\n\n return renderPicker(`value_${row.id}`, \"value\");\n};\n","\"use client\";\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"@/utils\";\n\ntype ButtonVariant =\n | \"default\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"destructive\"\n | \"secondary\"\n | null\n | undefined;\n\ntype MonthCell = {\n number: number;\n name: string;\n};\n\nconst MONTHS: MonthCell[][] = [\n [\n { number: 0, name: \"Jan\" },\n { number: 1, name: \"Feb\" },\n { number: 2, name: \"Mar\" },\n { number: 3, name: \"Apr\" }\n ],\n [\n { number: 4, name: \"May\" },\n { number: 5, name: \"Jun\" },\n { number: 6, name: \"Jul\" },\n { number: 7, name: \"Aug\" }\n ],\n [\n { number: 8, name: \"Sep\" },\n { number: 9, name: \"Oct\" },\n { number: 10, name: \"Nov\" },\n { number: 11, name: \"Dec\" }\n ]\n];\n\ntype MonthPickerCallbacks = {\n yearLabel?: (year: number) => string;\n monthLabel?: (month: MonthCell) => string;\n};\n\ntype MonthPickerVariant = {\n calendar?: {\n main?: ButtonVariant;\n selected?: ButtonVariant;\n };\n chevrons?: ButtonVariant;\n};\n\nexport type MonthPickerProps = {\n selectedDate?: Date;\n onDateSelect?: (date?: Date) => void;\n onYearForward?: () => void;\n onYearBackward?: () => void;\n callbacks?: MonthPickerCallbacks;\n variant?: MonthPickerVariant;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\ntype MonthCalProps = Pick<\n MonthPickerProps,\n | \"selectedDate\"\n | \"onDateSelect\"\n | \"onYearForward\"\n | \"onYearBackward\"\n | \"callbacks\"\n | \"variant\"\n | \"minDate\"\n | \"maxDate\"\n | \"disabledDates\"\n>;\n\nconst normalizeMonth = (input?: Date) => {\n if (!input) return undefined;\n const next = new Date(input);\n next.setDate(1);\n next.setHours(0, 0, 0, 0);\n return next;\n};\n\nfunction MonthPicker({\n selectedDate,\n onDateSelect,\n minDate,\n maxDate,\n disabledDates,\n callbacks,\n onYearBackward,\n onYearForward,\n variant,\n className,\n ...props\n}: MonthPickerProps) {\n return (\n <div className={cn(\"min-w-[200px] w-[280px] p-3\", className)} {...props}>\n <div className=\"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\">\n <div className=\"space-y-4 w-full\">\n <MonthCal\n selectedDate={selectedDate}\n onDateSelect={onDateSelect}\n callbacks={callbacks}\n onYearBackward={onYearBackward}\n onYearForward={onYearForward}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction MonthCal({\n selectedDate,\n onDateSelect,\n callbacks,\n variant,\n minDate,\n maxDate,\n disabledDates,\n onYearBackward,\n onYearForward\n}: MonthCalProps) {\n const today = React.useMemo(() => {\n const now = new Date();\n now.setDate(1);\n now.setHours(0, 0, 0, 0);\n return now;\n }, []);\n\n const selectedMonthDate = React.useMemo(() => normalizeMonth(selectedDate), [selectedDate]);\n const min = React.useMemo(() => normalizeMonth(minDate), [minDate]);\n const max = React.useMemo(() => normalizeMonth(maxDate), [maxDate]);\n\n let effectiveMin = min;\n if (min && max && min > max) {\n effectiveMin = max;\n }\n\n const minYear = effectiveMin?.getFullYear();\n const minMonth = effectiveMin?.getMonth();\n const maxYear = max?.getFullYear();\n const maxMonth = max?.getMonth();\n\n const [menuYear, setMenuYear] = React.useState(\n () => selectedMonthDate?.getFullYear() ?? today.getFullYear()\n );\n\n React.useEffect(() => {\n if (selectedMonthDate) {\n const year = selectedMonthDate.getFullYear();\n if (year !== menuYear) {\n setMenuYear(year);\n }\n }\n }, [selectedMonthDate, menuYear]);\n\n React.useEffect(() => {\n if (typeof minYear === \"number\" && menuYear < minYear) {\n setMenuYear(minYear);\n return;\n }\n if (typeof maxYear === \"number\" && menuYear > maxYear) {\n setMenuYear(maxYear);\n }\n }, [minYear, maxYear, menuYear]);\n\n const disablePrevYear = typeof minYear === \"number\" ? menuYear <= minYear : false;\n const disableNextYear = typeof maxYear === \"number\" ? menuYear >= maxYear : false;\n\n const yearOptions = React.useMemo(() => {\n const fallbackWindow = 50;\n const start = typeof minYear === \"number\" ? minYear : menuYear - fallbackWindow;\n const end = typeof maxYear === \"number\" ? maxYear : menuYear + fallbackWindow;\n\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n\n if (!years.includes(menuYear)) {\n years.push(menuYear);\n years.sort((a, b) => a - b);\n }\n\n return years;\n }, [maxYear, menuYear, minYear]);\n\n const formatYearLabel = React.useCallback(\n (year: number) => {\n const raw = callbacks?.yearLabel?.(year);\n if (raw === null || raw === undefined) return String(year);\n return typeof raw === \"string\" ? raw : String(raw);\n },\n [callbacks]\n );\n\n const handleYearSelect = React.useCallback(\n (nextValue: string) => {\n const nextYear = Number.parseInt(nextValue, 10);\n if (Number.isNaN(nextYear)) return;\n if (typeof minYear === \"number\" && nextYear < minYear) return;\n if (typeof maxYear === \"number\" && nextYear > maxYear) return;\n setMenuYear(nextYear);\n },\n [maxYear, minYear]\n );\n\n const disabledPairs = React.useMemo(() => {\n if (!disabledDates?.length) return [] as { year: number; month: number }[];\n const pairs: { year: number; month: number }[] = [];\n disabledDates.forEach((date) => {\n const normalized = normalizeMonth(date);\n if (normalized) {\n pairs.push({\n year: normalized.getFullYear(),\n month: normalized.getMonth()\n });\n }\n });\n return pairs;\n }, [disabledDates]);\n\n return (\n <>\n <div className=\"flex items-center justify-between\">\n <button\n onClick={() => {\n if (disablePrevYear) return;\n setMenuYear((prev) => prev - 1);\n onYearBackward?.();\n }}\n disabled={disablePrevYear}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex items-center justify-center h-7 w-7 p-0\"\n )}\n >\n <ChevronLeft className=\"opacity-50 h-4 w-4\" />\n </button>\n\n <Select\n value={String(menuYear)}\n onValueChange={handleYearSelect}\n disabled={disablePrevYear && disableNextYear}\n >\n <SelectTrigger\n size=\"sm\"\n aria-label=\"Select year\"\n className=\"h-7 w-[100px] justify-center rounded-md border border-gray-200 bg-white px-2 text-sm font-medium text-gray-700 shadow-none focus-visible:ring-0\"\n >\n <SelectValue placeholder={formatYearLabel(menuYear)} />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {yearOptions.map((year) => (\n <SelectItem\n key={year}\n value={String(year)}\n disabled={\n (typeof minYear === \"number\" && year < minYear) ||\n (typeof maxYear === \"number\" && year > maxYear)\n }\n >\n {formatYearLabel(year)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <button\n onClick={() => {\n if (disableNextYear) return;\n setMenuYear((prev) => prev + 1);\n onYearForward?.();\n }}\n disabled={disableNextYear}\n className={cn(\n buttonVariants({ variant: variant?.chevrons ?? \"outline\" }),\n \"inline-flex items-center justify-center h-7 w-7 p-0\"\n )}\n >\n <ChevronRight className=\"opacity-50 h-4 w-4\" />\n </button>\n </div>\n\n <table className=\"w-full border-collapse space-y-1\">\n <tbody>\n {MONTHS.map((row, rowIndex) => (\n <tr key={\"row-\" + rowIndex} className=\"flex w-full mt-2 gap-2\">\n {row.map((m) => {\n const afterMax =\n maxMonth !== undefined && maxYear !== undefined ?\n menuYear > maxYear || (menuYear === maxYear && m.number > maxMonth)\n : false;\n const beforeMin =\n minMonth !== undefined && minYear !== undefined ?\n menuYear < minYear || (menuYear === minYear && m.number < minMonth)\n : false;\n const disabledByList = disabledPairs.some(\n (d) => d.year === menuYear && d.month === m.number\n );\n\n const isDisabled = afterMax || beforeMin || disabledByList;\n const isSelected =\n !isDisabled &&\n !!selectedMonthDate &&\n selectedMonthDate.getFullYear() === menuYear &&\n selectedMonthDate.getMonth() === m.number;\n\n return (\n <td key={m.number} className=\"h-10 w-1/4 text-center text-sm p-0 relative\">\n <button\n onClick={() => {\n if (isDisabled) return;\n if (\n selectedMonthDate &&\n selectedMonthDate.getFullYear() === menuYear &&\n selectedMonthDate.getMonth() === m.number\n ) {\n onDateSelect?.(undefined);\n } else {\n const next = new Date(menuYear, m.number, 1);\n next.setHours(0, 0, 0, 0);\n onDateSelect?.(next);\n }\n }}\n disabled={isDisabled}\n className={cn(\n buttonVariants({\n variant:\n isSelected ?\n (variant?.calendar?.selected ?? \"default\")\n : (variant?.calendar?.main ?? \"ghost\")\n }),\n \"h-9 w-full p-0 text-sm font-normal rounded-md transition-all duration-150\",\n \"border border-transparent\",\n\n isDisabled && \"opacity-50 pointer-events-none\",\n\n isSelected ?\n \"bg-[#379a2a] text-white hover:bg-[#2f8524] active:bg-[#276f1e]\"\n : \"bg-white text-black hover:border-[#379a2a] hover:bg-green-50 active:bg-green-100\"\n )}\n >\n {callbacks?.monthLabel ? callbacks.monthLabel(m) : m.name}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </>\n );\n}\n\nMonthPicker.displayName = \"MonthPicker\";\n\nexport { MonthPicker };\n","import React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { format, isValid, parseISO } from \"date-fns\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { MonthPicker as CalendarMonthPicker } from \"@/components/ui/monthpicker\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\n\ntype CalendarProps = React.ComponentProps<typeof CalendarMonthPicker>;\n\nconst normalizeMonth = (input?: Date | null) => {\n if (!input || !isValid(input)) return undefined;\n const normalized = new Date(input);\n normalized.setDate(1);\n normalized.setHours(0, 0, 0, 0);\n return normalized;\n};\n\nconst defaultDisplayFormatter = (month: Date) => format(month, \"MMM yyyy\");\nconst defaultValueFormatter = (month: Date) => format(month, \"yyyy-MM\");\nconst defaultValueParser = (value: string) => normalizeMonth(parseISO(value));\n\nexport type MonthPickerProps = {\n value?: Date | string | null;\n onChange?: (month?: Date) => void;\n onValueChange?: (value?: string) => void;\n placeholder?: string;\n allowClear?: boolean;\n displayFormatter?: (month: Date) => string;\n valueFormatter?: (month: Date) => string;\n valueParser?: (value: string) => Date | undefined;\n buttonClassName?: string;\n wrapperClassName?: string;\n invalid?: boolean;\n calendarClassName?: string;\n popoverContentClassName?: string;\n disabled?: boolean;\n closeOnSelect?: boolean;\n clearAriaLabel?: string;\n ariaLabel?: string;\n} & Omit<CalendarProps, \"selectedDate\" | \"onDateSelect\" | \"className\">;\n\nexport const MonthPicker: React.FC<MonthPickerProps> = ({\n value,\n onChange,\n onValueChange,\n placeholder = \"MM/YYYY\",\n allowClear = true,\n displayFormatter,\n valueFormatter,\n valueParser,\n buttonClassName,\n wrapperClassName,\n invalid = false,\n calendarClassName,\n popoverContentClassName,\n disabled = false,\n closeOnSelect = true,\n clearAriaLabel = \"Clear month\",\n ariaLabel,\n ...calendarProps\n}) => {\n const [open, setOpen] = React.useState(false);\n\n const parser = React.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);\n const outputFormatter = React.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);\n const labelFormatter = React.useMemo(\n () => displayFormatter ?? defaultDisplayFormatter,\n [displayFormatter]\n );\n\n const parsedValue = React.useMemo(() => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return normalizeMonth(value);\n if (typeof value === \"string\") {\n const parsed = parser(value);\n return parsed ? normalizeMonth(parsed) : undefined;\n }\n return undefined;\n }, [parser, value]);\n\n const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder;\n const buttonAriaLabel =\n ariaLabel ??\n (parsedValue ?\n `Change month, current selection ${labelFormatter(parsedValue)}`\n : \"Open month picker\");\n\n const shouldShowClear = allowClear && !disabled && !!parsedValue;\n\n const handleClose = React.useCallback(() => setOpen(false), []);\n const emitChange = React.useCallback(\n (next?: Date) => {\n const normalized = next ? normalizeMonth(next) : undefined;\n onChange?.(normalized);\n onValueChange?.(normalized ? outputFormatter(normalized) : undefined);\n },\n [onChange, onValueChange, outputFormatter]\n );\n\n const handleSelect = React.useCallback(\n (next?: Date) => {\n emitChange(next);\n if (closeOnSelect && next) handleClose();\n },\n [closeOnSelect, emitChange, handleClose]\n );\n\n const handleClear = React.useCallback(() => {\n emitChange(undefined);\n handleClose();\n }, [emitChange, handleClose]);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n setOpen(nextOpen);\n },\n [disabled]\n );\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <div className=\"relative\">\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"relative !flex w-full items-center justify-between rounded-md bg-white pl-4 text-left text-sm font-medium shadow-none hover:bg-white focus-visible:ring-0 focus-visible:ring-offset-0\",\n \"min-h-[36px]\",\n !parsedValue ? \"text-gray-400\" : \"text-gray-700\",\n invalid &&\n \"border-destructive focus-visible:border-destructive focus-visible:ring-destructive/30\",\n shouldShowClear ? \"pr-8\" : \"pr-4\",\n buttonClassName\n )}\n aria-invalid={invalid || undefined}\n aria-label={buttonAriaLabel}\n >\n <span className=\"flex-1 truncate\">{buttonLabel}</span>\n <span className=\"flex items-center gap-2 text-[#9CA3AF] shrink-0\">\n <CalendarIcon className=\"h-4 w-4\" />\n </span>\n </Button>\n </PopoverTrigger>\n\n <PopoverContent className={cn(\"w-auto p-0\", popoverContentClassName)} align=\"start\">\n <CalendarMonthPicker\n {...calendarProps}\n className={calendarClassName}\n selectedDate={parsedValue}\n onDateSelect={handleSelect}\n />\n </PopoverContent>\n </Popover>\n {shouldShowClear && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearAriaLabel}\n title={clearAriaLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { format } from \"date-fns\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { MonthPicker } from \"@/components/monthPicker\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nconst placeholder = \"MM/YYYY\";\n\nexport const ConditionMonthInput: React.FC<Props> = ({ row, control, onClear }) => {\n const isBetween = row.operator === \"between\";\n\n const buildAriaLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Select end month\";\n if (isBetween) return \"Select start month\";\n return \"Select month\";\n };\n\n const buildClearLabel = (isEnd?: boolean) => {\n if (isEnd) return \"Clear end month\";\n if (isBetween) return \"Clear start month\";\n return \"Clear month\";\n };\n\n const renderPicker = (fieldName: string, which: \"value\" | \"value2\", options?: { isEnd?: boolean }) => (\n <FormField\n control={control}\n name={fieldName}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = field.value || undefined;\n\n const handleValueChange = (next?: string) => {\n field.onChange(next ?? undefined);\n if (!next) {\n onClear(which);\n }\n };\n\n return (\n <FormItem className=\"relative w-full min-w-0\">\n <FormControl>\n <MonthPicker\n {...field}\n value={value}\n onValueChange={handleValueChange}\n placeholder={placeholder}\n ariaLabel={buildAriaLabel(options?.isEnd)}\n clearAriaLabel={buildClearLabel(options?.isEnd)}\n displayFormatter={(month) => format(month, \"MM/yyyy\")}\n invalid={Boolean(fieldState.error)}\n wrapperClassName=\"min-w-0\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n );\n\n if (isBetween) {\n return (\n <div className=\"grid items-center gap-3 md:grid-cols-[1fr_auto_1fr] max-w-full min-w-0\">\n <div className=\"min-w-0\">{renderPicker(`value_${row.id}`, \"value\")}</div>\n\n <span className=\"text-center font-bold text-inherit whitespace-nowrap\">To</span>\n\n <div className=\"min-w-0\">{renderPicker(`value2_${row.id}`, \"value2\", { isEnd: true })}</div>\n </div>\n );\n }\n\n return renderPicker(`value_${row.id}`, \"value\");\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\nimport type { RowState, FieldSchema } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n fieldSchema?: FieldSchema;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionDropdownInput: React.FC<Props> = ({ row, control, fieldSchema, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n const hasValue = Boolean(field.value);\n const clearLabel = \"Clear selected value\";\n\n return (\n <FormItem className=\"relative\">\n <Select value={field.value ?? \"\"} onValueChange={field.onChange}>\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\",\n hasValue ? \"pr-8\" : \"pr-4\"\n )}\n data-testid=\"advsearch-dropdown-value\"\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"w-full min-w-[unset]\">\n {fieldSchema &&\n \"options\" in fieldSchema &&\n fieldSchema.options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {hasValue && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearLabel}\n title={clearLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\nimport { cn } from \"@/utils\";\nimport type { RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n}\n\nexport const ConditionCheckboxInput: React.FC<Props> = ({ row, control, onClear }) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field }) => {\n const handleClear = () => {\n field.onChange(\"\");\n onClear(\"value\");\n };\n\n const hasValue = Boolean(field.value);\n const clearLabel = \"Clear selected value\";\n\n return (\n <FormItem className=\"relative w-full\">\n <Select value={field.value ?? \"\"} onValueChange={field.onChange}>\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full justify-between rounded-md bg-white px-4 text-sm font-medium text-gray-700 shadow-none focus:ring-0\",\n hasValue ? \"pr-8\" : \"pr-4\"\n )}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"w-full min-w-[unset]\">\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n {hasValue && (\n <ClearButton\n onClick={handleClear}\n ariaLabel={clearLabel}\n title={clearLabel}\n className=\"absolute right-3 top-1/2 z-10 -translate-y-1/2\"\n />\n )}\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Search, X } from \"lucide-react\";\nimport { NotFoundIcon } from \"@/components/icons\";\nimport { ClearButton } from \"@/components/ui/ClearButton\";\n\nexport interface LookupSelectOption {\n value: string;\n label: string;\n}\n\nexport interface LookupSelectProps {\n value?: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n onClear?: () => void;\n error?: boolean;\n maxTags?: number;\n fetchSuggestions?: (query: string) => Promise<LookupSelectOption[]>;\n suggestionDebounce?: number;\n noOptionsMessage?: string;\n loadingMessage?: string;\n dropdownPortalId?: string;\n}\n\nexport const LookupSelect: React.FC<LookupSelectProps> = ({\n value = [],\n onChange,\n onClear,\n error,\n placeholder,\n maxTags = 10,\n fetchSuggestions,\n suggestionDebounce = 250,\n noOptionsMessage = \"No records found. Please try a different search.\",\n loadingMessage = \"Loading...\",\n dropdownPortalId\n}) => {\n const [inputValue, setInputValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [suggestions, setSuggestions] = useState<LookupSelectOption[]>([]);\n const [optionLabels, setOptionLabels] = useState<Record<string, string>>({});\n const [loading, setLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const fetchDelayRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const requestIdRef = useRef(0);\n const [dropdownStyles, setDropdownStyles] = useState<React.CSSProperties>();\n const dropdownContentRef = useRef<HTMLDivElement | null>(null);\n const assignDropdownContentRef = useCallback((node: HTMLDivElement | null) => {\n dropdownContentRef.current = node;\n }, []);\n\n const dropdownPortalElement = useMemo(() => {\n if (typeof document === \"undefined\") return null;\n if (dropdownPortalId) {\n const element = document.getElementById(dropdownPortalId);\n if (element) return element;\n }\n\n return document.body;\n }, [dropdownPortalId]);\n\n const limitReached = value.length >= maxTags;\n\n const upsertOptionLabels = useCallback((options: LookupSelectOption[]) => {\n setOptionLabels((prev) => {\n let next: Record<string, string> | null = null;\n options.forEach((opt) => {\n if (prev[opt.value] === opt.label) return;\n if (!next) {\n next = { ...prev };\n }\n next[opt.value] = opt.label;\n });\n return next ?? prev;\n });\n }, []);\n\n const addTag = useCallback(\n (val: string) => {\n const trimmed = val.trim();\n if (!trimmed) return;\n if (value.includes(trimmed)) return;\n if (value.length >= maxTags) return;\n\n onChange([...value, trimmed]);\n setInputValue(\"\");\n setSuggestions([]);\n setIsDropdownOpen(false);\n },\n [value, onChange, maxTags]\n );\n\n const removeTag = useCallback(\n (index: number) => {\n if (index < 0) return;\n const newTags = value.filter((_, i) => i !== index);\n onChange(newTags);\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n }\n if (e.key === \"Backspace\" && !inputValue) {\n removeTag(value.length - 1);\n }\n },\n [inputValue, removeTag, value.length]\n );\n\n const handleClear = useCallback(() => {\n setInputValue(\"\");\n setSuggestions([]);\n setIsDropdownOpen(false);\n setFetchError(null);\n if (onClear) onClear();\n }, [onClear]);\n\n const handleSuggestionSelect = useCallback(\n (option: LookupSelectOption) => {\n upsertOptionLabels([option]);\n addTag(option.value);\n inputRef.current?.focus();\n setTimeout(() => {\n inputRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, 100);\n },\n [addTag, upsertOptionLabels]\n );\n\n const updateDropdownPosition = useCallback(() => {\n if (!dropdownPortalElement || !containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n setDropdownStyles({\n position: \"absolute\",\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n zIndex: 50\n });\n }, [dropdownPortalElement]);\n\n useEffect(() => {\n if (!fetchSuggestions) return;\n\n if (fetchDelayRef.current) {\n clearTimeout(fetchDelayRef.current);\n }\n\n const query = inputValue.trim();\n\n if (!query) {\n setSuggestions([]);\n setIsDropdownOpen(false);\n setLoading(false);\n setFetchError(null);\n return;\n }\n\n setLoading(true);\n setFetchError(null);\n const requestId = ++requestIdRef.current;\n\n fetchDelayRef.current = setTimeout(() => {\n fetchSuggestions(query)\n .then((items) => {\n if (requestIdRef.current !== requestId) return;\n setSuggestions(items);\n upsertOptionLabels(items);\n setIsDropdownOpen(true);\n })\n .catch((err) => {\n if (requestIdRef.current !== requestId) return;\n console.error(\"Failed to fetch lookup options\", err);\n setSuggestions([]);\n setIsDropdownOpen(false);\n setFetchError(\"Failed to load options\");\n })\n .finally(() => {\n if (requestIdRef.current === requestId) {\n setLoading(false);\n }\n });\n }, suggestionDebounce);\n\n return () => {\n if (fetchDelayRef.current) {\n clearTimeout(fetchDelayRef.current);\n }\n };\n }, [inputValue, fetchSuggestions, suggestionDebounce, upsertOptionLabels]);\n\n useEffect(() => {\n const handleDocumentClick = (event: MouseEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target)) return;\n if (dropdownContentRef.current?.contains(target)) return;\n setIsDropdownOpen(false);\n };\n\n document.addEventListener(\"mousedown\", handleDocumentClick);\n return () => {\n document.removeEventListener(\"mousedown\", handleDocumentClick);\n };\n }, []);\n\n useEffect(() => {\n if (!limitReached) return;\n setIsDropdownOpen(false);\n }, [limitReached]);\n\n useEffect(() => {\n if (!dropdownPortalElement) return;\n if (!isDropdownOpen) return;\n\n updateDropdownPosition();\n\n const handleReposition = () => updateDropdownPosition();\n\n window.addEventListener(\"resize\", handleReposition);\n window.addEventListener(\"scroll\", handleReposition, true);\n\n return () => {\n window.removeEventListener(\"resize\", handleReposition);\n window.removeEventListener(\"scroll\", handleReposition, true);\n };\n }, [dropdownPortalElement, isDropdownOpen, updateDropdownPosition]);\n\n const resolvedPlaceholder = placeholder ?? \"Select\";\n const showDropdown = isDropdownOpen && !fetchError;\n\n const dropdownContent = (\n <div className=\"overflow-hidden rounded-md border border-gray-200 bg-white shadow-lg\">\n {loading ?\n <div className=\"px-3 py-2 text-sm text-inherit\">{loadingMessage}</div>\n : suggestions.length === 0 ?\n <div className=\"flex flex-col items-center justify-center px-3 py-4 text-sm text-inherit text-center\">\n <NotFoundIcon className=\"w-full max-w-[80px] h-auto\" />\n <span className=\"pt-3\">{noOptionsMessage}</span>\n </div>\n : <ul className=\"max-h-48 overflow-y-auto py-1\">\n {suggestions.map((option) => {\n const disabled = value.includes(option.value) || limitReached;\n return (\n <li key={option.value}>\n <button\n type=\"button\"\n className={`flex w-full items-center justify-between px-3 py-2 text-left text-sm transition hover:bg-gray-100\n ${disabled ? \"cursor-not-allowed text-gray-400\" : \"text-gray-700\"}`}\n onClick={() => handleSuggestionSelect(option)}\n disabled={disabled}\n >\n <span className=\"truncate\">{option.label}</span>\n </button>\n </li>\n );\n })}\n </ul>\n }\n </div>\n );\n\n const renderDropdown = () => {\n if (!showDropdown) return null;\n\n if (dropdownPortalElement && dropdownStyles) {\n return createPortal(\n <div ref={assignDropdownContentRef} style={dropdownStyles}>\n {dropdownContent}\n </div>,\n dropdownPortalElement\n );\n }\n\n return (\n <div ref={assignDropdownContentRef} className=\"absolute left-0 right-0 top-full z-10 mt-1\">\n {dropdownContent}\n </div>\n );\n };\n\n return (\n <div className=\"relative w-full\" ref={containerRef}>\n <div\n className={`flex min-h-[36px] items-center gap-3 rounded-md border bg-white px-3 transition-all \n ${error ? \"border-red-500 focus-within:ring-red-500\" : \"border-gray-300 \"}`}\n >\n <div className=\"flex flex-1 flex-wrap content-start gap-1 overflow-y-auto max-h-[72px] hide-scrollbar pr-4\">\n {value.map((tag, i) => {\n const label = optionLabels[tag] ?? tag;\n return (\n <span\n key={`${tag}-${i}`}\n className=\"flex items-center gap-1 rounded-lg border border-[#f0f0f0] bg-[#f9f9f9] px-2 py-1 my-1 text-sm text-inherit max-w-full break-words\"\n >\n <span className=\"whitespace-pre-wrap break-all\">{label}</span>\n <button\n type=\"button\"\n onClick={() => removeTag(i)}\n className=\"text-inherit transition hover:text-red-500\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n );\n })}\n {!limitReached && (\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (suggestions.length > 0 && !fetchError) {\n setIsDropdownOpen(true);\n }\n }}\n placeholder={(value.length === 0 && resolvedPlaceholder) || \"\"}\n className=\"min-w-[120px] flex-1 border-none bg-transparent py-1 text-sm text-gray-600 placeholder:text-gray-400 outline-none\"\n disabled={limitReached}\n />\n )}\n </div>\n\n <div className=\"flex justify-end items-center gap-2 pointer-events-auto h-fit\">\n {value.length === 0 ?\n <span className=\"flex h-7 w-7 items-center justify-center text-inherit\">\n <Search className=\"h-4 w-4\" />\n </span>\n : <ClearButton\n onClick={handleClear}\n className=\"flex h-7 w-7 items-center justify-center rounded-full text-inherit transition hover:text-red-500\"\n aria-label=\"Clear selected values\"\n />\n }\n </div>\n </div>\n\n {renderDropdown()}\n\n {fetchError && <p className=\"mt-1 text-xs text-red-600\">{fetchError}</p>}\n {limitReached && !fetchError && maxTags !== 1 && (\n <p className=\"mt-1 text-xs text-inherit\">Maximum {maxTags} tags reached.</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { LookupSelect } from \"@/components/lookupSelect\";\nimport type { LookupFieldSchema, RowState } from \"@/components/advanceSearch/types\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n fieldSchema?: LookupFieldSchema;\n dropdownPortalId?: string;\n}\n\nexport const ConditionLookupInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n fieldSchema,\n dropdownPortalId\n}) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = Array.isArray(field.value) ? field.value : [];\n\n const handleChange = (tags: string[]) => {\n field.onChange(tags);\n };\n\n const handleClear = () => {\n field.onChange([]);\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative w-full overflow-x-hidden\">\n <FormControl>\n <LookupSelect\n value={value}\n onChange={handleChange}\n onClear={handleClear}\n error={Boolean(fieldState.error)}\n placeholder={fieldSchema?.placeholder}\n maxTags={fieldSchema?.maxTags}\n fetchSuggestions={fieldSchema?.fetchSuggestions}\n suggestionDebounce={fieldSchema?.suggestionDebounce}\n noOptionsMessage={fieldSchema?.noOptionsMessage}\n loadingMessage={fieldSchema?.loadingMessage}\n dropdownPortalId={dropdownPortalId}\n data-testid=\"advsearch-lookup-list\"\n />\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { LookupSelect } from \"@/components/lookupSelect\";\nimport type { JSONFieldSchema, RowState } from \"@/components/advanceSearch/types\";\nimport { Input } from \"@/components/input\";\n\ninterface Props {\n row: RowState;\n control: any;\n onClear: (which: \"value\" | \"value2\") => void;\n fieldSchema?: JSONFieldSchema;\n dropdownPortalId?: string;\n}\n\nexport const ConditionJSONInput: React.FC<Props> = ({\n row,\n control,\n onClear,\n fieldSchema,\n dropdownPortalId\n}) => (\n <FormField\n control={control}\n name={`value_${row.id}` as const}\n rules={{ required: \"This field is required.\" }}\n render={({ field, fieldState }) => {\n const value = Array.isArray(field.value) ? field.value : [];\n\n const handleChange = (tags: string[]) => {\n field.onChange(tags);\n };\n\n const handleClear = () => {\n field.onChange([]);\n onClear(\"value\");\n };\n\n return (\n <FormItem className=\"relative w-full overflow-x-hidden\">\n <FormControl>\n {fieldSchema?.fetchSuggestions ?\n <LookupSelect\n value={value}\n onChange={handleChange}\n onClear={handleClear}\n error={Boolean(fieldState.error)}\n placeholder={fieldSchema?.placeholder}\n maxTags={row.operator === \"containsAny\" ? fieldSchema?.maxTags : 1}\n fetchSuggestions={fieldSchema?.fetchSuggestions}\n suggestionDebounce={fieldSchema?.suggestionDebounce}\n noOptionsMessage={fieldSchema?.noOptionsMessage}\n loadingMessage={fieldSchema?.loadingMessage}\n dropdownPortalId={dropdownPortalId}\n />\n : <Input\n {...field}\n value={field.value ?? \"\"}\n autoComplete=\"off\"\n inputMode=\"text\"\n className=\"w-full h-9 rounded-md bg-white pr-8 text-sm text-gray-700 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n }\n </FormControl>\n <FormMessage className={\"absolute left-0 top-full mt-1 text-xs text-red-600\"} />\n </FormItem>\n );\n }}\n />\n);\n","import React from \"react\";\nimport type {\n FieldSchema,\n JSONFieldSchema,\n LookupFieldSchema,\n RowState\n} from \"@/components/advanceSearch/types\";\nimport { useFormContext } from \"react-hook-form\";\nimport { ConditionTextInput } from \"./types/ConditionTextInput\";\nimport { ConditionNumberInput } from \"./types/ConditionNumberInput\";\nimport { ConditionDateInput } from \"./types/ConditionDateInput\";\nimport { ConditionMonthInput } from \"./types/ConditionMonthInput\";\nimport { ConditionDropdownInput } from \"./types/ConditionDropdownInput\";\nimport { ConditionCheckboxInput } from \"./types/ConditionCheckboxInput\";\nimport { ConditionLookupInput } from \"./types/ConditionLookupInput\";\nimport { ConditionJSONInput } from \"./types/ConditionJSONInput\";\n\ntype Props = {\n row: RowState;\n fields: FieldSchema[];\n onClearValue: (which: \"value\" | \"value2\") => void;\n dropdownPortalId?: string;\n shortDateFormat?: string;\n};\n\nexport const ConditionValue: React.FC<Props> = ({\n row,\n fields,\n onClearValue,\n dropdownPortalId,\n shortDateFormat\n}) => {\n const { control } = useFormContext();\n const fieldSchema = fields.find((f) => f.name === row.fieldName);\n const fieldType = fieldSchema?.type ?? \"text\";\n\n switch (fieldType) {\n case \"number\":\n return <ConditionNumberInput row={row} control={control} onClear={onClearValue} />;\n case \"date\":\n case \"datetime\":\n return (\n <ConditionDateInput\n row={row}\n control={control}\n onClear={onClearValue}\n shortDateFormat={shortDateFormat}\n />\n );\n case \"datemonth\":\n return <ConditionMonthInput row={row} control={control} onClear={onClearValue} />;\n case \"dropdown\":\n return (\n <ConditionDropdownInput\n row={row}\n control={control}\n fieldSchema={fieldSchema}\n onClear={onClearValue}\n />\n );\n case \"checkbox\":\n return <ConditionCheckboxInput row={row} control={control} onClear={onClearValue} />;\n case \"lookup\":\n return (\n <ConditionLookupInput\n row={row}\n control={control}\n onClear={onClearValue}\n fieldSchema={fieldSchema as LookupFieldSchema}\n dropdownPortalId={dropdownPortalId}\n />\n );\n case \"json\": {\n return (\n <ConditionJSONInput\n row={row}\n control={control}\n onClear={onClearValue}\n fieldSchema={fieldSchema as JSONFieldSchema}\n dropdownPortalId={dropdownPortalId}\n />\n );\n }\n default:\n return <ConditionTextInput row={row} control={control} onClear={onClearValue} />;\n }\n};\n","// AddRemoveButtons.tsx\nimport React from \"react\";\nimport { Plus, Minus } from \"lucide-react\";\nimport { Button } from \"@/components/button\";\n\nexport const AddRemoveButtons: React.FC<{\n isFirst: boolean;\n onAdd: () => void;\n onRemove: () => void;\n disableAdd?: boolean;\n}> = ({ isFirst, onAdd, onRemove, disableAdd }) => (\n <div className=\"flex items-center justify-end gap-2\">\n {isFirst ?\n <Button\n type=\"button\"\n size=\"icon-sm\"\n onClick={onAdd}\n disabled={disableAdd}\n className={`circle-btn border transition-colors ${\n disableAdd ?\n \"cursor-not-allowed border-[#5a5a5a] bg-[#5a5a5a] text-[#e1e1e1]\"\n : \"border-[#379a2a] bg-[#379a2a] text-white\"\n }`}\n aria-label=\"Add row\"\n title={disableAdd ? \"Cannot add more rows\" : \"Add condition\"}\n data-testid=\"advsearch-btn-add\"\n >\n <Plus className=\"h-3 w-3 stroke-[2]\" />\n </Button>\n : <Button\n type=\"button\"\n size=\"icon-sm\"\n onClick={onRemove}\n className=\"circle-btn border border-[#379a2a] bg-white text-[#379a2a]\"\n aria-label=\"Remove row\"\n title=\"Remove condition\"\n data-testid=\"advsearch-btn-remove\"\n >\n <Minus className=\"h-3 w-3 stroke-[2]\" />\n </Button>\n }\n </div>\n);\n","import React from \"react\";\nimport type { FieldSchema, OperatorValue, RowState, Option } from \"../../types\";\nimport { FieldSelect } from \"./FieldSelect\";\nimport { OperatorSelect } from \"./OperatorSelect\";\nimport { ConditionValue } from \"./ConditionValue\";\nimport { AddRemoveButtons } from \"./AddRemoveButtons\";\n\ninterface Props {\n row: RowState;\n isFirst: boolean;\n fields: FieldSchema[];\n fieldOptions: Option[];\n operators: OperatorValue[];\n operatorError?: string;\n onChangeField: (fieldName: string) => void;\n onChangeOperator: (op: OperatorValue) => void;\n onAdd: () => void;\n onRemove: () => void;\n onClearValue: (which: \"value\" | \"value2\") => void;\n disableAdd?: boolean;\n dropdownPortalId?: string;\n shortDateFormat?: string;\n}\n\nexport const AdvanceSearchRow: React.FC<Props> = ({\n row,\n isFirst,\n fields,\n fieldOptions,\n operators,\n operatorError,\n onChangeField,\n onChangeOperator,\n onAdd,\n onRemove,\n onClearValue,\n disableAdd,\n dropdownPortalId,\n shortDateFormat\n}) => {\n return (\n <div className=\"grid gap-3 rounded-lg bg-white md:grid-cols-[minmax(150px,0.85fr)_minmax(140px,0.75fr)_minmax(260px,1fr)_auto] md:items-start\">\n <FieldSelect row={row} fieldOptions={fieldOptions} onChangeField={onChangeField} />\n\n <OperatorSelect\n row={row}\n operators={operators}\n onChangeOperator={onChangeOperator}\n error={operatorError}\n />\n\n <ConditionValue\n row={row}\n fields={fields}\n onClearValue={onClearValue}\n dropdownPortalId={dropdownPortalId}\n shortDateFormat={shortDateFormat}\n />\n\n <div className=\"flex h-full\">\n <AddRemoveButtons isFirst={isFirst} onAdd={onAdd} onRemove={onRemove} disableAdd={disableAdd} />\n </div>\n </div>\n );\n};\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class CheckboxBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"is\":\n return { [row.fieldName]: row.value };\n case \"isNot\":\n return { [row.fieldName]: { not: row.value } };\n default:\n return {};\n }\n }\n}\n","export const helper = (\n prismaFilter: object,\n options?: { multiTableSearch?: boolean; insensitive?: boolean }\n) => {\n return options?.multiTableSearch ?\n {\n some: {\n value: { ...prismaFilter, ...(options?.insensitive ? { mode: \"insensitive\" } : undefined) }\n }\n }\n : { ...prismaFilter, ...(options?.insensitive ? { mode: \"insensitive\" } : undefined) };\n};\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst normalizeBetween = (startValue?: string, endValue?: string) => {\n if (!startValue || !endValue) return undefined;\n const start = new Date(startValue);\n const end = new Date(endValue);\n if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return undefined;\n const [minRaw, maxRaw] = start <= end ? [start, end] : [end, start];\n const min = new Date(minRaw);\n min.setHours(0, 0, 0, 0);\n const max = new Date(maxRaw);\n max.setHours(23, 59, 59, 999);\n return { min, max };\n};\n\nexport class DatetimeBuilder implements ParamsBuilder {\n build(row: RowState): object {\n try {\n const baseDate = new Date(row.value);\n if (Number.isNaN(baseDate.getTime())) return {};\n\n const dayStart = new Date(baseDate);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(baseDate);\n dayEnd.setHours(23, 59, 59, 999);\n\n switch (row.operator) {\n case \"on\":\n return {\n [row.fieldName]: helper(\n { gte: dayStart.toISOString(), lt: dayEnd.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"after\":\n return {\n [row.fieldName]: helper(\n { gte: dayStart.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"before\":\n return {\n [row.fieldName]: helper(\n { lt: dayStart.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n case \"between\": {\n const normalized = normalizeBetween(row.value, row.value2);\n if (!normalized) return {};\n return {\n [row.fieldName]: helper(\n { gte: normalized.min.toISOString(), lt: normalized.max.toISOString() },\n { multiTableSearch: row.multiTableSearch }\n )\n };\n }\n default:\n return {};\n }\n } catch {\n return {};\n }\n }\n}\n","import { parse, isValid, format, compareAsc } from \"date-fns\";\nimport type { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst parseMonth = (value?: string) => {\n if (!value) return undefined;\n const parsed = parse(value, \"yyyy-MM\", new Date());\n if (!isValid(parsed)) return undefined;\n parsed.setDate(1);\n parsed.setHours(0, 0, 0, 0);\n return parsed;\n};\n\nconst toMonthToken = (date: Date) => format(date, \"yyyy-MM\");\n\nexport class DateMonthBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const month = parseMonth(row.value);\n const sharedOptions = { multiTableSearch: row.multiTableSearch } as const;\n\n switch (row.operator) {\n case \"on\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ equals: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"after\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ gt: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"before\": {\n if (!month) return {};\n return {\n [row.fieldName]: helper({ lt: toMonthToken(month) }, sharedOptions)\n };\n }\n case \"between\": {\n const endMonth = parseMonth(row.value2);\n if (!month || !endMonth) return {};\n const [min, max] = compareAsc(month, endMonth) <= 0 ? [month, endMonth] : [endMonth, month];\n return {\n [row.fieldName]: helper({ gte: toMonthToken(min), lte: toMonthToken(max) }, sharedOptions)\n };\n }\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class DropdownBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"is\":\n return { [row.fieldName]: row.value };\n case \"isNot\":\n return { [row.fieldName]: { not: row.value } };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class JSONBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const isArray = Array.isArray(row.value);\n switch (row.operator) {\n case \"equals\":\n return { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } };\n\n case \"notEquals\":\n return {\n NOT: { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } }\n };\n case \"containsAny\":\n if (!isArray)\n return { [row.fieldName]: { path: row.jsonPath, equals: isArray ? row.value[0] : row.value } };\n return {\n OR: (row.value as any[]).map((v) => ({ [row.fieldName]: { path: row.jsonPath, equals: v } }))\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\n\nexport class LookupBuilder implements ParamsBuilder {\n build(row: RowState): object {\n if (!Array.isArray(row.value)) {\n return {};\n }\n const lookupField = row.lookupFieldName ?? \"id\";\n switch (row.operator) {\n case \"containsAny\":\n return {\n OR: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }))\n };\n case \"containsOnly\":\n return {\n AND: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }))\n };\n case \"containsAll\": {\n const includes = row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } }));\n const excludes = { [row.fieldName]: { none: { [lookupField]: { notIn: row.value } } } };\n return {\n AND: [...includes, excludes]\n };\n }\n case \"notContains\":\n return {\n NOT: { OR: row.value.map((v) => ({ [row.fieldName]: { some: { [lookupField]: v } } })) }\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nexport class NumberBuilder implements ParamsBuilder {\n build(row: RowState): object {\n const value = Number(row.value);\n switch (row.operator) {\n case \"gt\":\n return {\n [row.fieldName]: helper({ gt: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"gte\":\n return {\n [row.fieldName]: helper({ gte: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lt\":\n return {\n [row.fieldName]: helper({ lt: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lte\":\n return {\n [row.fieldName]: helper({ lte: value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder } from \"../types\";\nimport { RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nexport class TextBuilder implements ParamsBuilder {\n build(row: RowState): object {\n switch (row.operator) {\n case \"contains\":\n return {\n [row.fieldName]: helper(\n { contains: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"beginsWith\":\n return {\n [row.fieldName]: helper(\n { startsWith: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"endsWith\":\n return {\n [row.fieldName]: helper(\n { endsWith: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: row.value },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notBeginsWith\":\n return {\n [row.fieldName]: helper(\n { not: { startsWith: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notEndsWith\":\n return {\n [row.fieldName]: helper(\n { not: { endsWith: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n case \"notContains\":\n return {\n [row.fieldName]: helper(\n { not: { contains: row.value } },\n {\n multiTableSearch: row.multiTableSearch,\n insensitive: true\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { ParamsBuilder, RowState } from \"../types\";\nimport { helper } from \"./helper\";\n\nconst regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport class UUIDBuilder implements ParamsBuilder {\n build(row: RowState): object {\n if (!regex.test(row.value)) {\n return { [row.fieldName]: {} };\n }\n switch (row.operator) {\n case \"gt\":\n return {\n [row.fieldName]: helper({ gt: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"gte\":\n return {\n [row.fieldName]: helper({ gte: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lt\":\n return {\n [row.fieldName]: helper({ lt: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"lte\":\n return {\n [row.fieldName]: helper({ lte: row.value }, { multiTableSearch: row.multiTableSearch })\n };\n case \"equals\":\n return {\n [row.fieldName]: helper(\n { equals: row.value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n case \"notEquals\":\n return {\n [row.fieldName]: helper(\n { not: row.value },\n {\n multiTableSearch: row.multiTableSearch\n }\n )\n };\n default:\n return {};\n }\n }\n}\n","import { FieldType, ParamsBuilder } from \"../types\";\nimport { CheckboxBuilder } from \"./checkbox\";\nimport { DatetimeBuilder } from \"./datetime\";\nimport { DateMonthBuilder } from \"./datemonth\";\nimport { DropdownBuilder } from \"./dropdown\";\nimport { JSONBuilder } from \"./json\";\nimport { LookupBuilder } from \"./lookup\";\nimport { NumberBuilder } from \"./number\";\nimport { TextBuilder } from \"./text\";\nimport { UUIDBuilder } from \"./uuid\";\n\nexport function getBuilder(fieldType: FieldType): ParamsBuilder {\n switch (fieldType) {\n case \"text\":\n return new TextBuilder();\n case \"number\":\n return new NumberBuilder();\n case \"date\":\n return new DatetimeBuilder();\n case \"datetime\":\n return new DatetimeBuilder();\n case \"datemonth\":\n return new DateMonthBuilder();\n case \"checkbox\":\n return new CheckboxBuilder();\n case \"dropdown\":\n return new DropdownBuilder();\n case \"lookup\":\n return new LookupBuilder();\n case \"uuid\":\n return new UUIDBuilder();\n case \"json\":\n return new JSONBuilder();\n }\n}\n","import React, { useMemo, useCallback } from \"react\";\nimport { isAfter, isValid, parseISO } from \"date-fns\";\nimport { Search } from \"lucide-react\";\nimport ExpandCollapse from \"./conditions/ExpandCollapse\";\nimport { useAdvanceSearch } from \"../hooks/useAdvanceSearch\";\nimport type { AdvanceSearchProps } from \"../types\";\nimport { AdvanceSearchRow } from \"./conditions/AdvanceSearchRow\";\nimport { Label } from \"@/components/ui/label\";\nimport { Button } from \"@/components/button\";\nimport { useForm } from \"react-hook-form\";\nimport { Form } from \"@/components/ui/form\";\nimport { getBuilder } from \"../builder\";\n\nconst AdvanceSearch: React.FC<AdvanceSearchProps> = ({\n fields,\n portalId,\n iconColor = \"#ffffff\",\n limitRows = 4,\n onSearch,\n onClear,\n shortDateFormat\n}) => {\n const fieldsData = useMemo(() => {\n if (fields.length === 0) throw new Error(\"fields cannot be an empty array\");\n return fields || [];\n }, [fields]);\n\n const {\n rows,\n addRow,\n removeRow,\n clearAllRow,\n changeField,\n changeOperator,\n operatorsForField,\n fieldOptions\n } = useAdvanceSearch({ fields: fieldsData, limitRows });\n\n const form = useForm<{ [key: string]: string | undefined }>({\n mode: \"onSubmit\",\n reValidateMode: \"onSubmit\",\n defaultValues: {}\n });\n\n const { handleSubmit, unregister, resetField, getValues, clearErrors, setError } = form;\n\n const [operatorErrors, setOperatorErrors] = React.useState<Record<string, string>>({});\n const clearOperatorError = useCallback(\n (rowId: string) => {\n setOperatorErrors((prev) => {\n if (!(rowId in prev)) return prev;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [rowId]: _removed, ...rest } = prev;\n return rest;\n });\n },\n [setOperatorErrors]\n );\n\n const clearValue = useCallback(\n (rowId: string, which: \"value\" | \"value2\") => {\n const fieldName = `${which}_${rowId}` as `value_${string}` | `value2_${string}`;\n resetField(fieldName, { defaultValue: undefined });\n clearErrors(fieldName);\n\n const counterpart =\n which === \"value\" ?\n (`value2_${rowId}` as `value2_${string}`)\n : (`value_${rowId}` as `value_${string}`);\n clearErrors(counterpart);\n },\n [resetField, clearErrors]\n );\n\n const parseRangeValue = useCallback((raw: string, fieldType: string) => {\n if (!raw) return undefined;\n const normalized = fieldType === \"datemonth\" ? `${raw}-01` : raw;\n const parsed = parseISO(normalized);\n return isValid(parsed) ? parsed : undefined;\n }, []);\n\n const onSubmit = useCallback(() => {\n const operatorValidation: Record<string, string> = {};\n\n rows.forEach((r) => {\n const availableOperators = operatorsForField(r.fieldName);\n if (!availableOperators.length || !availableOperators.includes(r.operator)) {\n operatorValidation[r.id] = \"Please select an operator.\";\n }\n });\n\n setOperatorErrors(operatorValidation);\n if (Object.keys(operatorValidation).length > 0) {\n return;\n }\n\n const currentValues = getValues();\n let hasRangeError = false;\n\n const rawRows = rows.map((r) => {\n const startFieldName = `value_${r.id}` as `value_${string}`;\n const startValue = currentValues[startFieldName] ?? \"\";\n\n if (r.operator === \"between\") {\n const endFieldName = `value2_${r.id}` as `value2_${string}`;\n const endValue = currentValues[endFieldName] ?? \"\";\n\n if (startValue && endValue) {\n const startDate = parseRangeValue(startValue, r.fieldType);\n const endDate = parseRangeValue(endValue, r.fieldType);\n\n if (startDate && endDate && isAfter(startDate, endDate)) {\n hasRangeError = true;\n setError(startFieldName, {\n type: \"validate\",\n message: \"Start value must be before end value.\"\n });\n setError(endFieldName, {\n type: \"validate\",\n message: \"End value must be after start value.\"\n });\n } else {\n clearErrors([startFieldName, endFieldName]);\n }\n }\n\n return {\n ...r,\n value: startValue ?? \"\",\n value2: endValue ?? \"\"\n };\n }\n\n return {\n ...r,\n value: startValue ?? \"\"\n };\n });\n\n if (hasRangeError) {\n return;\n }\n\n const param = {\n AND: rawRows\n .map((r) => {\n const builder = getBuilder(r.fieldType);\n return builder.build(r);\n })\n .filter(Boolean) as Record<string, unknown>[]\n };\n\n if (onSearch) {\n onSearch(param);\n }\n }, [\n clearErrors,\n getValues,\n onSearch,\n operatorsForField,\n parseRangeValue,\n rows,\n setError,\n setOperatorErrors\n ]);\n\n return (\n <ExpandCollapse\n title={<Search className=\"w-5 h-5\" style={{ color: iconColor }} />}\n portalId={portalId}\n >\n <Form {...form}>\n <form onSubmit={handleSubmit(onSubmit)} className=\"flex justify-center w-full\">\n <div className=\"w-full max-w-4xl rounded-xl bg-white\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-semibold text-gray-700\">Select Field</Label>\n </div>\n <div className=\"space-y-6\">\n {rows.map((row, idx) => (\n <AdvanceSearchRow\n key={row.id}\n row={row}\n shortDateFormat={shortDateFormat}\n isFirst={idx === 0}\n fields={fieldsData}\n fieldOptions={fieldOptions}\n operators={operatorsForField(row.fieldName)}\n operatorError={operatorErrors[row.id]}\n onChangeField={(f) => {\n changeField(row.id, f);\n clearOperatorError(row.id);\n clearValue(row.id, \"value\");\n clearValue(row.id, \"value2\");\n }}\n onChangeOperator={(op) => {\n changeOperator(row.id, op);\n clearOperatorError(row.id);\n clearValue(row.id, \"value\");\n clearValue(row.id, \"value2\");\n }}\n onAdd={addRow}\n onRemove={() => {\n clearOperatorError(row.id);\n removeRow(row.id);\n unregister(`value_${row.id}`);\n unregister(`value2_${row.id}`);\n }}\n onClearValue={(which) => {\n clearValue(row.id, which);\n }}\n disableAdd={limitRows !== undefined && rows.length >= limitRows}\n />\n ))}\n </div>\n <div className=\"mt-6 flex flex-col-reverse gap-3 pt-4 md:flex-row md:justify-end\">\n <Button\n type=\"button\"\n className=\"w-full bg-[#8b8b8b] text-white md:w-auto md:min-w-[120px]\"\n onClick={() => {\n clearAllRow();\n setOperatorErrors({});\n Object.keys(getValues()).forEach((k) => resetField(k));\n if (onClear) onClear();\n }}\n data-testid=\"advsearch-btn-clear\"\n >\n Clear Search\n </Button>\n <Button\n type=\"submit\"\n className=\"w-full bg-[#379a2a] text-white hover:bg-[#2f7c21] md:w-auto md:min-w-[120px]\"\n data-testid=\"advsearch-btn-search\"\n >\n Search\n </Button>\n </div>\n </div>\n </form>\n </Form>\n </ExpandCollapse>\n );\n};\n\nexport default AdvanceSearch;\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nfunction Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />;\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />;\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","import { reSplitAlphaNumeric } from \"@tanstack/react-table\";\n\nexport function compareAlphanumeric(aStr: string, bStr: string) {\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n while (a.length && b.length) {\n const aa = a.shift()!;\n const bb = b.shift()!;\n\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n\n const combo = [an, bn].sort();\n\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1;\n }\n\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n\n return a.length - b.length;\n}\n","export function booleanToSelectValue(\n value: boolean | undefined,\n options?: {\n fallbackUndefinedValue?: string;\n }\n): string {\n if (value === true) return \"true\";\n if (value === false) return \"false\";\n return options?.fallbackUndefinedValue ?? \"\";\n}\n\nexport function selectValueToBoolean(value: string): boolean | undefined {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n return undefined;\n}\n","import React, { useCallback, useRef, useState } from \"react\";\n\nexport type UseHoverResult = {\n ref: React.RefCallback<HTMLElement>;\n hovering: boolean;\n};\n\nconst useHover = (): UseHoverResult => {\n const [hovering, setHovering] = useState<boolean>(false);\n const prevRef = useRef<HTMLElement>(null);\n\n const onMouseEnter = useCallback(() => setHovering(true), []);\n const onMouseLeave = useCallback(() => setHovering(false), []);\n\n const nodeRefCallback = useCallback<UseHoverResult[\"ref\"]>(\n (node) => {\n if (prevRef.current) {\n prevRef.current.removeEventListener(\"mouseenter\", onMouseEnter);\n prevRef.current.removeEventListener(\"mouseleave\", onMouseLeave);\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n node.addEventListener(\"mouseenter\", onMouseEnter);\n node.addEventListener(\"mouseleave\", onMouseLeave);\n }\n\n prevRef.current = node;\n },\n [onMouseEnter, onMouseLeave]\n );\n\n return {\n ref: nodeRefCallback,\n hovering\n };\n};\n\nexport default useHover;\n","import { useEffect, useRef, useState } from \"react\";\n\ntype State = {\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\n\ntype UseIntersectionObserverOptions = {\n root?: Element | Document | null;\n rootMargin?: string;\n threshold?: number | number[];\n freezeOnceVisible?: boolean;\n onChange?: (isIntersecting: boolean, entry: IntersectionObserverEntry) => void;\n initialIsIntersecting?: boolean;\n};\n\ntype IntersectionReturn = [\n (node?: Element | null) => void,\n boolean,\n IntersectionObserverEntry | undefined\n] & {\n ref: (node?: Element | null) => void;\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\n\nconst useIntersectionObserver = ({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n}: UseIntersectionObserverOptions = {}): IntersectionReturn => {\n const [ref, setRef] = useState<Element | null>(null);\n\n const [state, setState] = useState<State>(() => ({\n isIntersecting: initialIsIntersecting,\n entry: undefined\n }));\n\n const callbackRef = useRef<UseIntersectionObserverOptions[\"onChange\"]>(null);\n\n callbackRef.current = onChange;\n\n const frozen = state.entry?.isIntersecting && freezeOnceVisible;\n\n useEffect(() => {\n // Ensure we have a ref to observe\n if (!ref) return;\n\n // Ensure the browser supports the Intersection Observer API\n if (!(\"IntersectionObserver\" in window)) return;\n\n // Skip if frozen\n if (frozen) return;\n\n let unobserve: (() => void) | undefined;\n\n const observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]): void => {\n const thresholds =\n Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n\n entries.forEach((entry) => {\n const isIntersecting =\n entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n\n setState({ isIntersecting, entry });\n\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = undefined;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(ref);\n\n return () => {\n observer.disconnect();\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n\n const prevRef = useRef<Element | null>(null);\n\n useEffect(() => {\n if (\n !ref &&\n state.entry?.target &&\n !freezeOnceVisible &&\n !frozen &&\n prevRef.current !== state.entry.target\n ) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: undefined });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n\n const result = [setRef, !!state.isIntersecting, state.entry] as IntersectionReturn;\n\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n\n return result;\n};\n\nexport default useIntersectionObserver;\n","import { useEffect, useState } from \"react\";\n\nexport type UseMediaQueryOptions = {\n query: string;\n};\n\nexport type UseMediaQueryResult = boolean;\n\nconst isValidMediaQueryString = (query: string): boolean => {\n return query !== \"not all\";\n};\n\nconst useMediaQuery = ({ query }: UseMediaQueryOptions): UseMediaQueryResult => {\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const mql = window.matchMedia(query);\n\n if (!isValidMediaQueryString(mql.media)) {\n throw new Error(`${query}: invalid media query string.`);\n }\n\n const detectMediaChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n setMatches(mql.matches);\n\n mql.addEventListener(\"change\", detectMediaChange);\n return () => {\n mql.removeEventListener(\"change\", detectMediaChange);\n };\n }, [query]);\n\n return matches;\n};\n\nexport default useMediaQuery;\n","import { useMediaQuery } from \"../useMediaQuery\";\n\nexport type UseScreenSizeResult = {\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n};\n\nexport type Breakpoints = {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n};\n\nconst useScreenSize = (breakpoints?: Breakpoints): UseScreenSizeResult => {\n const isMobile = useMediaQuery({ query: breakpoints?.mobile ?? \"(max-width: 767px)\" });\n const isTablet = useMediaQuery({\n query: breakpoints?.tablet ?? \"(min-width: 768px) and (max-width: 1023px)\"\n });\n const isDesktop = useMediaQuery({ query: breakpoints?.desktop ?? \"(min-width: 1024px)\" });\n\n return { isMobile, isTablet, isDesktop };\n};\n\nexport default useScreenSize;\n","import { useEffect, useState } from \"react\";\nimport { debounce } from \"../../utils\";\n\nexport type UseTruncatedOptions<T> = {\n elementRef: React.RefObject<T | null>;\n onChange?: (isTruncated: boolean) => void;\n resizeDetectDelay?: number;\n};\n\nexport type UseTruncatedResult = boolean;\n\nconst useTruncated = <T extends HTMLElement = any>({\n elementRef,\n onChange,\n resizeDetectDelay = 150\n}: UseTruncatedOptions<T>): UseTruncatedResult => {\n const [isTruncated, setIsTruncated] = useState(false);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n const checkTruncate = debounce(() => {\n const truncated = element.scrollWidth > element.clientWidth;\n setIsTruncated((prev) => {\n if (prev !== truncated) {\n onChange?.(truncated);\n }\n return truncated;\n });\n }, resizeDetectDelay);\n\n checkTruncate();\n\n const observer = new ResizeObserver(checkTruncate);\n observer.observe(element);\n window.addEventListener(\"resize\", checkTruncate);\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", checkTruncate);\n };\n }, [elementRef, onChange, resizeDetectDelay]);\n\n return isTruncated;\n};\n\nexport default useTruncated;\n","import type { HeaderContext } from \"@tanstack/react-table\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useHover } from \"../../../hooks\";\nimport { cn } from \"../../../utils\";\n\nexport type SorterProps = {\n show?: boolean;\n};\n\nexport type HeaderCellProps<TData = any, TValue = any> = {\n label: React.ReactNode;\n context: HeaderContext<TData, TValue>;\n rootClassName?: string;\n labelClassName?: string;\n sorterProps?: SorterProps;\n align?: \"left\" | \"center\" | \"right\";\n};\n\nconst HeaderCell = ({\n rootClassName,\n labelClassName,\n context,\n label,\n sorterProps,\n align = \"left\"\n}: HeaderCellProps) => {\n const { ref, hovering } = useHover();\n\n const showSorter = sorterProps?.show ?? context.column.getCanSort();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-2\",\n {\n \"cursor-pointer\": context?.column?.getCanSort()\n },\n rootClassName\n )}\n onClick={(event) => {\n if (!showSorter) return;\n event.preventDefault();\n\n if (context?.column?.getCanSort()) {\n context?.column?.toggleSorting();\n }\n }}\n >\n <div\n className={cn(\"flex-1 flex items-center\", {\n \"justify-start\": align === \"left\",\n \"justify-center\": align === \"center\",\n \"justify-end\": align === \"right\"\n })}\n >\n <span className={cn(\"inline-block font-bold\", labelClassName)}>{label}</span>\n </div>\n {showSorter && (\n <div\n className=\"flex flex-col -space-y-2\"\n title={\n context.column.getCanSort() ?\n context.column.getNextSortingOrder() === \"asc\" ?\n \"Sort ascending\"\n : context.column.getNextSortingOrder() === \"desc\" ?\n \"Sort descending\"\n : \"Clear sort\"\n : undefined\n }\n >\n <ChevronUp\n className={cn(\"stroke-[#BBBBBB]\", {\n \"stroke-sus-gray-5\": context?.column?.getIsSorted() === \"asc\",\n \"stroke-sus-gray-5/45\": context?.column?.getNextSortingOrder() === \"asc\" && hovering\n })}\n size={16}\n strokeWidth={3}\n />\n <ChevronDown\n className={cn(\"stroke-[#BBBBBB]\", {\n \"stroke-sus-gray-5\": context?.column?.getIsSorted() === \"desc\",\n \"stroke-sus-gray-5/45\": context?.column?.getNextSortingOrder() === \"desc\" && hovering\n })}\n size={16}\n strokeWidth={3}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default HeaderCell;\n","import * as React from \"react\";\nimport { cn } from \"@/utils\";\n\nfunction TableContainer({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"table-container\"\n className={cn(\"relative w-full overflow-x-auto\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm border-separate border-spacing-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b bg-[#f7f4f4]\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\"data-[state=selected]:bg-[#dfeae3]\", className)}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-9 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] hover:bg-gray-200 bg-[#F0F0F0] truncate\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 h-10 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] border-b truncate\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n TableContainer,\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption\n};\n","import type { Header } from \"@tanstack/react-table\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ColumnResizerProps = {\n header: Header<any, any>;\n className?: string;\n style?: CSSProperties;\n};\n\nconst ColumnResizer = ({ header, className, style }: ColumnResizerProps) => {\n if (!header.column.getCanResize()) {\n return null;\n }\n\n const resizeHandler = header.getResizeHandler();\n\n return (\n <div\n className={cn(\n \"z-[2] absolute top-0 right-0 h-full w-1 select-none touch-none cursor-col-resize hover:bg-[#41875c]/45 active:bg-[#41875c]\",\n className\n )}\n onDoubleClick={() => header.column.resetSize()}\n onTouchStart={resizeHandler}\n onMouseDown={resizeHandler}\n style={style}\n />\n );\n};\n\nexport default ColumnResizer;\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ColumnSeparatorProps = {\n show?: boolean;\n className?: string;\n style?: React.CSSProperties;\n};\n\nconst ColumnSeparator = ({ show, className, ...props }: ColumnSeparatorProps) => {\n if (!show) return null;\n return (\n <span\n data-slot=\"table-head-separator\"\n className={cn(\"absolute right-0 top-1/2 h-4 w-px -translate-y-1/2 bg-gray-300\", className)}\n {...props}\n />\n );\n};\n\nexport default React.memo(ColumnSeparator);\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type ContentSlot = {\n content?: React.ReactNode;\n icon?: React.ReactNode;\n wrapperProps?: React.ComponentProps<\"div\">;\n};\n\nexport type StatusContentSlotProps = ContentSlot & {\n defaultWrapperProps?: React.ComponentProps<\"div\">;\n defaultIcon?: React.ReactNode;\n};\n\nconst StatusContentSlot = ({\n content,\n icon,\n wrapperProps = {},\n defaultWrapperProps,\n defaultIcon\n}: StatusContentSlotProps) => {\n if (!content && !icon && !defaultIcon) return null;\n\n const mergedProps: React.ComponentProps<\"div\"> = {\n ...defaultWrapperProps,\n ...wrapperProps,\n className: cn(defaultWrapperProps?.className, wrapperProps?.className)\n };\n\n return (\n <div {...mergedProps}>\n {icon ?? defaultIcon}\n {content}\n </div>\n );\n};\n\nexport default React.memo(StatusContentSlot);\n","import { type Table } from \"@tanstack/react-table\";\nimport { Bug } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype StateKey =\n | \"columnFilters\"\n | \"globalFilter\"\n | \"sorting\"\n | \"pagination\"\n | \"columnVisibility\"\n | \"columnOrder\"\n | \"rowSelection\"\n | \"expanded\"\n | \"grouping\"\n | \"columnPinning\"\n | \"columnSizing\"\n | \"columnSizingInfo\"\n | \"rowPinning\";\n\nconst stateOptions: readonly StateKey[] = [\n \"columnFilters\",\n \"globalFilter\",\n \"sorting\",\n \"pagination\",\n \"columnVisibility\",\n \"columnOrder\",\n \"rowSelection\",\n \"expanded\",\n \"grouping\",\n \"columnPinning\",\n \"columnSizing\",\n \"columnSizingInfo\",\n \"rowPinning\"\n];\n\ntype ModelKey = keyof Table<any>;\n\nconst modelOptions: readonly ModelKey[] = [\n \"getRowModel\",\n \"getGroupedRowModel\",\n \"getPaginationRowModel\",\n \"getCoreRowModel\",\n \"getFilteredRowModel\",\n \"getFilteredSelectedRowModel\",\n \"getSortedRowModel\",\n \"getPreExpandedRowModel\",\n \"getGroupedSelectedRowModel\",\n \"getPrePaginationRowModel\",\n \"getPreSelectedRowModel\",\n \"getPreSortedRowModel\",\n \"getSelectedRowModel\",\n \"getExpandedRowModel\",\n \"getIsAllColumnsVisible\",\n \"getIsSomeColumnsPinned\",\n \"getIsSomeColumnsVisible\",\n \"getHeaderGroups\",\n \"getFlatHeaders\",\n \"getLeafHeaders\",\n \"getLeftFlatHeaders\",\n \"getCenterLeafHeaders\",\n \"getRightFlatHeaders\",\n \"getAllColumns\",\n \"getAllFlatColumns\",\n \"getAllLeafColumns\",\n \"getLeftLeafColumns\",\n \"getCenterLeafColumns\",\n \"getRightLeafColumns\",\n \"getVisibleFlatColumns\",\n \"getVisibleLeafColumns\",\n \"getLeftVisibleLeafColumns\",\n \"getRightVisibleLeafColumns\",\n \"getCenterVisibleLeafColumns\"\n];\n\nconst DataTableDevTool = ({ table }: { table: Table<any> }) => {\n const [open, setOpen] = useState(false);\n const [visibleStates, setVisibleStates] = useState<StateKey[]>([]);\n const [visibleModels, setVisibleModels] = useState<ModelKey[]>([]);\n const tableState = table.getState();\n\n const toggleValue = <U extends string>(arr: U[], value: U): U[] =>\n arr.includes(value) ? arr.filter((v) => v !== value) : [...arr, value];\n\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_key: string, value: any) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n return value;\n };\n };\n\n const renderStateValue = (key: StateKey) => {\n const value = tableState[key];\n if (value == null) return null;\n return (\n <div key={key} className=\"mt-4\">\n <div className=\"font-bold capitalize\">{key}</div>\n <pre className=\"bg-gray-100 text-xs p-2 rounded overflow-x-auto whitespace-pre-wrap\">\n {JSON.stringify(value, null, 2)}\n </pre>\n </div>\n );\n };\n\n const renderModelValue = (key: ModelKey) => {\n let value: unknown;\n try {\n value = (table as any)[key]();\n } catch {\n value = undefined;\n }\n if (value == null) return null;\n let jsonString = \"\";\n try {\n jsonString = JSON.stringify(value, getCircularReplacer(), 2);\n } catch {\n jsonString = \"[Cannot stringify]\";\n }\n\n return (\n <div key={key} className=\"mt-4\">\n <div className=\"font-bold capitalize\">{key}</div>\n <pre className=\"bg-gray-100 text-xs p-2 rounded overflow-x-auto whitespace-pre-wrap\">\n {jsonString}\n </pre>\n </div>\n );\n };\n\n if (process.env.NODE_ENV === \"production\") return null;\n\n return (\n <div>\n {/* Floating Button */}\n <button\n onClick={() => setOpen(true)}\n className=\"fixed bottom-6 right-6 z-50 rounded-full bg-white border shadow p-3\"\n aria-label=\"Open debug panel\"\n >\n <Bug className=\"w-5 h-5\" />\n </button>\n\n {/* Sidebar Debug Panel */}\n {open && (\n <aside className=\"fixed top-0 right-0 h-full w-[420px] bg-white shadow-lg border-l border-gray-200 z-50 flex flex-col\">\n {/* Header */}\n <header className=\"flex items-center justify-between p-4 border-b border-gray-200\">\n <h2 className=\"text-lg font-semibold\">Debug Table State & Models</h2>\n <button onClick={() => setOpen(false)} className=\"text-xl font-bold\" aria-label=\"Close\">\n ×\n </button>\n </header>\n\n {/* Main Content */}\n <main className=\"overflow-auto p-4 flex-grow space-y-4\">\n <section className=\"max-h-80 overflow-y-auto overflow-x-hidden\">\n {/* Select Table States */}\n <fieldset>\n <legend className=\"block text-sm font-medium mb-1\">Show Table State</legend>\n <div className=\"space-y-1\">\n {stateOptions.map((stateKey) => (\n <label\n key={stateKey}\n className=\"flex items-center gap-2 cursor-pointer hover:bg-gray-50 p-1 rounded\"\n >\n <input\n type=\"checkbox\"\n className=\"accent-blue-500\"\n checked={visibleStates.includes(stateKey)}\n onChange={() => setVisibleStates(toggleValue(visibleStates, stateKey))}\n />\n <span className=\"truncate\">{stateKey}</span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Select Table Models */}\n <fieldset>\n <legend className=\"block text-sm font-medium mb-1\">Show Table Models</legend>\n <div className=\"space-y-1\">\n {modelOptions.map((modelKey) => (\n <label\n key={modelKey}\n className=\"flex items-center gap-2 cursor-pointer hover:bg-gray-50 p-1 rounded\"\n >\n <input\n type=\"checkbox\"\n className=\"accent-green-500\"\n checked={visibleModels.includes(modelKey)}\n onChange={() => setVisibleModels(toggleValue(visibleModels, modelKey))}\n />\n <span className=\"truncate\">{modelKey}</span>\n </label>\n ))}\n </div>\n </fieldset>\n </section>\n\n {/* JSON Outputs */}\n <hr className=\"my-2 border-gray-300\" />\n {visibleStates.map(renderStateValue)}\n {visibleModels.map(renderModelValue)}\n </main>\n </aside>\n )}\n </div>\n );\n};\n\nexport default DataTableDevTool;\n","import type { RowData, Column } from \"@tanstack/react-table\";\nimport type { CSSProperties } from \"react\";\nimport type { DataTableRowClickHandler } from \"./DataTable\";\nimport { cn } from \"../../utils\";\n\nexport function getColumnPinningInfo(column: Column<any, any>) {\n const isPinned = column.getIsPinned();\n\n const isLastLeftPinnedColumn = isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinnedColumn = isPinned === \"right\" && column.getIsFirstColumn(\"right\");\n\n return { isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn };\n}\n\nexport function getColumnPinningStyles(column: Column<any, any>): {\n classes: string;\n style: Pick<CSSProperties, \"left\" | \"right\">;\n} {\n const { isPinned, isFirstRightPinnedColumn, isLastLeftPinnedColumn } = getColumnPinningInfo(column);\n\n const classes = cn(\n isPinned ? \"sticky\" : \"relative\",\n isPinned ? \"z-[1]\" : \"z-0\",\n isLastLeftPinnedColumn && \"shadow-[inset_-1px_0_0_0_black]\",\n isFirstRightPinnedColumn && \"shadow-[inset_1px_0_0_0_black]\"\n );\n\n const style: CSSProperties = {\n left: isPinned === \"left\" ? column.getStart(\"left\") : undefined,\n right: isPinned === \"right\" ? column.getAfter(\"right\") : undefined\n };\n\n return { classes, style };\n}\n\ntype RowClickHandlers = {\n onClick: (event: React.MouseEvent<HTMLTableRowElement>) => void;\n};\n\ntype RowClickContext<TData extends RowData> = {\n rowData: Parameters<DataTableRowClickHandler<TData>>[0];\n row: Parameters<DataTableRowClickHandler<TData>>[1][\"row\"];\n table: Parameters<DataTableRowClickHandler<TData>>[1][\"table\"];\n};\n\nexport function getRowClickHandlers<TData extends RowData>(\n handler: DataTableRowClickHandler<TData>,\n { rowData, row, table }: RowClickContext<TData>\n): RowClickHandlers {\n const handleClick = (event: React.MouseEvent<HTMLTableRowElement>) => {\n if (event.detail === 1) {\n handler(rowData, { event, row, table, clickType: \"single\" });\n }\n if (event.detail >= 2) {\n handler(rowData, { event, row, table, clickType: \"double\" });\n }\n };\n return {\n onClick: handleClick\n };\n}\n","import React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n getFilteredRowModel,\n getSortedRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n type Table as TanstackTableType,\n type Column,\n type RowData,\n type TableOptions,\n type ColumnFiltersState,\n type TableState,\n type SortingState,\n type OnChangeFn,\n type FilterFnOption,\n type Row,\n type Cell,\n type Header,\n type ColumnDef,\n type HeaderGroup,\n type ColumnOrderState,\n type VisibilityState,\n type ColumnPinningState,\n type RowSelectionState,\n type ExpandedState,\n type GroupingState,\n type GroupingOptions,\n type ColumnResizeMode\n} from \"@tanstack/react-table\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableHeader,\n TableRow\n} from \"../ui/table\";\nimport ColumnResizer, { type ColumnResizerProps } from \"./ColumnResizer\";\nimport ColumnSeparator, { type ColumnSeparatorProps } from \"./ColumnSeparator\";\nimport StatusContentSlot, { type ContentSlot } from \"./StatusContentSlot\";\nimport DataTableDevTool from \"./DataTableDevTool\";\nimport { SuiEmptyDataIcon } from \"../icons\";\nimport { Spinner } from \"../ui/spinner\";\nimport { cn } from \"../../utils\";\nimport { stripNullishObject } from \"../../utils/filters\";\nimport { getColumnPinningInfo, getColumnPinningStyles, getRowClickHandlers } from \"./helpers\";\n\nexport type DataTableColumnFilterProps<TData extends RowData> = {\n column: Column<TData>;\n table: TanstackTableType<TData>;\n};\n\nexport type DataTableFilterConfig = {\n enabled: boolean;\n manual?: boolean;\n maxDepth?: number;\n filterFromLeafRows?: boolean;\n};\n\nexport type DataTableColumnFilter = {\n enabled?: boolean;\n initialState?: ColumnFiltersState;\n state?: ColumnFiltersState;\n onFilterChange?: OnChangeFn<ColumnFiltersState>;\n};\n\nexport type DataTableGlobalFilter<TData extends RowData> = {\n enabled?: boolean;\n initialState?: any;\n state?: any;\n filterFn?: FilterFnOption<TData>;\n onFilterChange?: OnChangeFn<any>;\n canColumnFilterable?: (column: Column<TData, unknown>) => boolean;\n};\n\nexport type DataTableFilters<TData extends RowData> = DataTableFilterConfig & {\n column?: DataTableColumnFilter;\n global?: DataTableGlobalFilter<TData>;\n};\n\nexport type DataTableColumnSorting = {\n enabled: boolean;\n manual?: boolean;\n initialState?: SortingState;\n state?: SortingState;\n sortDescFirst?: boolean;\n onSortingChange?: OnChangeFn<SortingState>;\n};\n\nexport type DataTableRowSelection<TData> = {\n enabled: boolean;\n initialState?: RowSelectionState;\n state?: RowSelectionState;\n canRowSelectable?: boolean | ((row: Row<TData>) => boolean);\n multiSelect?: boolean;\n onSelectionChange?: OnChangeFn<RowSelectionState>;\n};\n\nexport type DataTableColumnPinning = {\n enabled: boolean;\n initialState?: ColumnPinningState;\n state?: ColumnPinningState;\n onPinningChange?: OnChangeFn<ColumnPinningState>;\n};\n\nexport type DataTableColumnOrdering = {\n enabled: boolean;\n initialState?: string[];\n state?: string[];\n onOrderChange?: OnChangeFn<ColumnOrderState>;\n};\n\nexport type DataTableColumnVisibility = {\n enabled: boolean;\n initialState?: VisibilityState;\n state?: VisibilityState;\n onVisibilityChange?: OnChangeFn<VisibilityState>;\n};\n\nexport type DataTableRowExpansion<TData extends RowData> = {\n enabled: boolean;\n manual?: boolean;\n initialState?: ExpandedState;\n state?: ExpandedState;\n onExpandedChange?: OnChangeFn<ExpandedState>;\n isRowExpanded?: (row: Row<TData>) => boolean;\n canRowExpand?: (row: Row<TData>) => boolean;\n};\n\nexport type DataTableColumnGrouping = {\n manual?: boolean;\n enabled: boolean;\n groupedMode?: false | \"reorder\" | \"remove\";\n initialState?: GroupingState;\n state?: GroupingState;\n customAggregationFns?: GroupingOptions[\"aggregationFns\"];\n onGroupingChange?: OnChangeFn<GroupingState>;\n};\n\nexport type RowClickType = \"single\" | \"double\";\n\nexport type DataTableRowClickHandler<TData extends RowData> = (\n rowData: TData,\n info: {\n event: React.MouseEvent<HTMLTableRowElement>;\n row: Row<TData>;\n table: TanstackTableType<TData>;\n clickType: RowClickType;\n }\n) => void;\n\nexport type DataTableRowIdKeyHandler<TData extends RowData> = (\n originalRow: TData,\n index: number,\n parent?: Row<TData>\n) => string;\n\nexport type DataTableHeaderCell<TData extends RowData> = {\n id: string;\n columnId: string;\n content: React.ReactNode;\n originalCell: Header<TData, unknown>;\n};\n\nexport type DataTableRenderHeaderProps<TData extends RowData> = {\n headerGroup: HeaderGroup<TData>;\n table: TanstackTableType<TData>;\n cells: DataTableHeaderCell<TData>[];\n};\n\nexport type DataTableRenderHeaderHandler<TData extends RowData> = (\n props: DataTableRenderHeaderProps<TData>\n) => React.ReactNode;\n\nexport type DataTableRowCell<TData extends RowData> = {\n id: string;\n columnId: string;\n content: React.ReactNode;\n originalCell: Cell<TData, unknown>;\n};\n\nexport type DataTableRenderRowProps<TData extends RowData> = {\n row: Row<TData>;\n cells: DataTableRowCell<TData>[];\n table: TanstackTableType<TData>;\n};\n\nexport type DataTableRenderRowHandler<TData extends RowData> = (\n props: DataTableRenderRowProps<TData>\n) => React.ReactNode;\n\nexport type DataTableChildrenKeyHandler<TData> = (\n originalRow: TData,\n index: number\n) => TData[] | undefined;\n\nexport type DatatableColumnResizing = {\n enabled: boolean;\n resizeMode?: ColumnResizeMode;\n};\n\nexport type DataTableColumnSeparatorProps = {\n headerCell?: ColumnSeparatorProps;\n};\n\nexport type DataTableComponentProps<TData> = {\n containerProps?: React.ComponentProps<typeof TableContainer>;\n tableProps?: React.ComponentProps<typeof Table>;\n tableHeaderProps?: React.ComponentProps<typeof TableHeader>;\n tableHeadCellProps?:\n | React.ComponentProps<typeof TableHead>\n | ((info: {\n header: Header<TData, unknown>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableHead>);\n tableBodyProps?: React.ComponentProps<typeof TableBody>;\n tableDataRowProps?:\n | React.ComponentProps<typeof TableRow>\n | ((info: {\n row: Row<TData>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableRow>);\n tableDataCellProps?:\n | React.ComponentProps<typeof TableCell>\n | ((info: {\n row: Row<TData>;\n cell: Cell<TData, unknown>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableCell>);\n tableFilterCellProps?:\n | React.ComponentProps<typeof TableCell>\n | ((info: {\n column: Column<TData>;\n table: TanstackTableType<TData>;\n }) => React.ComponentProps<typeof TableCell>);\n columnResizerProps?: Omit<ColumnResizerProps, \"header\">;\n columnSeparatorProps?: DataTableColumnSeparatorProps;\n};\n\nexport type DataTableStatusContent = {\n initialLoading?: ContentSlot;\n fetchingMore?: ContentSlot;\n noMoreData?: ContentSlot;\n emptyData?: ContentSlot;\n emptyFilteredData?: ContentSlot;\n};\n\nexport type StatusContentKey = keyof DataTableStatusContent;\n\nexport type ScrollInfo = {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n scrollableHeight: number;\n distanceToBottom: number;\n ratioToBottom: number;\n isTopReached: boolean;\n isBottomReached: boolean;\n};\n\nexport type DataTableScrollFetch = {\n enabled: boolean;\n fetchMore?: () => void;\n hasMore?: boolean;\n isFetchingMore?: boolean;\n scrollThreshold?: number | ((info: ScrollInfo) => boolean);\n};\n\nexport type DataTableProps<TData extends RowData> = {\n data: TData[];\n columns: ColumnDef<TData, any>[];\n filters?: DataTableFilters<TData>;\n sorting?: DataTableColumnSorting;\n columnOrder?: DataTableColumnOrdering;\n columnVisibility?: DataTableColumnVisibility;\n columnPinning?: DataTableColumnPinning;\n columnGrouping?: DataTableColumnGrouping;\n columnResizing?: DatatableColumnResizing;\n rowSelection?: DataTableRowSelection<TData>;\n rowExpansion?: DataTableRowExpansion<TData>;\n scrollFetch?: DataTableScrollFetch;\n components?: DataTableComponentProps<TData>;\n activeStatusContent?:\n | (StatusContentKey | null)\n | ((info: { defaultComputedValue: StatusContentKey | null }) => StatusContentKey | null);\n statusContent?: DataTableStatusContent;\n tableRef?: React.RefObject<TanstackTableType<TData> | null>;\n isInitialLoading?: boolean;\n debug?: boolean;\n rowIdKey?: DataTableRowIdKeyHandler<TData>;\n childrenKey?: DataTableChildrenKeyHandler<TData>;\n onRowClick?: DataTableRowClickHandler<TData>;\n};\n\nconst fallbackData: unknown[] = [];\n\nconst DataTable = <TData extends RowData>({\n tableRef,\n isInitialLoading,\n columns,\n data,\n filters,\n sorting,\n columnOrder,\n columnVisibility,\n columnPinning,\n columnGrouping,\n columnResizing,\n rowSelection,\n rowExpansion,\n scrollFetch,\n activeStatusContent,\n statusContent,\n rowIdKey,\n childrenKey,\n onRowClick,\n debug,\n components\n}: DataTableProps<TData>) => {\n const table = useReactTable<TData>({\n // required properties\n columns,\n data: data || fallbackData,\n getCoreRowModel: getCoreRowModel(),\n // optional properties\n ...stripNullishObject<TableOptions<TData>>({\n // state for filters, sorting, pinning, row selection, etc.\n initialState: stripNullishObject<TableState>({\n columnFilters:\n filters?.enabled && (filters?.column?.enabled ?? true) ?\n filters?.column?.initialState\n : undefined,\n globalFilter: filters?.enabled ? filters?.global?.initialState : undefined,\n sorting: sorting?.enabled ? sorting?.initialState : undefined,\n columnOrder: columnOrder?.enabled ? columnOrder?.initialState : undefined,\n columnVisibility: columnVisibility?.enabled ? columnVisibility?.initialState : undefined,\n columnPinning: columnPinning?.enabled ? columnPinning?.initialState : undefined,\n rowSelection: rowSelection?.enabled ? rowSelection?.initialState : undefined,\n expanded: rowExpansion?.enabled ? rowExpansion?.initialState : undefined,\n grouping: columnGrouping?.enabled ? columnGrouping?.initialState : undefined\n }),\n state: stripNullishObject<TableState>({\n columnFilters:\n filters?.enabled && (filters?.column?.enabled ?? true) ? filters?.column?.state : undefined,\n globalFilter: filters?.enabled ? filters?.global?.state : undefined,\n sorting: sorting?.enabled ? sorting?.state : undefined,\n columnOrder: columnOrder?.enabled ? columnOrder?.state : undefined,\n columnVisibility: columnVisibility?.enabled ? columnVisibility?.state : undefined,\n columnPinning: columnPinning?.enabled ? columnPinning?.state : undefined,\n rowSelection: rowSelection?.enabled ? rowSelection?.state : undefined,\n expanded: rowExpansion?.enabled ? rowExpansion?.state : undefined,\n grouping: columnGrouping?.enabled ? columnGrouping?.state : undefined\n }),\n // common\n getRowId: rowIdKey,\n getSubRows: childrenKey,\n // shared configs filters column and global\n enableFilters: filters?.enabled ?? false,\n filterFromLeafRows: filters?.enabled && (filters?.filterFromLeafRows ?? false),\n manualFiltering: filters?.enabled && (filters?.manual ?? false),\n maxLeafRowFilterDepth: filters?.enabled ? filters?.maxDepth : undefined,\n // column filters\n getFilteredRowModel: !filters?.manual && filters?.enabled ? getFilteredRowModel() : undefined,\n enableColumnFilters: filters?.enabled && (filters?.column?.enabled ?? true),\n onColumnFiltersChange:\n filters?.enabled && (filters?.column?.enabled ?? true) ?\n filters?.column?.onFilterChange\n : undefined,\n // global filters\n enableGlobalFilter: filters?.enabled && (filters?.global?.enabled ?? true),\n globalFilterFn:\n filters?.enabled && (filters?.global?.enabled ?? true) ? filters?.global?.filterFn : undefined,\n onGlobalFilterChange:\n filters?.enabled && (filters?.global?.enabled ?? true) ?\n filters?.global?.onFilterChange\n : undefined,\n getColumnCanGlobalFilter:\n filters?.enabled && (filters?.global?.enabled ?? true) ?\n (filters?.global?.canColumnFilterable ?? (() => true))\n : undefined,\n // sorting\n getSortedRowModel: !sorting?.manual && sorting?.enabled ? getSortedRowModel() : undefined,\n manualSorting: sorting?.enabled && (sorting?.manual ?? false),\n enableSorting: sorting?.enabled ?? false,\n // default behavior: column with type number is sort by desc and string sort by asc first, we fix force always asc\n sortDescFirst: sorting?.enabled ? (sorting?.sortDescFirst ?? false) : false,\n onSortingChange: sorting?.enabled ? sorting?.onSortingChange : undefined,\n // ordering\n onColumnOrderChange: columnOrder?.enabled ? columnOrder?.onOrderChange : undefined,\n // visibility\n onColumnVisibilityChange:\n columnVisibility?.enabled ? columnVisibility?.onVisibilityChange : undefined,\n // pinning\n enableColumnPinning: columnPinning?.enabled ?? false,\n onColumnPinningChange: columnPinning?.enabled ? columnPinning?.onPinningChange : undefined,\n // row selection\n enableRowSelection: rowSelection?.enabled ? rowSelection?.canRowSelectable : false,\n enableMultiRowSelection: rowSelection?.enabled ? (rowSelection?.multiSelect ?? true) : true,\n onRowSelectionChange: rowSelection?.enabled ? rowSelection?.onSelectionChange : undefined,\n // row expanded\n getExpandedRowModel:\n // when grouping is use then we should open this\n !rowExpansion?.manual && rowExpansion?.enabled ? getExpandedRowModel() : undefined,\n manualExpanding: rowExpansion?.enabled && (rowExpansion?.manual ?? false),\n enableExpanding: rowExpansion?.enabled ?? false,\n getIsRowExpanded: rowExpansion?.enabled ? rowExpansion?.isRowExpanded : undefined,\n getRowCanExpand: rowExpansion?.enabled ? rowExpansion?.canRowExpand : undefined,\n onExpandedChange: rowExpansion?.enabled ? rowExpansion?.onExpandedChange : undefined,\n // grouping\n getGroupedRowModel:\n !columnGrouping?.manual && columnGrouping?.enabled ? getGroupedRowModel() : undefined,\n enableGrouping: columnGrouping?.enabled ?? false,\n manualGrouping: columnGrouping?.enabled && (columnGrouping?.manual ?? false),\n groupedColumnMode: columnGrouping?.enabled ? (columnGrouping?.groupedMode ?? false) : false,\n aggregationFns: columnGrouping?.enabled ? columnGrouping?.customAggregationFns : undefined,\n onGroupingChange: columnGrouping?.enabled ? columnGrouping?.onGroupingChange : undefined,\n // column sizing\n enableColumnResizing: columnResizing?.enabled ?? false,\n columnResizeMode: columnResizing?.enabled ? (columnResizing?.resizeMode ?? \"onChange\") : \"onChange\"\n })\n });\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n const isTableEmpty = table.getCoreRowModel().rows.length === 0;\n const isTableEmptyAfterFiltering = table.getRowModel().rows.length === 0;\n const isFiltering = table.getState().columnFilters.length > 0 || !!table.getState().globalFilter;\n\n const leftVisibleLeftColumns = table.getLeftVisibleLeafColumns();\n const centerVisibleLeafColumns = table.getCenterVisibleLeafColumns();\n const rightVisibleLeafColumns = table.getRightVisibleLeafColumns();\n\n const { isSomeColumnsFilterable, filterableColumns } = useMemo(() => {\n const mergedColumns: Column<TData, any>[] = [\n ...leftVisibleLeftColumns,\n ...centerVisibleLeafColumns,\n ...rightVisibleLeafColumns\n ];\n\n const isSomeColumnsFilterable = mergedColumns.some(\n (column) => column.getCanFilter() && column.columnDef.meta?.renderColumnFilter\n );\n\n return { isSomeColumnsFilterable, filterableColumns: mergedColumns };\n }, [centerVisibleLeafColumns, leftVisibleLeftColumns, rightVisibleLeafColumns]);\n\n const autoStatusKey = useMemo<StatusContentKey | null>(() => {\n if (isInitialLoading) return \"initialLoading\";\n if (isTableEmpty) return \"emptyData\";\n if (isTableEmptyAfterFiltering) return \"emptyFilteredData\";\n if (scrollFetch?.enabled && !isFiltering && !isInitialLoading) {\n if (scrollFetch.isFetchingMore) return \"fetchingMore\";\n if (scrollFetch.hasMore === false && !scrollFetch.isFetchingMore) return \"noMoreData\";\n }\n return null;\n }, [\n isInitialLoading,\n isFiltering,\n isTableEmpty,\n isTableEmptyAfterFiltering,\n scrollFetch?.enabled,\n scrollFetch?.hasMore,\n scrollFetch?.isFetchingMore\n ]);\n\n const activeStatusContentComputed = useMemo<StatusContentKey | null>(() => {\n if (!activeStatusContent) return autoStatusKey;\n if (typeof activeStatusContent === \"function\") {\n return activeStatusContent({ defaultComputedValue: autoStatusKey });\n }\n return activeStatusContent;\n }, [activeStatusContent, autoStatusKey]);\n\n const fetchMoreOnScrollReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n if (\n !scrollFetch?.enabled ||\n !containerRefElement ||\n scrollFetch?.isFetchingMore ||\n !scrollFetch?.hasMore ||\n !scrollFetch?.fetchMore\n ) {\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n\n const scrollableHeight = scrollHeight - clientHeight;\n const distanceToBottom = scrollableHeight - scrollTop;\n const ratioToBottom = scrollableHeight > 0 ? scrollTop / scrollableHeight : 1;\n\n const info: ScrollInfo = {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollableHeight,\n distanceToBottom,\n ratioToBottom,\n isTopReached: scrollTop === 0,\n isBottomReached: distanceToBottom <= 0\n };\n\n let shouldTrigger = false;\n if (typeof scrollFetch.scrollThreshold === \"number\") {\n shouldTrigger = info.ratioToBottom >= scrollFetch.scrollThreshold;\n } else if (typeof scrollFetch.scrollThreshold === \"function\") {\n shouldTrigger = scrollFetch.scrollThreshold(info);\n } else {\n shouldTrigger = info.ratioToBottom >= 0.7; // default 70%\n }\n\n if (shouldTrigger) {\n scrollFetch.fetchMore();\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollFetch?.enabled, scrollFetch?.isFetchingMore, scrollFetch?.hasMore, scrollFetch?.fetchMore]\n );\n\n useEffect(() => {\n if (!tableRef) return;\n tableRef.current = table;\n return () => {\n tableRef.current = null;\n };\n }, [tableRef, table]);\n\n useEffect(() => {\n fetchMoreOnScrollReached(tableContainerRef.current);\n }, [fetchMoreOnScrollReached]);\n\n return (\n <TableContainer\n ref={tableContainerRef}\n {...components?.containerProps}\n className={cn(\n \"relative w-full overflow-auto h-full max-h-dvh max-w-full bg-white\",\n components?.containerProps?.className\n )}\n onScroll={(e) => fetchMoreOnScrollReached(e.currentTarget)}\n >\n {activeStatusContentComputed === \"initialLoading\" ?\n <StatusContentSlot\n content={statusContent?.initialLoading?.content ?? \"Loading...\"}\n icon={statusContent?.initialLoading?.icon}\n wrapperProps={statusContent?.initialLoading?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col h-full items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-initial-loading\"\n }}\n defaultIcon={<Spinner size={48} />}\n />\n : activeStatusContentComputed === \"emptyData\" ?\n <StatusContentSlot\n content={statusContent?.emptyData?.content ?? \"There's nothing here yet.\"}\n icon={statusContent?.emptyData?.icon}\n wrapperProps={statusContent?.emptyData?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col h-full items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-empty-data\"\n }}\n defaultIcon={<SuiEmptyDataIcon className=\"text-[128px]\" />}\n />\n : <>\n <Table {...components?.tableProps}>\n {/* header */}\n <TableHeader\n className={cn(\"sticky top-0 z-10\", components?.tableHeaderProps?.className)}\n {...components?.tableHeaderProps}\n >\n {table.getHeaderGroups().map((headerGroup) => {\n return (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const { classes, style } = getColumnPinningStyles(header.column);\n const useColumnSizing =\n header.column.columnDef?.meta?.useColumnSizing ??\n columnResizing?.enabled ??\n false;\n\n const tableHeadCellProps =\n typeof components?.tableHeadCellProps === \"function\" ?\n components?.tableHeadCellProps({ header, table })\n : components?.tableHeadCellProps;\n\n const nextHeader = headerGroup.headers?.[header.index + 1] || header;\n const { isLastLeftPinnedColumn } = getColumnPinningInfo(header.column);\n const { isFirstRightPinnedColumn } = getColumnPinningInfo(nextHeader.column);\n const headerGroupLength = header.headerGroup.headers.length;\n const showSeparator =\n header.index !== headerGroupLength - 1 &&\n !isLastLeftPinnedColumn &&\n !isFirstRightPinnedColumn;\n\n return (\n <TableHead\n data-testid={`table-head-${header.id}`}\n key={header.id}\n colSpan={header.colSpan}\n {...tableHeadCellProps}\n {...header.column.columnDef?.meta?.headerProps}\n className={cn(\n classes,\n tableHeadCellProps?.className,\n header.column.columnDef?.meta?.headerProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? header.column.getSize() : undefined,\n minWidth: useColumnSizing ? header.column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? header.column.columnDef.maxSize : undefined,\n ...tableHeadCellProps?.style,\n ...header.column.columnDef?.meta?.headerProps?.style\n }}\n >\n {header.isPlaceholder ? null : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n <ColumnSeparator\n {...components?.columnSeparatorProps?.headerCell}\n {...header.column.columnDef?.meta?.columnSeparatorProps}\n show={\n header.column.columnDef?.meta?.columnSeparatorProps?.show ??\n components?.columnSeparatorProps?.headerCell?.show ??\n showSeparator\n }\n />\n <ColumnResizer header={header} {...components?.columnResizerProps} />\n </TableHead>\n );\n })}\n </TableRow>\n );\n })}\n\n {/* filter row */}\n {isSomeColumnsFilterable && (\n <TableRow data-testid=\"table-filter-row\">\n {filterableColumns.map((column) => {\n const { classes, style } = getColumnPinningStyles(column);\n const useColumnSizing =\n column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;\n\n const tableFilterCellProps =\n typeof components?.tableFilterCellProps === \"function\" ?\n components?.tableFilterCellProps({ column, table })\n : components?.tableFilterCellProps;\n\n return (\n <TableCell\n data-testid={`table-filter-cell-${column.id}`}\n key={column.id}\n {...tableFilterCellProps}\n {...column.columnDef?.meta?.filterCellProps}\n className={cn(\n \"bg-white border-b\",\n classes,\n tableFilterCellProps?.className,\n column.columnDef?.meta?.filterCellProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? column.getSize() : undefined,\n minWidth: useColumnSizing ? column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? column.columnDef.maxSize : undefined,\n ...tableFilterCellProps?.style,\n ...column.columnDef?.meta?.filterCellProps?.style\n }}\n >\n {column.getCanFilter() &&\n column.columnDef.meta?.renderColumnFilter?.({\n column,\n table\n })}\n </TableCell>\n );\n })}\n </TableRow>\n )}\n </TableHeader>\n\n {/* data rows */}\n <TableBody {...components?.tableBodyProps}>\n {table.getRowModel().rows.map((row) => {\n const tableDataRowProps =\n typeof components?.tableDataRowProps === \"function\" ?\n components.tableDataRowProps({ row, table }) || {}\n : components?.tableDataRowProps || {};\n\n return (\n <TableRow\n data-testid={`table-data-row-${row.id}`}\n {...tableDataRowProps}\n key={row.id}\n className={cn(\"group\", tableDataRowProps?.className)}\n data-state={row.getIsSelected() ? \"selected\" : \"non-selected\"}\n {...getRowClickHandlers(onRowClick ?? (() => {}), {\n rowData: row.original,\n row,\n table\n })}\n >\n {row.getVisibleCells().map((cell) => {\n const { classes, style } = getColumnPinningStyles(cell.column);\n const useColumnSizing =\n cell.column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;\n\n const tableDataCellProps =\n typeof components?.tableDataCellProps === \"function\" ?\n components?.tableDataCellProps({ row, cell, table })\n : components?.tableDataCellProps;\n\n return (\n <TableCell\n data-testid={`table-data-cell-${cell.id}`}\n data-row-id={row.id}\n data-column-id={cell.column.id}\n key={cell.id}\n {...tableDataCellProps}\n {...cell.column.columnDef?.meta?.cellProps}\n className={cn(\n {\n \"bg-[#dfeae3]\": row.getIsSelected(),\n \"bg-white group-hover:bg-[#eff5f1]\": !row.getIsSelected()\n },\n classes,\n tableDataCellProps?.className,\n cell.column.columnDef?.meta?.cellProps?.className\n )}\n style={{\n ...style,\n width: useColumnSizing ? cell.column.getSize() : undefined,\n minWidth: useColumnSizing ? cell.column.columnDef.minSize : undefined,\n maxWidth: useColumnSizing ? cell.column.columnDef.maxSize : undefined,\n ...tableDataCellProps?.style,\n ...cell.column.columnDef?.meta?.cellProps?.style\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n\n {activeStatusContentComputed === \"emptyFilteredData\" && (\n <StatusContentSlot\n content={\n statusContent?.emptyFilteredData?.content ??\n \"No records found. Please try a different search.\"\n }\n icon={statusContent?.emptyFilteredData?.icon}\n wrapperProps={statusContent?.emptyFilteredData?.wrapperProps}\n defaultWrapperProps={{\n className:\n \"flex flex-col h-[calc(100%-76px)] items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-empty-filtered-data\"\n }}\n defaultIcon={<SuiEmptyDataIcon className=\"text-[128px]\" />}\n />\n )}\n\n {activeStatusContentComputed === \"fetchingMore\" && (\n <StatusContentSlot\n content={statusContent?.fetchingMore?.content ?? \"Loading more...\"}\n wrapperProps={statusContent?.fetchingMore?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-fetching-more\"\n }}\n />\n )}\n\n {activeStatusContentComputed === \"noMoreData\" && (\n <StatusContentSlot\n content={statusContent?.noMoreData?.content}\n icon={statusContent?.noMoreData?.icon}\n wrapperProps={statusContent?.noMoreData?.wrapperProps}\n defaultWrapperProps={{\n className: \"flex flex-col items-center justify-center text-sm py-4 gap-2\",\n [\"data-testid\" as any]: \"status-content-no-more-data\"\n }}\n />\n )}\n </>\n }\n\n {/* devtool */}\n {debug && <DataTableDevTool table={table} />}\n </TableContainer>\n );\n};\n\nexport default DataTable;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\n// ──────────────────────────────\n// Root-level wrappers\n// ──────────────────────────────\nfunction Dialog(props: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger(props: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal(props: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n className\n )}\n {...props}\n />\n );\n}\n\n// ──────────────────────────────\n// Header (optional)\n// ──────────────────────────────\nfunction DialogHeader({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n \"relative flex items-center justify-between bg-[#82b495] text-white rounded-t-md px-4 py-3\",\n className\n )}\n {...props}\n >\n <div className=\"text-lg font-semibold\">{children}</div>\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute right-4 top-4 rounded-xs opacity-80 hover:opacity-100 transition-opacity focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </div>\n );\n}\n\n// ──────────────────────────────\n// Content (flex layout + sticky footer ready)\n// ──────────────────────────────\nexport interface DialogContentProps extends React.ComponentProps<typeof DialogPrimitive.Content> {\n header?: React.ReactNode;\n showOverlay?: boolean;\n}\n\nfunction DialogContent({\n className,\n children,\n header,\n showOverlay = true,\n ...props\n}: DialogContentProps) {\n return (\n <DialogPortal>\n {showOverlay && <DialogOverlay />}\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 flex min-h-0 max-h-[90vh] w-full max-w-[80vw] translate-x-[-50%] translate-y-[-50%] flex-col rounded-lg border bg-background shadow-lg duration-200 sm:max-w-7xl\",\n className\n )}\n {...props}\n >\n {/* Header */}\n {header && <DialogHeader>{header}</DialogHeader>}\n\n <div className=\"flex-1 overflow-auto\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ──────────────────────────────\n// Footer / Title / Description\n// ──────────────────────────────\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end border-t bg-white p-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\n// ──────────────────────────────\n// Export\n// ──────────────────────────────\nexport { Dialog, DialogTrigger, DialogContent, DialogFooter, DialogTitle, DialogDescription };\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\nexport const preserveNewlines = (s?: string) => (s ? s.replace(/\\r\\n/g, \"\\n\") : undefined);\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-white data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"border bg-[#8B8B8B] text-white shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:hover:bg-input/50\",\n success: \"bg-sus-primary-1 text-primary-foreground shadow-xs hover:bg-sus-primary/90\",\n error:\n \"border border-[#BB0B0E] text-[#BB0B0E] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\",\n warning: \"bg-yellow-500 text-black shadow-xs hover:bg-yellow-600 dark:hover:bg-yellow-400\",\n cancel:\n \"border bg-[#8B8B8B] text-white shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:hover:bg-input/50\",\n confirm:\n \"border border-[#BB0B0E] text-[#BB0B0E] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\",\n \"confirm-green\":\n \"border border-[#379A2A] text-[#379A2A] bg-white shadow-xs hover:bg-accent hover:text-accent-foreground\"\n },\n\n size: {\n default: \"h-9 px-4 has-[>svg]:px-3\",\n option: \"py-5 h-9 px-4 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-5\",\n \"icon-sm\": \"size-[22px]\",\n \"icon-md\": \"size-7\",\n \"icon-lg\": \"size-10\"\n },\n\n active: {\n true: \"opacity-90 ring-2 ring-offset-1 ring-ring\",\n false: \"\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n active,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n active?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, active, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","export const DIALOG_ALERT_I18N_SUBNAMESPACE = \"dialog_alert\";\nexport const i18nPrefix = `translation:${DIALOG_ALERT_I18N_SUBNAMESPACE}.`;\n","import { DIALOG_ALERT_I18N_SUBNAMESPACE } from \"../lib/constants\";\nimport { DialogAlertI18nResource } from \"../types\";\n\nexport const defaultResource: DialogAlertI18nResource = {\n sharedui: {\n translation: {\n [DIALOG_ALERT_I18N_SUBNAMESPACE]: {\n cancel: \"Cancel\",\n close: \"Close\",\n \"success.saved\": {\n title: \"Successfully\",\n description: \"Data has been successfully saved\"\n },\n \"success.deleted\": {\n title: \"Successfully\",\n description: \"Data has been successfully deleted\"\n },\n \"success.removed\": {\n title: \"Successfully\",\n description: \"Data has been successfully removed\"\n },\n \"error.api_db_error\": {\n title: \"API/Database Error\",\n description: \"Failed to connect to the system. Please check API or database connection.\"\n },\n \"error.permission_denied\": {\n title: \"Permission Denied\",\n description: \"You do not have permission to delete this data.\",\n confirm_text: \"Discard\"\n },\n \"error.session_expired\": {\n title: \"Session Expired\",\n description: \"Your session has expired or you have been logged out. Please sign in again.\",\n confirm_text: \"Logout\"\n },\n \"error.user_not_found\": {\n title: \"User Not Found\",\n description: \"The system could not locate the user account.\",\n confirm_text: \"Logout\"\n },\n \"error.data_not_found\": {\n title: \"Data Not Found\",\n description: \"The data has already been deleted or does not exist in the system.\"\n },\n \"error.data_restrict_editing\": {\n title: \"Data Status Restricts Editing\",\n description: \"Data status does not allow editing.\"\n },\n \"error.network_timeout_error\": {\n title: \"Network Error / Timeout\",\n description:\n \"The system could not connect to the network or the request took too long to process.\"\n },\n \"error.queue_full\": {\n title: \"Queue Full\",\n description: \"The notification queue has reached its limit. Please try again later.\"\n },\n \"error.invalid_data_format\": {\n title: \"Invalid Data Format\",\n description: \"Data creation failed due to invalid or incorrectly formatted data.\"\n },\n \"error.data_linked_to_system_data\": {\n title: \"Data Linked to System Data\",\n description: \"Cannot delete data because they are linked to existing system data.\"\n },\n \"error.pending_workflow_conflict\": {\n title: \"Pending Workflow Conflict \",\n description:\n \"The data is currently involved in a pending workflow or approval process and cannot be deactivated.\"\n },\n \"error.invalid_incomplete_data\": {\n title: \"Invalid or Incomplete Data\",\n description: \"Data status cannot be changed due to incomplete or invalid information.\"\n },\n \"error.client_side_error\": {\n title: \"Client-Side Error\",\n description: \"An error occurred on the client side. Please refresh the page or try again.\"\n },\n \"error.system_limitation\": {\n title: \"System Limitation\",\n description:\n \"The search cannot be completed due to system limitations. Please simplify your query.\"\n },\n \"error.timeout\": {\n title: \"Timeout\",\n description: \"Request failed due to a system error or timeout. Please try again.\"\n },\n \"error.duplicate_data\": {\n title: \"Duplicate Data\",\n description: \"The data you entered already exists in the system.\"\n },\n \"error.something_went_wrong\": {\n title: \"Something Went Wrong\",\n description: \"An unknown error occurred.\"\n },\n \"confirm.delete\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to delete this item?\",\n confirm_text: \"Delete\"\n },\n \"confirm.inactive\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to inactive this item?\",\n confirm_text: \"Inactive\"\n },\n \"confirm.active\": {\n variant: \"confirm-green\",\n title: \"Confirmation\",\n description: \"Are you sure you want to active this item?\",\n confirm_text: \"Active\"\n },\n \"confirm.leave_page\": {\n title: \"Confirmation\",\n description: \"Unsaved changes. Do you want to leave this page?\",\n confirm_text: \"Leave\"\n },\n \"confirm.remove\": {\n title: \"Confirmation\",\n description: \"Are you sure you want to remove this item?\",\n confirm_text: \"Remove\"\n },\n \"confirm.logout\": {\n title: \"Confirmation\",\n description: \"Do you want to log out?\",\n confirm_text: \"Logout\"\n }\n }\n }\n }\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport { defaultResource } from \"./default\";\n\nconst instance = i18n\n .createInstance({\n resources: defaultResource,\n lng: \"sharedui\",\n fallbackLng: \"sharedui\",\n defaultNS: \"translation\",\n interpolation: {\n escapeValue: false\n }\n })\n .use(initReactI18next);\n\ninstance.init();\n\nexport default instance;\n","import { useCallback } from \"react\";\nimport {\n Dialog as BaseDialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription\n} from \"./components/ui/dialog\";\nimport { Button } from \"./components/ui/button\";\nimport { DialogAlertProps, DialogVariant } from \"./types\";\nimport i18n from \"./locale/i18n\";\nimport { i18nPrefix } from \"./lib/constants\";\n\nconst titleColorVariant: Record<DialogVariant, string> = {\n default: \"\",\n success: \"text-green-600\",\n error: \"text-red-600\",\n warning: \"text-yellow-600\",\n confirm: \"text-red-600\",\n \"confirm-green\": \"text-red-600\"\n};\n\nexport function DialogAlert({\n open,\n onOpenChange,\n title,\n description,\n variant = \"default\",\n confirmText,\n cancelText = i18nPrefix + \"cancel\",\n onConfirm,\n onCancel,\n showCancel = true,\n align = \"center\",\n outlet,\n persistent = false\n}: DialogAlertProps) {\n const alignClass =\n align === \"start\" ? \"justify-start\"\n : align === \"end\" ? \"justify-end\"\n : \"justify-center\";\n\n const handleCancel = useCallback(() => {\n onCancel?.();\n onOpenChange(false);\n }, [onCancel, onOpenChange]);\n\n const handleConfirm = useCallback(() => {\n onConfirm?.();\n onOpenChange(false);\n }, [onConfirm, onOpenChange]);\n\n return (\n <BaseDialog open={open} onOpenChange={persistent ? () => {} : onOpenChange}>\n <DialogContent className=\"max-w-md\" showCloseButton={!persistent}>\n <DialogHeader>\n {title && <DialogTitle className={titleColorVariant[variant]}>{i18n.t(title)}</DialogTitle>}\n {description && <DialogDescription>{i18n.t(description)}</DialogDescription>}\n </DialogHeader>\n\n {outlet && outlet}\n\n <div className={`flex gap-3 mt-3 ${alignClass}`}>\n {showCancel && (\n <Button variant=\"cancel\" onClick={handleCancel}>\n {i18n.t(cancelText)}\n </Button>\n )}\n {confirmText && (\n <Button variant={variant} onClick={handleConfirm}>\n {i18n.t(confirmText)}\n </Button>\n )}\n </div>\n </DialogContent>\n </BaseDialog>\n );\n}\n","import { DialogAlertTemplates } from \"../types\";\n\ntype GetTemplatesPayload = {\n setOpen?: (data: boolean) => void;\n};\ntype GetTemplatesFunc = (payload: GetTemplatesPayload) => DialogAlertTemplates;\n\nexport const getDialogTemplates: GetTemplatesFunc = ({ setOpen = () => {} }) => ({\n \"success.saved\": {\n variant: \"success\",\n title: \"success.saved.title\",\n description: \"success.saved.description\",\n cancelText: \"close\"\n },\n \"success.deleted\": {\n variant: \"success\",\n title: \"success.deleted.title\",\n description: \"success.deleted.description\",\n cancelText: \"close\"\n },\n \"success.removed\": {\n variant: \"success\",\n title: \"success.removed.title\",\n description: \"success.removed.description\",\n cancelText: \"close\"\n },\n \"error.api_db_error\": {\n variant: \"error\",\n title: \"error.api_db_error.title\",\n description: \"error.api_db_error.description\",\n cancelText: \"close\"\n },\n \"error.permission_denied\": {\n variant: \"error\",\n title: \"error.permission_denied.title\",\n description: \"error.permission_denied.description\",\n confirmText: \"error.permission_denied.confirm_text\",\n showCancel: false,\n onConfirm: () => setOpen(false)\n },\n \"error.session_expired\": {\n variant: \"error\",\n title: \"error.session_expired.title\",\n description: \"error.session_expired.description\",\n confirmText: \"error.session_expired.confirm_text\",\n showCancel: false\n },\n \"error.user_not_found\": {\n variant: \"error\",\n title: \"error.user_not_found.title\",\n description: \"error.user_not_found.description\",\n confirmText: \"error.user_not_found.confirm_text\",\n showCancel: false\n },\n \"error.data_not_found\": {\n variant: \"error\",\n title: \"error.data_not_found.title\",\n description: \"error.data_not_found.description\",\n cancelText: \"close\"\n },\n \"error.data_restrict_editing\": {\n variant: \"error\",\n title: \"error.data_restrict_editing.title\",\n description: \"error.data_restrict_editing.description\",\n cancelText: \"close\"\n },\n \"error.network_timeout_error\": {\n variant: \"error\",\n title: \"error.network_timeout_error.title\",\n description: \"error.network_timeout_error.description\",\n cancelText: \"close\"\n },\n \"error.queue_full\": {\n variant: \"error\",\n title: \"error.queue_full.title\",\n description: \"error.queue_full.description\",\n cancelText: \"close\"\n },\n \"error.invalid_data_format\": {\n variant: \"error\",\n title: \"error.invalid_data_format.title\",\n description: \"error.invalid_data_format.description\",\n cancelText: \"close\"\n },\n \"error.data_linked_to_system_data\": {\n variant: \"error\",\n title: \"error.data_linked_to_system_data.title\",\n description: \"error.data_linked_to_system_data.description\",\n cancelText: \"close\"\n },\n \"error.pending_workflow_conflict\": {\n variant: \"error\",\n title: \"error.pending_workflow_conflict.title\",\n description: \"error.pending_workflow_conflict.description\",\n cancelText: \"close\"\n },\n \"error.invalid_incomplete_data\": {\n variant: \"error\",\n title: \"error.invalid_incomplete_data.title\",\n description: \"error.invalid_incomplete_data.description\",\n cancelText: \"close\"\n },\n \"error.client_side_error\": {\n variant: \"error\",\n title: \"error.client_side_error.title\",\n description: \"error.client_side_error.description\",\n cancelText: \"close\"\n },\n \"error.system_limitation\": {\n variant: \"error\",\n title: \"error.system_limitation.title\",\n description: \"error.system_limitation.description\",\n cancelText: \"close\"\n },\n \"error.timeout\": {\n variant: \"error\",\n title: \"error.timeout.title\",\n description: \"error.timeout.description\",\n cancelText: \"close\"\n },\n \"error.duplicate_data\": {\n variant: \"error\",\n title: \"error.duplicate_data.title\",\n description: \"error.duplicate_data.description\",\n cancelText: \"close\"\n },\n \"error.something_went_wrong\": {\n variant: \"error\",\n title: \"error.something_went_wrong.title\",\n description: \"error.something_went_wrong.description\",\n cancelText: \"close\"\n },\n \"confirm.delete\": {\n variant: \"confirm\",\n title: \"confirm.delete.title\",\n description: \"confirm.delete.description\",\n confirmText: \"confirm.delete.confirm_text\"\n },\n \"confirm.inactive\": {\n variant: \"confirm\",\n title: \"confirm.inactive.title\",\n description: \"confirm.inactive.description\",\n confirmText: \"confirm.inactive.confirm_text\"\n },\n \"confirm.active\": {\n variant: \"confirm-green\",\n title: \"confirm.active.title\",\n description: \"confirm.active.description\",\n confirmText: \"confirm.active.confirm_text\"\n },\n \"confirm.leave_page\": {\n variant: \"confirm\",\n title: \"confirm.leave_page.title\",\n description: \"confirm.leave_page.description\",\n confirmText: \"confirm.leave_page.confirm_text\"\n },\n \"confirm.remove\": {\n variant: \"confirm\",\n title: \"confirm.remove.title\",\n description: \"confirm.remove.description\",\n confirmText: \"confirm.remove.confirm_text\"\n },\n \"confirm.logout\": {\n variant: \"confirm\",\n title: \"confirm.logout.title\",\n description: \"confirm.logout.description\",\n confirmText: \"confirm.logout.confirm_text\"\n }\n});\n","import { DialogAlert } from \"../DialogAlert\";\nimport {\n DialogAlertI18nResource,\n DialogAlertProps,\n DialogAlertTemplateUnit,\n TemplateKeys\n} from \"../types\";\nimport { getDialogTemplates } from \"../templates\";\nimport { create } from \"zustand\";\nimport i18n from \"../locale/i18n\";\nimport { useEffect } from \"react\";\nimport { i18nPrefix } from \"../lib/constants\";\n\ntype OpenDialogAlert = Omit<DialogAlertProps, \"open\" | \"onOpenChange\">;\ntype State = {\n open: boolean;\n setOpen: (data: boolean) => void;\n dialogProps: OpenDialogAlert;\n setDialogProps: (data: OpenDialogAlert) => void;\n openDialogAlert: (payload?: { template?: TemplateKeys; props?: OpenDialogAlert }) => void;\n closeDialogAlert: () => void;\n};\n\nconst useDialogAlertStore = create<State>((set, get) => ({\n open: false,\n dialogProps: {},\n setOpen: (data) => set({ open: data }),\n setDialogProps: (data) => set({ dialogProps: data }),\n\n openDialogAlert: (payload) => {\n let templateVal: DialogAlertTemplateUnit | undefined;\n if (payload?.template) {\n templateVal = getDialogTemplates({ setOpen: get().setOpen })[payload.template];\n // add prefix\n templateVal.title = templateVal.title ? i18nPrefix + templateVal.title : undefined;\n templateVal.description =\n templateVal.description ? i18nPrefix + templateVal.description : undefined;\n templateVal.confirmText =\n templateVal.confirmText ? i18nPrefix + templateVal.confirmText : undefined;\n templateVal.cancelText = templateVal.cancelText ? i18nPrefix + templateVal.cancelText : undefined;\n }\n get().setDialogProps({ ...templateVal, ...payload?.props });\n get().setOpen(true);\n },\n closeDialogAlert: () => {\n set({ open: false });\n }\n}));\n\ninterface DialogAlertProviderProps extends React.PropsWithChildren {\n /**\n * @description i18n resource for dialogAlert to use\n * @example \n * ``` \n * {\n * en: {\n * translation: {\n * dialog_alert: {\n * close: \"Close\",\n * cancel: \"Cancel\",\n * \"success.saved\": {\n title: \"Successfully\",\n description: \"Data has been successfully saved\"\n },\n * ....\n * }\n * }\n * }\n * }\n * ```\n */\n i18nResource?: DialogAlertI18nResource;\n /**\n * @description specify language to use\n */\n i18nLang?: string;\n}\nexport const DialogAlertProvider = ({ children, i18nResource, i18nLang }: DialogAlertProviderProps) => {\n const open = useDialogAlertStore((state) => state.open);\n const setOpen = useDialogAlertStore((state) => state.setOpen);\n const dialogProps = useDialogAlertStore((state) => state.dialogProps);\n\n useEffect(() => {\n if (!i18nResource) {\n i18n.changeLanguage(\"sharedui\");\n return;\n }\n try {\n const langs = Object.keys(i18nResource);\n for (const lang of langs) {\n i18n.addResourceBundle(lang, \"translation\", i18nResource[lang][\"translation\"], false, true);\n }\n i18n.changeLanguage(i18nLang);\n } catch {\n i18n.changeLanguage(\"sharedui\");\n return;\n }\n }, [i18nLang, i18nResource]);\n\n return (\n <>\n {children}\n <DialogAlert open={open} onOpenChange={setOpen} {...dialogProps} />\n </>\n );\n};\n\nconst openDialogAlert = useDialogAlertStore.getState().openDialogAlert;\nconst closeDialogAlert = useDialogAlertStore.getState().closeDialogAlert;\n/**\n * @description open error dialog based on given error, if the error is javascript Error instance\n * it will use error.message as dialog description, if the error is AxiosError it will use error template\n * based on error.response.status\n * @param error - Accept Error or AxiosError\n */\nconst openErrorDialogAlert = (error: unknown) => {\n if (error instanceof Error) {\n openDialogAlert({ template: \"error.something_went_wrong\", props: { description: error.message } });\n } else if ((error as any).isAxiosError) {\n let template: TemplateKeys = \"error.something_went_wrong\";\n switch ((error as any).response?.status) {\n case 400:\n template = \"error.invalid_incomplete_data\";\n break;\n case 401:\n template = \"error.session_expired\";\n break;\n case 403:\n template = \"error.permission_denied\";\n break;\n case 404:\n template = \"error.data_not_found\";\n break;\n case 409:\n template = \"error.duplicate_data\";\n break;\n case 500:\n template = \"error.api_db_error\";\n break;\n }\n openDialogAlert({ template });\n } else {\n openDialogAlert({ template: \"error.something_went_wrong\" });\n }\n};\n\nexport const getDialogAlertControls = () => ({\n openDialogAlert,\n closeDialogAlert,\n openErrorDialogAlert\n});\n","import { Spinner } from \"@/components/spinner\";\nimport { cn } from \"@/utils\";\n\ntype LoadingOverlayProps = React.ComponentProps<\"div\"> & {\n fullscreen?: boolean;\n spinnerClassName?: string;\n};\n\nexport default function LoadingOverlay({\n className,\n fullscreen = true,\n spinnerClassName,\n ...props\n}: LoadingOverlayProps) {\n return (\n <div\n data-slot=\"loading-overlay\"\n className={cn(\n fullscreen ? \"fixed z-100\" : \"absolute z-10\",\n \"inset-0 flex items-center justify-center transition-opacity duration-300\",\n className\n )}\n {...props}\n >\n <Spinner className={cn(\"size-50\", spinnerClassName)} />\n </div>\n );\n}\n","import type { FormulaOperator } from \"../types\";\n\nexport const defaultOperators: FormulaOperator[] = [\n { value: \"(\", label: \"(\" },\n { value: \")\", label: \")\" },\n { value: \"%\", label: \"%\" },\n { value: \"&\", label: \"&\" },\n { value: \"+\", label: \"+\" },\n { value: \"-\", label: \"-\" },\n { value: \"*\", label: \"×\" },\n { value: \"/\", label: \"÷\" },\n { value: \"=\", label: \"=\" },\n { value: \"≠\", label: \"≠\" },\n { value: \"#NULL\", label: \"#NULL\" }\n];\n\nexport const defaultOperatorShortcuts: Record<string, string> = {\n \"(\": \"(\",\n \")\": \")\",\n \"%\": \"%\",\n \"&\": \"&\",\n \"+\": \"+\",\n \"-\": \"-\",\n \"*\": \"*\",\n \"/\": \"/\",\n \"=\": \"=\",\n \"≠\": \"≠\",\n \"#NULL\": \"#NULL\"\n};\n","import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport type { SuggestionProps } from \"@tiptap/suggestion\";\n\nimport { cn } from \"@/utils\";\nimport type { FormulaTokenAttributes } from \"../types\";\n\nconst DEFAULT_DEBOUNCE = 200;\n\ninterface SuggestionListProps extends SuggestionProps<FormulaTokenAttributes> {\n editor: Editor;\n fetchItems: (query: string) => Promise<any[]>;\n mapItem: (item: any) => FormulaTokenAttributes;\n normalizeToken: (attrs: Partial<FormulaTokenAttributes>) => FormulaTokenAttributes;\n debounceMs?: number;\n}\n\nfunction useKeyboardNavigation(\n itemsLength: number,\n onSelect: (index: number) => void,\n isLocked: boolean\n) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % Math.max(itemsLength, 1));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev - 1 + Math.max(itemsLength, 1)) % Math.max(itemsLength, 1));\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \"Tab\") {\n event.preventDefault();\n if (!isLocked) onSelect(selectedIndex);\n }\n };\n\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [itemsLength, onSelect, selectedIndex, isLocked]);\n\n return [selectedIndex, setSelectedIndex] as const;\n}\n\nfunction useDropdownPosition(clientRect?: (() => DOMRect | null) | null, itemsCount?: number) {\n const [rect, setRect] = useState<DOMRect | null>(null);\n const [style, setStyle] = useState<React.CSSProperties>({});\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!clientRect) return;\n\n const update = () => {\n const nextRect = clientRect();\n if (nextRect) setRect(nextRect);\n };\n\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(document.body);\n\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n resizeObserver.disconnect();\n };\n }, [clientRect]);\n\n useLayoutEffect(() => {\n if (!rect || !ref.current) return;\n const dropdown = ref.current;\n const dropdownRect = dropdown.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let top = rect.bottom + window.scrollY + 6;\n let left = rect.left + window.scrollX;\n\n if (top + dropdownRect.height > viewportHeight + window.scrollY) {\n top = rect.top + window.scrollY - dropdownRect.height - 6;\n }\n\n if (left + dropdownRect.width > viewportWidth + window.scrollX) {\n left = Math.max(viewportWidth + window.scrollX - dropdownRect.width - 8, 0);\n }\n\n setStyle({ position: \"absolute\", zIndex: 50, top, left });\n }, [rect, itemsCount]);\n\n return { ref, style, rect };\n}\n\nexport const SuggestionList: React.FC<SuggestionListProps> = ({\n clientRect,\n command,\n fetchItems,\n mapItem,\n normalizeToken,\n debounceMs = DEFAULT_DEBOUNCE,\n query\n}) => {\n const [items, setItems] = useState<FormulaTokenAttributes[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const fetchId = useRef(0);\n const debounceHandle = useRef<number | null>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const { ref, style, rect } = useDropdownPosition(clientRect, items.length);\n const normalizedMap = useMemo(() => mapItem, [mapItem]);\n const normalizeItem = useMemo(() => normalizeToken, [normalizeToken]);\n\n useEffect(() => {\n const runFetch = (input: string) => {\n fetchId.current += 1;\n const currentId = fetchId.current;\n if (debounceHandle.current) clearTimeout(debounceHandle.current);\n\n debounceHandle.current = window.setTimeout(async () => {\n setIsLoading(true);\n try {\n const results = await fetchItems(input);\n if (fetchId.current !== currentId) return;\n const mapped =\n Array.isArray(results) ? results.map((item) => normalizeItem(normalizedMap(item))) : [];\n setItems(mapped);\n } catch {\n if (fetchId.current === currentId) {\n setItems([]);\n }\n } finally {\n if (fetchId.current === currentId) {\n setIsLoading(false);\n }\n }\n }, debounceMs);\n };\n\n runFetch(query ?? \"\");\n\n return () => {\n if (debounceHandle.current) {\n clearTimeout(debounceHandle.current);\n }\n fetchId.current += 1;\n };\n }, [query, fetchItems, normalizedMap, normalizeItem, debounceMs]);\n\n const handleSelect = useMemo(\n () => (item: FormulaTokenAttributes) => {\n if (isLoading) return;\n command(item);\n },\n [command, isLoading]\n );\n\n const [selectedIndex, setSelectedIndex] = useKeyboardNavigation(\n items.length,\n (index) => {\n if (!items.length) return;\n handleSelect(items[index]);\n },\n isLoading\n );\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [items, setSelectedIndex]);\n\n useEffect(() => {\n const element = itemRefs.current[selectedIndex];\n if (element) element.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n if (!rect) return null;\n\n const showEmptyState = !isLoading && items.length === 0;\n\n return (\n <div\n ref={ref}\n style={style}\n className=\"w-80 max-h-60 overflow-y-auto rounded-lg border bg-white p-1 shadow-lg\"\n >\n {isLoading && <div className=\"px-3 py-2 text-sm text-muted-foreground\">Loading suggestions…</div>}\n {showEmptyState && <div className=\"px-3 py-2 text-sm text-muted-foreground\">No matches</div>}\n {items.map((item, idx) => (\n <button\n key={item.id}\n ref={(el) => {\n itemRefs.current[idx] = el;\n }}\n type=\"button\"\n onClick={() => handleSelect(item)}\n onMouseMove={() => setSelectedIndex(idx)}\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-3 py-2 text-left text-sm\",\n selectedIndex === idx ? \"bg-muted\" : \"hover:bg-muted\",\n isLoading && \"pointer-events-none opacity-60\"\n )}\n disabled={isLoading}\n >\n <span>{item.label ?? item.code}</span>\n <span className=\"text-xs text-muted-foreground\">\n {item.prefix ?? \"\"}\n {item.code ?? \"\"}\n </span>\n </button>\n ))}\n </div>\n );\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { Editor, Node, mergeAttributes } from \"@tiptap/core\";\nimport { NodeViewWrapper, ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Suggestion from \"@tiptap/suggestion\";\nimport type { SuggestionProps } from \"@tiptap/suggestion\";\nimport { Plugin, PluginKey } from \"prosemirror-state\";\n\nimport { cn } from \"@/utils\";\n\nimport { SuggestionList } from \"./SuggestionList\";\nimport type { FormulaTokenAttributes, FormulaTokenConfig } from \"../types\";\n\nconst DISALLOWED_MARKS = [\"bold\", \"italic\", \"link\"];\nconst SUGGESTION_DEBOUNCE = 200;\n\nexport type TokenOptions = {\n configs: FormulaTokenConfig[];\n onSelect?: (token: FormulaTokenAttributes, config: FormulaTokenConfig) => void;\n};\n\nexport type OperatorOptions = {\n shortcuts?: Record<string, string>;\n};\n\ntype SuggestionPluginOptions = {\n config: FormulaTokenConfig;\n onSelect?: (token: FormulaTokenAttributes, config: FormulaTokenConfig) => void;\n nodeName: string;\n editor: Editor;\n register: (entry: SuggestionRegistration) => void;\n};\n\ntype SuggestionRegistration = { key: PluginKey; config: FormulaTokenConfig };\n\nconst DEFAULT_CHIP_CLASS = \"outline-1 outline-muted bg-muted/40 text-foreground\";\n\nconst TokenView: React.FC<any> = ({ node, editor, getPos }) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n React.useEffect(() => {\n const handler = () => {\n const { from, to } = editor.state.selection;\n const position = getPos();\n if (position >= from && position + node.nodeSize <= to) {\n setIsFocused(true);\n } else {\n setIsFocused(false);\n }\n };\n\n editor.on(\"selectionUpdate\", handler);\n return () => {\n editor.off(\"selectionUpdate\", handler);\n };\n }, [editor, getPos, node.nodeSize]);\n\n const remove = () => {\n const pos = getPos();\n editor\n .chain()\n .focus()\n .deleteRange({ from: pos, to: pos + node.nodeSize })\n .run();\n };\n\n return (\n <NodeViewWrapper\n as=\"span\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-sm px-2 py-0.5 mx-2 text-sm font-medium\",\n DEFAULT_CHIP_CLASS,\n node.attrs.chipClassName,\n isFocused && \"ring-2 ring-offset-1 ring-ring\"\n )}\n >\n <span>{node.attrs.label ?? node.attrs.code ?? node.attrs.rawValue}</span>\n {(node.attrs.code || node.attrs.prefix) && (\n <span className=\"text-xs font-normal opacity-80\">\n ({node.attrs.prefix}\n {node.attrs.code ?? \"\"})\n </span>\n )}\n <button\n type=\"button\"\n onClick={remove}\n className=\"ml-1 cursor-pointer rounded-sm px-1 text-xs leading-none hover:bg-sus-primary-1/30\"\n aria-label={`Remove ${node.attrs.label ?? node.attrs.code ?? \"token\"}`}\n >\n ×\n </button>\n </NodeViewWrapper>\n );\n};\n\nfunction normalizeTokenAttrs(\n attrs: Partial<FormulaTokenAttributes>,\n config: FormulaTokenConfig\n): FormulaTokenAttributes {\n const idSource = attrs.id ?? attrs.code ?? attrs.label ?? Math.random().toString(36).slice(2);\n const prefix = attrs.prefix ?? config.prefix;\n const suffix = attrs.code ?? attrs.label ?? \"\";\n const outputType = attrs.outputType ?? config.outputType ?? config.type;\n return {\n ...attrs,\n id: String(idSource),\n type: config.type,\n prefix,\n chipClassName: attrs.chipClassName ?? config.chipClassName,\n rawValue: attrs.rawValue ?? (suffix ? `${prefix}${suffix}` : prefix),\n outputType\n } as FormulaTokenAttributes;\n}\n\nconst isPlainTextContext = (state: any, range: { from: number; to: number }) => {\n const { doc, schema } = state;\n const $from = doc.resolve(range.from);\n if ($from.parent.type.name !== \"paragraph\") return false;\n const marks = $from.marks();\n if (marks.some((mark: any) => DISALLOWED_MARKS.includes(mark.type.name))) return false;\n const linkMark = schema.marks.link;\n if (linkMark && linkMark.isInSet(marks)) return false;\n const nodeBefore = $from.nodeBefore;\n if (nodeBefore && nodeBefore.type.name === \"token\") return false;\n const nodeAfter = $from.nodeAfter;\n if (nodeAfter && nodeAfter.type.name === \"token\") return false;\n return true;\n};\n\nfunction suggestionPlugin({ config, onSelect, nodeName, editor, register }: SuggestionPluginOptions) {\n const pluginKey = new PluginKey(`formula-token-${config.type}-${config.prefix}`);\n const fetchItems = config.fetchItems ?? (async () => []);\n const mapItem = config.mapItem ?? ((item: any) => item as FormulaTokenAttributes);\n const normalizeForConfig = (attrs: Partial<FormulaTokenAttributes>) =>\n normalizeTokenAttrs(attrs, config);\n register({ key: pluginKey, config });\n\n return Suggestion<FormulaTokenAttributes>({\n editor,\n char: config.prefix,\n pluginKey,\n allowSpaces: true,\n startOfLine: false,\n items: () => [],\n allow: ({ state, range }) => {\n if (editor.view.composing) return false;\n return isPlainTextContext(state, range);\n },\n render: () => {\n let reactRoot: ReactDOM.Root | null = null;\n let container: HTMLDivElement | null = null;\n\n return {\n onStart: (props: SuggestionProps<FormulaTokenAttributes>) => {\n container = document.createElement(\"div\");\n document.body.appendChild(container);\n reactRoot = ReactDOM.createRoot(container);\n reactRoot.render(\n <SuggestionList\n {...props}\n editor={editor as any}\n fetchItems={fetchItems}\n mapItem={mapItem}\n normalizeToken={normalizeForConfig}\n debounceMs={SUGGESTION_DEBOUNCE}\n />\n );\n },\n onUpdate: (props: SuggestionProps<FormulaTokenAttributes>) => {\n reactRoot?.render(\n <SuggestionList\n {...props}\n editor={editor as any}\n fetchItems={fetchItems}\n mapItem={mapItem}\n normalizeToken={normalizeForConfig}\n debounceMs={SUGGESTION_DEBOUNCE}\n />\n );\n },\n onKeyDown: ({ event }) => {\n if (event.key === \"Escape\" || event.key === \"Enter\" || event.key === \"Tab\") {\n event.preventDefault();\n return true;\n }\n return false;\n },\n onExit: () => {\n reactRoot?.unmount();\n reactRoot = null;\n container?.remove();\n container = null;\n }\n };\n },\n command: ({ range, props, editor }) => {\n const attrs = normalizeTokenAttrs(props, config);\n const nextChar = editor.state.doc.textBetween(range.to, range.to + 1, \"\\n\", \"\\n\");\n const shouldInsertSpace = !nextChar || !/\\s/.test(nextChar);\n const content =\n shouldInsertSpace ?\n [\n { type: nodeName, attrs },\n { type: \"text\", text: \" \" }\n ]\n : { type: nodeName, attrs };\n\n editor.chain().focus().insertContentAt(range, content).run();\n onSelect?.(attrs, config);\n }\n }) as any;\n}\n\nconst createSuggestionMonitorPlugin = (registrations: SuggestionRegistration[]) =>\n new Plugin({\n key: new PluginKey(\"formula-token-suggestion-guard\"),\n view(editorView) {\n const ensureValid = () => {\n registrations.forEach(({ key, config }) => {\n const state = key.getState(editorView.state);\n if (!state?.active) return;\n const currentText = editorView.state.doc.textBetween(\n state.range.from,\n state.range.to,\n \"\\n\",\n \"\\n\"\n );\n if (!currentText || !currentText.startsWith(config.prefix)) {\n const tr = editorView.state.tr.setMeta(key, { exit: true });\n editorView.dispatch(tr);\n }\n });\n };\n\n ensureValid();\n return {\n update: () => ensureValid()\n };\n }\n });\n\nconst createTokenSpacingPlugin = (nodeName: string) =>\n new Plugin({\n key: new PluginKey(`formula-token-spacing-${nodeName}`),\n appendTransaction(transactions, oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) return null;\n\n const insertions: { pos: number; text: string }[] = [];\n newState.doc.descendants((node: any, pos: number) => {\n if (node.type.name !== nodeName) return;\n\n const beforePos = pos - 1;\n if (beforePos >= 0) {\n const beforeChar = newState.doc.textBetween(beforePos, pos, \"\\n\", \"\\n\");\n if (beforeChar && !/\\s/.test(beforeChar)) {\n insertions.push({ pos, text: \" \" });\n }\n }\n\n const afterPos = pos + node.nodeSize;\n if (afterPos < newState.doc.content.size) {\n const afterChar = newState.doc.textBetween(afterPos, afterPos + 1, \"\\n\", \"\\n\");\n if (afterChar && !/\\s/.test(afterChar)) {\n insertions.push({ pos: afterPos, text: \" \" });\n }\n }\n });\n\n if (!insertions.length) return null;\n const tr = newState.tr;\n insertions\n .sort((a, b) => b.pos - a.pos)\n .forEach(({ pos, text }) => {\n tr.insertText(text, pos);\n });\n return tr;\n }\n });\n\nexport const Token = Node.create<TokenOptions>({\n name: \"token\",\n inline: true,\n group: \"inline\",\n atom: true,\n selectable: false,\n draggable: false,\n\n addAttributes() {\n return {\n type: { default: \"\" },\n id: { default: \"\" },\n code: { default: \"\" },\n label: { default: \"\" },\n prefix: { default: \"\" },\n rawValue: { default: \"\" },\n chipClassName: { default: \"\" },\n outputType: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [{ tag: \"token-chip\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"token-chip\", mergeAttributes(HTMLAttributes), HTMLAttributes.label || \"\"];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(TokenView);\n },\n\n addProseMirrorPlugins() {\n const configs = this.options.configs ?? [];\n const registrations: SuggestionRegistration[] = [];\n const suggestionPlugins = configs.map((config) =>\n suggestionPlugin({\n config,\n onSelect: this.options.onSelect,\n nodeName: this.name,\n editor: this.editor,\n register: (entry) => registrations.push(entry)\n })\n );\n\n return [\n ...suggestionPlugins,\n createTokenSpacingPlugin(this.name),\n createSuggestionMonitorPlugin(registrations)\n ];\n }\n});\n\nexport const Operator = Node.create<OperatorOptions>({\n name: \"operator\",\n inline: true,\n group: \"inline\",\n atom: true,\n selectable: false,\n\n addAttributes() {\n return {\n value: { default: null }\n };\n },\n\n parseHTML() {\n return [{ tag: \"span[operator]\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"span\", mergeAttributes({ operator: HTMLAttributes.value }), HTMLAttributes.value];\n },\n\n addKeyboardShortcuts() {\n const shortcuts = this.options.shortcuts ?? {};\n return Object.fromEntries(\n Object.entries(shortcuts).map(([key, value]) => [\n key,\n ({ editor }) => {\n editor.chain().insertContent({ type: \"operator\", attrs: { value } }).insertContent(\" \").run();\n return true;\n }\n ])\n );\n }\n});\n","import type { FormulaTokenAttributes, FormulaTokenConfig, FormulaTokenType } from \"../types\";\n\nconst DEFAULT_PARENTHESIS_MAP: Record<string, string> = {\n \"(\": \")\",\n \"[\": \"]\",\n \"{\": \"}\"\n};\n\nexport type PrefixMap = Record<string, string>;\nexport type RawFormulaSegment =\n | { kind: \"text\"; value: string }\n | { kind: \"token\"; prefix: string; code: string };\n\nconst createSortedPrefixes = (prefixMap: PrefixMap) =>\n Object.keys(prefixMap).sort((a, b) => b.length - a.length);\n\nconst findPrefixAt = (value: string, start: number, prefixes: string[]) =>\n prefixes.find((prefix) => value.startsWith(prefix, start));\n\nconst pushVariableAndInner = (\n tokens: FormulaTokenType[],\n value: string,\n prefixMap: PrefixMap,\n prefixes: string[]\n) => {\n if (!value) return;\n tokens.push({ type: \"variable\", value });\n\n for (let cursor = 0; cursor < value.length; ) {\n const prefix = findPrefixAt(value, cursor, prefixes);\n if (!prefix) {\n cursor += 1;\n continue;\n }\n\n cursor += prefix.length;\n const rest = value.slice(cursor);\n const codeMatch = rest.match(/^\\w+/);\n if (codeMatch) {\n tokens.push({ type: prefixMap[prefix], code: codeMatch[0] });\n cursor += codeMatch[0].length;\n }\n }\n};\n\nexport const buildPrefixMap = (configs: FormulaTokenConfig[]): PrefixMap => {\n return configs.reduce((acc, config) => {\n const outputType = config.outputType ?? config.type;\n if (!acc[config.prefix]) acc[config.prefix] = outputType;\n return acc;\n }, {} as PrefixMap);\n};\n\nexport const tokenizeFormulaString = (raw: string, prefixMap: PrefixMap): RawFormulaSegment[] => {\n const segments: RawFormulaSegment[] = [];\n if (!raw) return segments;\n\n const prefixes = createSortedPrefixes(prefixMap);\n let buffer = \"\";\n\n const flushBuffer = () => {\n if (buffer) {\n segments.push({ kind: \"text\", value: buffer });\n buffer = \"\";\n }\n };\n\n for (let i = 0; i < raw.length; ) {\n const prefix = findPrefixAt(raw, i, prefixes);\n if (prefix) {\n const rest = raw.slice(i + prefix.length);\n const codeMatch = rest.match(/^\\w+/);\n if (codeMatch) {\n flushBuffer();\n segments.push({ kind: \"token\", prefix, code: codeMatch[0] });\n i += prefix.length + codeMatch[0].length;\n continue;\n }\n }\n\n buffer += raw[i];\n i += 1;\n }\n\n flushBuffer();\n return segments;\n};\n\nexport const parseFormulaToToken = (text: string, prefixMap: PrefixMap): FormulaTokenType[] => {\n const tokens: FormulaTokenType[] = [];\n if (!text) return tokens;\n\n const prefixes = createSortedPrefixes(prefixMap);\n const leadingPrefix = findPrefixAt(text, 0, prefixes);\n\n if (!leadingPrefix) {\n pushVariableAndInner(tokens, text, prefixMap, prefixes);\n return tokens;\n }\n\n const afterPrefix = text.slice(leadingPrefix.length);\n const codeMatch = afterPrefix.match(/^\\w+/);\n\n if (!codeMatch) {\n pushVariableAndInner(tokens, text, prefixMap, prefixes);\n return tokens;\n }\n\n tokens.push({ type: prefixMap[leadingPrefix], code: codeMatch[0] });\n const remaining = afterPrefix.slice(codeMatch[0].length);\n if (remaining) {\n let variablePart = remaining;\n\n if (remaining.startsWith(\":\") && remaining.includes(\"(\")) {\n let depth = 0;\n let endIndex = -1;\n for (let i = 0; i < remaining.length; i++) {\n if (remaining[i] === \"(\") depth += 1;\n else if (remaining[i] === \")\") depth -= 1;\n if (depth === 0 && remaining[i] === \")\") {\n endIndex = i;\n break;\n }\n }\n if (endIndex !== -1) {\n variablePart = remaining.slice(0, endIndex + 1);\n }\n }\n\n pushVariableAndInner(tokens, variablePart, prefixMap, prefixes);\n }\n\n return tokens;\n};\n\nexport const splitOperators = (value: string, allowedOperators: string[]): FormulaTokenType[] => {\n const result: FormulaTokenType[] = [];\n if (!value) return result;\n\n const sortedOperators = [...allowedOperators].sort((a, b) => b.length - a.length);\n let buffer = \"\";\n\n for (let i = 0; i < value.length; i += 1) {\n let matched = false;\n for (const operator of sortedOperators) {\n if (operator && value.startsWith(operator, i)) {\n if (buffer) {\n result.push({ type: \"variable\", value: buffer });\n buffer = \"\";\n }\n result.push({ type: \"operator\", value: operator });\n i += operator.length - 1;\n matched = true;\n break;\n }\n }\n\n if (!matched) buffer += value[i];\n }\n\n if (buffer) result.push({ type: \"variable\", value: buffer });\n return result;\n};\n\nexport const parseFormula = (\n editorJson: any,\n prefixMap: PrefixMap,\n allowedOperators: string[]\n): { raw: string; token: FormulaTokenType[] } => {\n const rawParts: string[] = [];\n const tokens: FormulaTokenType[] = [];\n\n const traverse = (nodes: any[] = []) => {\n nodes.forEach((node) => {\n if (!node) return;\n\n switch (node.type) {\n case \"text\": {\n const text = node.text ?? \"\";\n if (!text) return;\n rawParts.push(text);\n if (text.trim()) {\n tokens.push({ type: \"variable\", value: text });\n }\n break;\n }\n case \"operator\": {\n rawParts.push(node.attrs?.value ?? \"\");\n tokens.push({ type: \"operator\", value: node.attrs?.value ?? \"\" });\n break;\n }\n case \"op-library\": {\n rawParts.push(node.attrs?.value ?? \"\");\n tokens.push(...splitOperators(node.attrs?.value ?? \"\", allowedOperators));\n break;\n }\n case \"token\": {\n const attrs = node.attrs ?? {};\n const rawValue = attrs.rawValue ?? `${attrs.prefix ?? \"\"}${attrs.code ?? \"\"}`;\n rawParts.push(rawValue);\n const outputType = attrs.outputType ?? attrs.type ?? prefixMap[attrs.prefix ?? \"\"];\n tokens.push({ ...attrs, type: outputType });\n break;\n }\n default:\n if (node.content) traverse(node.content);\n }\n });\n };\n\n traverse(editorJson?.content ?? []);\n return { raw: rawParts.join(\"\"), token: tokens };\n};\n\nexport const validateTokenPrefixes = (\n rawFormula: string,\n prefixMap: PrefixMap\n): {\n isValid: boolean;\n message?: string;\n} => {\n const prefixes = Object.keys(prefixMap);\n if (prefixes.length === 0) return { isValid: true };\n\n const missingTypes = new Set<string>();\n for (let i = 0; i < rawFormula.length; i += 1) {\n const prefix = prefixes.find((key) => rawFormula.startsWith(key, i));\n if (prefix) {\n const nextChar = rawFormula[i + prefix.length];\n if (!nextChar || !/\\w/.test(nextChar)) {\n missingTypes.add(prefixMap[prefix]);\n }\n i += prefix.length;\n }\n }\n\n if (missingTypes.size > 0) {\n return {\n isValid: false,\n message: `Invalid token for ${Array.from(missingTypes).join(\" and \")}`\n };\n }\n\n return { isValid: true };\n};\n\nexport const isValidParentheses = (input: string): { valid: boolean; message?: string } => {\n const stack: string[] = [];\n const openers = Object.keys(DEFAULT_PARENTHESIS_MAP);\n const closers = Object.values(DEFAULT_PARENTHESIS_MAP);\n\n for (const char of input) {\n if (openers.includes(char)) {\n stack.push(char);\n } else if (closers.includes(char)) {\n const last = stack.pop();\n if (!last || DEFAULT_PARENTHESIS_MAP[last] !== char) {\n return { valid: false };\n }\n }\n }\n\n if (stack.length > 0) {\n return { valid: false };\n }\n\n return { valid: true };\n};\n\nexport const mapTokensToOutput = (tokens: FormulaTokenType[], configs: FormulaTokenConfig[]): any[] => {\n const prefixLookup = new Map<string, FormulaTokenConfig>();\n const typeLookup = new Map<string, FormulaTokenConfig>();\n\n configs.forEach((config) => {\n prefixLookup.set(config.prefix, config);\n typeLookup.set(config.outputType ?? config.type, config);\n });\n\n return tokens.map((token) => {\n if (!token || typeof token !== \"object\") return token;\n\n const tokenPrefix = \"prefix\" in token ? (token as FormulaTokenAttributes).prefix : undefined;\n const tokenType = \"type\" in token ? (token as FormulaTokenAttributes).type : undefined;\n\n const config =\n (tokenPrefix ? prefixLookup.get(tokenPrefix) : undefined) ??\n (tokenType ? typeLookup.get(String(tokenType)) : undefined);\n\n if (config?.mapOutput) {\n return config.mapOutput(token as FormulaTokenAttributes);\n }\n\n return token;\n });\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport { Maximize2, Minimize2 } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport LoadingOverlay from \"@/components/ui/LoadingOverlay\";\nimport { cn } from \"@/utils\";\n\nimport { defaultOperators, defaultOperatorShortcuts } from \"./constants/formulaOperation\";\nimport { Operator, Token } from \"./editor/EditorExtension\";\nimport {\n buildPrefixMap,\n mapTokensToOutput,\n parseFormula,\n tokenizeFormulaString\n} from \"./utils/parseFormulaToken\";\nimport type { PrefixMap } from \"./utils/parseFormulaToken\";\nimport type { FormulaEditorProps, FormulaTokenAttributes, FormulaTokenConfig } from \"./types\";\n\nconst DEFAULT_TOKEN_CONFIGS: FormulaTokenConfig[] = [\n {\n type: \"position\",\n prefix: \"$\",\n chipClassName: \"text-black border border-sus-primary-1 outline-sus-primary-1\",\n fetchItems: async () => []\n },\n {\n type: \"impact\",\n prefix: \"#\",\n chipClassName: \"text-black border border-sus-primary-1 outline-sus-primary-1\",\n fetchItems: async () => []\n }\n];\n\nconst defaultMapItem = (item: Record<string, any>) => {\n const id = item?.id ?? item?.code ?? item?.label ?? Math.random().toString(36).slice(2);\n return {\n id: String(id),\n label: item?.label ?? item?.name ?? String(item?.code ?? item?.id ?? \"\"),\n code: item?.code ?? String(item?.id ?? \"\")\n };\n};\n\ntype NormalizedTokenConfig = FormulaTokenConfig & {\n fetchItems: NonNullable<FormulaTokenConfig[\"fetchItems\"]>;\n mapItem: NonNullable<FormulaTokenConfig[\"mapItem\"]>;\n outputType: string;\n mapOutput?: (attrs: FormulaTokenAttributes) => any;\n};\n\ntype JSONContent = {\n type: string;\n text?: string;\n attrs?: Record<string, any>;\n content?: JSONContent[];\n};\n\ntype JSONDoc = {\n type: \"doc\";\n content: JSONContent[];\n};\n\nconst looksLikeHTML = (value: string) => /<\\/?[a-z][\\s\\S]*>/i.test(value.trim());\n\nconst tryParseJSON = (value: string) => {\n try {\n const parsed = JSON.parse(value);\n if (parsed && typeof parsed === \"object\") {\n return parsed;\n }\n } catch {\n // ignore\n }\n return null;\n};\n\nconst buildDocFromRaw = (\n raw: string,\n prefixMap: PrefixMap,\n configLookup: Map<string, NormalizedTokenConfig>\n): JSONDoc => {\n const lines = raw.split(/\\r?\\n/);\n let tokenCounter = 0;\n\n const paragraphs = lines.map((line) => {\n const segments = tokenizeFormulaString(line, prefixMap);\n const content = segments\n .map<JSONContent | null>((segment) => {\n if (segment.kind === \"text\") {\n return segment.value ? { type: \"text\", text: segment.value } : null;\n }\n\n const config = configLookup.get(segment.prefix);\n const fallbackType = prefixMap[segment.prefix];\n const displayType = config?.type ?? fallbackType;\n const outputType = config?.outputType ?? fallbackType;\n\n if (!displayType && !outputType) {\n return { type: \"text\", text: `${segment.prefix}${segment.code}` };\n }\n\n const attrs: FormulaTokenAttributes = {\n id: `token-${tokenCounter++}`,\n type: displayType ?? outputType ?? \"token\",\n code: segment.code,\n prefix: segment.prefix,\n rawValue: `${segment.prefix}${segment.code}`,\n chipClassName: config?.chipClassName,\n label: segment.code,\n outputType: outputType ?? displayType\n };\n\n return { type: \"token\", attrs };\n })\n .filter((node): node is JSONContent => Boolean(node));\n\n return {\n type: \"paragraph\",\n content: content.length > 0 ? content : [{ type: \"text\", text: \"\" }]\n };\n });\n\n return { type: \"doc\", content: paragraphs };\n};\n\nexport const FormulaEditor: React.FC<FormulaEditorProps> = ({\n value,\n disabled,\n loading = false,\n className,\n editorClassName,\n errorMessage,\n tokenConfigs,\n operators = defaultOperators,\n operatorShortcuts = defaultOperatorShortcuts,\n onChange,\n onSelectSuggestion,\n field,\n fieldState\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const lastEmittedValueRef = useRef<string | undefined>(null);\n const ignorePropValueRef = useRef(false);\n\n const normalizedConfigs = useMemo<NormalizedTokenConfig[]>(() => {\n const configsToUse = tokenConfigs?.length ? tokenConfigs : DEFAULT_TOKEN_CONFIGS;\n return configsToUse.map((config) => ({\n ...config,\n fetchItems: config.fetchItems ?? (async () => []),\n mapItem: config.mapItem ?? ((item: Record<string, any>) => ({ ...item, ...defaultMapItem(item) })),\n outputType: config.outputType ?? config.type\n })) as NormalizedTokenConfig[];\n }, [tokenConfigs]);\n\n const prefixMap = useMemo(() => buildPrefixMap(normalizedConfigs), [normalizedConfigs]);\n const configLookup = useMemo(() => {\n const lookup = new Map<string, NormalizedTokenConfig>();\n normalizedConfigs.forEach((config) => {\n lookup.set(config.prefix, config);\n });\n return lookup;\n }, [normalizedConfigs]);\n const allowedOperators = useMemo(() => operators.map((operator) => operator.value), [operators]);\n const displayError = errorMessage ?? fieldState?.error?.message;\n const hasError = Boolean(displayError);\n const isInteractionDisabled = Boolean(disabled || loading);\n\n const convertValueToContent = useCallback(\n (input?: string): string | JSONDoc => {\n if (!input) return \"\";\n const trimmed = input.trim();\n if (!trimmed) return \"\";\n\n const parsedJSON = tryParseJSON(trimmed);\n if (parsedJSON && parsedJSON.type === \"doc\") {\n return parsedJSON;\n }\n\n if (looksLikeHTML(trimmed)) {\n return input;\n }\n\n return buildDocFromRaw(input, prefixMap, configLookup);\n },\n [configLookup, prefixMap]\n );\n\n const resolvedContent = useMemo(() => convertValueToContent(value), [convertValueToContent, value]);\n\n const extensions = useMemo(\n () => [\n StarterKit.configure({ bold: false, italic: false }),\n Token.configure({ configs: normalizedConfigs, onSelect: onSelectSuggestion }),\n Operator.configure({ shortcuts: operatorShortcuts })\n ],\n [normalizedConfigs, onSelectSuggestion, operatorShortcuts]\n );\n\n const editor = useEditor({\n extensions,\n content: resolvedContent ?? \"\",\n onUpdate: ({ editor: nextEditor }) => {\n const { raw, token } = parseFormula(nextEditor.getJSON(), prefixMap, allowedOperators);\n const mappedTokens = mapTokensToOutput(token, normalizedConfigs);\n lastEmittedValueRef.current = raw;\n ignorePropValueRef.current = true;\n onChange?.(raw, mappedTokens);\n },\n editorProps: {\n attributes: {\n class: cn(\n isExpanded ? \"min-h-[300px] max-h-[300px]\" : \"min-h-[150px] max-h-[150px]\",\n hasError ? \"border border-destructive\" : \"border focus-visible:border-ring\",\n \"w-full rounded-lg bg-white px-4 py-3\",\n \"overflow-y-auto whitespace-pre-wrap wrap-break-word focus:outline-none\",\n isInteractionDisabled && \"pointer-events-none opacity-60\",\n editorClassName\n ),\n ...(loading ? { \"aria-busy\": \"true\" } : {})\n }\n }\n });\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!isInteractionDisabled);\n }, [editor, isInteractionDisabled]);\n\n useEffect(() => {\n if (!editor || resolvedContent === undefined) return;\n\n if (\n ignorePropValueRef.current &&\n typeof value === \"string\" &&\n value === lastEmittedValueRef.current\n ) {\n ignorePropValueRef.current = false;\n return;\n }\n\n ignorePropValueRef.current = false;\n\n if (typeof resolvedContent === \"string\") {\n const currentHTML = editor.getHTML();\n if (resolvedContent !== currentHTML) {\n editor.commands.setContent(resolvedContent, { emitUpdate: false });\n }\n return;\n }\n\n const currentJSON = JSON.stringify(editor.getJSON());\n const nextJSON = JSON.stringify(resolvedContent);\n if (currentJSON !== nextJSON) {\n editor.commands.setContent(resolvedContent, { emitUpdate: false });\n }\n }, [editor, resolvedContent, value]);\n\n const insertOperator = (operator: string) => {\n editor\n ?.chain()\n .focus()\n .insertContent({ type: \"operator\", attrs: { value: operator } })\n .insertContent(\" \")\n .run();\n };\n\n return (\n <div className={cn(\"w-full space-y-2\", className)}>\n <div\n ref={field?.ref}\n onBlur={field?.onBlur}\n tabIndex={0}\n className=\"relative\"\n aria-busy={loading}\n onFocus={() => {\n if (editor && !editor.isFocused) {\n editor.chain().focus().run();\n }\n }}\n >\n <EditorContent editor={editor} />\n {loading && (\n <LoadingOverlay\n fullscreen={false}\n className=\"rounded-lg bg-white/80 backdrop-blur-sm\"\n spinnerClassName=\"size-6 text-sus-blue-3\"\n />\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute bottom-2 right-4 h-6 w-6 rounded-full bg-white shadow\"\n disabled={isInteractionDisabled}\n onClick={() => setIsExpanded((prev) => !prev)}\n >\n {isExpanded ?\n <Minimize2 className=\"h-4 w-4\" />\n : <Maximize2 className=\"h-4 w-4\" />}\n </Button>\n </div>\n {hasError && (\n <p className=\"text-xs text-destructive\" role=\"alert\">\n {displayError}\n </p>\n )}\n <div className=\"flex flex-wrap justify-end gap-2 py-2\">\n {operators.map((operator) => (\n <Button\n key={operator.value}\n type=\"button\"\n onClick={() => insertOperator(operator.value)}\n className=\"min-w-10 rounded-sm px-3 bg-sus-blue-3\"\n disabled={isInteractionDisabled}\n >\n {operator.label}\n </Button>\n ))}\n </div>\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport cn from \"../../utils/cn\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipArrow(props: React.ComponentProps<typeof TooltipPrimitive.Arrow>) {\n return <TooltipPrimitive.Arrow {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"relative bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md rounded-tl-none px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider,TooltipArrow }\n","// src/components/gridSettings/SortableRow.tsx\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { CircleMinus, GripVertical, Info } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Control, useWatch } from \"react-hook-form\";\nimport { cn } from \"@/utils\";\nimport { FormControl, FormField, FormItem, FormMessage } from \"@/components/ui/form\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/select\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/tooltip\";\nimport type { GridSettingsValues } from \"./schema\";\nimport type { Column } from \"./types\";\n\ninterface SortableRowProps {\n value: string;\n control: Control<GridSettingsValues>;\n name: `columns.${number}.id`;\n isDragging: boolean;\n availableColumns: Column[];\n onRemove?: () => void;\n}\n\nexport default function SortableRow({\n availableColumns,\n control,\n name,\n value,\n isDragging,\n onRemove\n}: SortableRowProps) {\n const { attributes, listeners, setNodeRef, transform, transition } = useSortable({\n id: value,\n disabled: name === \"columns.0.id\"\n });\n\n const style = React.useMemo<React.CSSProperties>(\n () => ({\n transform: CSS.Transform.toString(transform),\n transition\n }),\n [transform, transition]\n );\n\n const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n const currentFormColumns = useWatch({\n control,\n name: \"columns\"\n }) as GridSettingsValues[\"columns\"] | undefined;\n\n return (\n <div ref={setNodeRef} style={style} className=\"flex items-center rounded-md bg-white\">\n <FormField\n control={control}\n name={name}\n render={({ field }) => {\n const options = availableColumns\n .filter((col) => col.id === field.value || !currentFormColumns?.some((c) => c.id === col.id))\n .map((col) => ({ id: col.id, label: col?.label ? col.label : capitalize(col.id) }));\n\n return (\n <FormItem className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <GripVertical\n {...attributes}\n {...listeners}\n className={cn(\n \"h-5 w-5 text-[#B9B9B9] focus:outline-none cursor-grab\",\n name === \"columns.0.id\" && \"opacity-0 pointer-events-none\"\n )}\n />\n\n <Select\n value={field.value}\n onValueChange={field.onChange}\n disabled={name === \"columns.0.id\"}\n >\n <FormControl>\n <SelectTrigger\n className={cn(\n \"w-full border-[#DDDDDD] data-[disabled]:opacity-100 aria-invalid:border-[#BB0B0E]\",\n name === \"columns.0.id\" ?\n \"text-[#8B8B8B] bg-[#EAEAEA] cursor-not-allowed\"\n : \"cursor-pointer\"\n )}\n >\n <SelectValue placeholder=\"Choose column...\" />\n </SelectTrigger>\n </FormControl>\n <SelectContent className=\"cursor-pointer overflow-hidden rounded-md [&_[data-radix-select-viewport]]:m-0\">\n {options\n .sort((a, b) =>\n a.id === field.value ? -1\n : b.id === field.value ? 1\n : 0\n )\n .map((opt) => (\n <SelectItem\n key={opt.id}\n value={opt.id}\n className={cn(\n \"cursor-pointer focus:bg-[#e8edea] first:rounded-t-md last:rounded-b-md hover:text-inherit\",\n opt.id === field.value ? \"font-bold bg-[#dae5de] focus:bg-[#dae5de]\" : \"\"\n )}\n >\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {name === \"columns.0.id\" ?\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Info className=\"h-5 w-5\" stroke=\"white\" fill=\"#8B8B8B\" />\n </TooltipTrigger>\n <TooltipContent\n align=\"start\"\n alignOffset={10}\n className=\"bg-[#8B8B8B] rounded-none\"\n >\n <p>Column cannot be removed.</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n : <CircleMinus\n onClick={onRemove}\n className=\"h-5 w-5 cursor-pointer\"\n stroke=\"white\"\n fill=\"#C32A2C\"\n />\n }\n </div>\n {!isDragging && <FormMessage className={cn(\"pl-6 text-[#BB0B0E]\")} />}\n </FormItem>\n );\n }}\n />\n </div>\n );\n}\n","import { z } from \"zod\";\n\nexport const ColumnSchema = z.object({\n id: z.string().nonempty(\"This field is required\"),\n label: z.string().optional()\n});\n\nexport const GridSettingsSchema = z.object({\n columns: z.array(ColumnSchema).min(1, \"At least one column is required\")\n});\nexport type GridSettingsValues = z.infer<typeof GridSettingsSchema>;\n","import { useEffect, useState, useRef } from \"react\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useFieldArray, useForm } from \"react-hook-form\";\nimport { Form } from \"@/components/ui/form\";\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle\n} from \"@/components/dialog\";\nimport { cn } from \"@/utils\";\nimport SortableRow from \"./SortableRow\";\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { restrictToParentElement, restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport { Plus, X } from \"lucide-react\";\nimport { Button } from \"@/components/button\";\nimport { GridSettingsSchema } from \"./schema\";\nimport type { GridSettingsValues } from \"./schema\";\nimport type { GridPayload, Column } from \"./types\";\n\nexport type GridSettingsModalProps = {\n isOpen: boolean;\n headerClassname?: string;\n descriptionClassname?: string;\n addButtonClassname?: string;\n saveButtonClassname?: string;\n availableColumns: Column[];\n currentColumns: Column[];\n limit?: number;\n onClose: () => void;\n onSaveColumns?: (payload: GridPayload, currentColumns: Column[]) => void;\n};\n\nconst GridSettingsModal = ({\n isOpen = false,\n headerClassname,\n descriptionClassname,\n addButtonClassname,\n saveButtonClassname,\n availableColumns,\n currentColumns,\n limit = availableColumns.length,\n onClose,\n onSaveColumns\n}: GridSettingsModalProps) => {\n const [isDragging, setIsDragging] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const form = useForm<GridSettingsValues>({\n resolver: zodResolver(GridSettingsSchema),\n defaultValues: { columns: currentColumns },\n mode: \"onChange\"\n });\n const { control, trigger } = form;\n const { fields, append, remove, move } = useFieldArray({\n control,\n name: \"columns\",\n keyName: \"fieldId\"\n });\n\n useEffect(() => {\n if (isOpen) {\n form.reset({ columns: currentColumns });\n }\n }, [isOpen, currentColumns, form]);\n\n const addColumn = async () => {\n const isValid = await trigger(\"columns\");\n\n if (isValid) {\n append({ id: \"\" });\n\n // Auto scroll\n requestAnimationFrame(() => {\n const container = scrollRef.current;\n if (container) {\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\"\n });\n }\n });\n } else {\n return;\n }\n };\n\n const onSubmit = (data: GridSettingsValues) => {\n const ordering = data.columns.map((i) => i.id);\n const visibility = Object.fromEntries(\n availableColumns.map((col) => [col.id, data.columns.some((c) => c.id === col.id)])\n );\n const pinning = { left: [data.columns[0].id] };\n\n if (onSaveColumns) {\n onSaveColumns({ ordering, visibility, pinning }, data.columns);\n }\n };\n\n // DnD\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIndex = fields.findIndex((f) => f.fieldId === active.id);\n const newIndex = fields.findIndex((f) => f.fieldId === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n move(oldIndex, newIndex);\n }\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"sm:max-w-xl border-0 p-0 rounded-lg\">\n {/* Modal container */}\n <div className=\"flex flex-col min-h-[550px] rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"flex-shrink-0\">\n <div\n className={cn(\n \"flex items-center justify-between bg-[#41875C] text-white px-4 py-2\",\n headerClassname\n )}\n >\n <DialogTitle className=\"text-xl\">Grid Settings</DialogTitle>\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className=\"flex items-center justify-center rounded-md hover:bg-white/10 transition cursor-pointer\"\n >\n <X className=\"h-6 w-6 text-white\" />\n </button>\n </div>\n\n <div\n className={cn(\n \"bg-[#818181] text-white px-4 py-2.5 flex items-center\",\n descriptionClassname\n )}\n >\n <DialogDescription className=\"text-white text-sm\">\n Add or remove columns. To change the column order, drag and drop a field.\n </DialogDescription>\n </div>\n </div>\n\n {/* Scrollable */}\n <div className=\"flex flex-col flex-1 px-12 my-10 overflow-hidden\">\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"flex flex-col flex-1\">\n <div\n ref={scrollRef}\n className=\"flex-1 overflow-y-auto overflow-x-hidden max-h-[35vh] [scrollbar-gutter:stable_both-edges]\"\n >\n <div className=\"space-y-3 px-6\">\n <div className=\"[&_button:not([disabled])]:cursor-pointer\">\n <SortableRow\n key={fields[0]?.fieldId}\n value={fields[0]?.fieldId}\n control={control}\n name={`columns.0.id`}\n isDragging={isDragging}\n availableColumns={availableColumns}\n />\n </div>\n\n <div className=\"space-y-3 [&_button:not([disabled])]:cursor-pointer\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToParentElement, restrictToVerticalAxis]}\n onDragStart={() => setIsDragging(true)}\n onDragEnd={(event) => {\n setIsDragging(false);\n handleDragEnd(event);\n }}\n >\n <SortableContext\n items={fields?.slice(1).map((c) => c?.fieldId)}\n strategy={verticalListSortingStrategy}\n >\n {fields?.slice(1).map((col, index) => (\n <SortableRow\n key={col?.fieldId}\n value={col?.fieldId}\n control={control}\n name={`columns.${index + 1}.id`}\n isDragging={isDragging}\n availableColumns={availableColumns}\n onRemove={() => remove(index + 1)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n </div>\n </div>\n\n <div className=\"sticky bottom-0 z-20 flex justify-center bg-white pt-3\">\n <Button\n type=\"button\"\n className={cn(\n \"bg-[#49865d] hover:bg-[#326446] text-white w-[350px] rounded-t-lg transition-colors\",\n addButtonClassname\n )}\n onClick={addColumn}\n disabled={fields.length >= limit}\n >\n <Plus className=\"h-4 w-4 mr-1\" /> Add column\n </Button>\n </div>\n </form>\n </Form>\n </div>\n\n {/* Footer */}\n <DialogFooter className=\"bottom-0 border-t bg-white\">\n <div className=\"flex gap-2 px-4 justify-end w-full\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n className=\"w-18 text-[#8B8B8B] border-[#B9B9B9]\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n className={cn(\"w-18 bg-[#379A2A] hover:bg-[#2f8524] text-white\", saveButtonClassname)}\n onClick={form.handleSubmit(onSubmit)}\n >\n Save\n </Button>\n </div>\n </DialogFooter>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default GridSettingsModal;\n","import { create } from \"zustand\";\nimport type { Column, GridPayload } from \"../types\";\nimport type { RowData, Table } from \"@tanstack/react-table\";\n\ntype KeyOrString<T> = keyof T | (string & {});\n\ntype TanstackTableInstance = {\n getAllColumns(): any[];\n getVisibleLeafColumns(): any[];\n};\n\ntype UseGridSettingsStoreActions = {\n setAvailableColumns: (cols: Column[]) => void;\n setCurrentColumns: (cols: Column[]) => void;\n setPayload: (payload: GridPayload) => void;\n reset: () => void;\n extractColumns: (table: TanstackTableInstance) => {\n availableColumns: Column[];\n currentColumns: Column[];\n };\n syncColumnsState: <TData = RowData>(\n table: Table<TData>,\n options?: {\n excludeColumns: KeyOrString<TData>[];\n labelMap?: Partial<Record<KeyOrString<TData>, string>>;\n visibility?: Record<keyof TData, boolean>;\n }\n ) => void;\n};\n\ntype UseGridSettingsStoreState = {\n availableColumns: Column[];\n currentColumns: Column[];\n payload: GridPayload;\n};\n\nconst useGridSettingsStore = create<UseGridSettingsStoreState & UseGridSettingsStoreActions>(\n (set, get) => ({\n availableColumns: [],\n currentColumns: [],\n payload: {\n ordering: [],\n visibility: {},\n pinning: { left: [] }\n },\n setAvailableColumns: (cols: Column[]) => set({ availableColumns: cols }),\n setCurrentColumns: (cols: Column[]) => set({ currentColumns: cols }),\n setPayload: (payload: GridPayload) => set({ payload }),\n reset: () =>\n set({\n availableColumns: [],\n currentColumns: [],\n payload: { ordering: [], visibility: {}, pinning: { left: [] } }\n }),\n extractColumns: (table: TanstackTableInstance) => {\n const availableColumns = table.getAllColumns().map((col) => ({ id: col.id }));\n const currentColumns = table.getVisibleLeafColumns().map((col) => ({ id: col.id }));\n return { availableColumns, currentColumns };\n },\n syncColumnsState: <TData = RowData>(\n table: Table<TData>,\n options?: {\n excludeColumns?: KeyOrString<TData>[];\n labelMap?: Partial<Record<KeyOrString<TData>, string>>;\n visibility?: Record<keyof TData, boolean>;\n }\n ) => {\n const { availableColumns, currentColumns } = get().extractColumns(table);\n const { excludeColumns = [], labelMap = {}, visibility = {} } = options || {};\n\n const filteredExcludeColumnFn = (column: Column) => !excludeColumns.includes(column.id as any);\n\n const mapLabel = (col: Column) => ({\n id: col.id,\n label: labelMap?.[col.id as keyof typeof labelMap] ?? col.label ?? col.id\n });\n\n set({\n availableColumns: availableColumns.filter(filteredExcludeColumnFn).map(mapLabel),\n currentColumns: currentColumns\n .filter(filteredExcludeColumnFn)\n .filter((column) => {\n for (const [columnId, isVisible] of Object.entries(visibility)) {\n if (column.id === columnId && !isVisible) {\n return false;\n }\n }\n return true;\n })\n .map(mapLabel)\n });\n }\n })\n);\n\nexport default useGridSettingsStore;\n","import * as React from \"react\";\nimport LoadingOverlay from \"@/components/ui/LoadingOverlay\";\nimport { cn } from \"@/utils\";\n\nconst DEVICE_SIZES = [320, 420, 640, 768, 1024, 1280, 1536, 1920];\nconst IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];\n\nexport type ImageLoaderProps = {\n src: string;\n width: number;\n quality?: number;\n};\n\nexport type ImageLoader = (props: ImageLoaderProps) => string;\n\nexport interface ImageProps\n extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"width\" | \"height\"> {\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n fill?: boolean;\n sizes?: string;\n quality?: number;\n priority?: boolean;\n placeholder?: \"empty\" | \"blur\";\n blurDataURL?: string;\n loader?: ImageLoader;\n unoptimized?: boolean;\n wrapperClassName?: string;\n objectFit?: React.CSSProperties[\"objectFit\"];\n objectPosition?: React.CSSProperties[\"objectPosition\"];\n onLoadingComplete?: (img: HTMLImageElement) => void;\n}\n\nconst defaultLoader: ImageLoader = ({ src }) => src;\n\nfunction toNumber(value?: number | string): number | undefined {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === \"string\") {\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n return undefined;\n}\n\nfunction formatDimension(value?: number | string): string | undefined {\n if (typeof value === \"number\") {\n return `${value}px`;\n }\n\n return value;\n}\n\nfunction matchClosestSize(target: number): number {\n for (const size of IMAGE_SIZES) {\n if (size >= target) {\n return size;\n }\n }\n return DEVICE_SIZES[DEVICE_SIZES.length - 1];\n}\n\nfunction getCandidateWidths({\n width,\n sizes,\n fill\n}: {\n width?: number;\n sizes?: string;\n fill?: boolean;\n}): number[] {\n if (fill || sizes) {\n return DEVICE_SIZES;\n }\n\n if (typeof width === \"number\" && width > 0) {\n const targets = new Set<number>([width, width * 2]);\n return Array.from(targets)\n .map((target) => matchClosestSize(target))\n .sort((a, b) => a - b);\n }\n\n return DEVICE_SIZES;\n}\n\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(function Image(\n {\n src,\n alt,\n width,\n height,\n fill = false,\n sizes,\n quality = 75,\n priority = false,\n placeholder = \"empty\",\n blurDataURL,\n loader = defaultLoader,\n unoptimized = false,\n wrapperClassName,\n className,\n objectFit,\n objectPosition,\n onLoadingComplete,\n style,\n ...imgProps\n },\n ref\n) {\n const {\n loading: loadingProp,\n fetchPriority: fetchPriorityProp,\n decoding: decodingProp,\n onLoad: onLoadProp,\n ...restImgProps\n } = imgProps;\n\n const widthNumber = toNumber(width);\n const heightNumber = toNumber(height);\n\n React.useEffect(() => {\n if (!fill && (!widthNumber || !heightNumber)) {\n console.warn(\n \"[Image] When `fill` is false you should provide both `width` and `height` to prevent layout shifts.\"\n );\n }\n }, [fill, heightNumber, widthNumber]);\n\n const candidateWidths = React.useMemo(\n () => getCandidateWidths({ width: widthNumber, sizes, fill }),\n [fill, sizes, widthNumber]\n );\n\n // Keep blurDataURL around to avoid passing it through to the DOM while the API transitions.\n void blurDataURL;\n\n const largestWidth =\n candidateWidths[candidateWidths.length - 1] ?? widthNumber ?? DEVICE_SIZES[DEVICE_SIZES.length - 1];\n\n const computedSrc = React.useMemo(() => {\n if (unoptimized) {\n return src;\n }\n\n return loader({ src, width: largestWidth, quality });\n }, [largestWidth, loader, quality, src, unoptimized]);\n\n const computedSrcSet = React.useMemo(() => {\n if (unoptimized) {\n return undefined;\n }\n\n return candidateWidths\n .map((currentWidth) => `${loader({ src, width: currentWidth, quality })} ${currentWidth}w`)\n .join(\", \");\n }, [candidateWidths, loader, quality, src, unoptimized]);\n\n const sizesValue =\n sizes ??\n (fill ? \"100vw\"\n : widthNumber ? `${widthNumber}px`\n : undefined);\n\n const [isLoaded, setIsLoaded] = React.useState(false);\n const internalRef = React.useRef<HTMLImageElement | null>(null);\n\n const setRefs = React.useCallback(\n (node: HTMLImageElement | null) => {\n internalRef.current = node;\n if (!ref) {\n return;\n }\n if (typeof ref === \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n },\n [ref]\n );\n\n React.useEffect(() => {\n const image = internalRef.current;\n if (!image) {\n return;\n }\n\n if (image.complete && image.naturalWidth > 0) {\n setIsLoaded(true);\n onLoadingComplete?.(image);\n } else {\n setIsLoaded(false);\n }\n }, [onLoadingComplete, src]);\n\n const handleLoad = React.useCallback(\n (event: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setIsLoaded(true);\n onLoadProp?.(event);\n onLoadingComplete?.(event.currentTarget);\n },\n [onLoadProp, onLoadingComplete]\n );\n\n const loading = priority ? \"eager\" : (loadingProp ?? \"lazy\");\n const fetchPriority = priority ? \"high\" : fetchPriorityProp;\n const decoding = decodingProp ?? \"async\";\n\n const resolvedObjectFit = objectFit ?? (fill ? \"cover\" : undefined);\n\n const wrapperStyle = React.useMemo<React.CSSProperties>(\n () => ({\n position: \"relative\",\n display: fill ? \"block\" : \"inline-block\",\n overflow: \"hidden\",\n width: fill ? \"100%\" : (formatDimension(width) ?? undefined),\n height: fill ? \"100%\" : (formatDimension(height) ?? undefined)\n }),\n [fill, height, width]\n );\n\n const imageStyle = React.useMemo<React.CSSProperties>(\n () => ({\n width: fill ? \"100%\" : (formatDimension(width) ?? undefined),\n height: fill ? \"100%\" : (formatDimension(height) ?? undefined),\n position: fill ? \"absolute\" : undefined,\n inset: fill ? 0 : undefined,\n objectFit: resolvedObjectFit,\n objectPosition,\n ...style\n }),\n [fill, height, objectPosition, resolvedObjectFit, style, width]\n );\n\n const shouldShowLoadingOverlay = placeholder === \"blur\";\n\n return (\n <span\n data-slot=\"image\"\n className={cn(\"relative overflow-hidden\", fill ? \"block\" : \"inline-block\", wrapperClassName)}\n style={wrapperStyle}\n >\n {shouldShowLoadingOverlay && (\n <LoadingOverlay\n aria-hidden\n fullscreen={false}\n spinnerClassName=\"size-6\"\n className={cn(\n // \"bg-white/75!\",\n isLoaded ? \"opacity-0 pointer-events-none\" : \"opacity-100\"\n )}\n />\n )}\n <img\n ref={setRefs}\n className={cn(\n \"block transition-opacity duration-300\",\n fill && \"absolute inset-0 size-full\",\n shouldShowLoadingOverlay && !isLoaded ? \"opacity-0\" : \"opacity-100\",\n className\n )}\n src={computedSrc}\n srcSet={computedSrcSet}\n sizes={sizesValue}\n width={fill ? undefined : widthNumber}\n height={fill ? undefined : heightNumber}\n alt={alt}\n loading={loading}\n fetchPriority={fetchPriority}\n decoding={decoding}\n onLoad={handleLoad}\n style={imageStyle}\n {...restImgProps}\n />\n </span>\n );\n});\n\nImage.displayName = \"Image\";\n","import * as React from \"react\";\n\nimport type { GridPayload } from \"../../grid-settings/types\";\n\nexport interface ListTableProps {\n gridSettingPayload?: GridPayload;\n onCreateExample?: () => void;\n onViewExample?: (exampleId: string) => void;\n onEditExample?: (exampleId: string) => void;\n onDeleteExample?: (exampleId: string) => void;\n selectedRowId?: string;\n onTableReady?: (table: unknown) => void;\n children?: React.ReactNode;\n}\n\nconst ListTable: React.FC<ListTableProps> = ({ onTableReady, children }) => {\n React.useEffect(() => {\n if (onTableReady) {\n onTableReady({ ready: true });\n }\n }, [onTableReady]);\n\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n {children ?? \"Provide your table implementation here.\"}\n </div>\n );\n};\n\nexport default ListTable;\n","import * as React from \"react\";\n\nimport { cn } from \"../../../utils\";\n\nexport interface ListContainerProps {\n className?: string;\n isLeftExpanded: boolean;\n children: React.ReactNode;\n}\n\nconst ListContainer: React.FC<ListContainerProps> = ({ className, isLeftExpanded, children }) => {\n return (\n <div\n className={cn(\n \"h-[calc(100vh-140px)] min-w-full overflow-hidden rounded-2xl border border-slate-300 bg-white shadow-lg transition-all duration-300 ease-in-out\",\n {\n \"w-full\": isLeftExpanded,\n \"md:w-full\": isLeftExpanded,\n \"w-full lg:w-1/2\": !isLeftExpanded\n },\n className\n )}\n style={{\n position: \"relative\",\n transitionProperty: \"width, transform\",\n transitionDuration: \"300ms\"\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default ListContainer;\n","import * as React from \"react\";\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { SuiSettingIcon } from \"../../icons\";\nimport { cn } from \"../../../utils\";\n\nexport interface ListHeaderProps {\n title: string | React.ReactNode;\n isExpanded?: boolean;\n onSettingClick?: () => void;\n onExpandClick?: () => void;\n bgColor?: string;\n textClassName?: string;\n titleIcon?: React.ReactNode;\n rightActions?: React.ReactNode;\n className?: string;\n}\n\nconst ListHeader: React.FC<ListHeaderProps> = ({\n title,\n titleIcon,\n isExpanded = false,\n bgColor = \"bg-[#82B495]\",\n textClassName = \"text-white\",\n onSettingClick,\n onExpandClick,\n rightActions,\n className\n}) => {\n return (\n <div data-testid=\"list-header\" className={cn(\"rounded-t-lg px-4 py-2\", bgColor, className)}>\n <div className=\"flex items-center justify-between\">\n <div className={cn(\"flex items-center gap-2 text-lg\", textClassName)}>\n {titleIcon}\n <p className=\"leading-none\">{title}</p>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {rightActions ?? (\n <>\n {onSettingClick && (\n <button\n onClick={onSettingClick}\n title=\"Settings\"\n className=\"rounded p-1 hover:cursor-pointer hover:bg-white/20\"\n >\n <SuiSettingIcon className=\"text-white\" />\n </button>\n )}\n\n {onSettingClick && onExpandClick && (\n <div className={cn(\"h-8 w-px\", textClassName.replace(\"text-\", \"bg-\"))} />\n )}\n\n {onExpandClick && (\n <button\n data-testid=\"list-expand-button\"\n onClick={onExpandClick}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n className=\"rounded p-1 hover:cursor-pointer hover:bg-white/20\"\n >\n <span className=\"flex items-center gap-[2px] text-white\">\n {isExpanded ?\n <>\n <ChevronLeft className=\"h-4 w-4\" />\n <ChevronRight className=\"h-4 w-4 -ml-2\" />\n </>\n : <>\n <ChevronRight className=\"h-4 w-4\" />\n <ChevronLeft className=\"h-4 w-4 -ml-2\" />\n </>\n }\n </span>\n </button>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ListHeader;\n","import * as React from \"react\";\nimport { CircleUserRound as UserIcon } from \"lucide-react\";\n\nimport type { GridPayload } from \"../grid-settings/types\";\nimport ListTable from \"./components/table\";\nimport ListContainer from \"./components/container\";\nimport ListHeader from \"./components/header\";\n\nexport type ListProps = {\n gridSettingPayload: GridPayload;\n isLeftExpanded: boolean;\n handleSettingClick: () => void;\n handleExpandClick: () => void;\n onCreateExample: () => void;\n onViewExample: (exampleId: string) => void;\n onEditExample: (exampleId: string) => void;\n onDeleteExample: (exampleId: string) => void;\n selectedRowId?: string;\n onTableReady?: (table: unknown) => void;\n children?: React.ReactNode;\n};\n\nconst List: React.FC<ListProps> = ({\n isLeftExpanded,\n handleSettingClick,\n handleExpandClick,\n onTableReady,\n children\n}) => {\n return (\n <ListContainer className=\"flex flex-col bg-white shadow-lg\" isLeftExpanded={isLeftExpanded}>\n <ListHeader\n title=\"Previous Example\"\n isExpanded={isLeftExpanded}\n onSettingClick={handleSettingClick}\n onExpandClick={handleExpandClick}\n titleIcon={<UserIcon className=\"h-6 w-6 text-white\" />}\n />\n\n <div className=\"flex h-full\">\n <ListTable onTableReady={onTableReady}>{children}</ListTable>\n </div>\n </ListContainer>\n );\n};\n\nexport default List;\n","import React from \"react\";\n\nconst InfoIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.0013 18.3327C14.6037 18.3327 18.3346 14.6017 18.3346 9.99935C18.3346 5.39698 14.6037 1.66602 10.0013 1.66602C5.39893 1.66602 1.66797 5.39698 1.66797 9.99935C1.66797 14.6017 5.39893 18.3327 10.0013 18.3327Z\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 13.3333V10\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 6.66602H10.0083\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default React.memo(InfoIcon);\n","// core\nimport React, { isValidElement } from \"react\";\n\n// components\nimport { CircleHelp } from \"lucide-react\";\nimport InfoIcon from \"../../assets/icon/InfoIcon\";\nimport { Button } from \"../button\";\n\n// hooks\nimport useScreenSize from \"../../hooks/useScreenSize/useScreenSize\";\n\n// utils\nimport cn from \"../../utils/cn\";\nimport { Tooltip, TooltipArrow, TooltipContent, TooltipTrigger } from \"../tooltip\";\n\ntype RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\ntype NavbarBaseProps = {\n className?: string;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n headImageURL?: string;\n headImageURLClassName?: string;\n tooltipContentClassName?: string;\n tooltipTitle?: string;\n tooltipIcon?: React.ReactNode;\n tooltipdescription?: React.ReactNode;\n tooltipDescriptionWrapperClassName?: string;\n mainButtonText?: React.ReactNode;\n mainButtonClassName?: string;\n mainButtonDisable?: boolean;\n subButtonText?: React.ReactNode;\n subButtonClassName?: string;\n subButtonDisable?: boolean;\n onMainButtonClick?: () => void;\n onSubButtonClick?: () => void;\n searchButton?: React.ReactNode;\n separatorDisable?: boolean;\n};\n\n// 👇 ใช้ utility type เพื่อบังคับว่า ต้องมีอย่างน้อย title หรือ headImageURL\nexport type NavbarProps = RequireAtLeastOne<NavbarBaseProps, \"title\">;\n\nconst Navbar = ({\n className,\n title,\n subTitle,\n headImageURL = \"\",\n headImageURLClassName,\n tooltipContentClassName = \"w-[450px] lg:!w-[630px]\",\n tooltipTitle,\n tooltipIcon,\n tooltipdescription,\n tooltipDescriptionWrapperClassName,\n mainButtonText,\n mainButtonClassName,\n mainButtonDisable = false,\n subButtonText,\n subButtonClassName,\n subButtonDisable = false,\n onMainButtonClick,\n onSubButtonClick,\n separatorDisable = false,\n searchButton\n}: NavbarProps) => {\n const { isMobile, isTablet, isDesktop } = useScreenSize();\n const Icon = CircleHelp;\n const shouldShowSeparator = !separatorDisable && isValidElement(searchButton);\n\n return (\n <nav\n className={cn(\n \"py-3 px-8 w-full h-16 bg-sus-primary-1 flex items-center justify-between\",\n className\n )}\n >\n {/* left content */}\n <div className=\"flex items-center gap-2.5\">\n {headImageURL !== \"\" ?\n <img src={headImageURL} alt=\"\" className={cn(\"w-full h-full\", headImageURLClassName)} />\n : <div className=\"flex flex-col\">\n {isValidElement(title) ? title : <h1 className=\"text-white text-xl font-bold\">{title}</h1>}\n {isValidElement(subTitle) ?\n subTitle\n : <h1 className=\"text-white text-sm font-semibold\">{subTitle}</h1>}\n </div>\n }\n {tooltipTitle && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"text-white hover:opacity-80 \">\n <InfoIcon className=\"w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent\n forceMount\n side={isDesktop ? \"right\" : \"bottom\"}\n align=\"start\"\n avoidCollisions={false}\n className={cn(\n \"bg-white border border-black p-6\",\n \"transition-all duration-150 ease-out origin-top top-1 left-4\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"data-[state=closed]:scale-95 data-[state=open]:scale-100\",\n { \"mt-5\": isDesktop },\n tooltipContentClassName\n )}\n >\n <div\n role=\"tooltip\"\n aria-label={tooltipTitle}\n className={cn(\n \"flex flex-col gap-4 text-sm text-black text-pretty \",\n tooltipDescriptionWrapperClassName\n )}\n >\n {tooltipTitle && (\n <div className=\"flex items-center gap-3\">\n {isValidElement(tooltipIcon) ? tooltipIcon : <Icon size={32} aria-hidden=\"true\" />}\n <h3 className=\"text-xl font-bold\">{tooltipTitle}</h3>\n </div>\n )}\n {isValidElement(tooltipdescription) && tooltipdescription}\n </div>\n <TooltipArrow className=\"-my-px border-none fill-white\" asChild>\n <svg\n width={isDesktop ? 35 : 33}\n height={35}\n viewBox=\"0 0 40 35\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn({\n \"rotate-90 visible\": isTablet || isMobile,\n \"\": isDesktop\n })}\n >\n <path d=\"M0 0 L40 0 L0 35 Z\" fill=\"white\" />\n {isDesktop ?\n <>\n <line x1=\"0\" y1=\"40\" x2=\"0\" y2=\"0\" stroke=\"black\" strokeWidth=\"2.5\" />\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"35\" stroke=\"black\" strokeWidth=\"1\" />\n </>\n : <>\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"black\" strokeWidth=\"2\" />\n <line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"35\" stroke=\"black\" strokeWidth=\"1\" />\n </>\n }\n </svg>\n </TooltipArrow>\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {/* right content */}\n <div className=\"flex items-center gap-3\">\n {mainButtonText && (\n <Button\n disabled={mainButtonDisable}\n className={cn(\"bg-sus-secondary-1 hover:bg-sus-secondary-hover\", mainButtonClassName)}\n size=\"lg\"\n onClick={onMainButtonClick}\n >\n {mainButtonText}\n </Button>\n )}\n {subButtonText && (\n <Button\n disabled={subButtonDisable}\n className={cn(\"bg-sus-primary-2 hover:bg-sus-primary-2-hover\", subButtonClassName)}\n size=\"lg\"\n onClick={onSubButtonClick}\n >\n {subButtonText}\n </Button>\n )}\n {shouldShowSeparator && <div role=\"separator\" className=\"ml-1 w-[1px] h-10 bg-white\" />}\n {isValidElement(searchButton) ? searchButton : \"\"}\n </div>\n </nav>\n );\n};\n\nexport default React.memo(Navbar);\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-1.5 p-4\", className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription\n};\n","import { create } from \"zustand\";\n\ntype PreventPageLeaveStore = {\n isPreventing: boolean;\n setPreventing: (value: boolean) => void;\n};\n\nexport const usePreventPageLeaveStore = create<PreventPageLeaveStore>((set) => ({\n isPreventing: false,\n setPreventing: (value) => set({ isPreventing: value })\n}));\n\nexport default usePreventPageLeaveStore;\n","import React, { useEffect } from \"react\";\nimport { usePreventPageLeaveStore } from \"./store/usePreventPageLeaveStore\";\n\nconst PreventPageLeave = ({ children }: React.PropsWithChildren) => {\n const { isPreventing } = usePreventPageLeaveStore();\n\n useEffect(() => {\n if (!isPreventing || typeof window === \"undefined\") {\n return;\n }\n\n function beforeUnload(event: BeforeUnloadEvent) {\n event.preventDefault();\n\n // Included for legacy support, e.g. Chrome/Edge < 119\n event.returnValue = true;\n }\n\n window.addEventListener(\"beforeunload\", beforeUnload);\n return () => {\n window.removeEventListener(\"beforeunload\", beforeUnload);\n };\n }, [isPreventing]);\n\n return children;\n};\n\nexport default PreventPageLeave;\n","import { useEffect } from \"react\";\nimport { usePreventPageLeaveStore } from \"../store\";\n\nexport type UsePreventPageLeaveOptions = {\n isPrevening: boolean;\n};\n\nconst usePreventPageLeave = ({ isPrevening }: UsePreventPageLeaveOptions) => {\n const setPreventing = usePreventPageLeaveStore((state) => state.setPreventing);\n\n useEffect(() => {\n setPreventing(isPrevening);\n }, [isPrevening, setPreventing]);\n};\n\nexport default usePreventPageLeave;\n","import { cn } from \"@/utils\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nexport function RadioGroupRoot({\n children,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <form>\n <RadioGroupPrimitive.Root {...props}>{children}</RadioGroupPrimitive.Root>\n </form>\n );\n}\n\nexport function RadioGroupItem({\n id,\n value,\n children,\n className,\n containerProps,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item> & {\n value: string;\n containerProps?: React.ComponentProps<\"div\">;\n}) {\n return (\n <div className=\"flex items-center\" {...containerProps}>\n <RadioGroupPrimitive.Item\n className={cn(\n \"size-5 cursor-default rounded-full border-2 border-black bg-white outline-none focus:shadow-black data-[state=checked]:border-[#5181B8] data-[state=checked]:scale-90 data-[state=checked]:border-1\",\n className\n )}\n value={value}\n id={id}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"relative flex size-full items-center justify-center after:block after:size-[11px] after:rounded-full after:bg-[#5181B8]\" />\n </RadioGroupPrimitive.Item>\n {children}\n </div>\n );\n}\n\nexport function RadioLabel({ children, htmlFor, className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label className={cn(\"pl-4 leading-none text-black\", className)} htmlFor={htmlFor} {...props}>\n {children}\n </label>\n );\n}\n","import * as React from \"react\";\nimport type { LexicalNode, NodeKey, SerializedLexicalNode, Spread } from \"lexical\";\nimport { DecoratorNode } from \"lexical\";\n\nimport { cn } from \"@/utils\";\n\nexport type ImagePayload = {\n src: string;\n altText?: string;\n width?: number | \"inherit\";\n height?: number | \"inherit\";\n};\n\nexport type SerializedImageNode = Spread<\n {\n type: \"image\";\n version: 1;\n },\n {\n src: string;\n altText: string;\n width: number | \"inherit\";\n height: number | \"inherit\";\n } & SerializedLexicalNode\n>;\n\nconst defaultDimensions = {\n width: \"inherit\" as const,\n height: \"inherit\" as const\n};\n\nfunction ImageComponent({\n altText,\n src,\n width,\n height\n}: {\n altText: string;\n src: string;\n width: number | \"inherit\";\n height: number | \"inherit\";\n}) {\n const style: React.CSSProperties = {\n width: typeof width === \"number\" ? `${width}px` : undefined,\n height: typeof height === \"number\" ? `${height}px` : undefined\n };\n\n return (\n <span className=\"block max-w-full\" contentEditable={false}>\n <img\n src={src}\n alt={altText || \"\"}\n draggable={false}\n className={cn(\n \"max-w-full rounded-md border border-border/60 bg-muted object-contain\",\n \"shadow-sm transition-transform hover:shadow\"\n )}\n style={style}\n />\n </span>\n );\n}\n\nexport class ImageNode extends DecoratorNode<React.ReactNode> {\n __src: string;\n __altText: string;\n __width: number | \"inherit\";\n __height: number | \"inherit\";\n\n static getType(): string {\n return \"image\";\n }\n\n static clone(node: ImageNode): ImageNode {\n return new ImageNode(\n node.__src,\n {\n altText: node.__altText,\n width: node.__width,\n height: node.__height\n },\n node.getKey()\n );\n }\n\n constructor(src: string, payload?: Omit<ImagePayload, \"src\">, key?: NodeKey) {\n super(key);\n const {\n altText = \"\",\n width = defaultDimensions.width,\n height = defaultDimensions.height\n } = payload ?? {};\n\n this.__src = src;\n this.__altText = altText;\n this.__width = width;\n this.__height = height;\n }\n\n static importJSON(serializedNode: SerializedImageNode): ImageNode {\n const { src, altText, width, height } = serializedNode;\n return new ImageNode(src, {\n altText,\n width,\n height\n });\n }\n\n exportJSON(): SerializedImageNode {\n return {\n type: \"image\",\n version: 1,\n src: this.__src,\n altText: this.__altText,\n width: this.__width,\n height: this.__height\n };\n }\n\n createDOM(): HTMLElement {\n return document.createElement(\"span\");\n }\n\n updateDOM(): false {\n return false;\n }\n\n decorate(): React.ReactNode {\n return (\n <ImageComponent\n src={this.__src}\n altText={this.__altText}\n width={this.__width}\n height={this.__height}\n />\n );\n }\n\n isInline(): false {\n return false;\n }\n\n extractWithChild(): boolean {\n return false;\n }\n\n exportDOM(): { element: HTMLElement } {\n const element = document.createElement(\"img\");\n element.setAttribute(\"src\", this.__src);\n if (this.__altText) {\n element.setAttribute(\"alt\", this.__altText);\n }\n\n return { element };\n }\n\n getTextContent(): string {\n return this.__altText;\n }\n\n setSrc(src: string): void {\n const writable = this.getWritable();\n writable.__src = src;\n }\n\n setAltText(altText: string): void {\n const writable = this.getWritable();\n writable.__altText = altText;\n }\n\n setDimensions(width: number | \"inherit\", height: number | \"inherit\"): void {\n const writable = this.getWritable();\n writable.__width = width;\n writable.__height = height;\n }\n\n getSrc(): string {\n return this.__src;\n }\n\n getAltText(): string {\n return this.__altText;\n }\n\n getWidth(): number | \"inherit\" {\n return this.__width;\n }\n\n getHeight(): number | \"inherit\" {\n return this.__height;\n }\n}\n\nexport function $createImageNode({ src, altText, width, height }: ImagePayload): ImageNode {\n return new ImageNode(src, {\n altText,\n width: width ?? defaultDimensions.width,\n height: height ?? defaultDimensions.height\n });\n}\n\nexport function $isImageNode(node?: LexicalNode | null): node is ImageNode {\n return node instanceof ImageNode;\n}\n","import * as React from \"react\";\nimport { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport type {\n EditorState,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedEditorState,\n SerializedLexicalNode\n} from \"lexical\";\nimport {\n $createParagraphNode,\n $createTextNode,\n $getNodeByKey,\n $getSelection,\n $insertNodes,\n $isRangeSelection,\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_NORMAL,\n FORMAT_ELEMENT_COMMAND,\n FORMAT_TEXT_COMMAND,\n REDO_COMMAND,\n SELECTION_CHANGE_COMMAND,\n UNDO_COMMAND,\n createCommand\n} from \"lexical\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { $generateHtmlFromNodes } from \"@lexical/html\";\nimport {\n HeadingNode,\n QuoteNode,\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode\n} from \"@lexical/rich-text\";\nimport {\n ListNode,\n ListItemNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n $isListNode\n} from \"@lexical/list\";\nimport { LinkNode, TOGGLE_LINK_COMMAND, $createLinkNode, $isLinkNode } from \"@lexical/link\";\nimport { CodeNode, $createCodeNode, $isCodeNode } from \"@lexical/code\";\nimport { TRANSFORMERS } from \"@lexical/markdown\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n Bold,\n Code as InlineCodeIcon,\n CodeSquare,\n Heading1,\n Heading2,\n Heading3,\n Italic,\n Image as ImageIcon,\n Link as LinkIcon,\n Link2Off,\n List as BulletListIcon,\n ListOrdered,\n Pilcrow,\n Quote as QuoteIcon,\n Redo,\n Strikethrough,\n Underline,\n Undo\n} from \"lucide-react\";\nimport { useForm } from \"react-hook-form\";\n\nimport { cn } from \"@/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Dialog, DialogContent, DialogFooter } from \"@/components/ui/dialog\";\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/input\";\nimport { ImageNode, $createImageNode, $isImageNode, type ImagePayload } from \"./ImageNode\";\n\ntype RichTextSerializedState = string;\n\ntype ToolbarBlockType = \"paragraph\" | \"h1\" | \"h2\" | \"h3\" | \"bullet\" | \"number\" | \"quote\" | \"code\";\n\ntype EditorSerializedState = SerializedEditorState<SerializedLexicalNode>;\n\ntype ImageUploadResult = ImagePayload | string;\n\ntype RichTextProps = {\n value?: RichTextSerializedState;\n defaultValue?: RichTextSerializedState;\n onChange?: (serializedState: RichTextSerializedState, editorState: EditorState) => void;\n onHtmlChange?: (html: string, editorState: EditorState) => void;\n placeholder?: string;\n readOnly?: boolean;\n disabled?: boolean;\n editorClassName?: string;\n toolbarClassName?: string;\n autoFocus?: boolean;\n onImageUpload?: (file: File) => Promise<ImageUploadResult>;\n onImageUploadError?: (error: unknown) => void;\n acceptImageMimeTypes?: string;\n allowImageUrlInsert?: boolean;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst theme = {\n paragraph: \"mb-2 leading-6 text-sm text-foreground\",\n placeholder:\n \"pointer-events-none absolute left-0 top-0 px-3 py-2 text-sm text-muted-foreground select-none\",\n quote: \"border-l-2 border-border pl-3 italic text-muted-foreground\",\n heading: {\n h1: \"scroll-m-20 text-2xl font-semibold tracking-tight\",\n h2: \"scroll-m-20 text-xl font-semibold tracking-tight\",\n h3: \"scroll-m-20 text-lg font-semibold tracking-tight\"\n },\n list: {\n listitem: \"ml-4 marker:text-muted-foreground [&:not(:last-child)]:mb-1\",\n nested: {\n listitem: \"ml-4\"\n },\n ol: \"ml-4 list-decimal pl-1\",\n ul: \"ml-4 list-disc pl-1\"\n },\n text: {\n bold: \"font-semibold\",\n italic: \"italic\",\n underline: \"underline underline-offset-4\",\n strikethrough: \"line-through\",\n code: \"rounded bg-muted px-1 py-[2px] font-mono text-[13px]\"\n },\n link: \"text-primary underline underline-offset-4\",\n code: \"relative block overflow-x-auto rounded-md border border-border bg-muted px-3 py-2 font-mono text-sm text-foreground shadow-sm\"\n};\n\nconst nodes = [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode, CodeNode, ImageNode];\n\nconst INSERT_IMAGE_COMMAND = createCommand<ImagePayload>(\"INSERT_IMAGE_COMMAND\");\nconst DEFAULT_IMAGE_ACCEPT = \"image/*\";\n\nfunction parseSerializedEditorState(raw?: RichTextSerializedState): EditorSerializedState | undefined {\n if (!raw) {\n return undefined;\n }\n\n try {\n return JSON.parse(raw) as EditorSerializedState;\n } catch (error) {\n console.error(\"[RichText] Failed to parse editor state:\", error);\n return undefined;\n }\n}\n\nfunction Placeholder({ placeholder }: { placeholder: string }) {\n return <div className={theme.placeholder}>{placeholder}</div>;\n}\n\ntype ToolbarToggleState = {\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isStrikethrough: boolean;\n isCode: boolean;\n isLink: boolean;\n blockType: ToolbarBlockType;\n elementFormat: ElementFormatType | null;\n canUndo: boolean;\n canRedo: boolean;\n};\n\nconst initialToolbarState: ToolbarToggleState = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrikethrough: false,\n isCode: false,\n isLink: false,\n blockType: \"paragraph\",\n elementFormat: null,\n canUndo: false,\n canRedo: false\n};\n\ntype ToolbarButtonProps = {\n label: string;\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n onClick: () => void;\n active?: boolean;\n disabled?: boolean;\n};\n\nfunction ToolbarButton({ label, icon: Icon, onClick, active, disabled }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n title={label}\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md text-sm transition-colors\",\n \"text-muted-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n active ? \"bg-accent text-accent-foreground shadow-sm\" : \"\",\n disabled ? \"pointer-events-none opacity-40\" : \"\"\n )}\n >\n <Icon className=\"h-4 w-4\" aria-hidden />\n <span className=\"sr-only\">{label}</span>\n </button>\n );\n}\n\ntype ToolbarPluginProps = {\n disabled: boolean;\n onImageUpload?: (file: File) => Promise<ImageUploadResult>;\n onImageUploadError?: (error: unknown) => void;\n allowImageUrlInsert?: boolean;\n acceptImageMimeTypes?: string;\n};\n\ntype LinkFormValues = {\n url: string;\n label: string;\n};\n\ntype ImageFormValues = {\n url: string;\n alt: string;\n width: string;\n height: string;\n};\n\nfunction placeCaretAfterImage(imageNode: ImageNode) {\n const nextSibling = imageNode.getNextSibling();\n\n if (!nextSibling || $isImageNode(nextSibling)) {\n const paragraph = $createParagraphNode();\n const textNode = $createTextNode(\"\");\n paragraph.append(textNode);\n imageNode.insertAfter(paragraph);\n textNode.select(0, 0);\n return;\n }\n\n imageNode.selectNext(0, 0);\n}\n\nfunction ToolbarPlugin({\n disabled,\n onImageUpload,\n onImageUploadError,\n allowImageUrlInsert = true,\n acceptImageMimeTypes\n}: ToolbarPluginProps) {\n const [editor] = useLexicalComposerContext();\n const [state, setState] = useState<ToolbarToggleState>(initialToolbarState);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isLinkDialogOpen, setLinkDialogOpen] = useState(false);\n const [editingExistingLink, setEditingExistingLink] = useState(false);\n const [linkNodeKey, setLinkNodeKey] = useState<NodeKey | null>(null);\n const [isImageDialogOpen, setImageDialogOpen] = useState(false);\n const [editingExistingImage, setEditingExistingImage] = useState(false);\n const [imageNodeKey, setImageNodeKey] = useState<NodeKey | null>(null);\n\n const linkForm = useForm<LinkFormValues>({\n defaultValues: { url: \"\", label: \"\" }\n });\n\n const imageForm = useForm<ImageFormValues>({\n defaultValues: { url: \"\", alt: \"\", width: \"\", height: \"\" }\n });\n\n const openImageDialog = useCallback(() => {\n if (disabled || !allowImageUrlInsert) {\n return;\n }\n\n const targetImage = editor.getEditorState().read((): ReturnType<typeof $createImageNode> | null => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const nodes = selection.getNodes();\n for (const node of nodes) {\n if ($isImageNode(node)) {\n return node;\n }\n }\n\n return null;\n });\n\n const width = targetImage?.getWidth();\n const height = targetImage?.getHeight();\n const initialUrl = targetImage?.getSrc() ?? \"\";\n const initialAlt = targetImage?.getAltText() ?? \"\";\n const initialWidth = typeof width === \"number\" ? String(width) : \"\";\n const initialHeight = typeof height === \"number\" ? String(height) : \"\";\n\n imageForm.clearErrors();\n imageForm.reset({\n url: initialUrl,\n alt: initialAlt,\n width: initialWidth,\n height: initialHeight\n });\n setEditingExistingImage(Boolean(targetImage));\n setImageNodeKey(targetImage?.getKey() ?? null);\n setImageDialogOpen(true);\n }, [allowImageUrlInsert, disabled, editor, imageForm]);\n\n const closeImageDialog = useCallback(() => {\n setImageDialogOpen(false);\n setEditingExistingImage(false);\n setImageNodeKey(null);\n imageForm.reset();\n setTimeout(() => {\n editor.focus();\n }, 0);\n }, [editor, imageForm]);\n\n const openLinkDialog = useCallback(() => {\n if (disabled) {\n return;\n }\n\n const { initialUrl, initialLabel, detectedLink } = editor.getEditorState().read(\n (): {\n initialUrl: string;\n initialLabel: string;\n detectedLink: ReturnType<typeof $createLinkNode> | null;\n } => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return { initialUrl: \"\", initialLabel: \"\", detectedLink: null };\n }\n\n const nodes = selection.getNodes();\n let label = selection.getTextContent().trim();\n let url = \"\";\n let found: ReturnType<typeof $createLinkNode> | null = null;\n\n for (const node of nodes) {\n const linkNode =\n $isLinkNode(node) ? node\n : $isLinkNode(node.getParent()) ? (node.getParent() as LinkNode)\n : null;\n\n if (linkNode) {\n url = linkNode.getURL();\n if (!label) {\n label = linkNode.getTextContent().trim();\n }\n found = linkNode;\n break;\n }\n }\n\n if (!label && url) {\n label = url;\n }\n\n return { initialUrl: url, initialLabel: label, detectedLink: found };\n }\n );\n\n linkForm.clearErrors();\n linkForm.reset({\n url: initialUrl,\n label: initialLabel\n });\n setEditingExistingLink(Boolean(detectedLink));\n setLinkNodeKey(detectedLink?.getKey() ?? null);\n setLinkDialogOpen(true);\n }, [disabled, editor, linkForm]);\n\n const closeLinkDialog = useCallback(() => {\n setLinkDialogOpen(false);\n setEditingExistingLink(false);\n setLinkNodeKey(null);\n linkForm.reset();\n setTimeout(() => {\n editor.focus();\n }, 0);\n }, [editor, linkForm]);\n\n const handleLinkSubmit = linkForm.handleSubmit(({ url, label }) => {\n const trimmedUrl = url.trim();\n const trimmedLabel = label.trim();\n\n if (!trimmedUrl) {\n linkForm.setError(\"url\", { type: \"required\", message: \"Please enter a URL.\" });\n return;\n }\n\n editor.focus();\n\n editor.update(() => {\n const labelToApply = trimmedLabel || trimmedUrl;\n\n if (editingExistingLink && linkNodeKey) {\n const existingNode = $getNodeByKey<LexicalNode>(linkNodeKey);\n if ($isLinkNode(existingNode)) {\n existingNode.setURL(trimmedUrl);\n existingNode.clear();\n existingNode.append($createTextNode(labelToApply));\n existingNode.select();\n return;\n }\n }\n\n const selection = $getSelection();\n const linkNode = $createLinkNode(trimmedUrl);\n linkNode.append($createTextNode(labelToApply));\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([linkNode]);\n } else {\n $insertNodes([linkNode]);\n }\n\n linkNode.select();\n });\n\n closeLinkDialog();\n });\n\n const handleRemoveLink = useCallback(() => {\n editor.focus();\n editor.update(() => {\n if (linkNodeKey) {\n const node = $getNodeByKey<LexicalNode>(linkNodeKey);\n if ($isLinkNode(node)) {\n node.remove();\n return;\n }\n }\n\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n });\n\n closeLinkDialog();\n }, [closeLinkDialog, editor, linkNodeKey]);\n\n const handleLinkDialogOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n setLinkDialogOpen(true);\n } else {\n closeLinkDialog();\n }\n },\n [closeLinkDialog]\n );\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const anchorNode = selection.anchor.getNode();\n const element = anchorNode.getKey() === \"root\" ? anchorNode : anchorNode.getTopLevelElementOrThrow();\n let blockType: ToolbarBlockType = \"paragraph\";\n\n let parentNode: LexicalNode | null = anchorNode;\n\n while (parentNode) {\n if ($isListNode(parentNode)) {\n blockType = parentNode.getTag() === \"ol\" ? \"number\" : \"bullet\";\n break;\n }\n parentNode = parentNode.getParent();\n }\n\n if (blockType === \"paragraph\") {\n if ($isHeadingNode(element)) {\n blockType = element.getTag() as ToolbarBlockType;\n } else if ($isCodeNode(element)) {\n blockType = \"code\";\n } else if (element.getType() === \"quote\") {\n blockType = \"quote\";\n }\n }\n\n const nodes = selection.getNodes();\n const hasLink = nodes.some((node) => $isLinkNode(node) || $isLinkNode(node.getParent()));\n const elementFormat =\n (element as unknown as { getFormatType?: () => ElementFormatType | null }).getFormatType?.() ??\n null;\n\n setState((current) => ({\n ...current,\n blockType,\n elementFormat,\n isBold: selection.hasFormat(\"bold\"),\n isItalic: selection.hasFormat(\"italic\"),\n isUnderline: selection.hasFormat(\"underline\"),\n isStrikethrough: selection.hasFormat(\"strikethrough\"),\n isCode: selection.hasFormat(\"code\"),\n isLink: hasLink\n }));\n }, []);\n\n React.useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setState((current) => ({ ...current, canUndo: payload }));\n return false;\n },\n COMMAND_PRIORITY_NORMAL\n ),\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setState((current) => ({ ...current, canRedo: payload }));\n return false;\n },\n COMMAND_PRIORITY_NORMAL\n ),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateToolbar();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n ),\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(updateToolbar);\n })\n );\n }, [editor, updateToolbar]);\n\n const applyBlock = useCallback(\n (nextBlock: ToolbarBlockType) => {\n if (disabled) {\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n switch (nextBlock) {\n case \"paragraph\": {\n $setBlocksType(selection, () => $createParagraphNode());\n break;\n }\n case \"h1\":\n case \"h2\":\n case \"h3\": {\n if (state.blockType === nextBlock) {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createHeadingNode(nextBlock));\n }\n break;\n }\n case \"bullet\": {\n if (state.blockType === \"bullet\") {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n break;\n }\n case \"number\": {\n if (state.blockType === \"number\") {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n break;\n }\n case \"quote\": {\n if (state.blockType === \"quote\") {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createQuoteNode());\n }\n break;\n }\n case \"code\": {\n if (state.blockType === \"code\") {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createCodeNode());\n }\n break;\n }\n default:\n break;\n }\n });\n },\n [disabled, editor, state.blockType]\n );\n\n const toggleFormat = useCallback(\n (format: \"bold\" | \"italic\" | \"underline\" | \"strikethrough\" | \"code\") => {\n if (disabled) {\n return;\n }\n\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, format);\n },\n [disabled, editor]\n );\n\n const toggleLink = useCallback(() => {\n openLinkDialog();\n }, [openLinkDialog]);\n\n const applyElementFormat = useCallback(\n (format: ElementFormatType) => {\n if (disabled) {\n return;\n }\n\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, format);\n },\n [disabled, editor]\n );\n\n const canInsertImage = allowImageUrlInsert || Boolean(onImageUpload);\n const imageAccept = acceptImageMimeTypes ?? DEFAULT_IMAGE_ACCEPT;\n\n const handleInsertImage = useCallback(() => {\n if (disabled || !canInsertImage) {\n return;\n }\n\n editor.focus();\n\n if (onImageUpload) {\n fileInputRef.current?.click();\n return;\n }\n\n openImageDialog();\n }, [canInsertImage, disabled, editor, onImageUpload, openImageDialog]);\n\n const handleFileChange = useCallback(\n async (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!onImageUpload) {\n return;\n }\n\n const file = event.target.files?.[0];\n\n try {\n if (!file) {\n return;\n }\n\n const result = await onImageUpload(file);\n const payload =\n typeof result === \"string\" ?\n { src: result, altText: file.name }\n : {\n src: result.src,\n altText: result.altText ?? file.name,\n width: result.width,\n height: result.height\n };\n\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, payload);\n editor.focus();\n } catch (error) {\n onImageUploadError?.(error);\n console.error(\"[RichText] Failed to upload image:\", error);\n } finally {\n event.target.value = \"\";\n }\n },\n [editor, onImageUpload, onImageUploadError]\n );\n\n const handleImageSubmit = imageForm.handleSubmit(({ url, alt, width, height }) => {\n const trimmedUrl = url.trim();\n const trimmedAlt = alt.trim();\n const trimmedWidth = width.trim();\n const trimmedHeight = height.trim();\n\n if (!trimmedUrl) {\n imageForm.setError(\"url\", { type: \"required\", message: \"Please enter an image URL.\" });\n return;\n }\n\n let parsedWidth: number | undefined;\n if (trimmedWidth) {\n const widthValue = Number(trimmedWidth);\n if (Number.isNaN(widthValue) || widthValue <= 0) {\n imageForm.setError(\"width\", {\n type: \"validate\",\n message: \"Width must be a positive number.\"\n });\n return;\n }\n parsedWidth = widthValue;\n }\n\n let parsedHeight: number | undefined;\n if (trimmedHeight) {\n const heightValue = Number(trimmedHeight);\n if (Number.isNaN(heightValue) || heightValue <= 0) {\n imageForm.setError(\"height\", {\n type: \"validate\",\n message: \"Height must be a positive number.\"\n });\n return;\n }\n parsedHeight = heightValue;\n }\n\n editor.focus();\n\n editor.update(() => {\n const payload: ImagePayload = {\n src: trimmedUrl,\n altText: trimmedAlt || undefined,\n width: parsedWidth ?? undefined,\n height: parsedHeight ?? undefined\n };\n\n if (editingExistingImage && imageNodeKey) {\n const existingNode = $getNodeByKey<LexicalNode>(imageNodeKey);\n if ($isImageNode(existingNode)) {\n existingNode.setSrc(payload.src);\n existingNode.setAltText(payload.altText ?? \"\");\n existingNode.setDimensions(payload.width ?? \"inherit\", payload.height ?? \"inherit\");\n placeCaretAfterImage(existingNode);\n return;\n }\n }\n\n const selection = $getSelection();\n const imageNode = $createImageNode(payload);\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([imageNode]);\n } else {\n $insertNodes([imageNode]);\n }\n\n placeCaretAfterImage(imageNode);\n });\n\n closeImageDialog();\n });\n\n const handleImageDialogOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n setImageDialogOpen(true);\n } else {\n closeImageDialog();\n }\n },\n [closeImageDialog]\n );\n\n const handleRemoveImage = useCallback(() => {\n if (!imageNodeKey) {\n closeImageDialog();\n return;\n }\n\n editor.focus();\n editor.update(() => {\n const existingNode = $getNodeByKey<LexicalNode>(imageNodeKey);\n if ($isImageNode(existingNode)) {\n existingNode.remove();\n }\n });\n\n closeImageDialog();\n }, [closeImageDialog, editor, imageNodeKey]);\n\n return (\n <>\n <div className=\"flex flex-wrap items-center gap-1\">\n <ToolbarButton\n label=\"Undo\"\n icon={Undo}\n onClick={() => editor.dispatchCommand(UNDO_COMMAND, undefined)}\n disabled={disabled || !state.canUndo}\n />\n <ToolbarButton\n label=\"Redo\"\n icon={Redo}\n onClick={() => editor.dispatchCommand(REDO_COMMAND, undefined)}\n disabled={disabled || !state.canRedo}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Bold\"\n icon={Bold}\n onClick={() => toggleFormat(\"bold\")}\n active={state.isBold}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Italic\"\n icon={Italic}\n onClick={() => toggleFormat(\"italic\")}\n active={state.isItalic}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Underline\"\n icon={Underline}\n onClick={() => toggleFormat(\"underline\")}\n active={state.isUnderline}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Strikethrough\"\n icon={Strikethrough}\n onClick={() => toggleFormat(\"strikethrough\")}\n active={state.isStrikethrough}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Inline code\"\n icon={InlineCodeIcon}\n onClick={() => toggleFormat(\"code\")}\n active={state.isCode}\n disabled={disabled}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Paragraph\"\n icon={Pilcrow}\n onClick={() => applyBlock(\"paragraph\")}\n active={state.blockType === \"paragraph\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 1\"\n icon={Heading1}\n onClick={() => applyBlock(\"h1\")}\n active={state.blockType === \"h1\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 2\"\n icon={Heading2}\n onClick={() => applyBlock(\"h2\")}\n active={state.blockType === \"h2\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Heading 3\"\n icon={Heading3}\n onClick={() => applyBlock(\"h3\")}\n active={state.blockType === \"h3\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Bulleted list\"\n icon={BulletListIcon}\n onClick={() => applyBlock(\"bullet\")}\n active={state.blockType === \"bullet\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Numbered list\"\n icon={ListOrdered}\n onClick={() => applyBlock(\"number\")}\n active={state.blockType === \"number\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Quote\"\n icon={QuoteIcon}\n onClick={() => applyBlock(\"quote\")}\n active={state.blockType === \"quote\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Code block\"\n icon={CodeSquare}\n onClick={() => applyBlock(\"code\")}\n active={state.blockType === \"code\"}\n disabled={disabled}\n />\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label={state.isLink ? \"Edit link\" : \"Insert link\"}\n icon={LinkIcon}\n onClick={toggleLink}\n active={state.isLink}\n disabled={disabled}\n />\n {state.isLink ?\n <ToolbarButton\n label=\"Remove link\"\n icon={Link2Off}\n onClick={handleRemoveLink}\n disabled={disabled}\n />\n : null}\n <ToolbarButton\n label=\"Insert image\"\n icon={ImageIcon}\n onClick={handleInsertImage}\n disabled={disabled || !canInsertImage}\n />\n {onImageUpload ?\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={imageAccept}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n : null}\n <span className=\"mx-1 h-5 w-px bg-border\" aria-hidden />\n <ToolbarButton\n label=\"Align left\"\n icon={AlignLeft}\n onClick={() => applyElementFormat(\"left\")}\n active={state.elementFormat === \"left\" || state.elementFormat === null}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Align center\"\n icon={AlignCenter}\n onClick={() => applyElementFormat(\"center\")}\n active={state.elementFormat === \"center\"}\n disabled={disabled}\n />\n <ToolbarButton\n label=\"Align right\"\n icon={AlignRight}\n onClick={() => applyElementFormat(\"right\")}\n active={state.elementFormat === \"right\"}\n disabled={disabled}\n />\n </div>\n <Dialog open={isLinkDialogOpen} onOpenChange={handleLinkDialogOpenChange}>\n <DialogContent\n className=\"min-w-[70vw] max-w-7xl\"\n header={editingExistingLink ? \"Edit link\" : \"Insert link\"}\n >\n <Form {...linkForm}>\n <form className=\"grid gap-4 p-6\" onSubmit={handleLinkSubmit}>\n <FormField\n control={linkForm.control}\n name=\"url\"\n rules={{ required: \"Please enter a URL.\" }}\n render={({ field }) => (\n <FormItem>\n <FormLabel>URL</FormLabel>\n <FormControl>\n <Input placeholder=\"https://example.com\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={linkForm.control}\n name=\"label\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Link label</FormLabel>\n <FormControl>\n <Input placeholder=\"Display text\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <DialogFooter className=\"pt-2\">\n <Button type=\"button\" variant=\"cancel\" onClick={closeLinkDialog}>\n Cancel\n </Button>\n {editingExistingLink ?\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveLink}\n className=\"text-destructive\"\n >\n Remove link\n </Button>\n : null}\n <Button type=\"submit\">Save link</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n <Dialog open={isImageDialogOpen} onOpenChange={handleImageDialogOpenChange}>\n <DialogContent header={editingExistingImage ? \"Edit image\" : \"Insert image\"}>\n <Form {...imageForm}>\n <form className=\"grid gap-4 p-6\" onSubmit={handleImageSubmit}>\n <FormField\n control={imageForm.control}\n name=\"url\"\n rules={{ required: \"Please enter an image URL.\" }}\n render={({ field }) => (\n <FormItem>\n <FormLabel>Image URL</FormLabel>\n <FormControl>\n <Input placeholder=\"https://example.com/image.jpg\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={imageForm.control}\n name=\"alt\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Alt text</FormLabel>\n <FormControl>\n <Input placeholder=\"Describe the image\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <FormField\n control={imageForm.control}\n name=\"width\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Width (px)</FormLabel>\n <FormControl>\n <Input placeholder=\"Auto\" inputMode=\"numeric\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={imageForm.control}\n name=\"height\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Height (px)</FormLabel>\n <FormControl>\n <Input placeholder=\"Auto\" inputMode=\"numeric\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n </div>\n <DialogFooter className=\"pt-2\">\n <Button type=\"button\" variant=\"cancel\" onClick={closeImageDialog}>\n Cancel\n </Button>\n {editingExistingImage ?\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveImage}\n className=\"text-destructive\"\n >\n Remove image\n </Button>\n : null}\n <Button type=\"submit\">{editingExistingImage ? \"Save changes\" : \"Insert image\"}</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nfunction ControlledValuePlugin({\n value,\n trackAppliedValue\n}: {\n value?: RichTextSerializedState;\n trackAppliedValue: React.MutableRefObject<RichTextSerializedState | undefined>;\n}) {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n if (value == null || trackAppliedValue.current === value) {\n return;\n }\n\n let parsed: EditorSerializedState | undefined;\n\n try {\n parsed = JSON.parse(value) as EditorSerializedState;\n } catch (error) {\n console.error(\"[RichText] Failed to sync controlled value:\", error);\n return;\n }\n\n editor.update(() => {\n const newState = editor.parseEditorState(parsed!);\n const current = editor.getEditorState();\n\n // Compare serialized versions to avoid redundant updates\n if (JSON.stringify(current.toJSON()) !== JSON.stringify(newState.toJSON())) {\n editor.setEditorState(newState);\n }\n\n // Track the latest applied value so we don't reapply unnecessarily\n trackAppliedValue.current = value;\n });\n }, [editor, trackAppliedValue, value]);\n\n return null;\n}\n\nfunction EditableStatePlugin({ editable }: { editable: boolean }) {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n editor.setEditable(editable);\n }, [editor, editable]);\n\n return null;\n}\n\nfunction ImagesPlugin() {\n const [editor] = useLexicalComposerContext();\n\n React.useEffect(() => {\n return editor.registerCommand(\n INSERT_IMAGE_COMMAND,\n (payload) => {\n if (!payload?.src) {\n return false;\n }\n\n editor.update(() => {\n const imageNode = $createImageNode(payload);\n $insertNodes([imageNode]);\n placeCaretAfterImage(imageNode);\n });\n\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n }, [editor]);\n\n return null;\n}\n\nconst RichText = forwardRef<HTMLDivElement, RichTextProps>(function RichText(\n {\n value,\n defaultValue,\n onChange,\n onHtmlChange,\n placeholder,\n readOnly,\n disabled,\n editorClassName,\n toolbarClassName,\n autoFocus,\n onImageUpload,\n onImageUploadError,\n acceptImageMimeTypes = DEFAULT_IMAGE_ACCEPT,\n allowImageUrlInsert = true,\n className,\n id,\n ...rest\n },\n ref\n) {\n const initialSerializedStateRef = useRef<EditorSerializedState | undefined>(undefined);\n\n if (initialSerializedStateRef.current === undefined) {\n initialSerializedStateRef.current = parseSerializedEditorState(value ?? defaultValue);\n }\n\n const initialConfig = useMemo(\n () => ({\n namespace: \"RichTextEditor\",\n editable: !(readOnly || disabled),\n theme,\n onError(error: Error) {\n throw error;\n },\n nodes,\n editorState:\n initialSerializedStateRef.current ? JSON.stringify(initialSerializedStateRef.current) : undefined\n }),\n [disabled, readOnly]\n );\n\n const appliedValueRef = useRef<RichTextSerializedState | undefined>(value ?? defaultValue);\n\n const handleChange = useCallback(\n (editorState: EditorState, editor: LexicalEditor) => {\n const serialized = JSON.stringify(editorState.toJSON());\n appliedValueRef.current = serialized;\n\n if (onChange) {\n onChange(serialized, editorState);\n }\n\n if (onHtmlChange) {\n let html = \"\";\n editorState.read(() => {\n html = $generateHtmlFromNodes(editor, null);\n });\n onHtmlChange(html, editorState);\n }\n },\n [onChange, onHtmlChange]\n );\n\n const editable = !(readOnly || disabled);\n\n return (\n <LexicalComposer initialConfig={initialConfig}>\n <div\n ref={ref}\n aria-disabled={disabled}\n data-disabled={disabled ? \"true\" : undefined}\n className={cn(\n \"border-input focus-within:border-ring focus-within:ring-ring/50 bg-background text-sm shadow-sm focus-within:ring-[3px]\",\n \"flex min-h-[12rem] flex-col rounded-md border transition-[color,box-shadow]\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-60\",\n className\n )}\n {...rest}\n >\n {editable ?\n <div className={cn(\"border-b border-border bg-muted/40 px-2 py-1.5\", toolbarClassName)}>\n <ToolbarPlugin\n disabled={Boolean(disabled)}\n onImageUpload={onImageUpload}\n onImageUploadError={onImageUploadError}\n allowImageUrlInsert={allowImageUrlInsert}\n acceptImageMimeTypes={acceptImageMimeTypes}\n />\n </div>\n : null}\n <div className=\"relative flex-1 overflow-auto\">\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n id={id}\n className={cn(\n \"h-full min-h-[10rem] whitespace-pre-wrap break-words px-3 py-2 text-sm leading-6 text-foreground outline-none\",\n editorClassName\n )}\n />\n }\n placeholder={<Placeholder placeholder={placeholder || \"\"} />}\n ErrorBoundary={LexicalErrorBoundary}\n />\n <HistoryPlugin />\n <ListPlugin />\n <LinkPlugin />\n <ImagesPlugin />\n <MarkdownShortcutPlugin transformers={TRANSFORMERS} />\n {autoFocus ?\n <AutoFocusPlugin />\n : null}\n <EditableStatePlugin editable={editable} />\n <ControlledValuePlugin value={value} trackAppliedValue={appliedValueRef} />\n <OnChangePlugin onChange={handleChange} ignoreSelectionChange />\n </div>\n </div>\n </LexicalComposer>\n );\n});\n\nRichText.displayName = \"RichText\";\n\nexport { RichText };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"@/utils\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","// /hooks/use-mobile.ts\n\"use client\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Hook ตรวจสอบว่า viewport ปัจจุบันเป็นขนาด “mobile” หรือไม่\n * @param breakpoint จุดตัด (px) — ถ้า width < breakpoint => ถือเป็น mobile\n */\nexport function useIsMobile(breakpoint: number = 768): boolean {\n const [isMobile, setIsMobile] = useState<boolean>(() => {\n if (typeof window === \"undefined\") {\n // ใน SSR, เราต้องกำหนดค่าเริ่มต้น (ใน client มันจะถูกอัปเดตใน useEffect)\n return false;\n }\n return window.innerWidth < breakpoint;\n });\n\n useEffect(() => {\n function onResize() {\n setIsMobile(window.innerWidth < breakpoint);\n }\n\n window.addEventListener(\"resize\", onResize);\n // คุณอาจจะเพิ่ม “orientationchange” ก็ได้\n window.addEventListener(\"orientationchange\", onResize);\n\n // เรียกครั้งแรก\n onResize();\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"orientationchange\", onResize);\n };\n }, [breakpoint]);\n\n return isMobile;\n}\n","import { cn } from \"@/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","export * from \"./accordion\";\n\nexport * from \"./button\";\n\nexport * from \"./checkbox\";\n\nexport * from \"./collapsible\";\n\nexport * from \"./ClearButton\";\n\nexport * from \"./datepicker\";\n\nexport * from \"./dialog\";\n\nexport * from \"./form\";\n\nexport * from \"./input\";\n\nexport * from \"./label\";\n\nexport * from \"./monthpicker\";\n\nexport * from \"./popover\";\n\nexport * from \"./radio\";\n\nexport * from \"./richtext\";\n\nexport * from \"./select\";\n\nexport * from \"./separator\";\n\nexport * from \"./sheet\";\n\nexport * from \"./sidebar\";\n\nexport * from \"./skeleton\";\n\nexport * from \"./spinner\";\n\nexport * from \"./switch\";\n\nexport * from \"./table\";\n\nexport * from \"./textarea\";\n\nexport * from \"./tooltip\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"@/utils\";\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer inline-flex h-[1.15rem] w-10 shrink-0 items-center rounded-full border border-transparent transition-all outline-none focus-visible:ring-[3px]\",\n \"data-[state=checked]:bg-[#379A2A] data-[state=unchecked]:bg-[#EFEFEF]\",\n \"dark:data-[state=unchecked]:bg-input/80\",\n \"focus-visible:border-ring focus-visible:ring-ring/50\",\n \"disabled:bg-gray-300 disabled:data-[state=checked]:bg-[#A5D6A7] disabled:data-[state=unchecked]:bg-[#E0E0E0]\",\n \"disabled:cursor-not-allowed disabled:opacity-70\",\n \"shadow-inner\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-white block size-3.5 rounded-full ring-0 transition-transform\",\n \"data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5\",\n \"disabled:bg-gray-100\"\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from \"react\";\nimport { cn } from \"@/utils\";\n\ntype TextareaProps = React.ComponentProps<\"textarea\"> & {\n autoResize?: boolean;\n};\n\nfunction Textarea({ className, autoResize = true, ...props }: TextareaProps) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n autoResize ? \"field-sizing-content min-h-16\" : \"field-sizing-fixed\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"@/utils\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />\n );\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n arrowClassName,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n arrowClassName?: string;\n}) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow\n className={cn(\n \"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\",\n arrowClassName\n )}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, VariantProps } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { cn } from \"@/utils\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n InputPrimitive,\n Button,\n Separator,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger\n} from \"@/components/ui\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\" ?\n \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\" ?\n \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\" ?\n \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof InputPrimitive>) {\n return (\n <InputPrimitive\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\"\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\ntype SidebarLayoutProps = Omit<React.ComponentProps<typeof SidebarProvider>, \"children\"> & {\n sidebar: React.ReactNode;\n children?: React.ReactNode;\n layoutProps?: React.HTMLAttributes<HTMLDivElement>;\n sidebarProps?: Omit<React.ComponentProps<typeof Sidebar>, \"children\">;\n insetProps?: Omit<React.ComponentProps<typeof SidebarInset>, \"children\">;\n};\n\nfunction SidebarLayout({\n sidebar,\n children,\n layoutProps,\n sidebarProps,\n insetProps,\n ...providerProps\n}: SidebarLayoutProps) {\n const { className: layoutClassName, ...restLayoutProps } = layoutProps ?? {};\n\n return (\n <SidebarProvider {...providerProps}>\n <div data-slot=\"sidebar-layout\" {...restLayoutProps} className={cn(\"flex\", layoutClassName)}>\n <Sidebar {...sidebarProps}>{sidebar}</Sidebar>\n <SidebarInset {...insetProps}>{children}</SidebarInset>\n </div>\n </SidebarProvider>\n );\n}\n\nexport {\n Sidebar,\n SidebarLayout,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar\n};\n","import { DialogContentProps } from \"@radix-ui/react-dialog\";\nimport { Area, CropperProps } from \"react-easy-crop\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nexport interface CroppedImagePayload {\n crop: { x: number; y: number };\n croppedAreaPixels: Area | null;\n}\n\nexport interface CroppedImagePayloadWithBlobUrl extends CroppedImagePayload {\n croppedImageBlobUrl: string;\n}\n\ninterface CropperModalBaseProps {\n open?: boolean;\n onOpenChange: (open: boolean) => void;\n onCancel?: () => void;\n onError?: (e: CropperModalError | unknown) => void;\n imageSrc?: string | null;\n isSVG?: boolean;\n cropSize?: { width: number; height: number };\n /**\n * @property {boolean} outputExactCropSize - Determine whether to ouput image with the exact size given in cropSize attribute\n * @description an original image dimension is 1000x1000px, if cropSize is 500x500px, the output image will be exactly 500x500px\n */\n outputExactCropSize?: boolean;\n targetFileSizeKB?: number;\n title?: string;\n props?: {\n dialogTitleContainer?: React.ComponentProps<\"div\">;\n dialogTitle?: React.ComponentProps<typeof DialogPrimitive.Title>;\n dialogContent?: DialogContentProps;\n cropper?: CropperProps;\n cropperContainer?: React.ComponentProps<\"div\">;\n };\n}\n\ninterface CropperModalWithBlobUrlOutputProps extends CropperModalBaseProps {\n onConfirm?: (payload: CroppedImagePayloadWithBlobUrl) => void;\n generateBlobUrlOutput: true;\n}\n\ninterface CropperModalNormalProps extends CropperModalBaseProps {\n onConfirm?: (payload: CroppedImagePayload) => void;\n generateBlobUrlOutput: undefined | false;\n}\n\nexport type CropperModalProps = CropperModalWithBlobUrlOutputProps | CropperModalNormalProps;\n\nexport type CropperModalErrorType =\n | \"ERROR_GENERATE_BLOB\"\n | \"ERROR_CREATE_CANVAS\"\n | \"ERROR_INVALID_SVG\"\n | \"ERROR_COMPRESSION\"\n | \"ERROR_SVG_EXCEED_SIZE\";\n\nexport class CropperModalError extends Error {\n public readonly error: CropperModalErrorType;\n constructor(errorType: CropperModalErrorType, message: string) {\n super(message);\n this.error = errorType;\n }\n}\n\nexport const ErrorGeneratingBlob = new CropperModalError(\n \"ERROR_GENERATE_BLOB\",\n \"failed to generate a valid Blob\"\n);\n\nexport const ErrorCreateCanvas = new CropperModalError(\"ERROR_CREATE_CANVAS\", \"Failed to create canvas\");\n\nexport const ErrorInvalidSVG = new CropperModalError(\n \"ERROR_INVALID_SVG\",\n \"The file is not a valid SVG document root\"\n);\n\nexport const ErrorCompression = new CropperModalError(\n \"ERROR_COMPRESSION\",\n \"Compression failed to generate a valid Blob\"\n);\n\nexport const ErrorSVGExceedSize = new CropperModalError(\n \"ERROR_SVG_EXCEED_SIZE\",\n \"The SVG file is too large\"\n);\n","import { Area } from \"react-easy-crop\";\nimport { ErrorCompression, ErrorCreateCanvas, ErrorInvalidSVG, ErrorSVGExceedSize } from \"./type\";\n\nexport function readFile(file: File): Promise<string> {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => resolve(reader.result as string), false);\n reader.readAsDataURL(file); // read as base64-encoded\n });\n}\n\nexport const createImage = (url: string) =>\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", (error) => reject(error));\n image.setAttribute(\"crossOrigin\", \"anonymous\"); // needed to avoid cross-origin issues on CodeSandbox\n image.src = url;\n });\n\nfunction toBlobPromise(canvas: HTMLCanvasElement, quality: number): Promise<Blob | null> {\n return new Promise((resolve) => {\n canvas.toBlob((blob) => resolve(blob), \"image/jpeg\", quality);\n });\n}\n\nasync function resizeImage(canvas: HTMLCanvasElement, targetSizeKB: number): Promise<string> {\n const targetSizeBytes = targetSizeKB * 1024;\n let quality = 1;\n const qualityStep = 0.05;\n let compressedBlob: Blob | null = null;\n let currentSize = Infinity;\n\n while (currentSize > targetSizeBytes && quality > 0.0) {\n compressedBlob = await toBlobPromise(canvas, quality);\n if (compressedBlob === null) {\n throw ErrorCompression;\n }\n currentSize = compressedBlob.size;\n\n if (currentSize > targetSizeBytes) {\n quality = Math.max(0.0, quality - qualityStep);\n }\n }\n\n if (compressedBlob && currentSize <= targetSizeBytes) {\n return URL.createObjectURL(compressedBlob);\n }\n throw ErrorCompression;\n}\n\nexport async function getCroppedImg(\n imageSrc: string,\n pixelCrop: Area,\n desiredDimension?: { width: number; height: number },\n targetSizeKB: number = Infinity\n): Promise<string> {\n const image = await createImage(imageSrc);\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n throw ErrorCreateCanvas;\n }\n\n canvas.width = image.width;\n canvas.height = image.height;\n ctx.drawImage(image, 0, 0);\n\n const croppedCanvas = document.createElement(\"canvas\");\n\n const croppedCtx = croppedCanvas.getContext(\"2d\");\n\n if (!croppedCtx) {\n throw ErrorCreateCanvas;\n }\n\n // Set the size of the cropped canvas\n croppedCanvas.width = desiredDimension?.width ?? pixelCrop.width;\n croppedCanvas.height = desiredDimension?.height ?? pixelCrop.height;\n\n // Draw the cropped image onto the new canvas\n croppedCtx.drawImage(\n canvas,\n pixelCrop.x,\n pixelCrop.y,\n pixelCrop.width,\n pixelCrop.height,\n 0,\n 0,\n desiredDimension?.width ?? pixelCrop.width,\n desiredDimension?.height ?? pixelCrop.height\n );\n\n return resizeImage(croppedCanvas, targetSizeKB);\n}\n\nexport async function getCroppedSVG(\n imageSrc: string, // Expects data:image/svg+xml;...\n pixelCrop: Area,\n desiredDimension?: { width: number; height: number },\n targetSizeKB: number = Infinity\n): Promise<string> {\n let svgString: string;\n const parts = imageSrc.split(\",\");\n const meta = parts[0]; // \"data:image/svg+xml;base64\" or \"data:image/svg+xml\"\n const data = parts[1];\n\n if (meta.includes(\"base64\")) {\n svgString = atob(data); // Decode base64\n } else {\n svgString = decodeURIComponent(data); // Decode URL-encoded\n }\n\n // Parse the SVG string into an XML Document\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, \"image/svg+xml\");\n const svgElement = svgDoc.documentElement;\n\n if (svgElement.tagName.toLowerCase() !== \"svg\") {\n throw ErrorInvalidSVG;\n }\n\n // Set the new viewBox to the crop area\n const newViewBox = `${pixelCrop.x} ${pixelCrop.y} ${pixelCrop.width} ${pixelCrop.height}`;\n svgElement.setAttribute(\"viewBox\", newViewBox);\n\n // Set the output diensions\n const outputWidth = desiredDimension?.width ?? pixelCrop.width;\n const outputHeight = desiredDimension?.height ?? pixelCrop.height;\n svgElement.setAttribute(\"width\", String(outputWidth));\n svgElement.setAttribute(\"height\", String(outputHeight));\n\n // Serialize the modified SVG back to a string\n const serializer = new XMLSerializer();\n const croppedSvgString = serializer.serializeToString(svgElement);\n\n // Create a Blob and Object URL\n const blob = new Blob([croppedSvgString], { type: \"image/svg+xml\" });\n\n // Throw error if svg is too large\n const targetSizeBytes = targetSizeKB * 1024;\n if (blob.size > targetSizeBytes) {\n throw ErrorSVGExceedSize;\n }\n\n return URL.createObjectURL(blob);\n}\n","import { getCroppedImg, getCroppedSVG } from \"./helper\";\nimport { Dialog, DialogContent, DialogTitle } from \"../dialog\";\nimport { Button } from \"../button\";\nimport { XIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport Cropper, { Area } from \"react-easy-crop\";\nimport { CropperModalProps } from \"./type\";\n\nexport const CropperModal = ({\n open,\n onOpenChange,\n imageSrc,\n isSVG,\n onConfirm,\n onCancel,\n onError,\n cropSize,\n outputExactCropSize,\n targetFileSizeKB,\n generateBlobUrlOutput,\n title,\n props\n}: CropperModalProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState<number | undefined>();\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleCancel = useCallback(() => {\n if (onCancel) {\n onCancel();\n }\n handleClose();\n }, [handleClose, onCancel]);\n\n const handleCropComplete = useCallback((_: Area, croppedAreaPixels: Area) => {\n setCroppedAreaPixels(croppedAreaPixels);\n }, []);\n\n const handleConfirm = async () => {\n if (!imageSrc || !onConfirm) {\n handleClose();\n return;\n }\n if (!generateBlobUrlOutput) {\n onConfirm({ crop, croppedAreaPixels });\n return;\n }\n if (!croppedAreaPixels) {\n // return original image\n onConfirm({ crop, croppedAreaPixels, croppedImageBlobUrl: imageSrc });\n return;\n }\n setIsLoading(true);\n try {\n const desiredDimension = outputExactCropSize ? cropSize : undefined;\n const croppedImage =\n isSVG ?\n await getCroppedSVG(imageSrc, croppedAreaPixels, desiredDimension, targetFileSizeKB)\n : await getCroppedImg(imageSrc, croppedAreaPixels, desiredDimension, targetFileSizeKB);\n onConfirm({ crop, croppedAreaPixels, croppedImageBlobUrl: croppedImage });\n } catch (e: unknown) {\n if (onError) {\n onError(e);\n }\n } finally {\n setIsLoading(false);\n handleClose();\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(nextOpen) => {\n if (!nextOpen) {\n handleClose();\n } else {\n onOpenChange(true);\n }\n }}\n >\n <DialogContent\n className=\"flex flex-col w-fit !max-w-6xl p-0 overflow-clip gap-0 border-0\"\n {...props?.dialogContent}\n >\n <div\n className=\"flex w-full bg-[#82B495] text-white justify-between items-center p-4\"\n {...props?.dialogTitleContainer}\n >\n <DialogTitle className=\"text-2xl font-semibold\" {...props?.dialogTitle}>\n {title ?? \"Crop Image\"}\n </DialogTitle>\n <button\n type=\"button\"\n className=\"text-white hover:text-gray-100 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n <XIcon className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"w-120 md:w-[50vw] h-[70vh] mx-auto\" {...props?.cropperContainer}>\n <Cropper\n image={imageSrc ?? undefined}\n crop={crop}\n onCropChange={setCrop}\n zoom={zoom}\n onZoomChange={setZoom}\n style={{ containerStyle: { position: \"relative\", width: \"100%\", height: \"100%\" } }}\n onCropComplete={handleCropComplete}\n aspect={cropSize ? cropSize.width / cropSize.height : undefined}\n zoomWithScroll\n showGrid\n restrictPosition\n {...props?.cropper}\n />\n </div>\n\n {/* Footer */}\n <div className=\"w-full py-4 px-8 min-h-10\">\n <div className=\"flex w-full justify-between\">\n <Button type=\"button\" variant=\"cancel\" onClick={handleCancel} disabled={isLoading}>\n Cancel\n </Button>\n <div className=\"ml-auto flex gap-x-2\">\n <Button type=\"button\" variant=\"default\" onClick={handleConfirm} disabled={isLoading}>\n Confirm\n </Button>\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default CropperModal;\n","import React, { useRef, useState, useEffect, ReactNode, type CSSProperties, useMemo } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { cn, debounce } from \"@/utils\";\n\nexport type EllipsisConfig =\n | boolean\n | { content?: ReactNode; lineClamp?: number; side?: \"top\" | \"bottom\" | \"left\" | \"right\" }\n | number; // number = line-clamp-N\n\nexport type TruncatedProps = {\n className?: string;\n ellipsis?: EllipsisConfig;\n children: ReactNode;\n as?: keyof React.JSX.IntrinsicElements;\n style?: CSSProperties;\n};\n\nconst Truncated = ({ children, className, ellipsis = true, as = \"p\", style }: TruncatedProps) => {\n const elementRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState<boolean>(false);\n const [isTruncated, setIsTruncated] = useState<boolean>(false);\n\n const Comp = as as React.ElementType;\n\n const normalizedChildren = typeof children === \"string\" ? children.replace(/>/g, \">\\u200B\") : children;\n\n useEffect(() => {\n const el = elementRef.current;\n if (!el) return;\n\n const checkTruncate = debounce(() => {\n const overflowX = el.scrollWidth > el.clientWidth;\n const overflowY = el.scrollHeight > el.clientHeight;\n setIsTruncated(overflowX || overflowY);\n }, 300);\n\n const resizeObserver = new ResizeObserver(checkTruncate);\n resizeObserver.observe(el);\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const lineClampLines =\n typeof ellipsis === \"number\" ? ellipsis\n : typeof ellipsis === \"object\" ? (ellipsis.lineClamp ?? 3)\n : null;\n\n const truncationClass = useMemo(() => {\n if (!ellipsis) return \"\";\n if (typeof ellipsis === \"number\") return `line-clamp-${ellipsis}`;\n if (typeof ellipsis === \"object\") return `line-clamp-${lineClampLines ?? 3}`;\n return \"truncate\";\n }, [ellipsis, lineClampLines]);\n\n const clampedStyle = useMemo(() => {\n if (!lineClampLines) return style;\n return {\n ...style,\n display: \"-webkit-box\",\n WebkitLineClamp: lineClampLines,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\"\n };\n }, [lineClampLines, style]);\n\n const baseContent = (\n <Comp ref={elementRef} className={cn(truncationClass, className)} style={clampedStyle}>\n {normalizedChildren}\n </Comp>\n );\n\n let tooltipContent: ReactNode = normalizedChildren;\n let tooltipSide: \"top\" | \"bottom\" | \"left\" | \"right\" = \"top\";\n\n if (typeof ellipsis === \"object\") {\n tooltipContent = ellipsis?.content ?? normalizedChildren;\n tooltipSide = ellipsis?.side ?? \"top\";\n }\n\n return (\n <Tooltip\n open={open}\n onOpenChange={(open) => {\n setOpen(isTruncated && open);\n }}\n >\n <TooltipTrigger asChild>{baseContent}</TooltipTrigger>\n <TooltipContent\n side={tooltipSide}\n className={cn(\"text-white bg-[#8B8B8B] max-w-md wrap-break-word shadow-lg\")}\n arrowClassName=\"bg-[#8B8B8B] fill-[#8B8B8B]\"\n >\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n );\n};\n\nexport default Truncated;\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CircleX } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\nimport { Spinner } from \"@/components/ui/spinner\";\n\nexport type InputPrimitiveProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst InputPrimitive = React.forwardRef<HTMLInputElement, InputPrimitiveProps>(\n ({ className, type = \"text\", ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n className={cn(\n \"placeholder:text-neutral-400 text-neutral-900 flex h-10 w-full min-w-0 items-center rounded-lg border bg-white px-4 text-sm transition-colors outline-none file:inline-flex file:h-7 file:rounded-md file:border-0 file:bg-transparent file:px-2 file:text-sm file:font-medium hover:border-neutral-500 focus-visible:border-neutral-900 focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-400 disabled:border-neutral-200 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n\nconst inputVariants = cva(\"\", {\n variants: {\n controlSize: {\n sm: \"h-9 rounded-md px-3 text-sm\",\n md: \"h-10 rounded-lg px-4 text-sm\",\n lg: \"h-12 rounded-xl px-5 text-base\"\n },\n fullWidth: {\n true: \"w-full\",\n false: \"w-auto\"\n },\n appearance: {\n filled: \"border-neutral-200 hover:border-neutral-500 focus-visible:border-neutral-900\",\n unfilled: \"bg-white border-neutral-300 hover:border-neutral-500 focus-visible:border-neutral-900\"\n }\n },\n defaultVariants: {\n controlSize: \"sm\",\n fullWidth: true,\n appearance: \"filled\"\n }\n});\n\nexport type InputProps = Omit<InputPrimitiveProps, \"size\" | \"prefix\"> &\n VariantProps<typeof inputVariants> & {\n addonPrefix?: React.ReactNode;\n addonPrefixProps?: React.HTMLAttributes<HTMLSpanElement>;\n prefixInteractive?: boolean;\n addonSuffix?: React.ReactNode;\n addonSuffixProps?: React.HTMLAttributes<HTMLSpanElement>;\n suffixInteractive?: boolean;\n wrapperClassName?: string;\n invalid?: boolean;\n loading?: boolean;\n loadingIcon?: React.ReactNode;\n validationMessage?: React.ReactNode;\n validationIcon?: React.ReactNode;\n validationMessageProps?: React.HTMLAttributes<HTMLParagraphElement>;\n onValueChange?: (value: string) => void;\n };\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n wrapperClassName,\n controlSize,\n fullWidth,\n appearance,\n addonPrefix,\n addonPrefixProps,\n prefixInteractive,\n addonSuffix,\n addonSuffixProps,\n suffixInteractive,\n invalid,\n loading,\n loadingIcon,\n validationMessage,\n validationIcon,\n validationMessageProps,\n onValueChange,\n type = \"text\",\n ...rest\n },\n ref\n ) => {\n const inputProps = rest;\n\n const hasPrefix = Boolean(addonPrefix);\n const hasSuffix = Boolean(addonSuffix) || loading;\n const isFullWidth = fullWidth ?? true;\n\n const {\n \"aria-invalid\": ariaInvalidProp,\n \"aria-describedby\": ariaDescribedByProp,\n onChange: onChangeProp\n } = rest;\n\n const ariaInvalid = invalid ?? ariaInvalidProp;\n const messageId = React.useId();\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (event) => {\n onChangeProp?.(event);\n onValueChange?.(event.target.value);\n },\n [onChangeProp, onValueChange]\n );\n\n const resolvedAriaInvalid =\n typeof ariaInvalid === \"string\" ? ariaInvalid\n : ariaInvalid ? true\n : undefined;\n\n const describedBy =\n validationMessage ?\n [ariaDescribedByProp, messageId].filter(Boolean).join(\" \")\n : ariaDescribedByProp;\n\n const controlWrapperClassName = cn(\n \"relative inline-flex items-center\",\n isFullWidth ? \"w-full\" : \"w-fit\",\n !validationMessage && wrapperClassName\n );\n\n const inputElement = (\n <InputPrimitive\n ref={ref}\n type={type}\n data-slot=\"input\"\n className={cn(\n inputVariants({ controlSize, fullWidth: isFullWidth, appearance }),\n hasPrefix && \"pl-10\",\n hasSuffix && \"pr-10\",\n className\n )}\n aria-invalid={resolvedAriaInvalid}\n aria-describedby={describedBy || undefined}\n onChange={handleChange}\n {...inputProps}\n />\n );\n\n if (!hasPrefix && !hasSuffix && !validationMessage) {\n return inputElement;\n }\n\n const { className: prefixClassName, ...prefixRest } = addonPrefixProps ?? {};\n const { className: suffixClassName, ...suffixRest } = addonSuffixProps ?? {};\n const { className: validationMessageClassName, ...validationMessageRest } =\n validationMessageProps ?? {};\n\n const suffixContent = (\n <>\n {addonSuffix}\n {loading && (loadingIcon ?? <Spinner size={16} variant=\"muted\" />)}\n </>\n );\n\n const inputWithAffixes = (\n <div data-slot=\"input-wrapper\" className={controlWrapperClassName}>\n {hasPrefix && (\n <span\n {...prefixRest}\n className={cn(\n \"absolute left-3 top-1/2 -translate-y-1/2 inline-flex items-center text-muted-foreground\",\n !prefixInteractive && \"pointer-events-none\",\n prefixClassName\n )}\n >\n {addonPrefix}\n </span>\n )}\n\n {inputElement}\n\n {hasSuffix && (\n <span\n {...suffixRest}\n className={cn(\n \"absolute right-3 top-1/2 -translate-y-1/2 inline-flex items-center gap-2 text-muted-foreground\",\n !suffixInteractive && \"pointer-events-none\",\n suffixClassName\n )}\n >\n {suffixContent}\n </span>\n )}\n </div>\n );\n\n if (!validationMessage) {\n return inputWithAffixes;\n }\n\n return (\n <div className={cn(\"flex flex-col gap-1\", isFullWidth ? \"w-full\" : \"w-fit\", wrapperClassName)}>\n {inputWithAffixes}\n <p\n id={messageId}\n {...validationMessageRest}\n className={cn(\"flex items-center gap-2 text-sm text-destructive\", validationMessageClassName)}\n >\n {validationIcon ?? <CircleX className=\"size-4\" />}\n <span>{validationMessage}</span>\n </p>\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { InputPrimitive, Input, inputVariants };\n","import { NumericFormat, NumericFormatProps } from \"react-number-format\";\nimport { Input, type InputProps } from \"./BaseInput\";\n\nexport type InputCustomInputProps = Omit<\n InputProps,\n \"type\" | \"value\" | \"defaultValue\" | \"onValueChange\" | \"prefix\" | \"suffix\"\n> & {\n type?: NumericFormatProps<InputProps>[\"type\"];\n value?: NumericFormatProps<InputProps>[\"value\"];\n defaultValue?: NumericFormatProps<InputProps>[\"defaultValue\"];\n};\n\nexport type InputNumberProps = NumericFormatProps<InputProps> & {\n customInputProps?: InputCustomInputProps;\n};\n\nconst InputNumber = ({ customInputProps, ...props }: InputNumberProps) => {\n return <NumericFormat customInput={Input} {...props} {...customInputProps} />;\n};\n\nexport default InputNumber;\n"]}
|