@bigbinary/neeto-atoms 1.0.44 → 1.0.46
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/{ColorPicker-D7Y1gZNn.js → ColorPicker-ClnRUq9y.js} +2 -2
- package/dist/{ColorPicker-D7Y1gZNn.js.map → ColorPicker-ClnRUq9y.js.map} +1 -1
- package/dist/{DataTable-DZYQUYKJ.js → DataTable-zlEvl0ny.js} +11 -9
- package/dist/DataTable-zlEvl0ny.js.map +1 -0
- package/dist/{DatePicker-CV3nsugu.js → DatePicker-D-0HMiNG.js} +17 -5
- package/dist/DatePicker-D-0HMiNG.js.map +1 -0
- package/dist/{Input-xjYQfsaz.js → Input-DrpfsLAw.js} +22 -6
- package/dist/Input-DrpfsLAw.js.map +1 -0
- package/dist/{MultiEmailInput-L-QJg0hh.js → MultiEmailInput-DhjSEXbS.js} +6 -5
- package/dist/MultiEmailInput-DhjSEXbS.js.map +1 -0
- package/dist/{Select-o0yJaN0P.js → Select-BiyQTuiQ.js} +20 -12
- package/dist/Select-BiyQTuiQ.js.map +1 -0
- package/dist/{TimePicker-XE0sCXE6.js → TimePicker-CSjiggpr.js} +17 -5
- package/dist/TimePicker-CSjiggpr.js.map +1 -0
- package/dist/{TreeSelect-Dk299XMv.js → TreeSelect-BwF2rY6f.js} +7 -4
- package/dist/{TreeSelect-Dk299XMv.js.map → TreeSelect-BwF2rY6f.js.map} +1 -1
- package/dist/cjs/{ColorPicker-Co1Gffsu.js → ColorPicker-rhCnblTv.js} +2 -2
- package/dist/cjs/{ColorPicker-Co1Gffsu.js.map → ColorPicker-rhCnblTv.js.map} +1 -1
- package/dist/cjs/{DataTable-D4suNizi.js → DataTable-buERtmN8.js} +11 -9
- package/dist/cjs/DataTable-buERtmN8.js.map +1 -0
- package/dist/cjs/{DatePicker-CqnlwzLe.js → DatePicker-JhQ7D2bu.js} +17 -5
- package/dist/cjs/DatePicker-JhQ7D2bu.js.map +1 -0
- package/dist/cjs/{Input-CpuJXazH.js → Input-Lc77SV8e.js} +22 -6
- package/dist/cjs/Input-Lc77SV8e.js.map +1 -0
- package/dist/cjs/{MultiEmailInput-CPXODFvs.js → MultiEmailInput-BZtzoX7D.js} +6 -5
- package/dist/cjs/MultiEmailInput-BZtzoX7D.js.map +1 -0
- package/dist/cjs/{Select-DbfPhEu0.js → Select-DC23xcMU.js} +20 -12
- package/dist/cjs/Select-DC23xcMU.js.map +1 -0
- package/dist/cjs/{TimePicker-BGWNGfVR.js → TimePicker-CU7qJpoT.js} +17 -5
- package/dist/cjs/TimePicker-CU7qJpoT.js.map +1 -0
- package/dist/cjs/{TreeSelect-Cmm5yYq3.js → TreeSelect-qLtRIP-s.js} +7 -4
- package/dist/cjs/{TreeSelect-Cmm5yYq3.js.map → TreeSelect-qLtRIP-s.js.map} +1 -1
- package/dist/cjs/components/ColorPicker.js +1 -1
- package/dist/cjs/components/DataTable.js +1 -1
- package/dist/cjs/components/DatePicker.js +1 -1
- package/dist/cjs/components/Input.js +2 -1
- package/dist/cjs/components/Input.js.map +1 -1
- package/dist/cjs/components/MultiEmailInput.js +2 -1
- package/dist/cjs/components/MultiEmailInput.js.map +1 -1
- package/dist/cjs/components/Select.js +1 -1
- package/dist/cjs/components/TimePicker.js +1 -1
- package/dist/cjs/components/TreeSelect.js +1 -1
- package/dist/cjs/components/index.js +9 -8
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/formik/Input.js +2 -1
- package/dist/cjs/formik/Input.js.map +1 -1
- package/dist/cjs/formik/MultiEmailInput.js +2 -1
- package/dist/cjs/formik/MultiEmailInput.js.map +1 -1
- package/dist/cjs/formik/Select.js +1 -1
- package/dist/cjs/formik/TreeSelect.js +1 -1
- package/dist/cjs/formik/index.js +5 -4
- package/dist/cjs/formik/index.js.map +1 -1
- package/dist/cjs/index.js +9 -8
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/withIconSize-BKUwVY6t.js +19 -0
- package/dist/cjs/withIconSize-BKUwVY6t.js.map +1 -0
- package/dist/components/ColorPicker.js +1 -1
- package/dist/components/DataTable.js +1 -1
- package/dist/components/DatePicker/constants.d.ts +7 -4
- package/dist/components/DatePicker.js +1 -1
- package/dist/components/Input/constants.d.ts +3 -0
- package/dist/components/Input.js +2 -1
- package/dist/components/Input.js.map +1 -1
- package/dist/components/MultiEmailInput.js +2 -1
- package/dist/components/MultiEmailInput.js.map +1 -1
- package/dist/components/Select/MultiSelectCombobox.types.d.ts +1 -0
- package/dist/components/Select/SelectCombobox.types.d.ts +1 -0
- package/dist/components/Select/constants.d.ts +1 -0
- package/dist/components/Select.js +1 -1
- package/dist/components/TimePicker.js +1 -1
- package/dist/components/TreeSelect.js +1 -1
- package/dist/components/index.js +9 -8
- package/dist/components/index.js.map +1 -1
- package/dist/formik/Input.js +2 -1
- package/dist/formik/Input.js.map +1 -1
- package/dist/formik/MultiEmailInput.js +2 -1
- package/dist/formik/MultiEmailInput.js.map +1 -1
- package/dist/formik/Select.js +1 -1
- package/dist/formik/TreeSelect.js +1 -1
- package/dist/formik/index.js +5 -4
- package/dist/formik/index.js.map +1 -1
- package/dist/hooks/useMultiSelectState.d.ts +1 -0
- package/dist/hooks/useSelectState.d.ts +1 -0
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/utils/withIconSize.d.ts +12 -0
- package/dist/withIconSize-Czt1EelO.js +13 -0
- package/dist/withIconSize-Czt1EelO.js.map +1 -0
- package/package.json +1 -1
- package/dist/DataTable-DZYQUYKJ.js.map +0 -1
- package/dist/DatePicker-CV3nsugu.js.map +0 -1
- package/dist/Input-xjYQfsaz.js.map +0 -1
- package/dist/MultiEmailInput-L-QJg0hh.js.map +0 -1
- package/dist/Select-o0yJaN0P.js.map +0 -1
- package/dist/TimePicker-XE0sCXE6.js.map +0 -1
- package/dist/cjs/DataTable-D4suNizi.js.map +0 -1
- package/dist/cjs/DatePicker-CqnlwzLe.js.map +0 -1
- package/dist/cjs/Input-CpuJXazH.js.map +0 -1
- package/dist/cjs/MultiEmailInput-CPXODFvs.js.map +0 -1
- package/dist/cjs/Select-DbfPhEu0.js.map +0 -1
- package/dist/cjs/TimePicker-BGWNGfVR.js.map +0 -1
|
@@ -22,9 +22,21 @@ const __iconNode = [
|
|
|
22
22
|
const Clock = createLucideIcon("clock", __iconNode);
|
|
23
23
|
|
|
24
24
|
const SIZE_CONFIG = {
|
|
25
|
-
small: {
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
small: {
|
|
26
|
+
trigger: "h-8 md:h-7",
|
|
27
|
+
input: "text-base md:text-xs",
|
|
28
|
+
icon: "size-3.5"
|
|
29
|
+
},
|
|
30
|
+
medium: {
|
|
31
|
+
trigger: "h-8",
|
|
32
|
+
input: "text-base md:text-sm",
|
|
33
|
+
icon: "size-4"
|
|
34
|
+
},
|
|
35
|
+
large: {
|
|
36
|
+
trigger: "h-10",
|
|
37
|
+
input: "text-base md:text-sm",
|
|
38
|
+
icon: "size-5"
|
|
39
|
+
}
|
|
28
40
|
};
|
|
29
41
|
const TimePicker = forwardRef(
|
|
30
42
|
({
|
|
@@ -205,7 +217,7 @@ const TimePicker = forwardRef(
|
|
|
205
217
|
className: cn(
|
|
206
218
|
"min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground",
|
|
207
219
|
"disabled:cursor-not-allowed",
|
|
208
|
-
sizeConfig.
|
|
220
|
+
sizeConfig.input
|
|
209
221
|
)
|
|
210
222
|
}
|
|
211
223
|
),
|
|
@@ -286,4 +298,4 @@ const TimePicker = forwardRef(
|
|
|
286
298
|
TimePicker.displayName = "TimePicker";
|
|
287
299
|
|
|
288
300
|
export { TimePicker as T };
|
|
289
|
-
//# sourceMappingURL=TimePicker-
|
|
301
|
+
//# sourceMappingURL=TimePicker-CSjiggpr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker-CSjiggpr.js","sources":["../node_modules/lucide-react/dist/esm/icons/clock.js","../src/components/TimePicker/TimePicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Clock, X } from \"lucide-react\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"src/primitives/Popover\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { TimePickerPanel } from \"./TimePickerPanel\";\nimport type { TimePickerProps, TimeValue } from \"./types\";\nimport {\n dateToTimeValue,\n formatTimeDisplay,\n parseTimeString,\n timeValueToDayjs,\n} from \"./utils\";\nimport { applyMask, buildMaskTemplate } from \"src/utils/inputMask\";\n\nconst SIZE_CONFIG = {\n small: {\n trigger: \"h-8 md:h-7\",\n input: \"text-base md:text-xs\",\n icon: \"size-3.5\",\n },\n medium: {\n trigger: \"h-8\",\n input: \"text-base md:text-sm\",\n icon: \"size-4\",\n },\n large: {\n trigger: \"h-10\",\n input: \"text-base md:text-sm\",\n icon: \"size-5\",\n },\n} as const;\n\nconst TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n value,\n onChange,\n format = \"24\",\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n disabled = false,\n placeholder,\n label,\n error,\n helpText,\n size = \"medium\",\n required = false,\n timezone,\n labelProps,\n className,\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const cursorPosRef = useRef<number | null>(null);\n const popoverContentId = useRef(\n `timepicker-popover-${generatedId}`\n ).current;\n\n const [open, setOpen] = useState(false);\n\n const getInitialTime = useCallback((): TimeValue | null => {\n if (!value) return null;\n if (value instanceof Date) return dateToTimeValue(value);\n\n // Dayjs-like objects: extract time via .hour()/.minute()/.second()\n // to preserve timezone context (native .getHours() would give browser-local).\n const dayjsLike = value as {\n toDate?: () => Date;\n hour?: () => number;\n minute?: () => number;\n second?: () => number;\n };\n if (typeof dayjsLike.hour === \"function\") {\n return {\n hours: dayjsLike.hour!(),\n minutes: dayjsLike.minute!(),\n seconds: dayjsLike.second?.() ?? 0,\n };\n }\n\n if (typeof dayjsLike.toDate === \"function\") {\n return dateToTimeValue(dayjsLike.toDate());\n }\n\n const timeValue = value as TimeValue;\n\n return {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n seconds: timeValue.seconds ?? 0,\n };\n }, [value]);\n\n const [internalTime, setInternalTime] = useState<TimeValue | null>(\n getInitialTime\n );\n const [inputText, setInputText] = useState(\"\");\n\n const displayTime = useCallback(\n (time: TimeValue | null) => formatTimeDisplay(time, format, showSeconds),\n [format, showSeconds]\n );\n\n useEffect(() => {\n const newTime = getInitialTime();\n setInternalTime(newTime);\n if (!open) setInputText(displayTime(newTime));\n }, [getInitialTime, displayTime, open]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n const target = e.target as HTMLElement;\n if (containerRef.current?.contains(target)) return;\n\n const popoverEl = document.getElementById(popoverContentId);\n if (popoverEl?.contains(target)) return;\n\n setOpen(false);\n setInputText(displayTime(internalTime));\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n\n return () =>\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n }, [open, internalTime, displayTime]);\n\n const maskFormatStr = useMemo(() => {\n if (format === \"12\") {\n return showSeconds ? \"hh:mm:ss AA\" : \"hh:mm AA\";\n }\n\n return showSeconds ? \"HH:mm:ss\" : \"HH:mm\";\n }, [format, showSeconds]);\n\n const maskTemplate = useMemo(\n () => buildMaskTemplate(maskFormatStr),\n [maskFormatStr]\n );\n\n const defaultPlaceholder = showSeconds\n ? format === \"12\"\n ? \"hh:mm:ss AA\"\n : \"HH:mm:ss\"\n : format === \"12\"\n ? \"hh:mm AA\"\n : \"HH:mm\";\n\n const emitChange = (time: TimeValue) => {\n onChange?.(timeValueToDayjs(time), displayTime(time));\n };\n\n const handlePanelChange = (time: TimeValue) => {\n setInternalTime(time);\n setInputText(displayTime(time));\n emitChange(time);\n };\n\n useLayoutEffect(() => {\n if (\n cursorPosRef.current !== null &&\n inputRef.current &&\n document.activeElement === inputRef.current\n ) {\n inputRef.current.setSelectionRange(\n cursorPosRef.current,\n cursorPosRef.current\n );\n cursorPosRef.current = null;\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = applyMask(\n e.target.value,\n maskTemplate,\n inputText,\n e.target.selectionStart\n );\n const text = masked.text;\n cursorPosRef.current = masked.cursorPosition;\n\n setInputText(text);\n\n const parsed = parseTimeString(text, format);\n if (parsed) {\n setInternalTime(parsed);\n emitChange(parsed);\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\" && e.key !== \"Escape\") return;\n\n setInputText(displayTime(internalTime));\n setOpen(false);\n };\n\n const handleInputFocus = () => {\n if (!open) setOpen(true);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const cleared = { hours: 0, minutes: 0, seconds: 0 };\n setInternalTime(null);\n setInputText(\"\");\n emitChange(cleared);\n };\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const triggerContent = (\n <Popover open={open}>\n <PopoverAnchor asChild>\n <div\n ref={containerRef}\n className={cn(\n \"relative flex w-full items-center gap-2 rounded-md border border-input bg-background pe-8 ps-3\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n sizeConfig.trigger,\n !hasField && className\n )}\n >\n {timezone ? (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {timezone.toUpperCase()}\n </span>\n ) : (\n <Clock\n className={cn(\n \"shrink-0 text-muted-foreground\",\n sizeConfig.icon\n )}\n />\n )}\n <input\n ref={inputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={label || \"Pick a time\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n placeholder={placeholder ?? defaultPlaceholder}\n value={inputText}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n onFocus={handleInputFocus}\n className={cn(\n \"min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\",\n sizeConfig.input\n )}\n />\n <button\n type=\"button\"\n onPointerDown={e => e.preventDefault()}\n onClick={handleClear}\n className={cn(\n \"absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none\",\n !(inputText && !disabled) && \"invisible\"\n )}\n aria-label=\"Clear time\"\n tabIndex={-1}\n >\n <X className={sizeConfig.icon} />\n </button>\n </div>\n </PopoverAnchor>\n {open && (\n <PopoverContent\n id={popoverContentId}\n className=\"w-auto p-0\"\n align=\"start\"\n onOpenAutoFocus={e => e.preventDefault()}\n onCloseAutoFocus={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n onInteractOutside={e => e.preventDefault()}\n >\n <TimePickerPanel\n value={internalTime ?? undefined}\n onChange={handlePanelChange}\n format={format}\n showSeconds={showSeconds}\n minuteStep={minuteStep}\n secondStep={secondStep}\n disabled={disabled}\n />\n </PopoverContent>\n )}\n </Popover>\n );\n\n if (!hasField) {\n return (\n <div ref={ref} className={className}>\n {triggerContent}\n </div>\n );\n }\n\n return (\n <Field\n ref={ref}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {label && (\n <FieldLabel\n {...(labelProps as React.ComponentProps<typeof FieldLabel>)}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n <FieldContent>\n {triggerContent}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n\nexport { TimePicker };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -168,9 +168,12 @@ function useTreeSelectState(props) {
|
|
|
168
168
|
|
|
169
169
|
const DROPDOWN_HEIGHT = 256;
|
|
170
170
|
const SIZE_CONFIG = {
|
|
171
|
-
small: {
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
small: {
|
|
172
|
+
trigger: "min-h-8 md:min-h-7 px-2 py-0.5",
|
|
173
|
+
text: "text-base md:text-xs"
|
|
174
|
+
},
|
|
175
|
+
medium: { trigger: "min-h-8 px-2.5 py-1", text: "text-base md:text-sm" },
|
|
176
|
+
large: { trigger: "min-h-10 px-2.5 py-1.5", text: "text-base md:text-sm" }
|
|
174
177
|
};
|
|
175
178
|
|
|
176
179
|
const TreeSelectTrigger = forwardRef(
|
|
@@ -332,4 +335,4 @@ const TreeSelect = forwardRef(
|
|
|
332
335
|
TreeSelect.displayName = "TreeSelect";
|
|
333
336
|
|
|
334
337
|
export { TreeSelect as T };
|
|
335
|
-
//# sourceMappingURL=TreeSelect-
|
|
338
|
+
//# sourceMappingURL=TreeSelect-BwF2rY6f.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelect-Dk299XMv.js","sources":["../src/components/TreeSelect/utils/pruneTree.ts","../src/components/TreeSelect/utils/resolveFieldNames.ts","../src/components/TreeSelect/hooks/useTreeSelectValue.ts","../src/components/TreeSelect/hooks/useTreeSelectState.ts","../src/components/TreeSelect/constants.ts","../src/components/TreeSelect/TreeSelectTrigger.tsx","../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import type { TreeNodeData } from \"../../Tree/types\";\n\nexport const pruneTree = (\n nodes: TreeNodeData[],\n searchTerm: string\n): TreeNodeData[] => {\n if (!searchTerm.trim()) return nodes;\n\n const lower = searchTerm.toLowerCase();\n\n const prune = (items: TreeNodeData[]): TreeNodeData[] =>\n items.reduce<TreeNodeData[]>((acc, node) => {\n const titleStr = typeof node.title === \"string\" ? node.title : \"\";\n const nodeMatches = titleStr.toLowerCase().includes(lower);\n\n if (nodeMatches) {\n acc.push(node);\n } else {\n const prunedChildren = node.children ? prune(node.children) : [];\n if (prunedChildren.length > 0) {\n acc.push({ ...node, children: prunedChildren });\n }\n }\n\n return acc;\n }, []);\n\n return prune(nodes);\n};\n","import type { ReactNode } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\n\ninterface FieldNameMapping {\n label?: string;\n value?: string;\n}\n\nexport const resolveFieldNames = (\n nodes: TreeNodeData[],\n fieldNames: FieldNameMapping\n): TreeNodeData[] => {\n const labelKey = fieldNames.label ?? \"title\";\n const valueKey = fieldNames.value ?? \"key\";\n\n const remap = (items: TreeNodeData[]): TreeNodeData[] =>\n items.map(item => {\n const record = item as unknown as Record<string, unknown>;\n\n return {\n key: String(record[valueKey] ?? \"\"),\n title: record[labelKey] as ReactNode,\n disabled: record.disabled as boolean | undefined,\n children: Array.isArray(item.children)\n ? remap(item.children)\n : undefined,\n };\n });\n\n return remap(nodes);\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport { findNode } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { resolveFieldNames } from \"../utils/resolveFieldNames\";\n\nexport function useTreeSelectValue(props: TreeSelectProps) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n treeData: rawTreeData,\n fieldNames,\n isClearable = false,\n isDisabled = false,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n required = false,\n } = props;\n\n const id = useId();\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const treeData = useMemo(() => {\n if (!fieldNames) return rawTreeData;\n\n return resolveFieldNames(rawTreeData, fieldNames);\n }, [rawTreeData, fieldNames?.label, fieldNames?.value]);\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const currentValue = isControlled ? (valueProp ?? \"\") : internalValue;\n\n const applyValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const selectedLabel = useMemo(() => {\n if (!currentValue) return \"\";\n const node = findNode(currentValue, treeData);\n if (!node) return currentValue;\n\n return typeof node.title === \"string\" ? node.title : \"\";\n }, [currentValue, treeData]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n applyValue(\"\");\n },\n [applyValue]\n );\n\n const showClearButton = isClearable && !!currentValue && !isDisabled;\n\n return {\n id,\n errorId,\n helpTextId,\n label,\n error,\n helpText,\n required,\n isDisabled,\n size,\n treeData,\n currentValue,\n selectedLabel,\n applyValue,\n handleClear,\n showClearButton,\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\nimport { walkTree } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { pruneTree } from \"../utils/pruneTree\";\nimport { useTreeSelectValue } from \"./useTreeSelectValue\";\n\nexport function useTreeSelectState(props: TreeSelectProps) {\n const { isSearchable = false, defaultExpandedKeys } = props;\n const defaultExpandedKeysRef = useRef(defaultExpandedKeys);\n defaultExpandedKeysRef.current = defaultExpandedKeys;\n const value = useTreeSelectValue(props);\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [expandedKeys, setExpandedKeys] = useState<string[]>(\n defaultExpandedKeys ?? []\n );\n\n const prunedTreeData = useMemo(\n () =>\n searchTerm.trim()\n ? pruneTree(value.treeData, searchTerm)\n : value.treeData,\n [value.treeData, searchTerm]\n );\n\n const effectiveExpandedKeys = useMemo(() => {\n if (!searchTerm) return expandedKeys;\n\n const allKeys: string[] = [];\n walkTree(prunedTreeData, node => {\n if (node.children?.length) allKeys.push(node.key);\n });\n\n return allKeys;\n }, [searchTerm, prunedTreeData]);\n\n const handleSelect = useCallback(\n (keys: string[], info: { node: TreeNodeData }) => {\n if (value.isDisabled || info.node.disabled) return;\n value.applyValue(keys[0] ?? \"\");\n setIsOpen(false);\n setSearchTerm(\"\");\n },\n [value.applyValue, value.isDisabled]\n );\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (value.isDisabled) return;\n setIsOpen(open);\n if (!open) {\n setSearchTerm(\"\");\n setExpandedKeys(defaultExpandedKeysRef.current ?? []);\n }\n },\n [value.isDisabled]\n );\n\n const handleExpand = useCallback(\n (keys: string[]) => setExpandedKeys(keys),\n []\n );\n\n return {\n ...value,\n isSearchable,\n isOpen,\n handleOpenChange,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n };\n}\n","export const DROPDOWN_HEIGHT = 256;\n\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n { trigger: string; text: string }\n> = {\n small: { trigger: \"min-h-7 px-2 py-0.5\", text: \"text-xs\" },\n medium: { trigger: \"min-h-8 px-2.5 py-1\", text: \"text-sm\" },\n large: { trigger: \"min-h-10 px-2.5 py-1.5\", text: \"text-sm\" },\n};\n","import { forwardRef, type ReactNode } from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { SIZE_CONFIG } from \"./constants\";\n\ninterface TreeSelectTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n size: \"small\" | \"medium\" | \"large\";\n currentValue: string;\n selectedLabel: string;\n placeholder?: string;\n isDisabled: boolean;\n error: string;\n showClearButton: boolean;\n handleClear: (e: React.MouseEvent) => void;\n suffixIcon?: ReactNode;\n}\n\nexport const TreeSelectTrigger = forwardRef<\n HTMLButtonElement,\n TreeSelectTriggerProps\n>(\n (\n {\n size,\n currentValue,\n selectedLabel,\n placeholder,\n isDisabled,\n error,\n showClearButton,\n handleClear,\n suffixIcon,\n className,\n ...rest\n },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...rest}\n className={cn(\n \"inline-flex w-full items-center gap-1 rounded-md border border-input bg-background outline-none\",\n \"hover:bg-accent focus:ring-1 focus:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n error && \"border-destructive\",\n SIZE_CONFIG[size].trigger,\n SIZE_CONFIG[size].text,\n className\n )}\n >\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n !currentValue && \"text-muted-foreground\"\n )}\n >\n {selectedLabel || placeholder || \"\"}\n </span>\n {showClearButton && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClear}\n >\n <X className=\"size-3.5\" />\n </span>\n )}\n {suffixIcon ?? <ChevronDown className=\"size-4 shrink-0 opacity-50\" />}\n </button>\n )\n);\n\nTreeSelectTrigger.displayName = \"TreeSelectTrigger\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { SelectFieldWrapper } from \"../Select/SelectFieldWrapper\";\nimport { Tree } from \"../Tree\";\nimport { useTreeSelectState } from \"./hooks/useTreeSelectState\";\nimport { TreeSelectTrigger } from \"./TreeSelectTrigger\";\nimport { SIZE_CONFIG, DROPDOWN_HEIGHT } from \"./constants\";\nimport type { TreeSelectProps } from \"./types\";\n\nconst TreeSelect = forwardRef<HTMLButtonElement, TreeSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n isDisabled,\n required,\n isOpen,\n handleOpenChange,\n currentValue,\n handleClear,\n selectedLabel,\n showClearButton,\n size,\n isSearchable,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n } = useTreeSelectState(props);\n const { suffixIcon, switcherIcon, autoExpandParent, className } = props;\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n className={className}\n >\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <TreeSelectTrigger\n ref={ref}\n currentValue={currentValue}\n error={error}\n handleClear={handleClear}\n isDisabled={isDisabled}\n placeholder={props.placeholder}\n selectedLabel={selectedLabel}\n showClearButton={showClearButton}\n size={size}\n suffixIcon={suffixIcon}\n />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n onOpenAutoFocus={e => {\n if (isSearchable) e.preventDefault();\n }}\n >\n {isSearchable && (\n <div className=\"border-b border-border px-2 py-1.5\">\n <input\n autoFocus\n type=\"text\"\n className={cn(\n \"w-full bg-transparent outline-none placeholder:text-muted-foreground\",\n SIZE_CONFIG[size].text\n )}\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={e => setSearchTerm(e.target.value)}\n />\n </div>\n )}\n {prunedTreeData.length > 0 ? (\n <div className=\"p-1\">\n <Tree\n autoExpandParent={autoExpandParent}\n expandedKeys={effectiveExpandedKeys}\n height={DROPDOWN_HEIGHT}\n switcherIcon={switcherIcon}\n treeData={prunedTreeData}\n onExpand={handleExpand}\n onSelect={handleSelect}\n />\n </div>\n ) : (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No results found.\n </div>\n )}\n </PopoverContent>\n </Popover>\n </SelectFieldWrapper>\n );\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport { TreeSelect };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeSelect-BwF2rY6f.js","sources":["../src/components/TreeSelect/utils/pruneTree.ts","../src/components/TreeSelect/utils/resolveFieldNames.ts","../src/components/TreeSelect/hooks/useTreeSelectValue.ts","../src/components/TreeSelect/hooks/useTreeSelectState.ts","../src/components/TreeSelect/constants.ts","../src/components/TreeSelect/TreeSelectTrigger.tsx","../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import type { TreeNodeData } from \"../../Tree/types\";\n\nexport const pruneTree = (\n nodes: TreeNodeData[],\n searchTerm: string\n): TreeNodeData[] => {\n if (!searchTerm.trim()) return nodes;\n\n const lower = searchTerm.toLowerCase();\n\n const prune = (items: TreeNodeData[]): TreeNodeData[] =>\n items.reduce<TreeNodeData[]>((acc, node) => {\n const titleStr = typeof node.title === \"string\" ? node.title : \"\";\n const nodeMatches = titleStr.toLowerCase().includes(lower);\n\n if (nodeMatches) {\n acc.push(node);\n } else {\n const prunedChildren = node.children ? prune(node.children) : [];\n if (prunedChildren.length > 0) {\n acc.push({ ...node, children: prunedChildren });\n }\n }\n\n return acc;\n }, []);\n\n return prune(nodes);\n};\n","import type { ReactNode } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\n\ninterface FieldNameMapping {\n label?: string;\n value?: string;\n}\n\nexport const resolveFieldNames = (\n nodes: TreeNodeData[],\n fieldNames: FieldNameMapping\n): TreeNodeData[] => {\n const labelKey = fieldNames.label ?? \"title\";\n const valueKey = fieldNames.value ?? \"key\";\n\n const remap = (items: TreeNodeData[]): TreeNodeData[] =>\n items.map(item => {\n const record = item as unknown as Record<string, unknown>;\n\n return {\n key: String(record[valueKey] ?? \"\"),\n title: record[labelKey] as ReactNode,\n disabled: record.disabled as boolean | undefined,\n children: Array.isArray(item.children)\n ? remap(item.children)\n : undefined,\n };\n });\n\n return remap(nodes);\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport { findNode } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { resolveFieldNames } from \"../utils/resolveFieldNames\";\n\nexport function useTreeSelectValue(props: TreeSelectProps) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n treeData: rawTreeData,\n fieldNames,\n isClearable = false,\n isDisabled = false,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n required = false,\n } = props;\n\n const id = useId();\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const treeData = useMemo(() => {\n if (!fieldNames) return rawTreeData;\n\n return resolveFieldNames(rawTreeData, fieldNames);\n }, [rawTreeData, fieldNames?.label, fieldNames?.value]);\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const currentValue = isControlled ? (valueProp ?? \"\") : internalValue;\n\n const applyValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const selectedLabel = useMemo(() => {\n if (!currentValue) return \"\";\n const node = findNode(currentValue, treeData);\n if (!node) return currentValue;\n\n return typeof node.title === \"string\" ? node.title : \"\";\n }, [currentValue, treeData]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n applyValue(\"\");\n },\n [applyValue]\n );\n\n const showClearButton = isClearable && !!currentValue && !isDisabled;\n\n return {\n id,\n errorId,\n helpTextId,\n label,\n error,\n helpText,\n required,\n isDisabled,\n size,\n treeData,\n currentValue,\n selectedLabel,\n applyValue,\n handleClear,\n showClearButton,\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\nimport { walkTree } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { pruneTree } from \"../utils/pruneTree\";\nimport { useTreeSelectValue } from \"./useTreeSelectValue\";\n\nexport function useTreeSelectState(props: TreeSelectProps) {\n const { isSearchable = false, defaultExpandedKeys } = props;\n const defaultExpandedKeysRef = useRef(defaultExpandedKeys);\n defaultExpandedKeysRef.current = defaultExpandedKeys;\n const value = useTreeSelectValue(props);\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [expandedKeys, setExpandedKeys] = useState<string[]>(\n defaultExpandedKeys ?? []\n );\n\n const prunedTreeData = useMemo(\n () =>\n searchTerm.trim()\n ? pruneTree(value.treeData, searchTerm)\n : value.treeData,\n [value.treeData, searchTerm]\n );\n\n const effectiveExpandedKeys = useMemo(() => {\n if (!searchTerm) return expandedKeys;\n\n const allKeys: string[] = [];\n walkTree(prunedTreeData, node => {\n if (node.children?.length) allKeys.push(node.key);\n });\n\n return allKeys;\n }, [searchTerm, prunedTreeData]);\n\n const handleSelect = useCallback(\n (keys: string[], info: { node: TreeNodeData }) => {\n if (value.isDisabled || info.node.disabled) return;\n value.applyValue(keys[0] ?? \"\");\n setIsOpen(false);\n setSearchTerm(\"\");\n },\n [value.applyValue, value.isDisabled]\n );\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (value.isDisabled) return;\n setIsOpen(open);\n if (!open) {\n setSearchTerm(\"\");\n setExpandedKeys(defaultExpandedKeysRef.current ?? []);\n }\n },\n [value.isDisabled]\n );\n\n const handleExpand = useCallback(\n (keys: string[]) => setExpandedKeys(keys),\n []\n );\n\n return {\n ...value,\n isSearchable,\n isOpen,\n handleOpenChange,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n };\n}\n","export const DROPDOWN_HEIGHT = 256;\n\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n { trigger: string; text: string }\n> = {\n small: {\n trigger: \"min-h-8 md:min-h-7 px-2 py-0.5\",\n text: \"text-base md:text-xs\",\n },\n medium: { trigger: \"min-h-8 px-2.5 py-1\", text: \"text-base md:text-sm\" },\n large: { trigger: \"min-h-10 px-2.5 py-1.5\", text: \"text-base md:text-sm\" },\n};\n","import { forwardRef, type ReactNode } from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { SIZE_CONFIG } from \"./constants\";\n\ninterface TreeSelectTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n size: \"small\" | \"medium\" | \"large\";\n currentValue: string;\n selectedLabel: string;\n placeholder?: string;\n isDisabled: boolean;\n error: string;\n showClearButton: boolean;\n handleClear: (e: React.MouseEvent) => void;\n suffixIcon?: ReactNode;\n}\n\nexport const TreeSelectTrigger = forwardRef<\n HTMLButtonElement,\n TreeSelectTriggerProps\n>(\n (\n {\n size,\n currentValue,\n selectedLabel,\n placeholder,\n isDisabled,\n error,\n showClearButton,\n handleClear,\n suffixIcon,\n className,\n ...rest\n },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...rest}\n className={cn(\n \"inline-flex w-full items-center gap-1 rounded-md border border-input bg-background outline-none\",\n \"hover:bg-accent focus:ring-1 focus:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n error && \"border-destructive\",\n SIZE_CONFIG[size].trigger,\n SIZE_CONFIG[size].text,\n className\n )}\n >\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n !currentValue && \"text-muted-foreground\"\n )}\n >\n {selectedLabel || placeholder || \"\"}\n </span>\n {showClearButton && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClear}\n >\n <X className=\"size-3.5\" />\n </span>\n )}\n {suffixIcon ?? <ChevronDown className=\"size-4 shrink-0 opacity-50\" />}\n </button>\n )\n);\n\nTreeSelectTrigger.displayName = \"TreeSelectTrigger\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { SelectFieldWrapper } from \"../Select/SelectFieldWrapper\";\nimport { Tree } from \"../Tree\";\nimport { useTreeSelectState } from \"./hooks/useTreeSelectState\";\nimport { TreeSelectTrigger } from \"./TreeSelectTrigger\";\nimport { SIZE_CONFIG, DROPDOWN_HEIGHT } from \"./constants\";\nimport type { TreeSelectProps } from \"./types\";\n\nconst TreeSelect = forwardRef<HTMLButtonElement, TreeSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n isDisabled,\n required,\n isOpen,\n handleOpenChange,\n currentValue,\n handleClear,\n selectedLabel,\n showClearButton,\n size,\n isSearchable,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n } = useTreeSelectState(props);\n const { suffixIcon, switcherIcon, autoExpandParent, className } = props;\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n className={className}\n >\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <TreeSelectTrigger\n ref={ref}\n currentValue={currentValue}\n error={error}\n handleClear={handleClear}\n isDisabled={isDisabled}\n placeholder={props.placeholder}\n selectedLabel={selectedLabel}\n showClearButton={showClearButton}\n size={size}\n suffixIcon={suffixIcon}\n />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n onOpenAutoFocus={e => {\n if (isSearchable) e.preventDefault();\n }}\n >\n {isSearchable && (\n <div className=\"border-b border-border px-2 py-1.5\">\n <input\n autoFocus\n type=\"text\"\n className={cn(\n \"w-full bg-transparent outline-none placeholder:text-muted-foreground\",\n SIZE_CONFIG[size].text\n )}\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={e => setSearchTerm(e.target.value)}\n />\n </div>\n )}\n {prunedTreeData.length > 0 ? (\n <div className=\"p-1\">\n <Tree\n autoExpandParent={autoExpandParent}\n expandedKeys={effectiveExpandedKeys}\n height={DROPDOWN_HEIGHT}\n switcherIcon={switcherIcon}\n treeData={prunedTreeData}\n onExpand={handleExpand}\n onSelect={handleSelect}\n />\n </div>\n ) : (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No results found.\n </div>\n )}\n </PopoverContent>\n </Popover>\n </SelectFieldWrapper>\n );\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport { TreeSelect };\n"],"names":[],"mappings":"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"}
|
|
@@ -388,7 +388,7 @@ const ColorPicker = React.forwardRef(
|
|
|
388
388
|
"data-testid": "colorpicker-editable-input-textbox",
|
|
389
389
|
onChange: onColorInputChange,
|
|
390
390
|
onBlur,
|
|
391
|
-
className: "h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-
|
|
391
|
+
className: "h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-base outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15 md:text-sm"
|
|
392
392
|
}
|
|
393
393
|
)
|
|
394
394
|
}
|
|
@@ -436,4 +436,4 @@ const ColorPicker = React.forwardRef(
|
|
|
436
436
|
ColorPicker.displayName = "ColorPicker";
|
|
437
437
|
|
|
438
438
|
exports.ColorPicker = ColorPicker;
|
|
439
|
-
//# sourceMappingURL=ColorPicker-
|
|
439
|
+
//# sourceMappingURL=ColorPicker-rhCnblTv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker-Co1Gffsu.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pipette.js","../../src/components/ColorPicker/hooks/useEyeDropper.ts","../../src/components/ColorPicker/constants.ts","../../src/components/ColorPicker/hooks/useRecentlyUsedColors.ts","../../src/components/ColorPicker/utils.ts","../../src/components/ColorPicker/Palette.tsx","../../src/components/ColorPicker/Target.tsx","../../src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12\",\n key: \"1y3wsu\"\n }\n ],\n [\n \"path\",\n {\n d: \"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z\",\n key: \"110lr1\"\n }\n ],\n [\"path\", { d: \"m2 22 .414-.414\", key: \"jhxm08\" }]\n];\nconst Pipette = createLucideIcon(\"pipette\", __iconNode);\n\nexport { __iconNode, Pipette as default };\n//# sourceMappingURL=pipette.js.map\n","import { useCallback } from \"react\";\n\ninterface EyeDropperResult {\n sRGBHex: string;\n}\n\ndeclare global {\n interface Window {\n EyeDropper?: new () => { open: () => Promise<EyeDropperResult> };\n }\n}\n\nconst isSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\n\nexport const useEyeDropper = () => {\n const open = useCallback(async (): Promise<string> => {\n if (!window.EyeDropper) throw new Error(\"EyeDropper API not supported\");\n\n const dropper = new window.EyeDropper();\n const result = await dropper.open();\n\n return result.sRGBHex;\n }, []);\n\n return { isSupported, open };\n};\n","export const DEFAULT_PALETTE_COLORS = [\n { hex: \"#FFFFFF\" },\n { hex: \"#D6D6D6\" },\n { hex: \"#0A0E13\" },\n { hex: \"#FECE1E\" },\n { hex: \"#F32E48\" },\n { hex: \"#02C39A\" },\n { hex: \"#2A79C4\" },\n { hex: \"#B3E5FC\" },\n { hex: \"#C3C6F9\" },\n { hex: \"#8064CE\" },\n { hex: \"#FE861E\" },\n { hex: \"#FF7DC9\" },\n { hex: \"#028090\" },\n { hex: \"#095482\" },\n];\n\nexport const RECENTLY_USED_STORAGE_KEY = \"recently-used-colors\";\n\nexport const TARGET_SIZES = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n} as const;\n\nexport const PICKER_HEIGHT: Record<string, string> = {\n small: \"100px\",\n medium: \"120px\",\n large: \"140px\",\n};\n","import { useSyncExternalStore } from \"react\";\n\nimport { RECENTLY_USED_STORAGE_KEY } from \"../constants\";\n\ninterface ColorValue {\n hex: string;\n rgb: string | { r: number; g: number; b: number; a?: number };\n}\n\nconst getFromStorage = (key: string, fallback: ColorValue[]): ColorValue[] => {\n try {\n const stored = localStorage.getItem(key);\n\n return stored ? JSON.parse(stored) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst setToStorage = (key: string, value: ColorValue[]) => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Silently fail if storage is unavailable\n }\n};\n\nconst createSyncedStore = (storageKey: string) => {\n const listeners = new Set<() => void>();\n\n const store = {\n value: getFromStorage(storageKey, []),\n getSnapshot: () => store.value,\n getServerSnapshot: () => [] as ColorValue[],\n setValue: (newValue: ColorValue[]) => {\n store.value = newValue;\n setToStorage(storageKey, newValue);\n listeners.forEach(listener => listener());\n },\n subscribe: (callback: () => void) => {\n listeners.add(callback);\n\n const storageEventHandler = (event: StorageEvent) => {\n if (event.key !== storageKey) return;\n store.value = getFromStorage(storageKey, []);\n listeners.forEach(listener => listener());\n };\n\n if (listeners.size === 1) {\n window.addEventListener(\"storage\", storageEventHandler);\n }\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) {\n window.removeEventListener(\"storage\", storageEventHandler);\n }\n };\n },\n };\n\n return store;\n};\n\nconst store = createSyncedStore(RECENTLY_USED_STORAGE_KEY);\n\nexport const useRecentlyUsedColors = (): [\n ColorValue[],\n (value: ColorValue[]) => void,\n] => [\n useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n ),\n store.setValue,\n];\n","/**\n * Validates a hex color string (3, 4, 6, or 8 digits with optional #).\n */\nexport const isValidHex = (hex: string): boolean =>\n /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(hex);\n\n/**\n * Parses a hex color string into RGBA components.\n * Returns { r: 0, g: 0, b: 0, a: 1 } for invalid inputs.\n */\nexport const hexToRgb = (\n hex: string\n): { r: number; g: number; b: number; a: number } => {\n const raw = hex.replace(/^#/, \"\");\n\n if (\n !/^([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(raw)\n ) {\n return { r: 0, g: 0, b: 0, a: 1 };\n }\n\n let r: number,\n g: number,\n b: number,\n a = 255;\n if (raw.length === 3 || raw.length === 4) {\n r = parseInt(raw[0] + raw[0], 16);\n g = parseInt(raw[1] + raw[1], 16);\n b = parseInt(raw[2] + raw[2], 16);\n if (raw.length === 4) a = parseInt(raw[3] + raw[3], 16);\n } else {\n r = parseInt(raw.slice(0, 2), 16);\n g = parseInt(raw.slice(2, 4), 16);\n b = parseInt(raw.slice(4, 6), 16);\n if (raw.length === 8) a = parseInt(raw.slice(6, 8), 16);\n }\n\n return { r, g, b, a: Math.round((a / 255) * 100) / 100 };\n};\n\n/**\n * Converts a hex color to an 8-digit hex string (#RRGGBBAA).\n */\nexport const hexToHex8 = (hex: string): string => {\n const { r, g, b, a } = hexToRgb(hex);\n const alpha = Math.round(a * 255);\n\n return `#${[r, g, b, alpha].map(channel => channel.toString(16).padStart(2, \"0\")).join(\"\")}`;\n};\n\n/**\n * Converts a color value to a normalized { hex, rgb } object.\n * Handles transparency and validity checks.\n */\nexport const getColor = (\n colorValue: string,\n showTransparencyControl: boolean\n): { hex: string; rgb: { r: number; g: number; b: number; a: number } } => {\n if (!isValidHex(colorValue)) {\n return { hex: colorValue, rgb: { r: 0, g: 0, b: 0, a: 1 } };\n }\n\n const rgb = hexToRgb(colorValue);\n\n if (rgb.a === 0) {\n return { hex: colorValue, rgb };\n }\n\n const hex = showTransparencyControl\n ? hexToHex8(colorValue)\n : `#${colorValue.replace(/^#/, \"\").slice(0, 6)}`;\n\n return { hex, rgb: hexToRgb(hex) };\n};\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { isValidHex } from \"./utils\";\nimport { DEFAULT_PALETTE_COLORS } from \"./constants\";\nimport type { PaletteColor } from \"./types\";\n\nexport interface PaletteProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n /** Currently selected color. */\n color?: string;\n /** List of colors to render. */\n colorList?: PaletteColor[];\n /** Callback when a color swatch is clicked. */\n onChange?: (color: string) => void;\n}\n\nconst Palette = forwardRef<HTMLDivElement, PaletteProps>(\n (\n {\n color,\n colorList = DEFAULT_PALETTE_COLORS,\n onChange,\n className,\n ...otherProps\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-row flex-wrap items-start justify-start gap-1\",\n className\n )}\n {...otherProps}\n >\n {colorList.map(item => {\n const rgbValue =\n \"rgb\" in item && typeof item.rgb === \"string\" ? item.rgb : undefined;\n const value = item.hex ?? rgbValue ?? \"\";\n const isActive =\n !!color && !!value && color.toLowerCase() === value.toLowerCase();\n\n return (\n <button\n type=\"button\"\n key={value}\n data-testid=\"color-palette-item\"\n className={cn(\n \"size-6 rounded-[5px] border cursor-pointer overflow-hidden transition-colors\",\n isActive\n ? \"border-muted-foreground\"\n : \"border-border hover:border-muted-foreground/50\"\n )}\n onClick={() => onChange?.(value)}\n >\n <span\n className={cn(\n \"block size-full\",\n isValidHex(value)\n ? \"\"\n : \"bg-[repeating-conic-gradient(#ccc_0_25%,transparent_0_50%)] bg-[length:8px_8px]\"\n )}\n style={isValidHex(value) ? { backgroundColor: value } : undefined}\n />\n </button>\n );\n })}\n </div>\n )\n);\n\nPalette.displayName = \"ColorPicker.Palette\";\n\nexport { Palette };\n","import React, { forwardRef } from \"react\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst targetVariants = cva(\n \"inline-flex items-center justify-between rounded-md border border-input bg-background transition-colors hover:border-muted-foreground focus-visible:outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15 cursor-pointer\",\n {\n variants: {\n size: {\n small: \"h-7 p-0.5 gap-2\",\n medium: \"h-8 p-1 gap-2\",\n large: \"h-10 p-1.5 gap-3\",\n },\n },\n defaultVariants: {\n size: \"large\",\n },\n }\n);\n\nexport interface TargetProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\n VariantProps<typeof targetVariants> {\n /** Show hex code text beside the color swatch. */\n showHexValue?: boolean;\n /** The original color prop value. */\n color?: string;\n /** The resolved color value to display. */\n colorValue?: string;\n}\n\nconst Target = forwardRef<HTMLButtonElement, TargetProps>(\n (\n { size = \"large\", showHexValue, color, colorValue, className, ...props },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n data-testid=\"color-picker-target\"\n className={cn(targetVariants({ size }), className)}\n {...props}\n >\n {showHexValue && (\n <span className=\"text-sm font-medium text-foreground min-w-[4.5rem] ps-1\">\n {color}\n </span>\n )}\n <span className=\"inline-flex items-center gap-2\">\n <span\n className=\"block size-5 rounded-md border border-border\"\n style={{ backgroundColor: colorValue }}\n />\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n </span>\n </button>\n )\n);\n\nTarget.displayName = \"ColorPicker.Target\";\n\nexport { Target };\n","import { forwardRef, useState, useRef } from \"react\";\n\nimport { Pipette } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n HexColorPicker,\n HexColorInput,\n HexAlphaColorPicker,\n} from \"react-colorful\";\nimport { Button } from \"src/primitives/Button\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { useEyeDropper } from \"./hooks/useEyeDropper\";\nimport { useRecentlyUsedColors } from \"./hooks/useRecentlyUsedColors\";\nimport { Palette } from \"./Palette\";\nimport { Target } from \"./Target\";\nimport { PICKER_HEIGHT } from \"./constants\";\nimport type { ColorPickerProps } from \"./types\";\nimport { getColor } from \"./utils\";\n\nconst ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n color = \"\",\n size = \"large\",\n onChange,\n dropdownProps,\n showEyeDropper = true,\n showHexValue = false,\n showTransparencyControl = false,\n showPicker = true,\n showHexPicker = true,\n colorPalette,\n showRecentlyUsedColors = showPicker,\n className,\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [colorInternal, setColorInternal] = useState(color);\n const [isColorSelected, setIsColorSelected] = useState(false);\n const [open, setOpen] = useState(false);\n const hexColorInputValue = useRef(\"\");\n const { isSupported: eyeDropperSupported, open: openEyeDropper } =\n useEyeDropper();\n const [recentlyUsedColors, setRecentlyUsedColors] = useRecentlyUsedColors();\n\n const PickerComponent = showTransparencyControl\n ? HexAlphaColorPicker\n : HexColorPicker;\n\n const colorValue = color ?? colorInternal ?? \"\";\n\n const onColorChange = (value: string) => {\n setIsColorSelected(true);\n\n if (onChange) {\n onChange(getColor(value, showTransparencyControl));\n } else {\n setColorInternal(value);\n }\n };\n\n const onColorInputChange = (hex: string) => {\n hexColorInputValue.current = hex;\n const expectedLength = showTransparencyControl ? 9 : 7;\n if (hex.length !== expectedLength) return;\n\n onColorChange(hex);\n hexColorInputValue.current = \"\";\n };\n\n const onBlur = () => {\n if (!hexColorInputValue.current) return;\n\n onColorChange(hexColorInputValue.current);\n hexColorInputValue.current = \"\";\n };\n\n const pickColor = async () => {\n try {\n const hex = await openEyeDropper();\n onColorChange(hex);\n } catch {\n // User cancelled or API unavailable\n }\n };\n\n const onOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && showRecentlyUsedColors && isColorSelected) {\n const newColor = getColor(colorValue, showTransparencyControl);\n const filtered = recentlyUsedColors.filter(\n ({ hex }) => hex !== newColor.hex\n );\n const updated = [newColor, ...filtered];\n if (updated.length > 14) updated.pop();\n\n setRecentlyUsedColors(updated);\n setIsColorSelected(false);\n }\n\n setOpen(nextOpen);\n };\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Target\n color={color}\n colorValue={colorValue}\n showHexValue={showHexValue}\n size={size}\n />\n </PopoverTrigger>\n <PopoverContent\n ref={ref}\n align=\"start\"\n side=\"bottom\"\n className={cn(\"w-auto p-3\", className)}\n {...dropdownProps}\n >\n <div className=\"flex flex-col gap-3 w-56\">\n {showPicker && (\n <>\n {showHexPicker && (\n <div\n data-testid=\"neeto-color-picker-section\"\n style={{\n [\"--react-colorful-height\" as string]:\n PICKER_HEIGHT[size] ?? \"140px\",\n }}\n >\n <PickerComponent\n color={colorValue}\n onChange={onColorChange}\n style={{\n width: \"100%\",\n height: PICKER_HEIGHT[size] ?? \"140px\",\n }}\n />\n </div>\n )}\n <div className=\"flex items-center justify-center gap-2\">\n {showEyeDropper && eyeDropperSupported && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={pickColor}\n aria-label={t(\n \"neetoatoms.colorPicker.pickColor\",\n \"Pick color from screen\"\n )}\n >\n <Pipette className=\"size-4\" />\n </Button>\n )}\n <div\n className=\"flex-1\"\n data-testid=\"colorpicker-editable-input\"\n >\n <HexColorInput\n prefixed\n alpha={!!showTransparencyControl}\n color={colorValue}\n data-testid=\"colorpicker-editable-input-textbox\"\n onChange={onColorInputChange}\n onBlur={onBlur}\n className=\"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-sm outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15\"\n />\n </div>\n </div>\n </>\n )}\n <div\n data-testid=\"color-palette\"\n className={cn(showPicker && \"border-t border-border pt-3\")}\n >\n <Palette\n color={color}\n colorList={colorPalette}\n onChange={onColorChange}\n />\n </div>\n {showRecentlyUsedColors && recentlyUsedColors.length > 0 && (\n <div\n className=\"border-t border-border pt-3\"\n data-testid=\"color-palette-recently-used\"\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {t(\"neetoatoms.colorPicker.recentlyUsed\", \"Recently used\")}\n </p>\n <Palette\n colorList={recentlyUsedColors}\n onChange={onColorChange}\n />\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\n"],"names":["createLucideIcon","useCallback","store","useSyncExternalStore","forwardRef","jsx","cn","cva","jsxs","ChevronDown","useTranslation","useState","useRef","HexAlphaColorPicker","HexColorPicker","Popover","PopoverTrigger","PopoverContent","Fragment","Button","HexColorInput"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ColorPicker-rhCnblTv.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pipette.js","../../src/components/ColorPicker/hooks/useEyeDropper.ts","../../src/components/ColorPicker/constants.ts","../../src/components/ColorPicker/hooks/useRecentlyUsedColors.ts","../../src/components/ColorPicker/utils.ts","../../src/components/ColorPicker/Palette.tsx","../../src/components/ColorPicker/Target.tsx","../../src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12\",\n key: \"1y3wsu\"\n }\n ],\n [\n \"path\",\n {\n d: \"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z\",\n key: \"110lr1\"\n }\n ],\n [\"path\", { d: \"m2 22 .414-.414\", key: \"jhxm08\" }]\n];\nconst Pipette = createLucideIcon(\"pipette\", __iconNode);\n\nexport { __iconNode, Pipette as default };\n//# sourceMappingURL=pipette.js.map\n","import { useCallback } from \"react\";\n\ninterface EyeDropperResult {\n sRGBHex: string;\n}\n\ndeclare global {\n interface Window {\n EyeDropper?: new () => { open: () => Promise<EyeDropperResult> };\n }\n}\n\nconst isSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\n\nexport const useEyeDropper = () => {\n const open = useCallback(async (): Promise<string> => {\n if (!window.EyeDropper) throw new Error(\"EyeDropper API not supported\");\n\n const dropper = new window.EyeDropper();\n const result = await dropper.open();\n\n return result.sRGBHex;\n }, []);\n\n return { isSupported, open };\n};\n","export const DEFAULT_PALETTE_COLORS = [\n { hex: \"#FFFFFF\" },\n { hex: \"#D6D6D6\" },\n { hex: \"#0A0E13\" },\n { hex: \"#FECE1E\" },\n { hex: \"#F32E48\" },\n { hex: \"#02C39A\" },\n { hex: \"#2A79C4\" },\n { hex: \"#B3E5FC\" },\n { hex: \"#C3C6F9\" },\n { hex: \"#8064CE\" },\n { hex: \"#FE861E\" },\n { hex: \"#FF7DC9\" },\n { hex: \"#028090\" },\n { hex: \"#095482\" },\n];\n\nexport const RECENTLY_USED_STORAGE_KEY = \"recently-used-colors\";\n\nexport const TARGET_SIZES = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n} as const;\n\nexport const PICKER_HEIGHT: Record<string, string> = {\n small: \"100px\",\n medium: \"120px\",\n large: \"140px\",\n};\n","import { useSyncExternalStore } from \"react\";\n\nimport { RECENTLY_USED_STORAGE_KEY } from \"../constants\";\n\ninterface ColorValue {\n hex: string;\n rgb: string | { r: number; g: number; b: number; a?: number };\n}\n\nconst getFromStorage = (key: string, fallback: ColorValue[]): ColorValue[] => {\n try {\n const stored = localStorage.getItem(key);\n\n return stored ? JSON.parse(stored) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst setToStorage = (key: string, value: ColorValue[]) => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Silently fail if storage is unavailable\n }\n};\n\nconst createSyncedStore = (storageKey: string) => {\n const listeners = new Set<() => void>();\n\n const store = {\n value: getFromStorage(storageKey, []),\n getSnapshot: () => store.value,\n getServerSnapshot: () => [] as ColorValue[],\n setValue: (newValue: ColorValue[]) => {\n store.value = newValue;\n setToStorage(storageKey, newValue);\n listeners.forEach(listener => listener());\n },\n subscribe: (callback: () => void) => {\n listeners.add(callback);\n\n const storageEventHandler = (event: StorageEvent) => {\n if (event.key !== storageKey) return;\n store.value = getFromStorage(storageKey, []);\n listeners.forEach(listener => listener());\n };\n\n if (listeners.size === 1) {\n window.addEventListener(\"storage\", storageEventHandler);\n }\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) {\n window.removeEventListener(\"storage\", storageEventHandler);\n }\n };\n },\n };\n\n return store;\n};\n\nconst store = createSyncedStore(RECENTLY_USED_STORAGE_KEY);\n\nexport const useRecentlyUsedColors = (): [\n ColorValue[],\n (value: ColorValue[]) => void,\n] => [\n useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n ),\n store.setValue,\n];\n","/**\n * Validates a hex color string (3, 4, 6, or 8 digits with optional #).\n */\nexport const isValidHex = (hex: string): boolean =>\n /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(hex);\n\n/**\n * Parses a hex color string into RGBA components.\n * Returns { r: 0, g: 0, b: 0, a: 1 } for invalid inputs.\n */\nexport const hexToRgb = (\n hex: string\n): { r: number; g: number; b: number; a: number } => {\n const raw = hex.replace(/^#/, \"\");\n\n if (\n !/^([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(raw)\n ) {\n return { r: 0, g: 0, b: 0, a: 1 };\n }\n\n let r: number,\n g: number,\n b: number,\n a = 255;\n if (raw.length === 3 || raw.length === 4) {\n r = parseInt(raw[0] + raw[0], 16);\n g = parseInt(raw[1] + raw[1], 16);\n b = parseInt(raw[2] + raw[2], 16);\n if (raw.length === 4) a = parseInt(raw[3] + raw[3], 16);\n } else {\n r = parseInt(raw.slice(0, 2), 16);\n g = parseInt(raw.slice(2, 4), 16);\n b = parseInt(raw.slice(4, 6), 16);\n if (raw.length === 8) a = parseInt(raw.slice(6, 8), 16);\n }\n\n return { r, g, b, a: Math.round((a / 255) * 100) / 100 };\n};\n\n/**\n * Converts a hex color to an 8-digit hex string (#RRGGBBAA).\n */\nexport const hexToHex8 = (hex: string): string => {\n const { r, g, b, a } = hexToRgb(hex);\n const alpha = Math.round(a * 255);\n\n return `#${[r, g, b, alpha].map(channel => channel.toString(16).padStart(2, \"0\")).join(\"\")}`;\n};\n\n/**\n * Converts a color value to a normalized { hex, rgb } object.\n * Handles transparency and validity checks.\n */\nexport const getColor = (\n colorValue: string,\n showTransparencyControl: boolean\n): { hex: string; rgb: { r: number; g: number; b: number; a: number } } => {\n if (!isValidHex(colorValue)) {\n return { hex: colorValue, rgb: { r: 0, g: 0, b: 0, a: 1 } };\n }\n\n const rgb = hexToRgb(colorValue);\n\n if (rgb.a === 0) {\n return { hex: colorValue, rgb };\n }\n\n const hex = showTransparencyControl\n ? hexToHex8(colorValue)\n : `#${colorValue.replace(/^#/, \"\").slice(0, 6)}`;\n\n return { hex, rgb: hexToRgb(hex) };\n};\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { isValidHex } from \"./utils\";\nimport { DEFAULT_PALETTE_COLORS } from \"./constants\";\nimport type { PaletteColor } from \"./types\";\n\nexport interface PaletteProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n /** Currently selected color. */\n color?: string;\n /** List of colors to render. */\n colorList?: PaletteColor[];\n /** Callback when a color swatch is clicked. */\n onChange?: (color: string) => void;\n}\n\nconst Palette = forwardRef<HTMLDivElement, PaletteProps>(\n (\n {\n color,\n colorList = DEFAULT_PALETTE_COLORS,\n onChange,\n className,\n ...otherProps\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-row flex-wrap items-start justify-start gap-1\",\n className\n )}\n {...otherProps}\n >\n {colorList.map(item => {\n const rgbValue =\n \"rgb\" in item && typeof item.rgb === \"string\" ? item.rgb : undefined;\n const value = item.hex ?? rgbValue ?? \"\";\n const isActive =\n !!color && !!value && color.toLowerCase() === value.toLowerCase();\n\n return (\n <button\n type=\"button\"\n key={value}\n data-testid=\"color-palette-item\"\n className={cn(\n \"size-6 rounded-[5px] border cursor-pointer overflow-hidden transition-colors\",\n isActive\n ? \"border-muted-foreground\"\n : \"border-border hover:border-muted-foreground/50\"\n )}\n onClick={() => onChange?.(value)}\n >\n <span\n className={cn(\n \"block size-full\",\n isValidHex(value)\n ? \"\"\n : \"bg-[repeating-conic-gradient(#ccc_0_25%,transparent_0_50%)] bg-[length:8px_8px]\"\n )}\n style={isValidHex(value) ? { backgroundColor: value } : undefined}\n />\n </button>\n );\n })}\n </div>\n )\n);\n\nPalette.displayName = \"ColorPicker.Palette\";\n\nexport { Palette };\n","import React, { forwardRef } from \"react\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst targetVariants = cva(\n \"inline-flex items-center justify-between rounded-md border border-input bg-background transition-colors hover:border-muted-foreground focus-visible:outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15 cursor-pointer\",\n {\n variants: {\n size: {\n small: \"h-7 p-0.5 gap-2\",\n medium: \"h-8 p-1 gap-2\",\n large: \"h-10 p-1.5 gap-3\",\n },\n },\n defaultVariants: {\n size: \"large\",\n },\n }\n);\n\nexport interface TargetProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\n VariantProps<typeof targetVariants> {\n /** Show hex code text beside the color swatch. */\n showHexValue?: boolean;\n /** The original color prop value. */\n color?: string;\n /** The resolved color value to display. */\n colorValue?: string;\n}\n\nconst Target = forwardRef<HTMLButtonElement, TargetProps>(\n (\n { size = \"large\", showHexValue, color, colorValue, className, ...props },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n data-testid=\"color-picker-target\"\n className={cn(targetVariants({ size }), className)}\n {...props}\n >\n {showHexValue && (\n <span className=\"text-sm font-medium text-foreground min-w-[4.5rem] ps-1\">\n {color}\n </span>\n )}\n <span className=\"inline-flex items-center gap-2\">\n <span\n className=\"block size-5 rounded-md border border-border\"\n style={{ backgroundColor: colorValue }}\n />\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n </span>\n </button>\n )\n);\n\nTarget.displayName = \"ColorPicker.Target\";\n\nexport { Target };\n","import { forwardRef, useState, useRef } from \"react\";\n\nimport { Pipette } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n HexColorPicker,\n HexColorInput,\n HexAlphaColorPicker,\n} from \"react-colorful\";\nimport { Button } from \"src/primitives/Button\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { useEyeDropper } from \"./hooks/useEyeDropper\";\nimport { useRecentlyUsedColors } from \"./hooks/useRecentlyUsedColors\";\nimport { Palette } from \"./Palette\";\nimport { Target } from \"./Target\";\nimport { PICKER_HEIGHT } from \"./constants\";\nimport type { ColorPickerProps } from \"./types\";\nimport { getColor } from \"./utils\";\n\nconst ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n color = \"\",\n size = \"large\",\n onChange,\n dropdownProps,\n showEyeDropper = true,\n showHexValue = false,\n showTransparencyControl = false,\n showPicker = true,\n showHexPicker = true,\n colorPalette,\n showRecentlyUsedColors = showPicker,\n className,\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [colorInternal, setColorInternal] = useState(color);\n const [isColorSelected, setIsColorSelected] = useState(false);\n const [open, setOpen] = useState(false);\n const hexColorInputValue = useRef(\"\");\n const { isSupported: eyeDropperSupported, open: openEyeDropper } =\n useEyeDropper();\n const [recentlyUsedColors, setRecentlyUsedColors] = useRecentlyUsedColors();\n\n const PickerComponent = showTransparencyControl\n ? HexAlphaColorPicker\n : HexColorPicker;\n\n const colorValue = color ?? colorInternal ?? \"\";\n\n const onColorChange = (value: string) => {\n setIsColorSelected(true);\n\n if (onChange) {\n onChange(getColor(value, showTransparencyControl));\n } else {\n setColorInternal(value);\n }\n };\n\n const onColorInputChange = (hex: string) => {\n hexColorInputValue.current = hex;\n const expectedLength = showTransparencyControl ? 9 : 7;\n if (hex.length !== expectedLength) return;\n\n onColorChange(hex);\n hexColorInputValue.current = \"\";\n };\n\n const onBlur = () => {\n if (!hexColorInputValue.current) return;\n\n onColorChange(hexColorInputValue.current);\n hexColorInputValue.current = \"\";\n };\n\n const pickColor = async () => {\n try {\n const hex = await openEyeDropper();\n onColorChange(hex);\n } catch {\n // User cancelled or API unavailable\n }\n };\n\n const onOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && showRecentlyUsedColors && isColorSelected) {\n const newColor = getColor(colorValue, showTransparencyControl);\n const filtered = recentlyUsedColors.filter(\n ({ hex }) => hex !== newColor.hex\n );\n const updated = [newColor, ...filtered];\n if (updated.length > 14) updated.pop();\n\n setRecentlyUsedColors(updated);\n setIsColorSelected(false);\n }\n\n setOpen(nextOpen);\n };\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Target\n color={color}\n colorValue={colorValue}\n showHexValue={showHexValue}\n size={size}\n />\n </PopoverTrigger>\n <PopoverContent\n ref={ref}\n align=\"start\"\n side=\"bottom\"\n className={cn(\"w-auto p-3\", className)}\n {...dropdownProps}\n >\n <div className=\"flex flex-col gap-3 w-56\">\n {showPicker && (\n <>\n {showHexPicker && (\n <div\n data-testid=\"neeto-color-picker-section\"\n style={{\n [\"--react-colorful-height\" as string]:\n PICKER_HEIGHT[size] ?? \"140px\",\n }}\n >\n <PickerComponent\n color={colorValue}\n onChange={onColorChange}\n style={{\n width: \"100%\",\n height: PICKER_HEIGHT[size] ?? \"140px\",\n }}\n />\n </div>\n )}\n <div className=\"flex items-center justify-center gap-2\">\n {showEyeDropper && eyeDropperSupported && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={pickColor}\n aria-label={t(\n \"neetoatoms.colorPicker.pickColor\",\n \"Pick color from screen\"\n )}\n >\n <Pipette className=\"size-4\" />\n </Button>\n )}\n <div\n className=\"flex-1\"\n data-testid=\"colorpicker-editable-input\"\n >\n <HexColorInput\n prefixed\n alpha={!!showTransparencyControl}\n color={colorValue}\n data-testid=\"colorpicker-editable-input-textbox\"\n onChange={onColorInputChange}\n onBlur={onBlur}\n className=\"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-base outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15 md:text-sm\"\n />\n </div>\n </div>\n </>\n )}\n <div\n data-testid=\"color-palette\"\n className={cn(showPicker && \"border-t border-border pt-3\")}\n >\n <Palette\n color={color}\n colorList={colorPalette}\n onChange={onColorChange}\n />\n </div>\n {showRecentlyUsedColors && recentlyUsedColors.length > 0 && (\n <div\n className=\"border-t border-border pt-3\"\n data-testid=\"color-palette-recently-used\"\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {t(\"neetoatoms.colorPicker.recentlyUsed\", \"Recently used\")}\n </p>\n <Palette\n colorList={recentlyUsedColors}\n onChange={onColorChange}\n />\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\n"],"names":["createLucideIcon","useCallback","store","useSyncExternalStore","forwardRef","jsx","cn","cva","jsxs","ChevronDown","useTranslation","useState","useRef","HexAlphaColorPicker","HexColorPicker","Popover","PopoverTrigger","PopoverContent","Fragment","Button","HexColorInput"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -3256,11 +3256,10 @@ const getResizeColumnStyle = ({
|
|
|
3256
3256
|
pinnedStart,
|
|
3257
3257
|
pinnedEnd
|
|
3258
3258
|
}) => ({
|
|
3259
|
-
width:
|
|
3260
|
-
...enableResize
|
|
3259
|
+
width: isLastDataCol ? void 0 : size,
|
|
3260
|
+
...enableResize ? {
|
|
3261
3261
|
minWidth: size,
|
|
3262
|
-
|
|
3263
|
-
overflow: "hidden"
|
|
3262
|
+
...!isSelectionCol && !isLastDataCol ? { maxWidth: size } : {}
|
|
3264
3263
|
} : {},
|
|
3265
3264
|
...pinned === "left" ? { left: pinnedStart } : {},
|
|
3266
3265
|
...pinned === "right" ? { right: pinnedEnd } : {}
|
|
@@ -4224,6 +4223,9 @@ const DataTable = ({
|
|
|
4224
4223
|
onSortingChange([{ id: columnId, desc }]);
|
|
4225
4224
|
}
|
|
4226
4225
|
};
|
|
4226
|
+
const leafColumns = table.getVisibleLeafColumns();
|
|
4227
|
+
const lastLeftPinnedId = leafColumns.filter((col) => col.getIsPinned() === "left").at(-1)?.id;
|
|
4228
|
+
const firstRightPinnedId = leafColumns.filter((col) => col.getIsPinned() === "right").at(0)?.id;
|
|
4227
4229
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("relative flex min-h-0 w-full flex-col", className), children: [
|
|
4228
4230
|
loading && /* @__PURE__ */ jsxRuntime.jsx(LoadingOverlay, {}),
|
|
4229
4231
|
(showSelectAllCallout || showAllSelectedCallout) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4265,8 +4267,8 @@ const DataTable = ({
|
|
|
4265
4267
|
header.column.getCanSort() && "cursor-pointer select-none",
|
|
4266
4268
|
isSelectionCol && "!pe-2",
|
|
4267
4269
|
isPinned && "sticky z-10 bg-muted",
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
+
header.column.id === lastLeftPinnedId && "after:pointer-events-none after:absolute after:inset-y-0 after:-right-2 after:w-2 after:bg-gradient-to-r after:from-black/6 after:to-transparent after:opacity-0 after:transition-opacity after:duration-200 after:content-[''] group-data-[scrolled-start]/scroll:after:opacity-100 dark:after:from-white/6",
|
|
4271
|
+
header.column.id === firstRightPinnedId && "before:pointer-events-none before:absolute before:inset-y-0 before:-left-2 before:w-2 before:bg-gradient-to-l before:from-black/6 before:to-transparent before:opacity-0 before:transition-opacity before:duration-200 before:content-[''] group-data-[scrolled-end]/scroll:before:opacity-100 dark:before:from-white/6"
|
|
4270
4272
|
),
|
|
4271
4273
|
style: getResizeColumnStyle({
|
|
4272
4274
|
size: header.getSize(),
|
|
@@ -4338,8 +4340,8 @@ const DataTable = ({
|
|
|
4338
4340
|
className: utils.cn(
|
|
4339
4341
|
isSelCell && "!pe-2",
|
|
4340
4342
|
isPinned && "sticky z-10 bg-background group-hover:bg-muted/50 group-data-[state=selected]:bg-info",
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
+
cell.column.id === lastLeftPinnedId && "after:pointer-events-none after:absolute after:inset-y-0 after:-right-2 after:w-2 after:bg-gradient-to-r after:from-black/6 after:to-transparent after:opacity-0 after:transition-opacity after:duration-200 after:content-[''] group-data-[scrolled-start]/scroll:after:opacity-100 dark:after:from-white/6",
|
|
4344
|
+
cell.column.id === firstRightPinnedId && "before:pointer-events-none before:absolute before:inset-y-0 before:-left-2 before:w-2 before:bg-gradient-to-l before:from-black/6 before:to-transparent before:opacity-0 before:transition-opacity before:duration-200 before:content-[''] group-data-[scrolled-end]/scroll:before:opacity-100 dark:before:from-white/6"
|
|
4343
4345
|
),
|
|
4344
4346
|
style: getResizeColumnStyle({
|
|
4345
4347
|
size: cell.column.getSize(),
|
|
@@ -4382,4 +4384,4 @@ exports.useColumnVisibility = useColumnVisibility;
|
|
|
4382
4384
|
exports.useTablePagination = useTablePagination;
|
|
4383
4385
|
exports.useTableSelection = useTableSelection;
|
|
4384
4386
|
exports.useTableSort = useTableSort;
|
|
4385
|
-
//# sourceMappingURL=DataTable-
|
|
4387
|
+
//# sourceMappingURL=DataTable-buERtmN8.js.map
|