@mdigital_ui/ui 0.2.2 → 0.2.3
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/button/index.js +1 -1
- package/dist/cascader/index.js +1 -1
- package/dist/checkbox/index.js +1 -1
- package/dist/{chunk-W7BQYIXF.js → chunk-267WNY3E.js} +6 -6
- package/dist/chunk-267WNY3E.js.map +1 -0
- package/dist/{chunk-H2HIBD5Y.js → chunk-4XXDRVFM.js} +3 -3
- package/dist/chunk-4XXDRVFM.js.map +1 -0
- package/dist/{chunk-E2CYDDYC.js → chunk-6V5I5HJ2.js} +3 -3
- package/dist/{chunk-E2CYDDYC.js.map → chunk-6V5I5HJ2.js.map} +1 -1
- package/dist/{chunk-L3SP7GHC.js → chunk-77DW6PAW.js} +5 -5
- package/dist/{chunk-L3SP7GHC.js.map → chunk-77DW6PAW.js.map} +1 -1
- package/dist/{chunk-JZCHZ4B3.js → chunk-ASW7TEAN.js} +3 -3
- package/dist/chunk-ASW7TEAN.js.map +1 -0
- package/dist/{chunk-EYTOKUBM.js → chunk-BH4DXQC4.js} +3 -3
- package/dist/{chunk-EYTOKUBM.js.map → chunk-BH4DXQC4.js.map} +1 -1
- package/dist/{chunk-SERJ3TZE.js → chunk-G6TAVRTJ.js} +3 -3
- package/dist/chunk-G6TAVRTJ.js.map +1 -0
- package/dist/{chunk-KTBPIEP2.js → chunk-GEWR5ROK.js} +3 -3
- package/dist/chunk-GEWR5ROK.js.map +1 -0
- package/dist/{chunk-RQBXZKTH.js → chunk-JLTDJ3VZ.js} +6 -6
- package/dist/{chunk-RQBXZKTH.js.map → chunk-JLTDJ3VZ.js.map} +1 -1
- package/dist/{chunk-LBJG2UWT.js → chunk-KTAIRCOL.js} +3 -3
- package/dist/{chunk-LBJG2UWT.js.map → chunk-KTAIRCOL.js.map} +1 -1
- package/dist/{chunk-52M2PO3O.js → chunk-QPJL66S7.js} +3 -3
- package/dist/chunk-QPJL66S7.js.map +1 -0
- package/dist/{chunk-CLLQDCDR.js → chunk-UAMFKX6L.js} +6 -6
- package/dist/chunk-UAMFKX6L.js.map +1 -0
- package/dist/{chunk-2JGAYDZR.js → chunk-XMKNYG7I.js} +6 -6
- package/dist/{chunk-2JGAYDZR.js.map → chunk-XMKNYG7I.js.map} +1 -1
- package/dist/{chunk-AOITJRSV.js → chunk-YZ6V6BQ7.js} +3 -3
- package/dist/chunk-YZ6V6BQ7.js.map +1 -0
- package/dist/date-picker/index.js +1 -1
- package/dist/index.js +19 -19
- package/dist/input/index.js +1 -1
- package/dist/input-password/index.js +2 -2
- package/dist/multi-select/index.js +1 -1
- package/dist/progress/index.js +1 -1
- package/dist/radio/index.js +1 -1
- package/dist/select/index.js +1 -1
- package/dist/styles/base.css +1923 -182
- package/dist/styles/global.css +241 -175
- package/dist/styles/themes/dark.css +44 -40
- package/dist/styles/themes/light.css +12 -9
- package/dist/switch/index.js +1 -1
- package/dist/table/index.js +4 -4
- package/dist/transfer/index.js +2 -2
- package/dist/tree-select/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-52M2PO3O.js.map +0 -1
- package/dist/chunk-AOITJRSV.js.map +0 -1
- package/dist/chunk-CLLQDCDR.js.map +0 -1
- package/dist/chunk-H2HIBD5Y.js.map +0 -1
- package/dist/chunk-JZCHZ4B3.js.map +0 -1
- package/dist/chunk-KTBPIEP2.js.map +0 -1
- package/dist/chunk-SERJ3TZE.js.map +0 -1
- package/dist/chunk-W7BQYIXF.js.map +0 -1
- package/examples/README.md +0 -166
- package/examples/custom-theme.css +0 -189
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/radio/index.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,6IAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,OAAA,EACE,uHAAA;AAAA,QACF,SAAA,EACE,2HAAA;AAAA,QACF,MAAA,EACE,qHAAA;AAAA,QACF,OAAA,EACE,uHAAA;AAAA,QACF,KAAA,EACE,mHAAA;AAAA,QACF,OAAA,EACE,uHAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,yDAAA;AAAA,QACJ,EAAA,EAAI,yDAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,mCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,EAClB,CAAC;AAAA,IACC,KAAA,GAAQ,SAAA;AAAA,IACR,IAAA,GAAO,IAAA;AAAA,IACP,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,aAAA,CAAc,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,CAAC,CAAC,OAAO,CAAA;AAAA,UAC7C;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAGF,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,UAAA,IAAc,CAAC,OAAO,OAAO,YAAA;AAE5C,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,yBAAA;AAAA,YACA,CAAC,MAAM,QAAA,IAAY;AAAA,WACrB;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,YAAA;AAAA,YACA,KAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,yCAAA;AAAA,kBACA,KAAA,IAAS,YAAA;AAAA,kBACT,MAAM,QAAA,IAAY;AAAA,iBACpB;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,OAEJ;AAAA,MAAA,CACE,cAAc,KAAA,qBACd,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,mBAAA;AAAA,YACA,QAAQ,YAAA,GAAe;AAAA,WACzB;AAAA,UAEC,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA;AACZ,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;AAGpB,IAAO,aAAA,GAAQ","file":"chunk-KTBPIEP2.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { RadioProps } from './types'\n\nconst radioVariants = cva(\n 'appearance-none rounded-full border-border border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none',\n {\n variants: {\n color: {\n primary:\n 'checked:border-primary checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-primary)]',\n secondary:\n 'checked:border-secondary checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-secondary)]',\n accent:\n 'checked:border-accent checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-accent)]',\n success:\n 'checked:border-success checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-success)]',\n error:\n 'checked:border-error checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-error)]',\n warning:\n 'checked:border-warning checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-warning)]',\n info: 'checked:border-info checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--color-info)]',\n },\n size: {\n xs: 'w-4 h-4',\n sm: 'w-[var(--checkbox-size-sm)] h-[var(--checkbox-size-sm)]',\n md: 'w-[var(--checkbox-size-md)] h-[var(--checkbox-size-md)]',\n lg: 'w-[var(--checkbox-size-lg)] h-[var(--checkbox-size-lg)]',\n },\n error: {\n true: 'border-error checked:border-error',\n false: '',\n },\n },\n defaultVariants: {\n color: 'primary',\n size: 'md',\n },\n },\n)\n\nconst Radio = React.memo<RadioProps>(\n ({\n color = 'primary',\n size = 'md',\n label,\n helperText,\n error,\n className,\n ref,\n ...props\n }) => {\n const radioElement = (\n <input\n ref={ref}\n type=\"radio\"\n className={cn(\n radioVariants({ color, size, error: !!error }),\n className,\n )}\n {...props}\n />\n )\n\n if (!label && !helperText && !error) return radioElement\n\n return (\n <div className=\"w-full\">\n <label\n className={cn(\n 'flex items-center gap-2',\n !props.disabled && 'cursor-pointer',\n )}\n >\n {radioElement}\n {label && (\n <span\n className={cn(\n 'text-sm text-text-secondary select-none',\n error && 'text-error',\n props.disabled && 'opacity-50',\n )}\n >\n {label}\n </span>\n )}\n </label>\n {(helperText || error) && (\n <p\n className={cn(\n 'mt-1 ml-0 text-xs',\n error ? 'text-error' : 'text-text-secondary',\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n )\n },\n)\n\nRadio.displayName = 'Radio'\n\nexport type * from './types'\nexport default Radio\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cascader/index.tsx"],"names":["selectedPath"],"mappings":"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","file":"chunk-SERJ3TZE.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport { Check, ChevronDown, ChevronRight, Loader2, X } from 'lucide-react'\nimport React from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport type { CascaderOption, CascaderProps } from './types'\n\nconst cascaderTriggerVariants = cva(\n 'flex items-center justify-between gap-2 rounded-md border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none',\n {\n variants: {\n variant: {\n default: 'bg-background border-border hover:border-primary',\n primary: 'bg-background border-primary',\n secondary: 'bg-background border-secondary',\n accent: 'bg-background border-accent',\n success: 'bg-background border-success',\n error: 'bg-background border-error',\n warning: 'bg-background border-warning',\n info: 'bg-background border-info',\n },\n size: {\n xs: 'h-8 px-1.5 text-xs',\n sm: 'h-[var(--input-height-sm)] px-2.5 text-sm',\n md: 'h-[var(--input-height-md)] px-3 text-base',\n lg: 'h-[var(--input-height-lg)] px-3 text-lg',\n },\n fullWidth: {\n true: 'w-full',\n false: 'max-w-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n fullWidth: true,\n },\n },\n)\n\nconst cascaderMenuVariants = cva(\n 'overflow-auto rounded-md border bg-background w-[200px] max-h-[300px]',\n {\n variants: {\n color: {\n default: 'border-border',\n primary: 'border-primary',\n secondary: 'border-secondary',\n accent: 'border-accent',\n success: 'border-success',\n error: 'border-error',\n warning: 'border-warning',\n info: 'border-info',\n },\n },\n defaultVariants: {\n color: 'default',\n },\n },\n)\n\nconst cascaderItemVariants = cva(\n 'relative cursor-pointer select-none text-text-primary transition-colors flex items-center gap-2 w-full',\n {\n variants: {\n size: {\n xs: 'px-2 py-1 text-xs min-h-[28px]',\n sm: 'px-3 py-1.5 text-sm min-h-[32px]',\n md: 'px-4 py-2 text-base min-h-[40px]',\n lg: 'px-5 py-2.5 text-lg min-h-[48px]',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: 'hover:bg-surface',\n },\n active: {\n true: 'bg-surface',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n disabled: false,\n active: false,\n },\n },\n)\n\nconst Cascader = React.memo<CascaderProps>(\n ({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = 'Please select',\n label,\n helperText,\n messagePosition = 'bottom',\n color = 'default',\n size = 'md',\n position = 'left',\n disabled = false,\n loading = false,\n error,\n warning,\n info,\n success,\n fullWidth = true,\n hover = true,\n multiple = false,\n maxChipsVisible = 3,\n displayRender,\n className,\n required,\n }) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [internalValue, setInternalValue] = React.useState<\n string[] | string[][]\n >(defaultValue || (multiple ? [] : []))\n const [activeMenus, setActiveMenus] = React.useState<CascaderOption[][]>([\n options,\n ])\n const [hoveredPath, setHoveredPath] = React.useState<number[]>([])\n const [selectedPath, setSelectedPath] = React.useState<string[]>([])\n const [visibleChipsCount, setVisibleChipsCount] =\n React.useState(maxChipsVisible)\n\n const containerRef = React.useRef<HTMLDivElement>(null)\n const triggerRef = React.useRef<HTMLDivElement>(null)\n\n const currentValue = value !== undefined ? value : internalValue\n\n const normalizedValue: string[][] = React.useMemo(() => {\n if (multiple) {\n return Array.isArray(currentValue[0])\n ? (currentValue as string[][])\n : []\n }\n return Array.isArray(currentValue) &&\n currentValue.length > 0 &&\n !Array.isArray(currentValue[0])\n ? [currentValue as string[]]\n : []\n }, [currentValue, multiple])\n\n let variant:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'success'\n | 'error'\n | 'warning'\n | 'info' = color\n\n if (error) {\n variant = 'error'\n } else if (warning) {\n variant = 'warning'\n } else if (success) {\n variant = 'success'\n } else if (info) {\n variant = 'info'\n }\n\n const handleToggle = React.useCallback(() => {\n if (!disabled && !loading) {\n setIsOpen((prev) => {\n if (!prev && normalizedValue.length > 0 && !multiple) {\n // When opening, set selectedPath to the current value for single mode\n setSelectedPath(normalizedValue[0] || [])\n } else if (!prev) {\n setSelectedPath([])\n }\n return !prev\n })\n }\n }, [disabled, loading, normalizedValue, multiple])\n\n const handleClose = React.useCallback(() => {\n setIsOpen(false)\n setActiveMenus([options])\n setHoveredPath([])\n }, [options])\n\n const getSelectedOptions = React.useCallback(\n (path: string[]): CascaderOption[] => {\n const selected: CascaderOption[] = []\n let currentOptions = options\n\n for (const val of path) {\n const option = currentOptions.find((opt) => opt.value === val)\n if (option) {\n selected.push(option)\n currentOptions = option.children || []\n }\n }\n\n return selected\n },\n [options],\n )\n\n const isPathSelected = React.useCallback(\n (path: string[]): boolean => {\n return normalizedValue.some(\n (selectedPath) =>\n selectedPath.length === path.length &&\n selectedPath.every((val, idx) => val === path[idx]),\n )\n },\n [normalizedValue],\n )\n\n const getAllLeafPaths = React.useCallback(\n (option: CascaderOption, currentPath: string[]): string[][] => {\n const paths: string[][] = []\n const fullPath = [...currentPath, option.value]\n\n if (!option.children || option.children.length === 0) {\n // This is a leaf node\n paths.push(fullPath)\n } else {\n // This is a parent node, get all leaf paths from children\n option.children.forEach((child) => {\n paths.push(...getAllLeafPaths(child, fullPath))\n })\n }\n\n return paths\n },\n [],\n )\n\n const getNodeSelectionState = React.useCallback(\n (\n option: CascaderOption,\n currentPath: string[],\n ): {\n checked: boolean\n indeterminate: boolean\n } => {\n if (!option.children || option.children.length === 0) {\n // Leaf node\n const fullPath = [...currentPath, option.value]\n return {\n checked: isPathSelected(fullPath),\n indeterminate: false,\n }\n }\n\n // Parent node - check all leaf descendants\n const leafPaths = getAllLeafPaths(option, currentPath)\n const selectedCount = leafPaths.filter((path) =>\n isPathSelected(path),\n ).length\n\n return {\n checked: selectedCount === leafPaths.length && leafPaths.length > 0,\n indeterminate: selectedCount > 0 && selectedCount < leafPaths.length,\n }\n },\n [isPathSelected, getAllLeafPaths],\n )\n\n const handleItemClick = React.useCallback(\n (option: CascaderOption, level: number) => {\n if (option.disabled) return\n\n // Update the selected path\n const newPath = [...selectedPath.slice(0, level), option.value]\n setSelectedPath(newPath)\n\n if (option.children && option.children.length > 0 && !multiple) {\n // Has children and single mode - just expand\n setActiveMenus((prev) => [\n ...prev.slice(0, level + 1),\n option.children!,\n ])\n } else if (option.children && option.children.length > 0 && multiple) {\n // Has children and multiple mode - toggle all leaf descendants\n const leafPaths = getAllLeafPaths(\n option,\n selectedPath.slice(0, level),\n )\n const allSelected = leafPaths.every((path) => isPathSelected(path))\n\n let newValue: string[][]\n\n if (allSelected) {\n // Deselect all leaf descendants\n newValue = normalizedValue.filter(\n (selectedPath) =>\n !leafPaths.some(\n (leafPath) =>\n leafPath.length === selectedPath.length &&\n leafPath.every((val, idx) => val === selectedPath[idx]),\n ),\n )\n } else {\n // Select all leaf descendants\n const pathsToAdd = leafPaths.filter((path) => !isPathSelected(path))\n newValue = [...normalizedValue, ...pathsToAdd]\n }\n\n const newSelectedOptions = newValue.map((path) =>\n getSelectedOptions(path),\n )\n\n if (value === undefined) setInternalValue(newValue)\n onChange?.(newValue, newSelectedOptions)\n\n // Also expand the node\n setActiveMenus((prev) => [\n ...prev.slice(0, level + 1),\n option.children!,\n ])\n } else {\n // Leaf node\n if (multiple) {\n // Multiple mode - toggle selection\n let newValue: string[][]\n\n if (isPathSelected(newPath)) {\n // Remove from selection\n newValue = normalizedValue.filter(\n (path) =>\n !(\n path.length === newPath.length &&\n path.every((val, idx) => val === newPath[idx])\n ),\n )\n } else {\n // Add to selection\n newValue = [...normalizedValue, newPath]\n }\n\n const newSelectedOptions = newValue.map((path) =>\n getSelectedOptions(path),\n )\n\n if (value === undefined) setInternalValue(newValue)\n onChange?.(newValue, newSelectedOptions)\n } else {\n // Single mode - update value and close\n const selectedOptions = getSelectedOptions(newPath)\n\n if (value === undefined) setInternalValue(newPath)\n onChange?.(newPath, selectedOptions)\n handleClose()\n }\n }\n },\n [\n selectedPath,\n value,\n onChange,\n handleClose,\n getSelectedOptions,\n multiple,\n isPathSelected,\n normalizedValue,\n getAllLeafPaths,\n ],\n )\n\n const handleItemHover = React.useCallback(\n (option: CascaderOption, level: number, index: number) => {\n if (hover && !option.disabled) {\n setHoveredPath((prev) => [...prev.slice(0, level), index])\n\n if (option.children && option.children.length > 0) {\n setActiveMenus((prev) => [\n ...prev.slice(0, level + 1),\n option.children!,\n ])\n } else {\n setActiveMenus((prev) => prev.slice(0, level + 1))\n }\n }\n },\n [hover],\n )\n\n const handleClear = React.useCallback(() => {\n const emptyValue = multiple ? [] : []\n if (value === undefined) setInternalValue(emptyValue)\n onChange?.(emptyValue, multiple ? [] : [])\n }, [value, onChange, multiple])\n\n const removeSelection = React.useCallback(\n (pathToRemove: string[]) => {\n if (!multiple) return\n\n const newValue = normalizedValue.filter(\n (path) =>\n !(\n path.length === pathToRemove.length &&\n path.every((val, idx) => val === pathToRemove[idx])\n ),\n )\n\n const newSelectedOptions = newValue.map((path) =>\n getSelectedOptions(path),\n )\n\n if (value === undefined) setInternalValue(newValue)\n onChange?.(newValue, newSelectedOptions)\n },\n [multiple, normalizedValue, value, onChange, getSelectedOptions],\n )\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n handleClose()\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, handleClose])\n\n React.useEffect(() => {\n if (!multiple || normalizedValue.length === 0 || !triggerRef.current) {\n setVisibleChipsCount(maxChipsVisible)\n return\n }\n\n const calculateVisibleChips = () => {\n const container = triggerRef.current\n if (!container) return\n\n const hiddenChips = container.querySelectorAll('[data-hidden-chip]')\n if (hiddenChips.length === 0) return\n\n const containerWidth = container.offsetWidth\n const padding =\n size === 'xs' ? 8 : size === 'sm' ? 12 : size === 'md' ? 16 : 20\n const chevronWidth = 32\n const gap = 4\n const plusIndicatorWidth = 50\n\n const availableWidth = containerWidth - padding * 2 - chevronWidth\n let totalWidth = 0\n let visibleCount = 0\n\n for (let i = 0; i < hiddenChips.length; i++) {\n const chipWidth = hiddenChips[i]?.getBoundingClientRect().width || 0\n const requiredSpace =\n totalWidth + chipWidth + (visibleCount > 0 ? gap : 0)\n\n const needsPlusIndicator = i < hiddenChips.length - 1\n const spaceWithIndicator =\n requiredSpace + (needsPlusIndicator ? gap + plusIndicatorWidth : 0)\n\n if (spaceWithIndicator <= availableWidth) {\n totalWidth = requiredSpace\n visibleCount++\n } else {\n break\n }\n }\n\n setVisibleChipsCount(Math.max(1, visibleCount))\n }\n\n const timeoutId = setTimeout(calculateVisibleChips, 0)\n\n const resizeObserver = new ResizeObserver(() => {\n calculateVisibleChips()\n })\n\n if (triggerRef.current) {\n resizeObserver.observe(triggerRef.current)\n }\n\n return () => {\n clearTimeout(timeoutId)\n resizeObserver.disconnect()\n }\n }, [normalizedValue, size, maxChipsVisible, multiple])\n\n const displayValue = React.useMemo(() => {\n if (normalizedValue.length === 0) return null\n\n if (displayRender) {\n if (multiple) {\n const allLabels = normalizedValue.map((path) =>\n getSelectedOptions(path).map((opt) => opt.label),\n )\n return displayRender(allLabels)\n } else {\n const labels = getSelectedOptions(normalizedValue[0] || []).map(\n (opt) => opt.label,\n )\n return displayRender(labels)\n }\n }\n\n if (!multiple) {\n const labels = getSelectedOptions(normalizedValue[0] || []).map(\n (opt) => opt.label,\n )\n return labels.length > 0 ? labels.join(' / ') : null\n }\n\n return null // For multiple, we show chips instead\n }, [normalizedValue, displayRender, getSelectedOptions, multiple])\n\n const showClear =\n normalizedValue.length > 0 &&\n !!normalizedValue[0]?.[0] &&\n !disabled &&\n !loading\n\n let status: 'default' | 'error' | 'warning' | 'info' | 'success' = 'default'\n const helperMessage = error || warning || info || success || helperText\n\n if (error) {\n status = 'error'\n } else if (warning) {\n status = 'warning'\n } else if (success) {\n status = 'success'\n } else if (info) {\n status = 'info'\n }\n\n const renderCascaderMenus = () => (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:border-r-0 [&>*:not(:last-child)]:rounded-r-none\">\n {activeMenus.map((menu, level) => (\n <div\n key={level}\n className={cn(cascaderMenuVariants({ color }))}\n >\n {menu.map((option, index) => {\n const isActive =\n selectedPath[level] === option.value ||\n (hover && hoveredPath[level] === index)\n const currentPath = selectedPath.slice(0, level)\n const selectionState = multiple\n ? getNodeSelectionState(option, currentPath)\n : { checked: false, indeterminate: false }\n\n return (\n <div\n key={option.value}\n className={cascaderItemVariants({\n size,\n disabled: !!option.disabled,\n active: isActive,\n })}\n onClick={() => handleItemClick(option, level)}\n onMouseEnter={() => handleItemHover(option, level, index)}\n >\n {multiple && (\n <div\n className={cn(\n 'w-4 h-4 border rounded flex items-center justify-center shrink-0',\n selectionState.checked\n ? 'bg-primary border-primary'\n : 'border-border',\n )}\n >\n {selectionState.checked && (\n <Check className=\"h-3 w-3 text-background\" />\n )}\n {selectionState.indeterminate &&\n !selectionState.checked && (\n <div className=\"w-2 h-0.5 bg-primary\" />\n )}\n </div>\n )}\n <span className=\"flex-1 truncate\">{option.label}</span>\n <span className={cn('shrink-0', iconSizes[size])}>\n {option.children && option.children.length > 0 && (\n <ChevronRight className={iconSizes[size]} />\n )}\n </span>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )\n\n const triggerButton = (\n <div\n ref={triggerRef}\n onClick={handleToggle}\n className={cn(\n cascaderTriggerVariants({ variant, size, fullWidth }),\n className,\n )}\n >\n <div className=\"flex-1 flex flex-wrap gap-1 items-center min-h-0\">\n {multiple && normalizedValue.length > 0 ? (\n <>\n {normalizedValue.slice(0, visibleChipsCount).map((path, idx) => {\n const labels = getSelectedOptions(path).map((opt) => opt.label)\n const lastLabel = labels[labels.length - 1]\n return (\n <span\n key={idx}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {lastLabel}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n removeSelection(path)\n }}\n className=\"hover:text-error\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n )\n })}\n {normalizedValue.length > visibleChipsCount && (\n <span className=\"inline-flex items-center px-2 py-0.5 bg-surface text-text-secondary rounded text-sm whitespace-nowrap\">\n +{normalizedValue.length - visibleChipsCount}\n </span>\n )}\n <div\n className=\"absolute opacity-0 pointer-events-none whitespace-nowrap\"\n aria-hidden=\"true\"\n >\n {normalizedValue.map((path, idx) => {\n const labels = getSelectedOptions(path).map(\n (opt) => opt.label,\n )\n const lastLabel = labels[labels.length - 1]\n return (\n <span\n key={idx}\n data-hidden-chip\n className=\"inline-flex items-center gap-1 bg-surface text-text-primary px-2 py-0.5 rounded text-sm whitespace-nowrap\"\n >\n {lastLabel}\n <X className=\"h-3 w-3\" />\n </span>\n )\n })}\n </div>\n </>\n ) : (\n <span\n className={cn(\n 'truncate text-text-primary',\n !displayValue && 'text-text-muted',\n )}\n >\n {displayValue || placeholder}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1 text-text-secondary shrink-0\">\n {loading && (\n <Loader2\n className={cn('animate-spin text-text-muted', iconSizes[size])}\n />\n )}\n {!loading && showClear && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n handleClear()\n }}\n className=\"hover:text-text-primary\"\n aria-label=\"Clear selection\"\n >\n <X className={iconSizes[size]} />\n </button>\n )}\n {!loading && (\n <ChevronDown\n className={cn(\n 'transition-transform',\n iconSizes[size],\n isOpen && 'rotate-180',\n )}\n />\n )}\n </div>\n </div>\n )\n\n const cascaderElement = (\n <div\n ref={containerRef}\n className={cn('relative', fullWidth ? 'w-full' : 'inline-block')}\n >\n {triggerButton}\n {isOpen && (\n <div\n className={cn(\n 'absolute z-50 mt-1',\n position === 'left' ? 'left-0' : 'right-0',\n )}\n >\n {renderCascaderMenus()}\n </div>\n )}\n </div>\n )\n\n if (!label && !helperMessage) return cascaderElement\n\n return (\n <div\n className={cn(\n 'w-full flex flex-col relative',\n !fullWidth && 'inline-block',\n )}\n >\n <div className=\"flex gap-2 items-center relative mb-0.5\">\n {label && (\n <p className=\"text-sm font-medium text-text-secondary\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n </p>\n )}\n {helperMessage && messagePosition === 'top' && (\n <p\n id={`cascader-helper-${status}`}\n className={cn(\n 'text-xs',\n status === 'error' && 'text-error',\n status === 'warning' && 'text-warning',\n status === 'info' && 'text-info',\n status === 'success' && 'text-success',\n status === 'default' && 'text-text-secondary',\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n {cascaderElement}\n {helperMessage && messagePosition === 'bottom' && (\n <p\n id={`cascader-helper-${status}`}\n className={cn(\n 'text-xs mt-0.5',\n status === 'error' && 'text-error',\n status === 'warning' && 'text-warning',\n status === 'info' && 'text-info',\n status === 'success' && 'text-success',\n status === 'default' && 'text-text-secondary',\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n )\n },\n)\n\nCascader.displayName = 'Cascader'\n\nexport type * from './types'\nexport default Cascader\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/multi-select/utils.ts","../src/multi-select/index.tsx"],"names":[],"mappings":"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","file":"chunk-W7BQYIXF.js","sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const multiSelectTriggerVariants = cva(\n 'w-full flex items-center justify-between rounded-md bg-background text-text-primary border focus:border-primary outline-none disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer gap-1',\n {\n variants: {\n status: {\n default: 'border-border',\n error: 'border-error',\n warning: 'border-warning',\n info: 'border-info',\n success: 'border-success',\n },\n size: {\n xs: 'h-8 pl-1 pr-2 text-xs',\n sm: 'h-[var(--input-height-sm)] px-1.5 text-sm',\n md: 'h-[var(--input-height-md)] px-2 text-base',\n lg: 'h-[var(--input-height-lg)] px-2 text-lg',\n },\n fullWidth: {\n true: 'w-full',\n false: 'max-w-full',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n fullWidth: true,\n },\n },\n)\n\nexport const multiSelectDropdownVariants = cva(\n 'absolute z-50 mt-1 overflow-auto rounded-md border border-border bg-background',\n)\n\nexport const multiSelectOptionVariants = cva(\n 'relative cursor-pointer select-none px-3 py-2 text-text-primary',\n {\n variants: {\n selected: {\n true: 'bg-primary/10 text-primary font-medium',\n false: 'hover:bg-surface',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n },\n)\n\nexport const multiSelectGroupVariants = cva(\n 'px-3 py-2 text-xs font-semibold text-text-secondary uppercase tracking-wider bg-surface',\n)\n","import { useVirtualizer } from '@tanstack/react-virtual'\nimport { Check, ChevronDown, ChevronUp, Loader2, Search, X } from 'lucide-react'\nimport React, { useCallback } from 'react'\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\nimport { cn, iconSizes } from '../utils'\nimport type { MultiSelectOption, MultiSelectProps } from './types'\nimport {\n multiSelectGroupVariants,\n multiSelectOptionVariants,\n multiSelectTriggerVariants,\n} from './utils'\n\nconst MultiSelect = React.memo<MultiSelectProps>(\n ({\n size = 'md',\n label,\n helperText,\n error,\n warning,\n info,\n success,\n options = [],\n placeholder = 'Select options',\n loading = false,\n fullWidth = true,\n maxChipsVisible = 3,\n value,\n defaultValue,\n onChange,\n disabled,\n required,\n clearable = false,\n virtualizeThreshold = 50,\n maxDropdownHeight = 300,\n className,\n ref,\n ...props\n }) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [internalValue, setInternalValue] = React.useState<string[]>(\n defaultValue || [],\n )\n const [parentNode, setParentNode] = React.useState<HTMLDivElement | null>(\n null,\n )\n const [searchQuery, setSearchQuery] = React.useState('')\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1)\n const [visibleChipsCount, setVisibleChipsCount] =\n React.useState(maxChipsVisible)\n const [showTopArrow, setShowTopArrow] = React.useState(false)\n const [showBottomArrow, setShowBottomArrow] = React.useState(false)\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const scrollContainerRef = React.useRef<HTMLDivElement>(null)\n\n const currentValue = value !== undefined ? value : internalValue\n\n let status: 'default' | 'error' | 'warning' | 'info' | 'success' = 'default'\n const helperMessage = error || warning || info || success || helperText\n\n if (error) {\n status = 'error'\n } else if (warning) {\n status = 'warning'\n } else if (success) {\n status = 'success'\n } else if (info) {\n status = 'info'\n }\n\n const groupedOptions = React.useMemo(() => {\n const groups: Record<string, MultiSelectOption[]> = {}\n const ungrouped: MultiSelectOption[] = []\n\n options.forEach((option) => {\n if (option.group) {\n if (!groups[option.group]) {\n groups[option.group] = []\n }\n groups[option.group]!.push(option)\n } else {\n ungrouped.push(option)\n }\n })\n\n return { groups, ungrouped }\n }, [options])\n\n const flattenedOptions = React.useMemo(() => {\n const items: Array<{\n type: 'option' | 'group'\n data: MultiSelectOption | string\n }> = []\n\n groupedOptions.ungrouped.forEach((option) => {\n items.push({ type: 'option', data: option })\n })\n\n Object.entries(groupedOptions.groups).forEach(\n ([groupName, groupOptions]) => {\n items.push({ type: 'group', data: groupName })\n groupOptions.forEach((option) => {\n items.push({ type: 'option', data: option })\n })\n },\n )\n\n return items\n }, [groupedOptions])\n\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return flattenedOptions\n\n return flattenedOptions.filter((item) => {\n if (item.type === 'group') return true\n const option = item.data as MultiSelectOption\n return option.label.toLowerCase().includes(searchQuery.toLowerCase())\n })\n }, [flattenedOptions, searchQuery])\n\n const shouldVirtualize = filteredOptions.length > virtualizeThreshold\n\n const virtualizer = useVirtualizer({\n count: filteredOptions.length,\n getScrollElement: () => parentNode,\n estimateSize: () => 40,\n enabled: shouldVirtualize,\n })\n\n // Store virtualizer in ref to avoid recreating handleKeyDown on every render\n const virtualizerRef = React.useRef(virtualizer)\n React.useEffect(() => {\n virtualizerRef.current = virtualizer\n }, [virtualizer])\n\n const refCallback = useCallback((node: HTMLDivElement) => {\n if (node) {\n setParentNode(node)\n // Also set as scroll container for virtualized lists\n scrollContainerRef.current = node\n }\n }, [])\n\n const selectedOptions = options.filter((opt) =>\n currentValue.includes(opt.value),\n )\n\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n const newValue = currentValue.includes(optionValue)\n ? currentValue.filter((v) => v !== optionValue)\n : [...currentValue, optionValue]\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n setHighlightedIndex(-1)\n },\n [value, onChange, currentValue],\n )\n\n const handleRemoveChip = React.useCallback(\n (optionValue: string, e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation()\n const newValue = currentValue.filter((v) => v !== optionValue)\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [value, onChange, currentValue],\n )\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n if (value === undefined) {\n setInternalValue([])\n }\n onChange?.([])\n },\n [value, onChange],\n )\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value)\n if (!isOpen) setIsOpen(true)\n },\n [isOpen],\n )\n\n const handleInputFocus = React.useCallback(() => {\n setIsOpen(true)\n }, [])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen && e.key !== 'Tab') {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n setIsOpen(true)\n }\n return\n }\n\n const selectableOptions = filteredOptions.filter(\n (item) =>\n item.type === 'option' &&\n !(item.data as MultiSelectOption).disabled,\n )\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setSearchQuery('')\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n break\n\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => {\n const nextIndex = Math.min(prev + 1, selectableOptions.length - 1)\n const optionIndex = filteredOptions.indexOf(\n selectableOptions[nextIndex]!,\n )\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: 'auto',\n })\n }\n return nextIndex\n })\n break\n\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => {\n const nextIndex = Math.max(prev - 1, 0)\n const optionIndex = filteredOptions.indexOf(\n selectableOptions[nextIndex]!,\n )\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: 'auto',\n })\n }\n return nextIndex\n })\n break\n\n case 'Enter':\n e.preventDefault()\n if (\n highlightedIndex >= 0 &&\n highlightedIndex < selectableOptions.length\n ) {\n const option = selectableOptions[highlightedIndex]!\n .data as MultiSelectOption\n handleSelect(option.value)\n }\n break\n\n case 'Home':\n e.preventDefault()\n setHighlightedIndex(0)\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(0)\n }\n break\n\n case 'End':\n e.preventDefault()\n setHighlightedIndex(selectableOptions.length - 1)\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(filteredOptions.length - 1)\n }\n break\n\n default:\n break\n }\n },\n [\n isOpen,\n filteredOptions,\n highlightedIndex,\n handleSelect,\n shouldVirtualize,\n ],\n )\n\n const handleInputKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !searchQuery && currentValue.length > 0) {\n e.preventDefault()\n const lastValue = currentValue[currentValue.length - 1]\n handleRemoveChip(lastValue!, e)\n } else {\n handleKeyDown(e)\n }\n },\n [searchQuery, currentValue, handleRemoveChip, handleKeyDown],\n )\n\n React.useEffect(() => {\n if (selectedOptions.length === 0 || !triggerRef.current) {\n setVisibleChipsCount(maxChipsVisible)\n return\n }\n\n const calculateVisibleChips = () => {\n const container = triggerRef.current\n if (!container) return\n\n const hiddenChips = container.querySelectorAll('[data-hidden-chip]')\n if (hiddenChips.length === 0) return\n\n const containerWidth = container.offsetWidth\n const padding =\n size === 'sm' ? 12 : size === 'md' ? 16 : size === 'lg' ? 20 : 24\n const chevronWidth = 32\n const gap = 4\n const plusIndicatorWidth = 50\n\n const availableWidth = containerWidth - padding * 2 - chevronWidth\n let totalWidth = 0\n let visibleCount = 0\n\n for (let i = 0; i < hiddenChips.length; i++) {\n const chipWidth = hiddenChips[i]!.getBoundingClientRect().width\n const requiredSpace =\n totalWidth + chipWidth + (visibleCount > 0 ? gap : 0)\n\n const needsPlusIndicator = i < hiddenChips.length - 1\n const spaceWithIndicator =\n requiredSpace + (needsPlusIndicator ? gap + plusIndicatorWidth : 0)\n\n if (spaceWithIndicator <= availableWidth) {\n totalWidth = requiredSpace\n visibleCount++\n } else {\n break\n }\n }\n\n setVisibleChipsCount(Math.max(1, visibleCount))\n }\n\n const timeoutId = setTimeout(calculateVisibleChips, 0)\n\n const resizeObserver = new ResizeObserver(() => {\n calculateVisibleChips()\n })\n\n if (triggerRef.current) {\n resizeObserver.observe(triggerRef.current)\n }\n\n return () => {\n clearTimeout(timeoutId)\n resizeObserver.disconnect()\n }\n }, [selectedOptions, size, maxChipsVisible])\n\n // Handle scroll to update arrow visibility\n const handleScroll = React.useCallback(\n (e: React.UIEvent<HTMLDivElement>) => {\n const element = e.currentTarget\n const { scrollTop, scrollHeight, clientHeight } = element\n\n setShowTopArrow(scrollTop > 0)\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1)\n },\n [],\n )\n\n // Check initial scroll state when dropdown opens\n React.useEffect(() => {\n if (isOpen) {\n // Use a small delay to ensure the DOM is fully rendered\n const timeoutId = setTimeout(() => {\n const element = scrollContainerRef.current\n if (element) {\n const { scrollTop, scrollHeight, clientHeight } = element\n setShowTopArrow(scrollTop > 0)\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1)\n }\n }, 50)\n\n return () => clearTimeout(timeoutId)\n } else {\n setShowTopArrow(false)\n setShowBottomArrow(false)\n return\n }\n }, [isOpen, filteredOptions, shouldVirtualize])\n\n const renderOptionsList = () => (\n <div className=\"relative\">\n {/* Top scroll indicator */}\n {showTopArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronUp className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n\n <div\n ref={scrollContainerRef}\n className=\"overflow-auto relative\"\n style={{ maxHeight: maxDropdownHeight }}\n role=\"listbox\"\n aria-labelledby={label ? 'multiselect-label' : undefined}\n onScroll={handleScroll}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-4 text-center text-sm text-text-muted\">\n No options found\n </div>\n ) : shouldVirtualize ? (\n <div\n ref={refCallback}\n style={{\n height: `${Math.min(virtualizer.getTotalSize(), maxDropdownHeight)}px`,\n overflow: 'auto',\n }}\n onScroll={handleScroll}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredOptions[virtualItem.index]\n\n if (item?.type === 'group') {\n return (\n <div\n key={`group-${virtualItem.index}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={multiSelectGroupVariants()}\n >\n {item?.data as string}\n </div>\n )\n }\n\n const option = item?.data as MultiSelectOption\n const isSelected = currentValue.includes(option.value)\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === 'option' &&\n !(i.data as MultiSelectOption).disabled,\n )\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n )\n const isHighlighted = selectableIndex === highlightedIndex\n\n return (\n <div\n key={option.value}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={cn(\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && 'bg-surface',\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn('text-primary', iconSizes[size])}\n />\n </span>\n )}\n </div>\n )\n })}\n </div>\n </div>\n ) : (\n <div className=\"py-1\">\n {filteredOptions.map((item, index) => {\n if (item.type === 'group') {\n return (\n <div\n key={`group-${index}`}\n className={multiSelectGroupVariants()}\n >\n {item.data as string}\n </div>\n )\n }\n\n const option = item.data as MultiSelectOption\n const isSelected = currentValue.includes(option.value)\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === 'option' &&\n !(i.data as MultiSelectOption).disabled,\n )\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n )\n const isHighlighted = selectableIndex === highlightedIndex\n\n return (\n <div\n key={option.value}\n className={cn(\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && 'bg-surface',\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn('text-primary', iconSizes[size])}\n />\n </span>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Bottom scroll indicator */}\n {showBottomArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronDown className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n </div>\n )\n\n // Trigger button (used in both desktop and mobile)\n const triggerButton = (\n <button\n ref={triggerRef}\n type=\"button\"\n className={cn(\n multiSelectTriggerVariants({ status, size, fullWidth }),\n loading && 'opacity-50',\n className,\n )}\n disabled={disabled || loading}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? 'multiselect-label' : undefined}\n onClick={() => setIsOpen(!isOpen)}\n >\n {selectedOptions.length > 0 && (\n <div className=\"flex gap-1 flex-shrink-0\">\n {selectedOptions.slice(0, visibleChipsCount).map((option) => (\n <span\n key={option.value}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveChip(option.value, e)}\n className=\"hover:text-error\"\n disabled={disabled}\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n {selectedOptions.length > visibleChipsCount && (\n <span className=\"inline-flex items-center px-2 py-0.5 bg-surface text-text-muted rounded text-sm whitespace-nowrap\">\n +{selectedOptions.length - visibleChipsCount}\n </span>\n )}\n </div>\n )}\n <div\n className=\"absolute opacity-0 pointer-events-none whitespace-nowrap\"\n aria-hidden=\"true\"\n >\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n data-hidden-chip\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {option.label}\n <X className=\"h-3 w-3\" />\n </span>\n ))}\n </div>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"bg-transparent outline-none cursor-pointer placeholder:text-text-muted flex-1 min-w-0 pointer-events-none\"\n placeholder={selectedOptions.length > 0 ? '' : placeholder}\n value={searchQuery}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onKeyDown={handleInputKeyDown}\n disabled={disabled || loading}\n readOnly={!isOpen}\n tabIndex={-1}\n />\n <div className=\"flex items-center gap-1 text-text-muted\">\n {loading ? (\n <Loader2 className={cn('animate-spin', iconSizes[size])} />\n ) : (\n <>\n {clearable && selectedOptions.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"hover:text-text-primary transition-colors\"\n aria-label=\"Clear selection\"\n >\n <X className={iconSizes[size]} />\n </button>\n )}\n {isOpen ? (\n <Search className={iconSizes[size]} />\n ) : (\n <ChevronDown className={iconSizes[size]} />\n )}\n </>\n )}\n </div>\n </button>\n )\n\n const selectElement = (\n <div\n className={cn('relative group', fullWidth ? 'w-full' : 'inline-block')}\n ref={ref}\n {...props}\n >\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n >\n <PopoverTrigger asChild>{triggerButton}</PopoverTrigger>\n\n <PopoverContent\n className=\"p-0 w-[var(--radix-popover-trigger-width)]\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n inputRef.current?.focus()\n }}\n >\n {renderOptionsList()}\n </PopoverContent>\n </Popover>\n </div>\n )\n\n if (!label && !helperMessage) return selectElement\n\n return (\n <div className={cn('w-full flex flex-col', !fullWidth && 'inline-block')}>\n <div className=\"flex gap-2 items-center\">\n {label && (\n <label\n id=\"multiselect-label\"\n className=\"block mb-0.5\"\n >\n <span className=\"text-sm font-medium text-text-muted\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n </span>\n </label>\n )}\n {helperMessage && (\n <p\n className={cn(\n 'text-xs',\n status === 'error' && 'text-error',\n status === 'warning' && 'text-warning',\n status === 'info' && 'text-info',\n status === 'success' && 'text-success',\n status === 'default' && 'text-text-muted',\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n {selectElement}\n </div>\n )\n },\n)\n\nMultiSelect.displayName = 'MultiSelect'\n\nexport type * from './types'\nexport default MultiSelect\n"]}
|
package/examples/README.md
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
# Theming Examples
|
|
2
|
-
|
|
3
|
-
## Quick Start
|
|
4
|
-
|
|
5
|
-
1. Copy `custom-theme.css` to your project
|
|
6
|
-
2. Customize the CSS variables
|
|
7
|
-
3. Import it **after** the UI Kit styles:
|
|
8
|
-
|
|
9
|
-
```tsx
|
|
10
|
-
// app/layout.tsx or src/main.tsx
|
|
11
|
-
import '@mdigital_ui/ui/styles/base.css'
|
|
12
|
-
import '@mdigital_ui/ui/styles/themes/light.css'
|
|
13
|
-
import './custom-theme.css' // Your customizations
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Using Variables with Tailwind Utilities
|
|
17
|
-
|
|
18
|
-
While the UI components use these variables automatically, you can also use them in your own custom components with Tailwind:
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
// Using CSS variables with arbitrary values
|
|
22
|
-
<div className="bg-[var(--color-primary)]">
|
|
23
|
-
Primary background
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<button className="bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)]">
|
|
27
|
-
Custom Button
|
|
28
|
-
</button>
|
|
29
|
-
|
|
30
|
-
// Using design tokens
|
|
31
|
-
<div className="rounded-[var(--radius-lg)] shadow-[var(--shadow-md)]">
|
|
32
|
-
Custom Card
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
// Typography
|
|
36
|
-
<p className="text-[var(--text-lg)] font-[var(--font-weight-semibold)]">
|
|
37
|
-
Custom Text
|
|
38
|
-
</p>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Common Customization Patterns
|
|
42
|
-
|
|
43
|
-
### 1. Brand Colors
|
|
44
|
-
|
|
45
|
-
```css
|
|
46
|
-
:root {
|
|
47
|
-
--color-primary: oklch(0.60 0.20 260);
|
|
48
|
-
--color-primary-hover: oklch(0.55 0.22 260);
|
|
49
|
-
--color-primary-active: oklch(0.50 0.24 260);
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### 2. Component Sizing
|
|
54
|
-
|
|
55
|
-
Make all components larger:
|
|
56
|
-
|
|
57
|
-
```css
|
|
58
|
-
:root {
|
|
59
|
-
/* Buttons */
|
|
60
|
-
--button-height-sm: 2.25rem;
|
|
61
|
-
--button-height-md: 2.75rem;
|
|
62
|
-
--button-height-lg: 3.25rem;
|
|
63
|
-
|
|
64
|
-
/* Inputs */
|
|
65
|
-
--input-height-sm: 2.25rem;
|
|
66
|
-
--input-height-md: 2.75rem;
|
|
67
|
-
--input-height-lg: 3.25rem;
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### 3. Border Radius
|
|
72
|
-
|
|
73
|
-
Make everything more rounded:
|
|
74
|
-
|
|
75
|
-
```css
|
|
76
|
-
:root {
|
|
77
|
-
--radius-sm: 0.5rem;
|
|
78
|
-
--radius-md: 0.75rem;
|
|
79
|
-
--radius-lg: 1rem;
|
|
80
|
-
--radius-xl: 1.5rem;
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 4. Custom Font
|
|
85
|
-
|
|
86
|
-
```css
|
|
87
|
-
:root {
|
|
88
|
-
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Don't forget to load the font:
|
|
93
|
-
|
|
94
|
-
```tsx
|
|
95
|
-
// In your app
|
|
96
|
-
import { Inter } from 'next/font/google'
|
|
97
|
-
|
|
98
|
-
const inter = Inter({ subsets: ['latin'] })
|
|
99
|
-
|
|
100
|
-
export default function RootApp({ children }) {
|
|
101
|
-
return (
|
|
102
|
-
<html className={inter.className}>
|
|
103
|
-
<body>{children}</body>
|
|
104
|
-
</html>
|
|
105
|
-
)
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 5. Dark Mode Colors
|
|
110
|
-
|
|
111
|
-
Customize dark mode appearance:
|
|
112
|
-
|
|
113
|
-
```css
|
|
114
|
-
.dark {
|
|
115
|
-
--color-primary: oklch(0.70 0.25 260);
|
|
116
|
-
--color-background: oklch(12% 0 0);
|
|
117
|
-
--color-surface: oklch(18% 0 0);
|
|
118
|
-
--color-border: oklch(25% 0 0);
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## OKLCH Color Format
|
|
123
|
-
|
|
124
|
-
The UI Kit uses the OKLCH color format for better color perception and consistency. Here's a quick guide:
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
oklch(L C H)
|
|
128
|
-
│ │ │
|
|
129
|
-
│ │ └─ Hue (0-360)
|
|
130
|
-
│ └─── Chroma (0-0.4)
|
|
131
|
-
└───── Lightness (0-1 or 0-100%)
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
**Common Hues:**
|
|
135
|
-
- Red: 25-40
|
|
136
|
-
- Orange: 50-70
|
|
137
|
-
- Yellow: 85-100
|
|
138
|
-
- Green: 140-160
|
|
139
|
-
- Blue: 230-260
|
|
140
|
-
- Purple: 290-310
|
|
141
|
-
- Pink: 340-360
|
|
142
|
-
|
|
143
|
-
**Tips:**
|
|
144
|
-
- Keep Chroma between 0.15-0.25 for most UI colors
|
|
145
|
-
- Lower Lightness for darker colors (0.3-0.5)
|
|
146
|
-
- Higher Lightness for lighter colors (0.6-0.8)
|
|
147
|
-
|
|
148
|
-
**Example Palette:**
|
|
149
|
-
|
|
150
|
-
```css
|
|
151
|
-
/* Primary Blue */
|
|
152
|
-
--color-primary: oklch(0.60 0.20 260); /* Medium blue */
|
|
153
|
-
--color-primary-hover: oklch(0.55 0.22 260); /* Darker blue */
|
|
154
|
-
|
|
155
|
-
/* Success Green */
|
|
156
|
-
--color-success: oklch(0.65 0.20 145);
|
|
157
|
-
|
|
158
|
-
/* Error Red */
|
|
159
|
-
--color-error: oklch(0.60 0.25 25);
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Need Help?
|
|
163
|
-
|
|
164
|
-
- [OKLCH Color Picker](https://oklch.com/)
|
|
165
|
-
- [Tailwind CSS v4 Docs](https://tailwindcss.com/)
|
|
166
|
-
- [Complete Variable Reference](../README.md#theming--customization)
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example Custom Theme
|
|
3
|
-
*
|
|
4
|
-
* Copy this file to your project and customize the variables below.
|
|
5
|
-
* Import it AFTER the UI Kit styles:
|
|
6
|
-
*
|
|
7
|
-
* import '@mdigital_ui/ui/styles/base.css'
|
|
8
|
-
* import '@mdigital_ui/ui/styles/themes/light.css'
|
|
9
|
-
* import './custom-theme.css' // Your customizations
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
:root {
|
|
13
|
-
/* ============================================
|
|
14
|
-
BRAND COLORS
|
|
15
|
-
============================================ */
|
|
16
|
-
|
|
17
|
-
/* Primary Color - Used for main actions, links, focus states */
|
|
18
|
-
--color-primary: oklch(0.60 0.20 260); /* Blue */
|
|
19
|
-
--color-primary-hover: oklch(0.55 0.22 260);
|
|
20
|
-
--color-primary-active: oklch(0.50 0.24 260);
|
|
21
|
-
--color-primary-foreground: oklch(100% 0 0); /* White text on primary */
|
|
22
|
-
|
|
23
|
-
/* Secondary Color - Used for secondary actions */
|
|
24
|
-
--color-secondary: oklch(0.50 0.10 280);
|
|
25
|
-
--color-secondary-hover: oklch(0.45 0.12 280);
|
|
26
|
-
--color-secondary-active: oklch(0.40 0.14 280);
|
|
27
|
-
--color-secondary-foreground: oklch(100% 0 0);
|
|
28
|
-
|
|
29
|
-
/* Accent Color - Used for highlights and special elements */
|
|
30
|
-
--color-accent: oklch(0.75 0.18 160); /* Green */
|
|
31
|
-
--color-accent-hover: oklch(0.70 0.20 160);
|
|
32
|
-
--color-accent-active: oklch(0.65 0.22 160);
|
|
33
|
-
--color-accent-foreground: oklch(15% 0 0);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/* ============================================
|
|
37
|
-
SEMANTIC COLORS
|
|
38
|
-
============================================ */
|
|
39
|
-
|
|
40
|
-
/* Success - Positive actions, confirmations */
|
|
41
|
-
--color-success: oklch(0.65 0.20 145);
|
|
42
|
-
--color-success-hover: oklch(0.60 0.22 145);
|
|
43
|
-
--color-success-foreground: oklch(100% 0 0);
|
|
44
|
-
|
|
45
|
-
/* Error - Destructive actions, errors */
|
|
46
|
-
--color-error: oklch(0.60 0.25 25);
|
|
47
|
-
--color-error-hover: oklch(0.65 0.25 25);
|
|
48
|
-
--color-error-foreground: oklch(100% 0 0);
|
|
49
|
-
|
|
50
|
-
/* Warning - Caution, important notices */
|
|
51
|
-
--color-warning: oklch(0.75 0.15 85);
|
|
52
|
-
--color-warning-hover: oklch(0.70 0.17 85);
|
|
53
|
-
--color-warning-foreground: oklch(15% 0 0);
|
|
54
|
-
|
|
55
|
-
/* Info - Informational messages */
|
|
56
|
-
--color-info: oklch(0.60 0.19 255);
|
|
57
|
-
--color-info-hover: oklch(0.55 0.21 255);
|
|
58
|
-
--color-info-foreground: oklch(100% 0 0);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/* ============================================
|
|
62
|
-
BACKGROUNDS & SURFACES
|
|
63
|
-
============================================ */
|
|
64
|
-
|
|
65
|
-
--color-background: oklch(100% 0 0); /* Main background */
|
|
66
|
-
--color-background-secondary: oklch(98% 0 0); /* Secondary background */
|
|
67
|
-
--color-surface: oklch(96% 0 0); /* Card backgrounds */
|
|
68
|
-
--color-border: oklch(93% 0 0); /* Border color */
|
|
69
|
-
--color-border-primary: oklch(85% 0 0); /* Darker borders */
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
/* ============================================
|
|
73
|
-
TEXT COLORS
|
|
74
|
-
============================================ */
|
|
75
|
-
|
|
76
|
-
--color-text-primary: oklch(15% 0 0); /* Main text */
|
|
77
|
-
--color-text-secondary: oklch(45% 0 0); /* Secondary text */
|
|
78
|
-
--color-text-muted: oklch(60% 0 0); /* Muted/placeholder text */
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
/* ============================================
|
|
82
|
-
COMPONENT SIZING
|
|
83
|
-
============================================ */
|
|
84
|
-
|
|
85
|
-
/* Buttons */
|
|
86
|
-
--button-height-xs: 1.75rem; /* 28px */
|
|
87
|
-
--button-height-sm: 2rem; /* 32px */
|
|
88
|
-
--button-height-md: 2.25rem; /* 36px */
|
|
89
|
-
--button-height-lg: 2.75rem; /* 44px */
|
|
90
|
-
|
|
91
|
-
--button-padding-x-xs: 0.5rem;
|
|
92
|
-
--button-padding-x-sm: 0.75rem;
|
|
93
|
-
--button-padding-x-md: 0.875rem;
|
|
94
|
-
--button-padding-x-lg: 1.25rem;
|
|
95
|
-
|
|
96
|
-
/* Inputs */
|
|
97
|
-
--input-height-xs: 1.75rem;
|
|
98
|
-
--input-height-sm: 2rem;
|
|
99
|
-
--input-height-md: 2.25rem;
|
|
100
|
-
--input-height-lg: 2.75rem;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
/* ============================================
|
|
104
|
-
TYPOGRAPHY
|
|
105
|
-
============================================ */
|
|
106
|
-
|
|
107
|
-
/* Font Families - Use web-safe fallbacks */
|
|
108
|
-
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
|
|
109
|
-
--font-mono: ui-monospace, 'SF Mono', monospace;
|
|
110
|
-
|
|
111
|
-
/* Font Sizes */
|
|
112
|
-
--text-xs: 0.75rem; /* 12px */
|
|
113
|
-
--text-sm: 0.875rem; /* 14px */
|
|
114
|
-
--text-base: 0.9rem; /* 14.4px */
|
|
115
|
-
--text-lg: 1.125rem; /* 18px */
|
|
116
|
-
|
|
117
|
-
/* Font Weights */
|
|
118
|
-
--font-weight-normal: 400;
|
|
119
|
-
--font-weight-medium: 500;
|
|
120
|
-
--font-weight-semibold: 600;
|
|
121
|
-
--font-weight-bold: 700;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
/* ============================================
|
|
125
|
-
BORDER RADIUS
|
|
126
|
-
============================================ */
|
|
127
|
-
|
|
128
|
-
--radius-none: 0px;
|
|
129
|
-
--radius-sm: 0.25rem; /* 4px */
|
|
130
|
-
--radius-md: 0.375rem; /* 6px */
|
|
131
|
-
--radius-lg: 0.5rem; /* 8px */
|
|
132
|
-
--radius-xl: 0.625rem; /* 10px */
|
|
133
|
-
--radius-2xl: 0.75rem; /* 12px */
|
|
134
|
-
--radius-3xl: 1rem; /* 16px */
|
|
135
|
-
--radius-full: 9999px; /* Fully rounded */
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
/* ============================================
|
|
139
|
-
SHADOWS
|
|
140
|
-
============================================ */
|
|
141
|
-
|
|
142
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
143
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
144
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
145
|
-
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1);
|
|
146
|
-
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
/* ============================================
|
|
150
|
-
TRANSITIONS
|
|
151
|
-
============================================ */
|
|
152
|
-
|
|
153
|
-
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
154
|
-
--transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
155
|
-
--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
/* ============================================
|
|
159
|
-
Z-INDEX LAYERS
|
|
160
|
-
============================================ */
|
|
161
|
-
|
|
162
|
-
--z-dropdown: 1000;
|
|
163
|
-
--z-sticky: 1020;
|
|
164
|
-
--z-modal: 1040;
|
|
165
|
-
--z-popover: 1050;
|
|
166
|
-
--z-tooltip: 1060;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
/* ============================================
|
|
171
|
-
DARK MODE OVERRIDES
|
|
172
|
-
============================================ */
|
|
173
|
-
|
|
174
|
-
.dark {
|
|
175
|
-
/* Brand Colors (Dark Mode) */
|
|
176
|
-
--color-primary: oklch(0.65 0.25 260);
|
|
177
|
-
--color-primary-hover: oklch(0.70 0.27 260);
|
|
178
|
-
|
|
179
|
-
/* Backgrounds (Dark Mode) */
|
|
180
|
-
--color-background: oklch(15% 0 0);
|
|
181
|
-
--color-background-secondary: oklch(18% 0 0);
|
|
182
|
-
--color-surface: oklch(20% 0 0);
|
|
183
|
-
--color-border: oklch(30% 0 0);
|
|
184
|
-
|
|
185
|
-
/* Text Colors (Dark Mode) */
|
|
186
|
-
--color-text-primary: oklch(95% 0 0);
|
|
187
|
-
--color-text-secondary: oklch(70% 0 0);
|
|
188
|
-
--color-text-muted: oklch(55% 0 0);
|
|
189
|
-
}
|