@xploreu/components 0.4.66 → 0.4.67
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/{chunk-FFZID5F7.js → chunk-7PQPPJO2.js} +2 -2
- package/dist/{chunk-FFZID5F7.js.map → chunk-7PQPPJO2.js.map} +1 -1
- package/dist/{chunk-DTWCRGRP.js → chunk-BNMOOOFY.js} +2 -2
- package/dist/{chunk-DTWCRGRP.js.map → chunk-BNMOOOFY.js.map} +1 -1
- package/dist/{chunk-TDAEQLUM.js → chunk-F7VAJTWI.js} +2 -2
- package/dist/{chunk-TDAEQLUM.js.map → chunk-F7VAJTWI.js.map} +1 -1
- package/dist/{chunk-R4XVXVLJ.js → chunk-ILE3MBTR.js} +2 -2
- package/dist/{chunk-R4XVXVLJ.js.map → chunk-ILE3MBTR.js.map} +1 -1
- package/dist/{chunk-AKKXXJRJ.js → chunk-MM4FBTNO.js} +2 -2
- package/dist/{chunk-AKKXXJRJ.js.map → chunk-MM4FBTNO.js.map} +1 -1
- package/dist/{chunk-SJJ74B6D.js → chunk-NJVFQXVS.js} +2 -2
- package/dist/{chunk-SJJ74B6D.js.map → chunk-NJVFQXVS.js.map} +1 -1
- package/dist/chunk-QQHSCREG.js +2 -0
- package/dist/chunk-QQHSCREG.js.map +1 -0
- package/dist/{chunk-2JX7KPG7.js → chunk-SPVZZROC.js} +2 -2
- package/dist/{chunk-2JX7KPG7.js.map → chunk-SPVZZROC.js.map} +1 -1
- package/dist/{chunk-VH4REXAJ.js → chunk-TFJ6LNOE.js} +2 -2
- package/dist/{chunk-VH4REXAJ.js.map → chunk-TFJ6LNOE.js.map} +1 -1
- package/dist/{chunk-QZRXUXCK.js → chunk-U7E7HHJZ.js} +2 -2
- package/dist/{chunk-QZRXUXCK.js.map → chunk-U7E7HHJZ.js.map} +1 -1
- package/dist/chunk-XEYTRNPN.js +2 -0
- package/dist/chunk-XEYTRNPN.js.map +1 -0
- package/dist/{chunk-MILLLLR2.js → chunk-YZEE43WX.js} +2 -2
- package/dist/{chunk-MILLLLR2.js.map → chunk-YZEE43WX.js.map} +1 -1
- package/dist/composites/combobox-chip-outside.js +1 -1
- package/dist/composites/combobox-chip.js +1 -1
- package/dist/composites/combobox-simple.js +1 -1
- package/dist/composites/filter-combobox.js +1 -1
- package/dist/composites/index.js +1 -1
- package/dist/composites/phone-input.js +1 -1
- package/dist/composites/profile-avatar.js +1 -1
- package/dist/form/form.d.ts +1 -1
- package/dist/ui/badge-blue.d.ts +2 -2
- package/dist/ui/badge-blue.js +1 -1
- package/dist/ui/badge.d.ts +6 -2
- package/dist/ui/badge.js +1 -1
- package/dist/ui/button.d.ts +2 -2
- package/dist/ui/combobox.js +1 -1
- package/dist/ui/date-multiple-picker.js +1 -1
- package/dist/ui/date-picker.d.ts +2 -2
- package/dist/ui/dialog.js +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/input-group.d.ts +2 -2
- package/dist/ui/input-new.d.ts +1 -1
- package/dist/ui/input.d.ts +1 -1
- package/dist/ui/label.d.ts +2 -2
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/rich-textarea.d.ts +2 -2
- package/dist/ui/switch.d.ts +2 -2
- package/dist/ui/textarea.d.ts +1 -1
- package/dist/ui/toggle.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-JLZNZFOO.js +0 -2
- package/dist/chunk-JLZNZFOO.js.map +0 -1
- package/dist/chunk-KPNQNOZ5.js +0 -2
- package/dist/chunk-KPNQNOZ5.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/combobox-chip.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","className","triggerClassName","contentClassName","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemAvatar","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-AKKXXJRJ.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle,\r\n ComboboxItemAvatar\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value extends { label: string; value: string; image?: string; tag?: true }> = Omit<ComboboxProps<Value, true>, \"multiple\" | \"items\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items?: Value[] | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(\r\n \"max-w-full min-w-0\",\r\n maxVisible !== undefined && \"shrink\"\r\n )}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n <span className=\"truncate\" title={item?.label || \"\"}>\r\n {item?.label || \"\"}\r\n </span>\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container} className={contentClassName}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n {(item.image !== undefined) && (\r\n <ComboboxItemAvatar\r\n src={item.image}\r\n fallbackText={[item.label?.[0], item.label?.split(\" \")?.[1]?.[0]].filter(Boolean).join(\"\")}\r\n imageAlt={item.label}\r\n />\r\n )}\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary text-body-medium-3 col-start-2\">Create: {trimmedInput}</span>\r\n )}\r\n {isInputSelected && (\r\n <ComboboxItemTitle>{trimmedInput}</ComboboxItemTitle>\r\n )}\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/combobox-chip.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","className","triggerClassName","contentClassName","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemAvatar","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-MM4FBTNO.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle,\r\n ComboboxItemAvatar\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value extends { label: string; value: string; image?: string; tag?: true }> = Omit<ComboboxProps<Value, true>, \"multiple\" | \"items\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items?: Value[] | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(\r\n \"max-w-full min-w-0\",\r\n maxVisible !== undefined && \"shrink\"\r\n )}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n <span className=\"truncate\" title={item?.label || \"\"}>\r\n {item?.label || \"\"}\r\n </span>\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container} className={contentClassName}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n {(item.image !== undefined) && (\r\n <ComboboxItemAvatar\r\n src={item.image}\r\n fallbackText={[item.label?.[0], item.label?.split(\" \")?.[1]?.[0]].filter(Boolean).join(\"\")}\r\n imageAlt={item.label}\r\n />\r\n )}\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary text-body-medium-3 col-start-2\">Create: {trimmedInput}</span>\r\n )}\r\n {isInputSelected && (\r\n <ComboboxItemTitle>{trimmedInput}</ComboboxItemTitle>\r\n )}\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,i,m,s,w}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,i,m,s,w}from'./chunk-ILE3MBTR.js';import*as l from'react';import {ChevronDownIcon,ChevronLeftIcon,ChevronRightIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function j({page:r,pageSize:a$1,total:i$1,onPageChange:b$1,onPageSizeChange:n,pageSizeOptions:m$1=[10,20,50,100],showPageSize:c=true,showRange:d=true,className:C,...N}){let u=Math.max(1,Math.ceil(i$1/a$1)),h=i$1===0?0:(r-1)*a$1+1,P=Math.min(r*a$1,i$1),s$1=l.useMemo(()=>m$1.map(e=>({label:String(e),value:e})),[m$1]),I=l.useMemo(()=>s$1.find(e=>e.value===a$1)??s$1[0],[s$1,a$1]);return jsxs("div",{className:cn("flex w-full flex-col-reverse gap-3 mt-4 sm:flex-row sm:items-center sm:justify-between border-t border-border-primary pt-3 text-body-regular-2 text-text-secondary",C),"data-slot":"pagination",...N,children:[jsxs("div",{className:"flex items-center gap-2",children:[c&&n&&jsxs(Fragment,{children:[jsx("span",{className:"text-label-regular-3 text-text-tertiary",children:"Rows per page"}),jsxs(a,{items:s$1,value:I,onValueChange:e=>{e&&n&&n(e.value);},isItemEqualToValue:(e,w)=>e.value===w.value,children:[jsxs(b,{className:"h-8 gap-2 rounded-lg border border-border-primary bg-bg-primary px-3 text-label-semibold-3 text-text-primary hover:bg-bg-secondary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-brand-primary","aria-label":"Rows per page",children:[jsx(i,{children:e=>e?e.label:String(a$1)}),jsx(ChevronDownIcon,{className:"size-3.5 text-text-tertiary"})]}),jsx(m,{className:"w-24",children:jsx(s,{children:s$1.map(e=>jsx(w,{value:e,children:e.label},e.value))})})]})]}),c&&d&&jsx("span",{className:"text-text-tertiary",children:"\xB7"}),d&&jsxs("span",{className:"text-label-regular-3 text-text-tertiary",children:[h,"\u2013",P," of ",i$1]})]}),jsxs("div",{className:"flex items-center gap-1",children:[jsx("button",{type:"button",disabled:r<=1,onClick:()=>b$1(r-1),className:"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40","aria-label":"Previous page",children:jsx(ChevronLeftIcon,{className:"size-4"})}),jsxs("span",{className:"px-2 text-label-semibold-3 text-text-primary",children:["Page ",r," / ",u]}),jsx("button",{type:"button",disabled:r>=u,onClick:()=>b$1(r+1),className:"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40","aria-label":"Next page",children:jsx(ChevronRightIcon,{className:"size-4"})})]})]})}export{j as a};//# sourceMappingURL=chunk-NJVFQXVS.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-NJVFQXVS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/pagination.tsx"],"names":["Pagination","page","pageSize","total","onPageChange","onPageSizeChange","pageSizeOptions","showPageSize","showRange","className","props","totalPages","startItem","endItem","items","opt","selectedItem","item","jsxs","cn","Fragment","jsx","Combobox","a","b","ComboboxTrigger","ComboboxValue","val","ChevronDownIcon","ComboboxPopup","ComboboxList","ComboboxItem","ChevronLeftIcon","ChevronRightIcon"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/pagination.tsx"],"names":["Pagination","page","pageSize","total","onPageChange","onPageSizeChange","pageSizeOptions","showPageSize","showRange","className","props","totalPages","startItem","endItem","items","opt","selectedItem","item","jsxs","cn","Fragment","jsx","Combobox","a","b","ComboboxTrigger","ComboboxValue","val","ChevronDownIcon","ComboboxPopup","ComboboxList","ComboboxItem","ChevronLeftIcon","ChevronRightIcon"],"mappings":"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","file":"chunk-NJVFQXVS.js","sourcesContent":["import * as React from \"react\"\r\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n Combobox,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"./combobox\"\r\n\r\nexport interface PaginationProps extends React.ComponentProps<\"div\"> {\r\n page: number\r\n pageSize: number\r\n total: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange?: (pageSize: number) => void\r\n pageSizeOptions?: number[]\r\n showPageSize?: boolean\r\n showRange?: boolean\r\n}\r\n\r\ntype PageSizeOptionItem = {\r\n label: string\r\n value: number\r\n}\r\n\r\nexport function Pagination({\r\n page,\r\n pageSize,\r\n total,\r\n onPageChange,\r\n onPageSizeChange,\r\n pageSizeOptions = [10, 20, 50, 100],\r\n showPageSize = true,\r\n showRange = true,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n const totalPages = Math.max(1, Math.ceil(total / pageSize))\r\n const startItem = total === 0 ? 0 : (page - 1) * pageSize + 1\r\n const endItem = Math.min(page * pageSize, total)\r\n\r\n const items: PageSizeOptionItem[] = React.useMemo(\r\n () => pageSizeOptions.map((opt) => ({ label: String(opt), value: opt })),\r\n [pageSizeOptions]\r\n )\r\n\r\n const selectedItem = React.useMemo(\r\n () => items.find((item) => item.value === pageSize) ?? items[0],\r\n [items, pageSize]\r\n )\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex w-full flex-col-reverse gap-3 mt-4 sm:flex-row sm:items-center sm:justify-between border-t border-border-primary pt-3 text-body-regular-2 text-text-secondary\",\r\n className\r\n )}\r\n data-slot=\"pagination\"\r\n {...props}\r\n >\r\n {/* Left: Rows per page & range */}\r\n <div className=\"flex items-center gap-2\">\r\n {showPageSize && onPageSizeChange && (\r\n <>\r\n <span className=\"text-label-regular-3 text-text-tertiary\">\r\n Rows per page\r\n </span>\r\n <Combobox<PageSizeOptionItem>\r\n items={items}\r\n value={selectedItem}\r\n onValueChange={(item) => {\r\n if (item && onPageSizeChange) {\r\n onPageSizeChange(item.value)\r\n }\r\n }}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n >\r\n <ComboboxTrigger\r\n className=\"h-8 gap-2 rounded-lg border border-border-primary bg-bg-primary px-3 text-label-semibold-3 text-text-primary hover:bg-bg-secondary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-brand-primary\"\r\n aria-label=\"Rows per page\"\r\n >\r\n <ComboboxValue>\r\n {(val) => (val ? val.label : String(pageSize))}\r\n </ComboboxValue>\r\n <ChevronDownIcon className=\"size-3.5 text-text-tertiary\" />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup className=\"w-24\">\r\n <ComboboxList>\r\n {items.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item}\r\n >\r\n {item.label}\r\n </ComboboxItem>\r\n ))}\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n </>\r\n )}\r\n\r\n {showPageSize && showRange && (\r\n <span className=\"text-text-tertiary\">·</span>\r\n )}\r\n\r\n {showRange && (\r\n <span className=\"text-label-regular-3 text-text-tertiary\">\r\n {startItem}–{endItem} of {total}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Right: Page controls */}\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n disabled={page <= 1}\r\n onClick={() => onPageChange(page - 1)}\r\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40\"\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon className=\"size-4\" />\r\n </button>\r\n\r\n <span className=\"px-2 text-label-semibold-3 text-text-primary\">\r\n Page {page} / {totalPages}\r\n </span>\r\n\r\n <button\r\n type=\"button\"\r\n disabled={page >= totalPages}\r\n onClick={() => onPageChange(page + 1)}\r\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40\"\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon className=\"size-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'react';import {mergeProps}from'@base-ui/react/merge-props';import {useRender}from'@base-ui/react/use-render';import {cva}from'class-variance-authority';import {XIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx}from'react/jsx-runtime';var m=cva("inline-flex items-center justify-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors ring-1 ring-inset",{variants:{type:{rounded:"rounded-xp-full",square:"rounded-xp-card-base-sm",modern:"rounded-xp-card-base-sm shadow-xp-xs"},color:{gray:"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200",brand:"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200",error:"bg-utility-error-50 text-utility-error-700 ring-utility-error-200",warning:"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200",success:"bg-utility-success-50 text-utility-success-700 ring-utility-success-200","gray-blue":"bg-utility-gray-blue-50 text-utility-gray-blue-700 ring-utility-gray-blue-200","blue-light":"bg-utility-blue-light-50 text-utility-blue-light-700 ring-utility-blue-light-200",blue:"bg-utility-blue-50 text-utility-blue-700 ring-utility-blue-200",indigo:"bg-utility-indigo-50 text-utility-indigo-700 ring-utility-indigo-200",purple:"bg-utility-purple-50 text-utility-purple-700 ring-utility-purple-200",pink:"bg-utility-pink-50 text-utility-pink-700 ring-utility-pink-200",orange:"bg-utility-orange-50 text-utility-orange-700 ring-utility-orange-200",premium:"bg-utility-premium-50 text-utility-premium-800 ring-utility-premium-400"},size:{xs:["text-tiny-medium py-0.5 gap-1","[&_[data-slot=badge-icon]]:size-2.5 [&_[data-slot=badge-avatar]]:size-3"],sm:["text-body-medium-3 py-0.5 gap-1","[&_[data-slot=badge-icon]]:size-3 [&_[data-slot=badge-avatar]]:size-4"],md:["text-body-medium-2 py-0.5 gap-1.5","[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4"],lg:["text-body-medium-2 py-1 gap-1.5","[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4.5"]}},compoundVariants:[{type:"modern",className:"bg-bg-primary text-text-secondary ring-border-primary"},{type:"rounded",size:"xs",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"rounded",size:"sm",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-0.75","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"rounded",size:"md",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]},{type:"rounded",size:"lg",className:["px-3","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2.5","has-[[data-slot=badge-dot]]:pl-2.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2.5","has-[[data-slot=badge-close]]:pr-1.5"]},{type:"square",size:"xs",className:["px-1","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75","has-[[data-slot=badge-dot]]:pl-0.75","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"square",size:"sm",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"square",size:"md",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"square",size:"lg",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-2","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]},{type:"modern",size:"xs",className:["px-1","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75","has-[[data-slot=badge-dot]]:pl-0.75","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"modern",size:"sm",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"modern",size:"md",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"modern",size:"lg",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-2","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]}],defaultVariants:{type:"square",color:"gray",size:"md"}});function N({className:t,type:a,color:e,variant:i,size:o,render:p,...g}){let l=e??i,b={"data-slot":"badge",className:cn(m({type:a,color:l,size:o}),t)};return useRender({defaultTagName:"span",props:mergeProps(b,g),render:p,state:{slot:"badge",type:a,color:l,size:o}})}function P({className:t,position:a="leading",children:e,...i}){return jsx("span",{"data-slot":"badge-icon","data-position":a,className:cn("inline-flex shrink-0 items-center justify-center pointer-events-none [&>svg]:size-full",t),...i,children:e})}function B({className:t,alt:a="",...e}){return jsx("img",{"data-slot":"badge-avatar",alt:a,className:cn("shrink-0 rounded-xp-full object-cover",t),...e})}function R({className:t,render:a,align:e="inline-end",...i}){let o={"data-slot":"badge-close","data-align":e,className:cn("p-0.5 inline-flex items-center justify-center rounded-xp-full hover:opacity-75 focus-visible:outline-none shrink-0 [&>svg]:size-2.5",t),type:"button",children:jsx(XIcon,{})};return useRender({defaultTagName:"button",render:a,props:mergeProps(o,i),state:{slot:"badge-close",align:e}})}function k({className:t,...a}){return jsx("span",{"data-slot":"badge-dot",className:cn("size-1.5 shrink-0 rounded-xp-full bg-current",t),...a})}export{m as a,N as b,P as c,B as d,R as e,k as f};//# sourceMappingURL=chunk-QQHSCREG.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-QQHSCREG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/badge.tsx"],"names":["badgeVariants","cva","Badge","className","type","color","variant","size","render","props","resolvedColor","defaultProps","cn","useRender","mergeProps","BadgeIcon","position","children","jsx","BadgeAvatar","alt","BadgeButton","align","XIcon","BadgeDot"],"mappings":"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","file":"chunk-QQHSCREG.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { XIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center justify-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors ring-1 ring-inset\",\r\n {\r\n variants: {\r\n type: {\r\n \"rounded\": \"rounded-xp-full\",\r\n \"square\": \"rounded-xp-card-base-sm\",\r\n \"modern\": \"rounded-xp-card-base-sm shadow-xp-xs\",\r\n },\r\n color: {\r\n gray: \"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200\",\r\n brand: \"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200\",\r\n error: \"bg-utility-error-50 text-utility-error-700 ring-utility-error-200\",\r\n warning: \"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200\",\r\n success: \"bg-utility-success-50 text-utility-success-700 ring-utility-success-200\",\r\n \"gray-blue\": \"bg-utility-gray-blue-50 text-utility-gray-blue-700 ring-utility-gray-blue-200\",\r\n \"blue-light\": \"bg-utility-blue-light-50 text-utility-blue-light-700 ring-utility-blue-light-200\",\r\n blue: \"bg-utility-blue-50 text-utility-blue-700 ring-utility-blue-200\",\r\n indigo: \"bg-utility-indigo-50 text-utility-indigo-700 ring-utility-indigo-200\",\r\n purple: \"bg-utility-purple-50 text-utility-purple-700 ring-utility-purple-200\",\r\n pink: \"bg-utility-pink-50 text-utility-pink-700 ring-utility-pink-200\",\r\n orange: \"bg-utility-orange-50 text-utility-orange-700 ring-utility-orange-200\",\r\n premium: \"bg-utility-premium-50 text-utility-premium-800 ring-utility-premium-400\",\r\n },\r\n size: {\r\n xs: [\r\n \"text-tiny-medium py-0.5 gap-1\",\r\n \"[&_[data-slot=badge-icon]]:size-2.5 [&_[data-slot=badge-avatar]]:size-3\",\r\n ],\r\n sm: [\r\n \"text-body-medium-3 py-0.5 gap-1\",\r\n \"[&_[data-slot=badge-icon]]:size-3 [&_[data-slot=badge-avatar]]:size-4\",\r\n ],\r\n md: [\r\n \"text-body-medium-2 py-0.5 gap-1.5\",\r\n \"[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4\",\r\n ],\r\n lg: [\r\n \"text-body-medium-2 py-1 gap-1.5\",\r\n \"[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4.5\",\r\n ],\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n type: \"modern\",\r\n className: \"bg-bg-primary text-text-secondary ring-border-primary\",\r\n },\r\n // Rounded (Pill) Variants - Untitled UI exact paddings\r\n {\r\n type: \"rounded\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"sm\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.75\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"md\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"lg\",\r\n className: [\r\n \"px-3\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-2.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2.5\",\r\n \"has-[[data-slot=badge-close]]:pr-1.5\",\r\n ],\r\n },\r\n // Square & Modern Variants - Untitled UI exact paddings\r\n {\r\n type: \"square\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75\",\r\n \"has-[[data-slot=badge-dot]]:pl-0.75\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"sm\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"md\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"lg\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-2\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75\",\r\n \"has-[[data-slot=badge-dot]]:pl-0.75\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"sm\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"md\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"lg\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-2\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n ],\r\n defaultVariants: {\r\n type: \"square\",\r\n color: \"gray\",\r\n size: \"md\",\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends Omit<React.ComponentProps<\"span\">, \"color\">,\r\n VariantProps<typeof badgeVariants> {\r\n /**\r\n * Alias for `color` to allow ergonomic `<Badge variant=\"premium\" />` syntax.\r\n */\r\n variant?: VariantProps<typeof badgeVariants>[\"color\"]\r\n}\r\n\r\nfunction Badge({\r\n className,\r\n type,\r\n color,\r\n variant,\r\n size,\r\n render,\r\n ...props\r\n}: BadgeProps & useRender.ComponentProps<\"span\">) {\r\n // ponytail: alias variant -> color agar fleksibel dipanggil via color=\"premium\" maupun variant=\"premium\"\r\n const resolvedColor = color ?? variant\r\n const defaultProps = {\r\n \"data-slot\": \"badge\",\r\n className: cn(badgeVariants({ type, color: resolvedColor, size }), className),\r\n }\r\n\r\n return useRender({\r\n defaultTagName: \"span\",\r\n props: mergeProps(defaultProps, props),\r\n render,\r\n state: {\r\n slot: \"badge\",\r\n type,\r\n color: resolvedColor,\r\n size,\r\n },\r\n })\r\n}\r\n\r\nexport interface BadgeIconProps extends React.ComponentProps<\"span\"> {\r\n children?: React.ReactNode\r\n position?: \"leading\" | \"trailing\"\r\n}\r\n\r\nfunction BadgeIcon({\r\n className,\r\n position = \"leading\",\r\n children,\r\n ...props\r\n}: BadgeIconProps) {\r\n return (\r\n <span\r\n data-slot=\"badge-icon\"\r\n data-position={position}\r\n className={cn(\"inline-flex shrink-0 items-center justify-center pointer-events-none [&>svg]:size-full\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n )\r\n}\r\n\r\nexport interface BadgeAvatarProps extends React.ComponentProps<\"img\"> {\r\n src?: string\r\n alt?: string\r\n}\r\n\r\nfunction BadgeAvatar({\r\n className,\r\n alt = \"\",\r\n ...props\r\n}: BadgeAvatarProps) {\r\n return (\r\n <img\r\n data-slot=\"badge-avatar\"\r\n alt={alt}\r\n className={cn(\"shrink-0 rounded-xp-full object-cover\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport interface BadgeButtonProps extends useRender.ComponentProps<\"button\"> {\r\n align?: \"inline-end\" | \"inline-start\"\r\n}\r\n\r\nfunction BadgeButton({\r\n className,\r\n render,\r\n align = \"inline-end\",\r\n ...props\r\n}: BadgeButtonProps) {\r\n const defaultProps = {\r\n \"data-slot\": \"badge-close\",\r\n \"data-align\": align,\r\n className: cn(\"p-0.5 inline-flex items-center justify-center rounded-xp-full hover:opacity-75 focus-visible:outline-none shrink-0 [&>svg]:size-2.5\", className),\r\n type: \"button\" as const,\r\n children: (\r\n <XIcon />\r\n ),\r\n }\r\n\r\n return useRender({\r\n defaultTagName: \"button\",\r\n render,\r\n props: mergeProps(defaultProps, props),\r\n state: {\r\n slot: \"badge-close\",\r\n align,\r\n }\r\n })\r\n}\r\n\r\nfunction BadgeDot({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"badge-dot\"\r\n className={cn(\"size-1.5 shrink-0 rounded-xp-full bg-current\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Badge, BadgeIcon, BadgeAvatar, BadgeButton, BadgeDot, badgeVariants }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b as b$2,a as a$3}from'./chunk-54SPTNMS.js';import {a as a$4}from'./chunk-PC5CKARI.js';import {a as a$1,b,c}from'./chunk-NGSCUYDU.js';import {b as b$1}from'./chunk-DIXFDLPZ.js';import {a as a$2}from'./chunk-HUGJMMHC.js';import {b as b$3,e}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {b as b$2,a as a$3}from'./chunk-54SPTNMS.js';import {a as a$4}from'./chunk-PC5CKARI.js';import {a as a$1,b,c}from'./chunk-NGSCUYDU.js';import {b as b$1}from'./chunk-DIXFDLPZ.js';import {a as a$2}from'./chunk-HUGJMMHC.js';import {b as b$3,e}from'./chunk-QQHSCREG.js';import*as a from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {format}from'date-fns';import {ChevronDown}from'lucide-react';import'react-day-picker';import {cn}from'@xploreu/lib/cn';import'class-variance-authority';import {jsxs,jsx}from'react/jsx-runtime';function re({className:N,value:w,onValueChange:c$1,defaultValue:V,required:l,disabled:m,placeholder:S="Pick dates",disabledDates:B,dateFormat:K="LLL dd, y",chipDateFormat:R="d MMM",maxVisible:d,size:s,...F}){let O=a.useCallback(e=>{l?e?.length&&c$1?.(e):c$1?.(e);},[c$1,l]),[t,u]=useControlledState({value:w,defaultValue:V,onChange:O}),[T,I]=a.useState(t?.[0]||new Date),[L,q]=a.useState(false),i=!!t?.length,g=a.useMemo(()=>t?[...t].sort((e,o)=>e.getTime()-o.getTime()):[],[t]),$=a.useCallback(e=>{let o=t?.filter(E=>E.getTime()!==e.getTime());l&&!o?.length||u(o);},[t,u,l]),A=d!==void 0?g.slice(0,d):g,h=d!==void 0?g.length-d:0;return jsxs("div",{className:"flex flex-col gap-2 w-full",children:[jsxs(a$1,{open:m?false:L,onOpenChange:q,children:[jsx(b,{className:"w-full",render:jsxs(b$1,{className:cn(a$3({size:s}),i&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary",N),variant:null,size:null,disabled:m,children:[jsxs("span",{className:cn("flex min-w-0 items-center",s==="3xs"||s==="2xs"?"gap-1.5":"gap-2"),children:[jsx(a$2,{className:cn(b$2({size:s}),i?"text-fg-brand-primary":"text-fg-quaternary")}),jsx("span",{className:"truncate",children:i?`${t.length} ${t.length===1?"date":"dates"} selected`:S})]}),jsx(ChevronDown,{className:cn(b$2({size:s}),"transition-transform group-data-[popup-open]:rotate-180",i?"text-fg-brand-primary":"text-fg-quaternary")})]})}),jsx(c,{className:"w-auto border-0 rounded-[20px] p-xp-none bg-transparent",style:{background:"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)",backdropFilter:"blur(20px)",boxShadow:"0px 30px 60px 0px #0000001A"},children:jsx(a$4,{autoFocus:true,disabled:B,mode:"multiple",month:T,selected:t,onMonthChange:I,onSelect:e=>{l&&!e?.length||u(e);},...F})})]}),i&&jsxs("div",{className:"flex flex-wrap gap-2",children:[A.map(e$1=>jsxs(b$3,{color:"brand",size:"lg",className:"ring-1 ring-border-brand text-body-medium-3",children:[format(e$1,R),!m&&jsx(e,{className:"text-fg-quaternary",onClick:o=>{o.stopPropagation(),$(e$1);}})]},e$1.toISOString())),h>0&&jsxs(b$3,{color:"brand",size:"lg",className:"ring-1 ring-border-brand text-body-medium-3",children:["+",h]})]})]})}export{re as a};//# sourceMappingURL=chunk-SPVZZROC.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-SPVZZROC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/date-multiple-picker.tsx"],"names":["DateMultiplePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","chipDateFormat","maxVisible","size","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","sortedValue","a","b","handleRemoveDate","dateToRemove","newValue","d","visibleChips","overflowCount","jsxs","Popover","jsx","PopoverTrigger","Button","cn","datePickerVariants","calendar_icon_default","datePickerIconVariants","ChevronDown","PopoverPopup","Calendar","Badge","format","BadgeButton","e"],"mappings":"ujBAwCA,SAASA,GAAmB,CAC1B,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAOC,CAAAA,CACP,aAAA,CAAAC,IACA,YAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,WAAA,CAAAC,CAAAA,CAAc,YAAA,CACd,aAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,EAAa,WAAA,CACb,cAAA,CAAAC,EAAiB,OAAA,CACjB,UAAA,CAAAC,EACA,IAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAA4B,CAC1B,IAAMC,CAAAA,CAA0B,CAAA,CAAA,WAAA,CAC7BC,GAA4B,CACvBV,CAAAA,CACEU,GAAK,MAAA,EAAQZ,GAAAA,GAAgBY,CAAG,CAAA,CAEpCZ,GAAAA,GAAgBY,CAAG,EAEvB,CAAA,CACA,CAACZ,IAAeE,CAAQ,CAC1B,EAEM,CAACW,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,kBAAAA,CAAuC,CAC/D,MAAOhB,CAAAA,CACP,YAAA,CAAAE,EACA,QAAA,CAAUU,CACZ,CAAC,CAAA,CAEK,CAACK,CAAAA,CAAcC,CAAe,CAAA,CAAU,CAAA,CAAA,QAAA,CAA2BJ,IAAQ,CAAC,CAAA,EAAK,IAAI,IAAM,CAAA,CAC3F,CAACK,CAAAA,CAAQC,CAAS,EAAU,CAAA,CAAA,QAAA,CAAS,KAAK,EAE1CC,CAAAA,CAAW,CAAC,CAACP,CAAAA,EAAO,MAAA,CAEpBQ,EAAoB,CAAA,CAAA,OAAA,CAAQ,IAC3BR,CAAAA,CACE,CAAC,GAAGA,CAAK,EAAE,IAAA,CAAK,CAACS,EAAGC,CAAAA,GAAMD,CAAAA,CAAE,SAAQ,CAAIC,CAAAA,CAAE,OAAA,EAAS,CAAA,CADvC,GAElB,CAACV,CAAK,CAAC,CAAA,CAEJW,CAAAA,CAAyB,cAC5BC,CAAAA,EAAuB,CACtB,IAAMC,CAAAA,CAAWb,CAAAA,EAAO,MAAA,CAAQc,GAAMA,CAAAA,CAAE,OAAA,KAAcF,CAAAA,CAAa,OAAA,EAAS,CAAA,CACxEvB,CAAAA,EAAY,CAACwB,CAAAA,EAAU,MAAA,EAC3BZ,CAAAA,CAASY,CAAQ,EACnB,CAAA,CACA,CAACb,CAAAA,CAAOC,CAAAA,CAAUZ,CAAQ,CAC5B,CAAA,CAEM0B,CAAAA,CAAepB,CAAAA,GAAe,MAAA,CAAYa,CAAAA,CAAY,MAAM,CAAA,CAAGb,CAAU,EAAIa,CAAAA,CAC7EQ,CAAAA,CAAgBrB,IAAe,MAAA,CAAYa,CAAAA,CAAY,MAAA,CAASb,CAAAA,CAAa,CAAA,CAEnF,OACEsB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BACb,QAAA,CAAA,CAAAA,IAAAA,CAACC,IAAA,CAAQ,IAAA,CAAM5B,CAAAA,CAAW,KAAA,CAAQe,CAAAA,CAAQ,YAAA,CAAcC,EACtD,QAAA,CAAA,CAAAa,GAAAA,CAACC,EAAA,CACC,SAAA,CAAU,SACV,MAAA,CACEH,IAAAA,CAACI,IAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAmB,CAAE,KAAA3B,CAAK,CAAC,EAC3BW,CAAAA,EACA,mEAAA,CACAtB,CACF,CAAA,CACA,OAAA,CAAS,IAAA,CACT,KAAM,IAAA,CACN,QAAA,CAAUK,EAEV,QAAA,CAAA,CAAA2B,IAAAA,CAAC,QACC,SAAA,CAAWK,EAAAA,CACT,2BAAA,CACA1B,CAAAA,GAAS,KAAA,EAASA,CAAAA,GAAS,MAAQ,SAAA,CAAY,OACjD,EAEA,QAAA,CAAA,CAAAuB,GAAAA,CAACK,IAAA,CACC,SAAA,CAAWF,EAAAA,CACTG,GAAAA,CAAuB,CAAE,IAAA,CAAA7B,CAAK,CAAC,CAAA,CAC/BW,EAAW,uBAAA,CAA0B,oBACvC,EACF,CAAA,CACAY,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAA,CACb,QAAA,CAAAZ,EACG,CAAA,EAAGP,CAAAA,CAAM,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAM,SAAW,CAAA,CAAI,MAAA,CAAS,OAAO,CAAA,SAAA,CAAA,CACxDT,CAAAA,CACN,CAAA,CAAA,CACF,EACA4B,GAAAA,CAACO,WAAAA,CAAA,CACC,SAAA,CAAWJ,EAAAA,CACTG,IAAuB,CAAE,IAAA,CAAA7B,CAAK,CAAC,CAAA,CAC/B,yDAAA,CACAW,EAAW,uBAAA,CAA0B,oBACvC,EACF,CAAA,CAAA,CACF,CAAA,CAEJ,EACAY,GAAAA,CAACQ,CAAAA,CAAA,CACC,SAAA,CAAU,yDAAA,CACV,KAAA,CAAO,CACL,UAAA,CACE,2LAAA,CACF,eAAgB,YAAA,CAChB,SAAA,CAAW,6BACb,CAAA,CAEA,QAAA,CAAAR,IAACS,GAAAA,CAAA,CACC,UAAS,IAAA,CACT,QAAA,CAAUpC,EACV,IAAA,CAAK,UAAA,CACL,MAAOW,CAAAA,CACP,QAAA,CAAUH,CAAAA,CACV,aAAA,CAAeI,CAAAA,CACf,QAAA,CAAWL,GAAQ,CACbV,CAAAA,EAAY,CAACU,CAAAA,EAAK,MAAA,EACtBE,EAASF,CAAG,EACd,CAAA,CACC,GAAGF,CAAAA,CACN,CAAA,CACF,GACF,CAAA,CAECU,CAAAA,EACCU,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBACZ,QAAA,CAAA,CAAAF,CAAAA,CAAa,GAAA,CAAKD,GAAAA,EACjBG,IAAAA,CAACY,GAAAA,CAAA,CAEC,KAAA,CAAM,OAAA,CACN,KAAK,IAAA,CACL,SAAA,CAAU,8CAET,QAAA,CAAA,CAAAC,MAAAA,CAAOhB,GAAAA,CAAGpB,CAAc,CAAA,CACxB,CAACJ,GACA6B,GAAAA,CAACY,CAAAA,CAAA,CACC,SAAA,CAAU,oBAAA,CACV,QAAUC,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClBrB,CAAAA,CAAiBG,GAAC,EACpB,CAAA,CACF,IAbGA,GAAAA,CAAE,WAAA,EAeT,CACD,CAAA,CACAE,CAAAA,CAAgB,CAAA,EACfC,IAAAA,CAACY,GAAAA,CAAA,CACC,KAAA,CAAM,OAAA,CACN,KAAK,IAAA,CACL,SAAA,CAAU,8CACX,QAAA,CAAA,CAAA,GAAA,CACGb,CAAAA,CAAAA,CACJ,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAEJ","file":"chunk-2JX7KPG7.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { format } from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type Matcher } from \"react-day-picker\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type CalendarProps } from \"./calendar\"\r\nimport { datePickerIconVariants, datePickerVariants } from \"./date-picker\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\nimport { Badge, BadgeButton } from \"./badge\"\r\n\r\nexport type DateMultiplePickerProps = {\r\n className?: string\r\n value?: Date[]\r\n defaultValue?: Date[]\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n dateFormat?: string\r\n chipDateFormat?: string\r\n /** Maximum number of chips to show outside before collapsing the rest into a \"+N\" chip. */\r\n maxVisible?: number\r\n} & ({\r\n required: true\r\n onValueChange?: (value: Date[]) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: Date[] | undefined) => void\r\n}) & Omit<CalendarProps, \"mode\" | \"selected\" | \"onSelect\" | \"month\" | \"onMonthChange\">\r\n & VariantProps<typeof datePickerVariants>\r\n\r\nfunction DateMultiplePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick dates\",\r\n disabledDates,\r\n dateFormat = \"LLL dd, y\",\r\n chipDateFormat = \"d MMM\",\r\n maxVisible,\r\n size,\r\n ...props\r\n}: DateMultiplePickerProps) {\r\n const handleValueChange = React.useCallback(\r\n (val: Date[] | undefined) => {\r\n if (required) {\r\n if (val?.length) onValueChange?.(val)\r\n } else {\r\n onValueChange?.(val)\r\n }\r\n },\r\n [onValueChange, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<Date[] | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: handleValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.[0] || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const hasValue = !!value?.length\r\n\r\n const sortedValue = React.useMemo(() => {\r\n if (!value) return []\r\n return [...value].sort((a, b) => a.getTime() - b.getTime())\r\n }, [value])\r\n\r\n const handleRemoveDate = React.useCallback(\r\n (dateToRemove: Date) => {\r\n const newValue = value?.filter((d) => d.getTime() !== dateToRemove.getTime())\r\n if (required && !newValue?.length) return\r\n setValue(newValue)\r\n },\r\n [value, setValue, required],\r\n )\r\n\r\n const visibleChips = maxVisible !== undefined ? sortedValue.slice(0, maxVisible) : sortedValue\r\n const overflowCount = maxVisible !== undefined ? sortedValue.length - maxVisible : 0\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 w-full\">\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n className=\"w-full\"\r\n render={\r\n <Button\r\n className={cn(\r\n datePickerVariants({ size }),\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span\r\n className={cn(\r\n \"flex min-w-0 items-center\",\r\n size === \"3xs\" || size === \"2xs\" ? \"gap-1.5\" : \"gap-2\",\r\n )}\r\n >\r\n <CalendarIcon\r\n className={cn(\r\n datePickerIconVariants({ size }),\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {hasValue\r\n ? `${value.length} ${value.length === 1 ? \"date\" : \"dates\"} selected`\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n datePickerIconVariants({ size }),\r\n \"transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className=\"w-auto border-0 rounded-[20px] p-xp-none bg-transparent\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)\",\r\n backdropFilter: \"blur(20px)\",\r\n boxShadow: \"0px 30px 60px 0px #0000001A\",\r\n }}\r\n >\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"multiple\"\r\n month={currentMonth}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onSelect={(val) => {\r\n if (required && !val?.length) return\r\n setValue(val)\r\n }}\r\n {...props}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n\r\n {hasValue && (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {visibleChips.map((d) => (\r\n <Badge\r\n key={d.toISOString()}\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n {format(d, chipDateFormat)}\r\n {!disabled && (\r\n <BadgeButton\r\n className=\"text-fg-quaternary\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n handleRemoveDate(d)\r\n }}\r\n />\r\n )}\r\n </Badge>\r\n ))}\r\n {overflowCount > 0 && (\r\n <Badge\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n +{overflowCount}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { DateMultiplePicker }"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/date-multiple-picker.tsx"],"names":["DateMultiplePicker","className","valueProp","onValueChange","defaultValue","required","disabled","placeholder","disabledDates","dateFormat","chipDateFormat","maxVisible","size","props","handleValueChange","val","value","setValue","useControlledState","currentMonth","setCurrentMonth","isOpen","setIsOpen","hasValue","sortedValue","a","b","handleRemoveDate","dateToRemove","newValue","d","visibleChips","overflowCount","jsxs","Popover","jsx","PopoverTrigger","Button","cn","datePickerVariants","calendar_icon_default","datePickerIconVariants","ChevronDown","PopoverPopup","Calendar","Badge","format","BadgeButton","e"],"mappings":"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","file":"chunk-SPVZZROC.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { format } from \"date-fns\"\r\nimport { ChevronDown } from \"lucide-react\"\r\nimport { type Matcher } from \"react-day-picker\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { CalendarIcon } from \"../icons\"\r\nimport { Button } from \"./button\"\r\nimport { Calendar, type CalendarProps } from \"./calendar\"\r\nimport { datePickerIconVariants, datePickerVariants } from \"./date-picker\"\r\nimport { Popover, PopoverPopup, PopoverTrigger } from \"./popover\"\r\nimport { Badge, BadgeButton } from \"./badge\"\r\n\r\nexport type DateMultiplePickerProps = {\r\n className?: string\r\n value?: Date[]\r\n defaultValue?: Date[]\r\n required?: boolean\r\n disabled?: boolean\r\n placeholder?: string\r\n disabledDates?: Matcher | Matcher[] | undefined\r\n dateFormat?: string\r\n chipDateFormat?: string\r\n /** Maximum number of chips to show outside before collapsing the rest into a \"+N\" chip. */\r\n maxVisible?: number\r\n} & ({\r\n required: true\r\n onValueChange?: (value: Date[]) => void\r\n} | {\r\n required?: false\r\n onValueChange?: (value: Date[] | undefined) => void\r\n}) & Omit<CalendarProps, \"mode\" | \"selected\" | \"onSelect\" | \"month\" | \"onMonthChange\">\r\n & VariantProps<typeof datePickerVariants>\r\n\r\nfunction DateMultiplePicker({\r\n className,\r\n value: valueProp,\r\n onValueChange,\r\n defaultValue,\r\n required,\r\n disabled,\r\n placeholder = \"Pick dates\",\r\n disabledDates,\r\n dateFormat = \"LLL dd, y\",\r\n chipDateFormat = \"d MMM\",\r\n maxVisible,\r\n size,\r\n ...props\r\n}: DateMultiplePickerProps) {\r\n const handleValueChange = React.useCallback(\r\n (val: Date[] | undefined) => {\r\n if (required) {\r\n if (val?.length) onValueChange?.(val)\r\n } else {\r\n onValueChange?.(val)\r\n }\r\n },\r\n [onValueChange, required],\r\n )\r\n\r\n const [value, setValue] = useControlledState<Date[] | undefined>({\r\n value: valueProp,\r\n defaultValue,\r\n onChange: handleValueChange,\r\n })\r\n\r\n const [currentMonth, setCurrentMonth] = React.useState<Date | undefined>(value?.[0] || new Date())\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const hasValue = !!value?.length\r\n\r\n const sortedValue = React.useMemo(() => {\r\n if (!value) return []\r\n return [...value].sort((a, b) => a.getTime() - b.getTime())\r\n }, [value])\r\n\r\n const handleRemoveDate = React.useCallback(\r\n (dateToRemove: Date) => {\r\n const newValue = value?.filter((d) => d.getTime() !== dateToRemove.getTime())\r\n if (required && !newValue?.length) return\r\n setValue(newValue)\r\n },\r\n [value, setValue, required],\r\n )\r\n\r\n const visibleChips = maxVisible !== undefined ? sortedValue.slice(0, maxVisible) : sortedValue\r\n const overflowCount = maxVisible !== undefined ? sortedValue.length - maxVisible : 0\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 w-full\">\r\n <Popover open={disabled ? false : isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n className=\"w-full\"\r\n render={\r\n <Button\r\n className={cn(\r\n datePickerVariants({ size }),\r\n hasValue &&\r\n \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n className,\r\n )}\r\n variant={null}\r\n size={null}\r\n disabled={disabled}\r\n >\r\n <span\r\n className={cn(\r\n \"flex min-w-0 items-center\",\r\n size === \"3xs\" || size === \"2xs\" ? \"gap-1.5\" : \"gap-2\",\r\n )}\r\n >\r\n <CalendarIcon\r\n className={cn(\r\n datePickerIconVariants({ size }),\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n <span className=\"truncate\">\r\n {hasValue\r\n ? `${value.length} ${value.length === 1 ? \"date\" : \"dates\"} selected`\r\n : placeholder}\r\n </span>\r\n </span>\r\n <ChevronDown\r\n className={cn(\r\n datePickerIconVariants({ size }),\r\n \"transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\",\r\n )}\r\n />\r\n </Button>\r\n }\r\n />\r\n <PopoverPopup\r\n className=\"w-auto border-0 rounded-[20px] p-xp-none bg-transparent\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, rgba(46, 51, 90, 0) 0%, rgba(28, 27, 51, 0.04) 100%), radial-gradient(146.13% 118.42% at 50% -15.5%, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0) 99.59%)\",\r\n backdropFilter: \"blur(20px)\",\r\n boxShadow: \"0px 30px 60px 0px #0000001A\",\r\n }}\r\n >\r\n <Calendar\r\n autoFocus\r\n disabled={disabledDates}\r\n mode=\"multiple\"\r\n month={currentMonth}\r\n selected={value}\r\n onMonthChange={setCurrentMonth}\r\n onSelect={(val) => {\r\n if (required && !val?.length) return\r\n setValue(val)\r\n }}\r\n {...props}\r\n />\r\n </PopoverPopup>\r\n </Popover>\r\n\r\n {hasValue && (\r\n <div className=\"flex flex-wrap gap-2\">\r\n {visibleChips.map((d) => (\r\n <Badge\r\n key={d.toISOString()}\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n {format(d, chipDateFormat)}\r\n {!disabled && (\r\n <BadgeButton\r\n className=\"text-fg-quaternary\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n handleRemoveDate(d)\r\n }}\r\n />\r\n )}\r\n </Badge>\r\n ))}\r\n {overflowCount > 0 && (\r\n <Badge\r\n color=\"brand\"\r\n size=\"lg\"\r\n className=\"ring-1 ring-border-brand text-body-medium-3\"\r\n >\r\n +{overflowCount}\r\n </Badge>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { DateMultiplePicker }"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1}from'./chunk-25CWH4HQ.js';import {a}from'./chunk-W2HFGSVH.js';import {b,c,d}from'./chunk-WQABSLMR.js';import {b as b$1}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1}from'./chunk-25CWH4HQ.js';import {a}from'./chunk-W2HFGSVH.js';import {b,c,d}from'./chunk-WQABSLMR.js';import {b as b$1}from'./chunk-QQHSCREG.js';import*as o from'react';import {cva}from'class-variance-authority';import {CircleIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';var q=[{status:"open-to-all",label:"Open to All Opportunities",badgeColor:"gray"},{status:"open-to-work",label:"Open to Work",badgeColor:"success"},{status:"open-to-freelance",label:"Open to Freelance",badgeColor:"warning"},{status:"open-to-coach",label:"Open to Coach",badgeColor:"blue-light"}],F=cva("flex flex-col items-center relative",{variants:{size:{xs:"gap-0.5 w-6",sm:"gap-0.5 w-8",md:"gap-0.5 w-10",lg:"gap-1 w-12",xl:"gap-1 w-14","2xl":"gap-2 w-16","3xl":"gap-2 w-20"}},defaultVariants:{size:"sm"}}),L=cva(void 0,{variants:{size:{xs:"rounded-xp-card-base-xxs p-0.5 h-2 font-semibold text-[5px] leading-2",sm:"rounded-xp-card-base-xxs p-1 h-2.5 font-semibold text-[6px] leading-2.5",md:"rounded-xp-card-base-xxs px-1 h-3.5 font-semibold text-[6px] leading-2.5",lg:"rounded-xp-card-base-xs px-1 h-4 text-body-semibold-caption",xl:"px-1 h-6 text-body-semibold-xs","2xl":"px-2 h-9 text-body-semibold-sm","3xl":"px-2 h-10 text-label-semibold-4"}},defaultVariants:{size:"sm"}}),M=cva(void 0,{variants:{size:{xs:"border-2",sm:"border-2",md:"border-[2.5px]",lg:"border-3",xl:"border-[3.5px]","2xl":"border-4","3xl":"border-4"}},defaultVariants:{size:"sm"}});function J({avatarClassName:h,badgeClassName:N,imageSrc:r,avatarImageClassName:A,imageAlt:m,className:C,status:a$2,size:s,isVerified:z,onEdit:f,onClickAvatar:w,variant:d$1="profile",isOnline:j,companyLogoSrc:t,bordered:V=true,badged:P=false,fallbackText:v,...R}){let p=o.useMemo(()=>q.find(I=>I.status===a$2),[a$2]),O=o.useMemo(()=>{switch(d$1){case "company":return "/images/fallback-company.jpeg";case "university":return "/images/fallback-university.jpeg";case "group":return "/images/fallback-user-group.jpeg";default:return "/images/fallback-user.jpeg"}},[d$1]),B=o.useMemo(()=>{if(r)return typeof r=="string"?r:URL.createObjectURL(r)},[r]),c$1=o.useMemo(()=>{if(t)return typeof t=="string"?t:URL.createObjectURL(t)},[t]);return jsxs("div",{className:cn(F({size:s,className:C})),"data-slot":"profile-avatar",...R,children:[jsxs("div",{className:"relative group size-full",children:[jsxs(b,{className:cn(V&&d$1==="profile"&&[M({size:s}),a$2?"border-transparent bg-[linear-gradient(90deg,var(--color-bg-primary),var(--color-bg-primary)),var(--gradient-avatar-outline)] [background-clip:padding-box,border-box] [background-origin:padding-box,border-box]":"border-border-secondary",a$2==="open-to-work"&&"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]",a$2==="open-to-freelance"&&"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentoprofesional)]",a$2==="open-to-coach"&&"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentocoach)]",a$2==="open-to-all"&&"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]"],h),size:s,onClick:w,children:[jsx(c,{alt:m,className:cn("size-full bg-bg-primary object-cover",A),src:B}),v?jsx(d,{render:jsx("div",{className:"flex aspect-square size-full items-center justify-center rounded-xp-card-base-sm border-2 border-border-secondary bg-bg-tertiary text-label-semibold-2 text-text-quaternary",children:v})}):jsx(d,{render:jsx("img",{alt:m||"Avatar Fallback",className:"aspect-square size-full bg-bg-primary object-cover",src:O})})]}),f&&jsx("div",{className:"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer",id:"avatar-upload-trigger",onClick:f,children:jsx("div",{className:"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle",children:jsx(a,{className:"size-6"})})}),j&&!c$1&&jsx(CircleIcon,{className:"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]"}),c$1!==void 0&&jsxs(b,{className:"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px]",children:[jsx(c,{alt:"Company Logo",className:"bg-bg-primary object-cover",src:c$1}),jsx(d,{render:jsx("img",{alt:"Company Logo Fallback",className:"aspect-square size-full bg-bg-primary object-cover",src:"/images/fallback-company.jpeg"})})]})]}),P&&p&&jsx(b$1,{className:cn(L({size:s,className:N})),color:p.badgeColor,size:"sm",children:p.label}),z&&jsx("div",{className:"absolute -bottom-1 -right-1",children:jsx(a$1,{className:"size-4 text-[#068BEE]"})})]})}export{J as a};//# sourceMappingURL=chunk-TFJ6LNOE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-TFJ6LNOE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/profile-avatar.tsx"],"names":["profileAvatarStatus","profileAvatarVariants","cva","profileAvatarBadgeVariants","profileAvatarBorderWidthVariants","ProfileAvatar","avatarClassName","badgeClassName","imageSrc","avatarImageClassName","imageAlt","className","status","size","isVerified","onEdit","onClickAvatar","variant","isOnline","companyLogoSrc","bordered","badged","fallbackText","props","activeStatus","s","fallbackImage","normalizedImageSrc","normalizedCompanyLogoSrc","jsxs","cn","Avatar","jsx","AvatarImage","AvatarFallback","upload_pictures_on_profile_icon_default","CircleIcon","Badge","verified_icon_default"],"mappings":"qVAsBA,IAAMA,CAAAA,CAIA,CACF,CACE,MAAA,CAAQ,aAAA,CACR,KAAA,CAAO,2BAAA,CACP,WAAY,MACd,CAAA,CACA,CACE,MAAA,CAAQ,cAAA,CACR,KAAA,CAAO,cAAA,CACP,UAAA,CAAY,SACd,CAAA,CACA,CACE,MAAA,CAAQ,mBAAA,CACR,KAAA,CAAO,mBAAA,CACP,UAAA,CAAY,SACd,CAAA,CACA,CACE,MAAA,CAAQ,eAAA,CACR,KAAA,CAAO,eAAA,CACP,UAAA,CAAY,YACd,CACF,CAAA,CAEIC,CAAAA,CAAwBC,GAAAA,CAAI,qCAAA,CAAuC,CACvE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,aAAA,CACJ,EAAA,CAAI,aAAA,CACJ,EAAA,CAAI,cAAA,CACJ,EAAA,CAAI,YAAA,CACJ,EAAA,CAAI,YAAA,CACJ,MAAO,YAAA,CACP,KAAA,CAAO,YACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IACR,CACF,CAAC,CAAA,CAEKC,CAAAA,CAA6BD,GAAAA,CAAI,OAAW,CAChD,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,uEAAA,CACJ,EAAA,CAAI,yEAAA,CACJ,EAAA,CAAI,0EAAA,CACJ,EAAA,CAAI,6DAAA,CACJ,EAAA,CAAI,gCAAA,CACJ,KAAA,CAAO,gCAAA,CACP,KAAA,CAAO,iCACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IACR,CACF,CAAC,CAAA,CAEKE,CAAAA,CAAmCF,GAAAA,CAAI,OAAW,CACtD,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,gBAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,iBACJ,KAAA,CAAO,UAAA,CACP,KAAA,CAAO,UACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IACR,CACF,CAAC,CAAA,CAED,SAASG,EAAc,CACrB,eAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,oBAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,GAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,GAAAA,CAAU,SAAA,CACV,QAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,IAAA,CACX,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,YAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAiBG,CACD,IAAMC,CAAAA,CAAqB,CAAA,CAAA,OAAA,CAAQ,IAC1BxB,CAAAA,CAAoB,IAAA,CAAMyB,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAWb,GAAM,CAAA,CACzD,CAACA,GAAM,CAAC,CAAA,CAELc,CAAAA,CAAsB,CAAA,CAAA,OAAA,CAAQ,IAAM,CACxC,OAAQT,GAAAA,EACN,KAAK,SAAA,CACH,OAAO,+BAAA,CACT,KAAK,YAAA,CACH,OAAO,kCAAA,CACT,KAAK,OAAA,CACH,OAAO,kCAAA,CACT,QACE,OAAO,4BACX,CACF,CAAA,CAAG,CAACA,GAAO,CAAC,CAAA,CAENU,CAAAA,CAA2B,CAAA,CAAA,OAAA,CAAQ,IAAM,CAC7C,GAAKnB,CAAAA,CACL,OAAI,OAAOA,CAAAA,EAAa,QAAA,CAAiBA,CAAAA,CAClC,GAAA,CAAI,eAAA,CAAgBA,CAAQ,CACrC,CAAA,CAAG,CAACA,CAAQ,CAAC,CAAA,CAEPoB,GAAAA,CAAiC,UAAQ,IAAM,CACnD,GAAKT,CAAAA,CACL,OAAI,OAAOA,CAAAA,EAAmB,QAAA,CAAiBA,CAAAA,CACxC,GAAA,CAAI,eAAA,CAAgBA,CAAc,CAC3C,CAAA,CAAG,CAACA,CAAc,CAAC,CAAA,CAEnB,OACEU,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CAAG7B,CAAAA,CAAsB,CAAE,IAAA,CAAAY,CAAAA,CAAM,SAAA,CAAAF,CAAU,CAAC,CAAC,CAAA,CACxD,WAAA,CAAU,gBAAA,CACT,GAAGY,CAAAA,CAEJ,QAAA,CAAA,CAAAM,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAACE,CAAAA,CAAA,CACC,UAAWD,EAAAA,CACTV,CAAAA,EAAYH,GAAAA,GAAY,SAAA,EAAa,CACnCb,CAAAA,CAAiC,CAAE,IAAA,CAAAS,CAAK,CAAC,CAAA,CACzCD,GAAAA,CACI,mNAAA,CACA,yBAAA,CACJA,MAAW,cAAA,EAAkB,uEAAA,CAC7BA,GAAAA,GAAW,mBAAA,EAAuB,8EAAA,CAClCA,GAAAA,GAAW,eAAA,EAAmB,wEAAA,CAC9BA,GAAAA,GAAW,aAAA,EAAiB,uEAC9B,CAAA,CACAN,CACF,CAAA,CACA,KAAMO,CAAAA,CACN,OAAA,CAASG,CAAAA,CAET,QAAA,CAAA,CAAAgB,GAAAA,CAACC,CAAAA,CAAA,CACC,GAAA,CAAKvB,CAAAA,CACL,SAAA,CAAWoB,EAAAA,CAAG,sCAAA,CAAwCrB,CAAoB,CAAA,CAC1E,GAAA,CAAKkB,CAAAA,CACP,CAAA,CACCL,CAAAA,CACCU,GAAAA,CAACE,CAAAA,CAAA,CACC,MAAA,CACEF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6KAAA,CACZ,QAAA,CAAAV,CAAAA,CACH,CAAA,CAEJ,CAAA,CAEAU,IAACE,CAAAA,CAAA,CACC,MAAA,CAEEF,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKtB,CAAAA,EAAY,iBAAA,CACjB,SAAA,CAAU,oDAAA,CACV,GAAA,CAAKgB,CAAAA,CACP,CAAA,CAEJ,CAAA,CAAA,CAEJ,EAECX,CAAAA,EACCiB,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+LAAA,CACV,EAAA,CAAG,uBAAA,CACH,OAAA,CAASjB,CAAAA,CAET,QAAA,CAAAiB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mIAAA,CACb,SAAAA,GAAAA,CAACG,CAAAA,CAAA,CAA4B,SAAA,CAAU,QAAA,CAAS,CAAA,CAClD,CAAA,CACF,CAAA,CAEDjB,CAAAA,EAAY,CAACU,GAAAA,EACZI,GAAAA,CAACI,UAAAA,CAAA,CAAW,SAAA,CAAU,yGAAA,CAA0G,CAAA,CAEjIR,GAAAA,GAA6B,MAAA,EAC5BC,IAAAA,CAACE,CAAAA,CAAA,CAAO,SAAA,CAAU,iGAAA,CAChB,QAAA,CAAA,CAAAC,GAAAA,CAACC,CAAAA,CAAA,CACC,GAAA,CAAI,cAAA,CACJ,UAAU,4BAAA,CACV,GAAA,CAAKL,GAAAA,CACP,CAAA,CACAI,GAAAA,CAACE,CAAAA,CAAA,CACC,MAAA,CAEEF,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAI,uBAAA,CACJ,SAAA,CAAU,oDAAA,CACV,IAAI,+BAAA,CACN,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACCX,CAAAA,EACCG,CAAAA,EACEQ,GAAAA,CAACK,GAAAA,CAAA,CACC,SAAA,CAAWP,EAAAA,CAAG3B,CAAAA,CAA2B,CAAE,KAAAU,CAAAA,CAAM,SAAA,CAAWN,CAAe,CAAC,CAAC,CAAA,CAC7E,KAAA,CAAOiB,CAAAA,CAAa,UAAA,CACpB,IAAA,CAAK,IAAA,CAEJ,QAAA,CAAAA,CAAAA,CAAa,KAAA,CAChB,CAAA,CAGHV,CAAAA,EACCkB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CACb,QAAA,CAAAA,GAAAA,CAACM,GAAAA,CAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAClD,CAAA,CAAA,CAEJ,CAEJ","file":"chunk-VH4REXAJ.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { CircleIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { UploadPicturesOnProfileIcon, VerifiedIcon } from \"../icons\"\r\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\"\r\nimport { Badge } from \"../ui/badge\"\r\n\r\nexport type ProfileAvatarStatus =\r\n | \"open-to-all\"\r\n | \"open-to-work\"\r\n | \"open-to-freelance\"\r\n | \"open-to-coach\"\r\n | undefined\r\n\r\nexport type ProfileAvatarVariant = \"profile\" | \"company\" | \"university\" | \"group\"\r\n\r\nconst profileAvatarStatus: {\r\n status: ProfileAvatarStatus\r\n label: string\r\n badgeColor?: React.ComponentProps<typeof Badge>[\"color\"]\r\n}[] = [\r\n {\r\n status: \"open-to-all\",\r\n label: \"Open to All Opportunities\",\r\n badgeColor: \"gray\",\r\n },\r\n {\r\n status: \"open-to-work\",\r\n label: \"Open to Work\",\r\n badgeColor: \"success\",\r\n },\r\n {\r\n status: \"open-to-freelance\",\r\n label: \"Open to Freelance\",\r\n badgeColor: \"warning\",\r\n },\r\n {\r\n status: \"open-to-coach\",\r\n label: \"Open to Coach\",\r\n badgeColor: \"blue-light\",\r\n },\r\n ]\r\n\r\nconst profileAvatarVariants = cva(\"flex flex-col items-center relative\", {\r\n variants: {\r\n size: {\r\n xs: \"gap-0.5 w-6\",\r\n sm: \"gap-0.5 w-8\",\r\n md: \"gap-0.5 w-10\",\r\n lg: \"gap-1 w-12\",\r\n xl: \"gap-1 w-14\",\r\n \"2xl\": \"gap-2 w-16\",\r\n \"3xl\": \"gap-2 w-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBadgeVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"rounded-xp-card-base-xxs p-0.5 h-2 font-semibold text-[5px] leading-2\",\r\n sm: \"rounded-xp-card-base-xxs p-1 h-2.5 font-semibold text-[6px] leading-2.5\",\r\n md: \"rounded-xp-card-base-xxs px-1 h-3.5 font-semibold text-[6px] leading-2.5\",\r\n lg: \"rounded-xp-card-base-xs px-1 h-4 text-body-semibold-caption\",\r\n xl: \"px-1 h-6 text-body-semibold-xs\",\r\n \"2xl\": \"px-2 h-9 text-body-semibold-sm\",\r\n \"3xl\": \"px-2 h-10 text-label-semibold-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBorderWidthVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"border-2\",\r\n sm: \"border-2\",\r\n md: \"border-[2.5px]\",\r\n lg: \"border-3\",\r\n xl: \"border-[3.5px]\",\r\n \"2xl\": \"border-4\",\r\n \"3xl\": \"border-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nfunction ProfileAvatar({\r\n avatarClassName,\r\n badgeClassName,\r\n imageSrc,\r\n avatarImageClassName,\r\n imageAlt,\r\n className,\r\n status,\r\n size,\r\n isVerified,\r\n onEdit,\r\n onClickAvatar,\r\n variant = \"profile\",\r\n isOnline,\r\n companyLogoSrc,\r\n bordered = true,\r\n badged = false,\r\n fallbackText,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n avatarClassName?: string\r\n badgeClassName?: string\r\n imageSrc?: string | Blob\r\n imageAlt?: string\r\n isVerified?: boolean\r\n avatarImageClassName?: string\r\n size?: VariantProps<typeof profileAvatarVariants>[\"size\"]\r\n status?: ProfileAvatarStatus\r\n onEdit?: () => void\r\n onClickAvatar?: () => void\r\n variant?: ProfileAvatarVariant\r\n isOnline?: boolean\r\n companyLogoSrc?: string | Blob\r\n bordered?: boolean\r\n badged?: boolean\r\n fallbackText?: string\r\n}) {\r\n const activeStatus = React.useMemo(() => {\r\n return profileAvatarStatus.find((s) => s.status === status)\r\n }, [status])\r\n\r\n const fallbackImage = React.useMemo(() => {\r\n switch (variant) {\r\n case \"company\":\r\n return \"/images/fallback-company.jpeg\"\r\n case \"university\":\r\n return \"/images/fallback-university.jpeg\"\r\n case \"group\":\r\n return \"/images/fallback-user-group.jpeg\"\r\n default:\r\n return \"/images/fallback-user.jpeg\"\r\n }\r\n }, [variant])\r\n\r\n const normalizedImageSrc = React.useMemo(() => {\r\n if (!imageSrc) return undefined\r\n if (typeof imageSrc === \"string\") return imageSrc\r\n return URL.createObjectURL(imageSrc)\r\n }, [imageSrc])\r\n\r\n const normalizedCompanyLogoSrc = React.useMemo(() => {\r\n if (!companyLogoSrc) return undefined\r\n if (typeof companyLogoSrc === \"string\") return companyLogoSrc\r\n return URL.createObjectURL(companyLogoSrc)\r\n }, [companyLogoSrc])\r\n\r\n return (\r\n <div\r\n className={cn(profileAvatarVariants({ size, className }))}\r\n data-slot=\"profile-avatar\"\r\n {...props}\r\n >\r\n <div className=\"relative group size-full\">\r\n <Avatar\r\n className={cn(\r\n bordered && variant === \"profile\" && [\r\n profileAvatarBorderWidthVariants({ size }),\r\n status\r\n ? \"border-transparent bg-[linear-gradient(90deg,var(--color-bg-primary),var(--color-bg-primary)),var(--gradient-avatar-outline)] [background-clip:padding-box,border-box] [background-origin:padding-box,border-box]\"\r\n : \"border-border-secondary\",\r\n status === \"open-to-work\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]\",\r\n status === \"open-to-freelance\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentoprofesional)]\",\r\n status === \"open-to-coach\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentocoach)]\",\r\n status === \"open-to-all\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]\",\r\n ],\r\n avatarClassName\r\n )}\r\n size={size}\r\n onClick={onClickAvatar}\r\n >\r\n <AvatarImage\r\n alt={imageAlt}\r\n className={cn(\"size-full bg-bg-primary object-cover\", avatarImageClassName)}\r\n src={normalizedImageSrc}\r\n />\r\n {fallbackText ? (\r\n <AvatarFallback\r\n render={\r\n <div className=\"flex aspect-square size-full items-center justify-center rounded-xp-card-base-sm border-2 border-border-secondary bg-bg-tertiary text-label-semibold-2 text-text-quaternary\">\r\n {fallbackText}\r\n </div>\r\n }\r\n />\r\n ) : (\r\n <AvatarFallback\r\n render={\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt={imageAlt || \"Avatar Fallback\"}\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src={fallbackImage}\r\n />\r\n }\r\n />\r\n )}\r\n </Avatar>\r\n\r\n {onEdit && (\r\n <div\r\n className=\"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer\"\r\n id=\"avatar-upload-trigger\"\r\n onClick={onEdit}\r\n >\r\n <div className=\"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle\">\r\n <UploadPicturesOnProfileIcon className=\"size-6\" />\r\n </div>\r\n </div>\r\n )}\r\n {isOnline && !normalizedCompanyLogoSrc && (\r\n <CircleIcon className=\"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]\" />\r\n )}\r\n {normalizedCompanyLogoSrc !== undefined && (\r\n <Avatar className=\"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px]\">\r\n <AvatarImage\r\n alt=\"Company Logo\"\r\n className=\"bg-bg-primary object-cover\"\r\n src={normalizedCompanyLogoSrc}\r\n />\r\n <AvatarFallback\r\n render={\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt=\"Company Logo Fallback\"\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src=\"/images/fallback-company.jpeg\"\r\n />\r\n }\r\n />\r\n </Avatar>\r\n )}\r\n </div>\r\n {badged &&\r\n activeStatus && (\r\n <Badge\r\n className={cn(profileAvatarBadgeVariants({ size, className: badgeClassName }))}\r\n color={activeStatus.badgeColor}\r\n size=\"sm\"\r\n >\r\n {activeStatus.label}\r\n </Badge>\r\n )}\r\n\r\n {isVerified && (\r\n <div className=\"absolute -bottom-1 -right-1\">\r\n <VerifiedIcon className=\"size-4 text-[#068BEE]\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { ProfileAvatar }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/profile-avatar.tsx"],"names":["profileAvatarStatus","profileAvatarVariants","cva","profileAvatarBadgeVariants","profileAvatarBorderWidthVariants","ProfileAvatar","avatarClassName","badgeClassName","imageSrc","avatarImageClassName","imageAlt","className","status","size","isVerified","onEdit","onClickAvatar","variant","isOnline","companyLogoSrc","bordered","badged","fallbackText","props","activeStatus","s","fallbackImage","normalizedImageSrc","normalizedCompanyLogoSrc","jsxs","cn","Avatar","jsx","AvatarImage","AvatarFallback","upload_pictures_on_profile_icon_default","CircleIcon","Badge","verified_icon_default"],"mappings":"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","file":"chunk-TFJ6LNOE.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { CircleIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { UploadPicturesOnProfileIcon, VerifiedIcon } from \"../icons\"\r\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\"\r\nimport { Badge } from \"../ui/badge\"\r\n\r\nexport type ProfileAvatarStatus =\r\n | \"open-to-all\"\r\n | \"open-to-work\"\r\n | \"open-to-freelance\"\r\n | \"open-to-coach\"\r\n | undefined\r\n\r\nexport type ProfileAvatarVariant = \"profile\" | \"company\" | \"university\" | \"group\"\r\n\r\nconst profileAvatarStatus: {\r\n status: ProfileAvatarStatus\r\n label: string\r\n badgeColor?: React.ComponentProps<typeof Badge>[\"color\"]\r\n}[] = [\r\n {\r\n status: \"open-to-all\",\r\n label: \"Open to All Opportunities\",\r\n badgeColor: \"gray\",\r\n },\r\n {\r\n status: \"open-to-work\",\r\n label: \"Open to Work\",\r\n badgeColor: \"success\",\r\n },\r\n {\r\n status: \"open-to-freelance\",\r\n label: \"Open to Freelance\",\r\n badgeColor: \"warning\",\r\n },\r\n {\r\n status: \"open-to-coach\",\r\n label: \"Open to Coach\",\r\n badgeColor: \"blue-light\",\r\n },\r\n ]\r\n\r\nconst profileAvatarVariants = cva(\"flex flex-col items-center relative\", {\r\n variants: {\r\n size: {\r\n xs: \"gap-0.5 w-6\",\r\n sm: \"gap-0.5 w-8\",\r\n md: \"gap-0.5 w-10\",\r\n lg: \"gap-1 w-12\",\r\n xl: \"gap-1 w-14\",\r\n \"2xl\": \"gap-2 w-16\",\r\n \"3xl\": \"gap-2 w-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBadgeVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"rounded-xp-card-base-xxs p-0.5 h-2 font-semibold text-[5px] leading-2\",\r\n sm: \"rounded-xp-card-base-xxs p-1 h-2.5 font-semibold text-[6px] leading-2.5\",\r\n md: \"rounded-xp-card-base-xxs px-1 h-3.5 font-semibold text-[6px] leading-2.5\",\r\n lg: \"rounded-xp-card-base-xs px-1 h-4 text-body-semibold-caption\",\r\n xl: \"px-1 h-6 text-body-semibold-xs\",\r\n \"2xl\": \"px-2 h-9 text-body-semibold-sm\",\r\n \"3xl\": \"px-2 h-10 text-label-semibold-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBorderWidthVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"border-2\",\r\n sm: \"border-2\",\r\n md: \"border-[2.5px]\",\r\n lg: \"border-3\",\r\n xl: \"border-[3.5px]\",\r\n \"2xl\": \"border-4\",\r\n \"3xl\": \"border-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nfunction ProfileAvatar({\r\n avatarClassName,\r\n badgeClassName,\r\n imageSrc,\r\n avatarImageClassName,\r\n imageAlt,\r\n className,\r\n status,\r\n size,\r\n isVerified,\r\n onEdit,\r\n onClickAvatar,\r\n variant = \"profile\",\r\n isOnline,\r\n companyLogoSrc,\r\n bordered = true,\r\n badged = false,\r\n fallbackText,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n avatarClassName?: string\r\n badgeClassName?: string\r\n imageSrc?: string | Blob\r\n imageAlt?: string\r\n isVerified?: boolean\r\n avatarImageClassName?: string\r\n size?: VariantProps<typeof profileAvatarVariants>[\"size\"]\r\n status?: ProfileAvatarStatus\r\n onEdit?: () => void\r\n onClickAvatar?: () => void\r\n variant?: ProfileAvatarVariant\r\n isOnline?: boolean\r\n companyLogoSrc?: string | Blob\r\n bordered?: boolean\r\n badged?: boolean\r\n fallbackText?: string\r\n}) {\r\n const activeStatus = React.useMemo(() => {\r\n return profileAvatarStatus.find((s) => s.status === status)\r\n }, [status])\r\n\r\n const fallbackImage = React.useMemo(() => {\r\n switch (variant) {\r\n case \"company\":\r\n return \"/images/fallback-company.jpeg\"\r\n case \"university\":\r\n return \"/images/fallback-university.jpeg\"\r\n case \"group\":\r\n return \"/images/fallback-user-group.jpeg\"\r\n default:\r\n return \"/images/fallback-user.jpeg\"\r\n }\r\n }, [variant])\r\n\r\n const normalizedImageSrc = React.useMemo(() => {\r\n if (!imageSrc) return undefined\r\n if (typeof imageSrc === \"string\") return imageSrc\r\n return URL.createObjectURL(imageSrc)\r\n }, [imageSrc])\r\n\r\n const normalizedCompanyLogoSrc = React.useMemo(() => {\r\n if (!companyLogoSrc) return undefined\r\n if (typeof companyLogoSrc === \"string\") return companyLogoSrc\r\n return URL.createObjectURL(companyLogoSrc)\r\n }, [companyLogoSrc])\r\n\r\n return (\r\n <div\r\n className={cn(profileAvatarVariants({ size, className }))}\r\n data-slot=\"profile-avatar\"\r\n {...props}\r\n >\r\n <div className=\"relative group size-full\">\r\n <Avatar\r\n className={cn(\r\n bordered && variant === \"profile\" && [\r\n profileAvatarBorderWidthVariants({ size }),\r\n status\r\n ? \"border-transparent bg-[linear-gradient(90deg,var(--color-bg-primary),var(--color-bg-primary)),var(--gradient-avatar-outline)] [background-clip:padding-box,border-box] [background-origin:padding-box,border-box]\"\r\n : \"border-border-secondary\",\r\n status === \"open-to-work\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]\",\r\n status === \"open-to-freelance\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentoprofesional)]\",\r\n status === \"open-to-coach\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentocoach)]\",\r\n status === \"open-to-all\" && \"[--gradient-avatar-outline:var(--gradient-avatar-outline-opentowork)]\",\r\n ],\r\n avatarClassName\r\n )}\r\n size={size}\r\n onClick={onClickAvatar}\r\n >\r\n <AvatarImage\r\n alt={imageAlt}\r\n className={cn(\"size-full bg-bg-primary object-cover\", avatarImageClassName)}\r\n src={normalizedImageSrc}\r\n />\r\n {fallbackText ? (\r\n <AvatarFallback\r\n render={\r\n <div className=\"flex aspect-square size-full items-center justify-center rounded-xp-card-base-sm border-2 border-border-secondary bg-bg-tertiary text-label-semibold-2 text-text-quaternary\">\r\n {fallbackText}\r\n </div>\r\n }\r\n />\r\n ) : (\r\n <AvatarFallback\r\n render={\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt={imageAlt || \"Avatar Fallback\"}\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src={fallbackImage}\r\n />\r\n }\r\n />\r\n )}\r\n </Avatar>\r\n\r\n {onEdit && (\r\n <div\r\n className=\"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer\"\r\n id=\"avatar-upload-trigger\"\r\n onClick={onEdit}\r\n >\r\n <div className=\"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle\">\r\n <UploadPicturesOnProfileIcon className=\"size-6\" />\r\n </div>\r\n </div>\r\n )}\r\n {isOnline && !normalizedCompanyLogoSrc && (\r\n <CircleIcon className=\"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]\" />\r\n )}\r\n {normalizedCompanyLogoSrc !== undefined && (\r\n <Avatar className=\"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px]\">\r\n <AvatarImage\r\n alt=\"Company Logo\"\r\n className=\"bg-bg-primary object-cover\"\r\n src={normalizedCompanyLogoSrc}\r\n />\r\n <AvatarFallback\r\n render={\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt=\"Company Logo Fallback\"\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src=\"/images/fallback-company.jpeg\"\r\n />\r\n }\r\n />\r\n </Avatar>\r\n )}\r\n </div>\r\n {badged &&\r\n activeStatus && (\r\n <Badge\r\n className={cn(profileAvatarBadgeVariants({ size, className: badgeClassName }))}\r\n color={activeStatus.badgeColor}\r\n size=\"sm\"\r\n >\r\n {activeStatus.label}\r\n </Badge>\r\n )}\r\n\r\n {isVerified && (\r\n <div className=\"absolute -bottom-1 -right-1\">\r\n <VerifiedIcon className=\"size-4 text-[#068BEE]\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { ProfileAvatar }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a}from'./chunk-TFJ6LNOE.js';import {b,c,g,d,f,h as h$1,i,j as j$1,k,e}from'./chunk-KLN2S25D.js';import'react';import {XIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function A(o){return jsx(b,{...o})}function H(o){return jsx(c,{...o})}function z(o){return jsx(g,{...o})}function h({className:o,...r}){return jsx(e,{className:cn("fixed inset-0 z-50 bg-black/50",o),...r})}function B({className:o,children:r,showCloseButton:e=true,closeClassName:t,...p}){return jsxs(d,{children:[jsx(h,{}),jsxs(f,{className:cn("group/dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden",o),...p,children:[r,e&&jsxs(g,{className:cn("absolute top-3 right-4 rounded-xs transition-colors text-fg-quaternary hover:text-text-primary disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5 mt-px p-2",t),children:[jsx(XIcon,{}),jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function F({className:o,...r}){return jsx(h$1,{className:cn("px-4 py-3 grid grid-cols-[auto_1fr] items-start bg-bg-primary border-b border-border-tertiary bg-radial-[100%_200%_at_0%_0%] from-modal-dialog-stop-0 to-bg-primary group-has-[>[data-slot=dialog-close]]/dialog-popup:pr-15",o),...r})}function R({className:o,...r}){return jsx("div",{"data-slot":"dialog-content",className:cn("px-4 py-4 max-h-[60vh] overflow-y-auto",o),...r})}function j({className:o,...r}){return jsx(i,{className:cn("flex gap-2 items-center justify-end bg-bg-primary border-t border-border-tertiary px-4 py-3 shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]",o),...r})}function I({className:o,...r}){return jsx(j$1,{className:cn("col-start-2 [&:not(:has(~_[data-slot=dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=dialog-description]))]:self-center text-label-bold-2 text-text-primary",o),...r})}function L({className:o,...r}){return jsx(k,{className:cn("col-start-2 mt-0.5 text-body-regular-3 text-text-secondary",o),...r})}function M({className:o,variant:r="brand",...e}){return jsx("div",{"data-slot":"dialog-icon","data-variant":r,className:cn("row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white",r==="brand"&&"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]",r==="error"&&"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]",o),...e})}function V({src:o,imageSrc:r,className:e,avatarClassName:t,avatarImageClassName:p,imageAlt:y,variant:_="profile",...f}){return jsx("div",{"data-slot":"dialog-avatar",className:cn("row-span-2 flex items-center justify-center size-9 rounded-lg mr-3 overflow-hidden bg-bg-primary shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]",e),children:jsx(a,{imageSrc:o??r,imageAlt:y,variant:_,bordered:false,badged:false,className:"size-full shrink-0",avatarClassName:cn("size-full shrink-0 rounded-lg",t),avatarImageClassName:cn("size-full object-cover",p),...f})})}export{A as a,H as b,z as c,B as d,F as e,R as f,j as g,I as h,L as i,M as j,V as k};//# sourceMappingURL=chunk-U7E7HHJZ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-U7E7HHJZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/dialog.tsx"],"names":["Dialog","props","jsx","DialogTrigger","DialogClose","DialogBackdrop","className","cn","DialogPopup","children","showCloseButton","closeClassName","jsxs","DialogPortal","XIcon","DialogHeader","DialogContent","DialogFooter","DialogTitle","DialogDescription","DialogIcon","variant","DialogAvatar","src","imageSrc","avatarClassName","avatarImageClassName","imageAlt","ProfileAvatar"],"mappings":"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","file":"chunk-QZRXUXCK.js","sourcesContent":["import * as React from 'react';\r\nimport { XIcon } from 'lucide-react';\r\n\r\nimport {\r\n Dialog as DialogPrimitive,\r\n DialogPopup as DialogPopupPrimitive,\r\n DialogDescription as DialogDescriptionPrimitive,\r\n DialogFooter as DialogFooterPrimitive,\r\n DialogHeader as DialogHeaderPrimitive,\r\n DialogTitle as DialogTitlePrimitive,\r\n DialogTrigger as DialogTriggerPrimitive,\r\n DialogPortal as DialogPortalPrimitive,\r\n DialogBackdrop as DialogBackdropPrimitive,\r\n DialogClose as DialogClosePrimitive,\r\n type DialogProps as DialogPrimitiveProps,\r\n type DialogPopupProps as DialogPopupPrimitiveProps,\r\n type DialogDescriptionProps as DialogDescriptionPrimitiveProps,\r\n type DialogFooterProps as DialogFooterPrimitiveProps,\r\n type DialogHeaderProps as DialogHeaderPrimitiveProps,\r\n type DialogTitleProps as DialogTitlePrimitiveProps,\r\n type DialogTriggerProps as DialogTriggerPrimitiveProps,\r\n type DialogBackdropProps as DialogBackdropPrimitiveProps,\r\n type DialogCloseProps as DialogClosePrimitiveProps,\r\n} from '../primitives/dialog';\r\nimport { ProfileAvatar, type ProfileAvatarVariant } from '../composites/profile-avatar';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype DialogProps = DialogPrimitiveProps;\r\n\r\nfunction Dialog(props: DialogProps) {\r\n return <DialogPrimitive {...props} />;\r\n}\r\n\r\ntype DialogTriggerProps = DialogTriggerPrimitiveProps;\r\n\r\nfunction DialogTrigger(props: DialogTriggerProps) {\r\n return <DialogTriggerPrimitive {...props} />;\r\n}\r\n\r\ntype DialogCloseProps = DialogClosePrimitiveProps;\r\n\r\nfunction DialogClose(props: DialogCloseProps) {\r\n return <DialogClosePrimitive {...props} />;\r\n}\r\n\r\ntype DialogBackdropProps = DialogBackdropPrimitiveProps;\r\n\r\nfunction DialogBackdrop({ className, ...props }: DialogBackdropProps) {\r\n return (\r\n <DialogBackdropPrimitive\r\n className={cn('fixed inset-0 z-50 bg-black/50', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogPopupProps = DialogPopupPrimitiveProps & {\r\n showCloseButton?: boolean;\r\n closeClassName?: string;\r\n};\r\n\r\nfunction DialogPopup({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n closeClassName,\r\n ...props\r\n}: DialogPopupProps) {\r\n return (\r\n <DialogPortalPrimitive>\r\n <DialogBackdrop />\r\n <DialogPopupPrimitive\r\n className={cn(\r\n \"group/dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogClosePrimitive\r\n className={cn(\r\n \"absolute top-3 right-4 rounded-xs transition-colors text-fg-quaternary hover:text-text-primary disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5 mt-px p-2\",\r\n closeClassName\r\n )}\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogClosePrimitive>\r\n )}\r\n </DialogPopupPrimitive>\r\n </DialogPortalPrimitive>\r\n );\r\n}\r\n\r\ntype DialogHeaderProps = DialogHeaderPrimitiveProps;\r\n\r\nfunction DialogHeader({ className, ...props }: DialogHeaderProps) {\r\n return (\r\n <DialogHeaderPrimitive\r\n className={cn(\r\n \"px-4 py-3 grid grid-cols-[auto_1fr] items-start bg-bg-primary border-b border-border-tertiary bg-radial-[100%_200%_at_0%_0%] from-modal-dialog-stop-0 to-bg-primary group-has-[>[data-slot=dialog-close]]/dialog-popup:pr-15\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogContentProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction DialogContent({ className, ...props }: DialogContentProps) {\r\n return (\r\n <div\r\n data-slot=\"dialog-content\"\r\n className={cn(\"px-4 py-4 max-h-[60vh] overflow-y-auto\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogFooterProps = DialogFooterPrimitiveProps;\r\n\r\nfunction DialogFooter({ className, ...props }: DialogFooterProps) {\r\n return (\r\n <DialogFooterPrimitive\r\n className={cn(\r\n \"flex gap-2 items-center justify-end bg-bg-primary border-t border-border-tertiary px-4 py-3 shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogTitleProps = DialogTitlePrimitiveProps;\r\n\r\nfunction DialogTitle({ className, ...props }: DialogTitleProps) {\r\n return (\r\n <DialogTitlePrimitive\r\n className={cn(\"col-start-2 [&:not(:has(~_[data-slot=dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=dialog-description]))]:self-center text-label-bold-2 text-text-primary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogDescriptionProps = DialogDescriptionPrimitiveProps;\r\n\r\nfunction DialogDescription({ className, ...props }: DialogDescriptionProps) {\r\n return (\r\n <DialogDescriptionPrimitive\r\n className={cn(\"col-start-2 mt-0.5 text-body-regular-3 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogIcon({\r\n className,\r\n variant = \"brand\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n variant?: \"brand\" | \"error\"\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"dialog-icon\"\r\n data-variant={variant}\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white\",\r\n variant === \"brand\" && \"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n variant === \"error\" && \"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogAvatarProps = Omit<React.ComponentProps<typeof ProfileAvatar>, \"size\" | \"bordered\" | \"badged\"> & {\r\n src?: string;\r\n imageAlt?: string;\r\n variant?: ProfileAvatarVariant;\r\n};\r\n\r\nfunction DialogAvatar({\r\n src,\r\n imageSrc,\r\n className,\r\n avatarClassName,\r\n avatarImageClassName,\r\n imageAlt,\r\n variant = \"profile\",\r\n ...props\r\n}: DialogAvatarProps) {\r\n return (\r\n <div\r\n data-slot=\"dialog-avatar\"\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center size-9 rounded-lg mr-3 overflow-hidden bg-bg-primary shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n className,\r\n )}\r\n >\r\n <ProfileAvatar\r\n imageSrc={src ?? imageSrc}\r\n imageAlt={imageAlt}\r\n variant={variant}\r\n bordered={false}\r\n badged={false}\r\n className=\"size-full shrink-0\"\r\n avatarClassName={cn(\"size-full shrink-0 rounded-lg\", avatarClassName)}\r\n avatarImageClassName={cn(\"size-full object-cover\", avatarImageClassName)}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogClose,\r\n DialogPopup,\r\n DialogHeader,\r\n DialogContent,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogIcon,\r\n DialogAvatar,\r\n type DialogProps,\r\n type DialogTriggerProps,\r\n type DialogCloseProps,\r\n type DialogPopupProps,\r\n type DialogHeaderProps,\r\n type DialogContentProps,\r\n type DialogFooterProps,\r\n type DialogTitleProps,\r\n type DialogDescriptionProps,\r\n type DialogAvatarProps,\r\n};"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/dialog.tsx"],"names":["Dialog","props","jsx","DialogTrigger","DialogClose","DialogBackdrop","className","cn","DialogPopup","children","showCloseButton","closeClassName","jsxs","DialogPortal","XIcon","DialogHeader","DialogContent","DialogFooter","DialogTitle","DialogDescription","DialogIcon","variant","DialogAvatar","src","imageSrc","avatarClassName","avatarImageClassName","imageAlt","ProfileAvatar"],"mappings":"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","file":"chunk-U7E7HHJZ.js","sourcesContent":["import * as React from 'react';\r\nimport { XIcon } from 'lucide-react';\r\n\r\nimport {\r\n Dialog as DialogPrimitive,\r\n DialogPopup as DialogPopupPrimitive,\r\n DialogDescription as DialogDescriptionPrimitive,\r\n DialogFooter as DialogFooterPrimitive,\r\n DialogHeader as DialogHeaderPrimitive,\r\n DialogTitle as DialogTitlePrimitive,\r\n DialogTrigger as DialogTriggerPrimitive,\r\n DialogPortal as DialogPortalPrimitive,\r\n DialogBackdrop as DialogBackdropPrimitive,\r\n DialogClose as DialogClosePrimitive,\r\n type DialogProps as DialogPrimitiveProps,\r\n type DialogPopupProps as DialogPopupPrimitiveProps,\r\n type DialogDescriptionProps as DialogDescriptionPrimitiveProps,\r\n type DialogFooterProps as DialogFooterPrimitiveProps,\r\n type DialogHeaderProps as DialogHeaderPrimitiveProps,\r\n type DialogTitleProps as DialogTitlePrimitiveProps,\r\n type DialogTriggerProps as DialogTriggerPrimitiveProps,\r\n type DialogBackdropProps as DialogBackdropPrimitiveProps,\r\n type DialogCloseProps as DialogClosePrimitiveProps,\r\n} from '../primitives/dialog';\r\nimport { ProfileAvatar, type ProfileAvatarVariant } from '../composites/profile-avatar';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype DialogProps = DialogPrimitiveProps;\r\n\r\nfunction Dialog(props: DialogProps) {\r\n return <DialogPrimitive {...props} />;\r\n}\r\n\r\ntype DialogTriggerProps = DialogTriggerPrimitiveProps;\r\n\r\nfunction DialogTrigger(props: DialogTriggerProps) {\r\n return <DialogTriggerPrimitive {...props} />;\r\n}\r\n\r\ntype DialogCloseProps = DialogClosePrimitiveProps;\r\n\r\nfunction DialogClose(props: DialogCloseProps) {\r\n return <DialogClosePrimitive {...props} />;\r\n}\r\n\r\ntype DialogBackdropProps = DialogBackdropPrimitiveProps;\r\n\r\nfunction DialogBackdrop({ className, ...props }: DialogBackdropProps) {\r\n return (\r\n <DialogBackdropPrimitive\r\n className={cn('fixed inset-0 z-50 bg-black/50', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogPopupProps = DialogPopupPrimitiveProps & {\r\n showCloseButton?: boolean;\r\n closeClassName?: string;\r\n};\r\n\r\nfunction DialogPopup({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n closeClassName,\r\n ...props\r\n}: DialogPopupProps) {\r\n return (\r\n <DialogPortalPrimitive>\r\n <DialogBackdrop />\r\n <DialogPopupPrimitive\r\n className={cn(\r\n \"group/dialog-popup fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] bg-bg-primary shadow-xp-lg rounded-xl overflow-hidden\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogClosePrimitive\r\n className={cn(\r\n \"absolute top-3 right-4 rounded-xs transition-colors text-fg-quaternary hover:text-text-primary disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5 mt-px p-2\",\r\n closeClassName\r\n )}\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogClosePrimitive>\r\n )}\r\n </DialogPopupPrimitive>\r\n </DialogPortalPrimitive>\r\n );\r\n}\r\n\r\ntype DialogHeaderProps = DialogHeaderPrimitiveProps;\r\n\r\nfunction DialogHeader({ className, ...props }: DialogHeaderProps) {\r\n return (\r\n <DialogHeaderPrimitive\r\n className={cn(\r\n \"px-4 py-3 grid grid-cols-[auto_1fr] items-start bg-bg-primary border-b border-border-tertiary bg-radial-[100%_200%_at_0%_0%] from-modal-dialog-stop-0 to-bg-primary group-has-[>[data-slot=dialog-close]]/dialog-popup:pr-15\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogContentProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nfunction DialogContent({ className, ...props }: DialogContentProps) {\r\n return (\r\n <div\r\n data-slot=\"dialog-content\"\r\n className={cn(\"px-4 py-4 max-h-[60vh] overflow-y-auto\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogFooterProps = DialogFooterPrimitiveProps;\r\n\r\nfunction DialogFooter({ className, ...props }: DialogFooterProps) {\r\n return (\r\n <DialogFooterPrimitive\r\n className={cn(\r\n \"flex gap-2 items-center justify-end bg-bg-primary border-t border-border-tertiary px-4 py-3 shadow-[0px_-1px_24px_0px_var(--color-shadow-xs)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogTitleProps = DialogTitlePrimitiveProps;\r\n\r\nfunction DialogTitle({ className, ...props }: DialogTitleProps) {\r\n return (\r\n <DialogTitlePrimitive\r\n className={cn(\"col-start-2 [&:not(:has(~_[data-slot=dialog-description]))]:row-span-2 [&:not(:has(~_[data-slot=dialog-description]))]:self-center text-label-bold-2 text-text-primary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogDescriptionProps = DialogDescriptionPrimitiveProps;\r\n\r\nfunction DialogDescription({ className, ...props }: DialogDescriptionProps) {\r\n return (\r\n <DialogDescriptionPrimitive\r\n className={cn(\"col-start-2 mt-0.5 text-body-regular-3 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogIcon({\r\n className,\r\n variant = \"brand\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n variant?: \"brand\" | \"error\"\r\n}) {\r\n return (\r\n <div\r\n data-slot=\"dialog-icon\"\r\n data-variant={variant}\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center rounded-lg mt-px mr-3 p-2.5 [&_svg]:size-4 text-fg-white\",\r\n variant === \"brand\" && \"bg-bg-brand-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n variant === \"error\" && \"bg-bg-error-solid shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-utility-error-100)]\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype DialogAvatarProps = Omit<React.ComponentProps<typeof ProfileAvatar>, \"size\" | \"bordered\" | \"badged\"> & {\r\n src?: string;\r\n imageAlt?: string;\r\n variant?: ProfileAvatarVariant;\r\n};\r\n\r\nfunction DialogAvatar({\r\n src,\r\n imageSrc,\r\n className,\r\n avatarClassName,\r\n avatarImageClassName,\r\n imageAlt,\r\n variant = \"profile\",\r\n ...props\r\n}: DialogAvatarProps) {\r\n return (\r\n <div\r\n data-slot=\"dialog-avatar\"\r\n className={cn(\r\n \"row-span-2 flex items-center justify-center size-9 rounded-lg mr-3 overflow-hidden bg-bg-primary shadow-[0px_1px_2px_-1px_var(--color-shadow-lg-01),0px_1px_3px_0px_var(--color-shadow-md-01),0px_0px_0px_4px_var(--color-focus-ring-secondary)]\",\r\n className,\r\n )}\r\n >\r\n <ProfileAvatar\r\n imageSrc={src ?? imageSrc}\r\n imageAlt={imageAlt}\r\n variant={variant}\r\n bordered={false}\r\n badged={false}\r\n className=\"size-full shrink-0\"\r\n avatarClassName={cn(\"size-full shrink-0 rounded-lg\", avatarClassName)}\r\n avatarImageClassName={cn(\"size-full object-cover\", avatarImageClassName)}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogClose,\r\n DialogPopup,\r\n DialogHeader,\r\n DialogContent,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogIcon,\r\n DialogAvatar,\r\n type DialogProps,\r\n type DialogTriggerProps,\r\n type DialogCloseProps,\r\n type DialogPopupProps,\r\n type DialogHeaderProps,\r\n type DialogContentProps,\r\n type DialogFooterProps,\r\n type DialogTitleProps,\r\n type DialogDescriptionProps,\r\n type DialogAvatarProps,\r\n};"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as v from'react';import {Slot}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';var h=cva("inline-flex items-center justify-center shrink-0 font-medium select-none transition-colors leading-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-current",{variants:{variant:{solid:"bg-bg-brand-solid text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))]",subtle:"bg-utility-brand-50 text-utility-brand-700",outline:"bg-transparent text-utility-brand-600 ring-1 ring-inset ring-utility-brand-500 shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] dark:text-utility-brand-400 dark:ring-utility-brand-700",soft:"bg-alpha-alpha-black-10 text-fg-secondary",secondary:"bg-alpha-alpha-black-10 text-fg-secondary",neutral:"bg-alpha-alpha-black-10 text-fg-secondary",gradient:"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100",ai:"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100","gradient-ai":"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100",premium:"bg-linear-90 from-utility-premium-400 to-utility-premium-600 text-utility-premium-800 ring-1 ring-inset ring-focus-ring-premium"},size:{"3xs":"h-6 min-w-6 text-label-semibold-4 [&_svg]:size-3.5","2xs":"h-7 min-w-7 text-label-semibold-4 [&_svg]:size-4",xs:"h-8 min-w-8 text-label-semibold-3 [&_svg]:size-4",sm:"h-9 min-w-9 text-label-semibold-3 [&_svg]:size-5",md:"h-10 min-w-10 text-label-semibold-2 [&_svg]:size-5",lg:"h-11 min-w-11 text-label-semibold-1 [&_svg]:size-5.5",xl:"h-12 min-w-12 text-label-semibold-1 [&_svg]:size-6"},shape:{rounded:"rounded-xp-card-base-sm",circle:"rounded-xp-full",square:"rounded-none",base:"rounded-xp-card-base",lg:"rounded-xp-card-base-lg"},iconOnly:{true:"p-0 aspect-square",false:""}},compoundVariants:[{iconOnly:false,size:"3xs",className:"px-xp-sm gap-xp-xs"},{iconOnly:false,size:"2xs",className:"px-xp-md gap-xp-xs"},{iconOnly:false,size:"xs",className:"px-xp-lg gap-xp-sm"},{iconOnly:false,size:"sm",className:"px-xp-lg gap-xp-sm"},{iconOnly:false,size:"md",className:"px-3.5 gap-xp-sm"},{iconOnly:false,size:"lg",className:"px-xp-xl gap-xp-md"},{iconOnly:false,size:"xl",className:"px-4.5 gap-xp-md"},{iconOnly:true,size:"3xs",className:"w-6"},{iconOnly:true,size:"2xs",className:"w-7"},{iconOnly:true,size:"xs",className:"w-8"},{iconOnly:true,size:"sm",className:"w-9"},{iconOnly:true,size:"md",className:"w-10"},{iconOnly:true,size:"lg",className:"w-11"},{iconOnly:true,size:"xl",className:"w-12"}],defaultVariants:{variant:"solid",size:"3xs",shape:"rounded"}}),N=v.forwardRef(({className:c,variant:g,size:r="3xs",shape:u="rounded",iconOnly:p,icon:o,initial:w,initials:z,number:O,count:B,children:t,asChild:b=false,...x},f)=>{let y=b?Slot:"div";if(b)return jsx(y,{ref:f,"data-slot":"badge-blue","data-size":r,className:cn(h({variant:g,size:r,shape:u,iconOnly:p??true}),c),...x,children:t});let d=w??z,m=O??B,a=null,n="icon",s=0;if(d!=null){let e=String(d).trim();n="initial",s=e.length,a=jsx("span",{className:"uppercase tracking-tight leading-none font-semibold select-none",children:e.toUpperCase()});}else if(m!=null){let e=String(m).trim();n="number",s=e.length,a=jsx("span",{className:"tabular-nums leading-none font-semibold select-none",children:m});}else if(typeof t=="number"){let e=String(t).trim();n="number",s=e.length,a=jsx("span",{className:"tabular-nums leading-none font-semibold select-none",children:t});}else if(typeof t=="string"){let e=t.trim(),C=/^\d+(\+)?$/.test(e),S=e.length<=2&&/^[a-zA-Z0-9]+$/.test(e);C?(n="number",s=e.length,a=jsx("span",{className:"tabular-nums leading-none font-semibold select-none",children:e})):S&&!o?(n="initial",s=e.length,a=jsx("span",{className:"uppercase tracking-tight leading-none font-semibold select-none",children:e.toUpperCase()})):(n="text",s=e.length,a=t);}else n=o||t?"icon":"text",a=t;let k=!!(o&&a),l=true;p!==void 0?l=p:k||n==="text"?l=false:l=true;let R=l&&s>2;return jsxs(y,{ref:f,"data-slot":"badge-blue","data-size":r,className:cn(h({variant:g,size:r,shape:u,iconOnly:l}),R&&"w-auto px-1.5",c),...x,children:[o,a]})});N.displayName="BadgeBlue";var H=N;export{h as a,N as b,H as c};//# sourceMappingURL=chunk-XEYTRNPN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-XEYTRNPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/badge-blue.tsx"],"names":["badgeBlueVariants","cva","BadgeBlue","className","variant","size","shape","iconOnly","icon","initial","initials","number","count","children","asChild","props","ref","Comp","Slot","jsx","cn","rawInitial","rawNumber","contentToRender","detectedType","displayLength","initialStr","numStr","trimmed","isNumeric","isShortInitial","hasBothIconAndText","isCompact","isMultiCharCounter","jsxs","badge_blue_default"],"mappings":"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","file":"chunk-XEYTRNPN.js","sourcesContent":["'use client';\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nexport const badgeBlueVariants = cva(\r\n \"inline-flex items-center justify-center shrink-0 font-medium select-none transition-colors leading-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-current\",\r\n {\r\n variants: {\r\n variant: {\r\n solid:\r\n \"bg-bg-brand-solid text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))]\",\r\n subtle:\r\n \"bg-utility-brand-50 text-utility-brand-700\",\r\n outline:\r\n \"bg-transparent text-utility-brand-600 ring-1 ring-inset ring-utility-brand-500 shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] dark:text-utility-brand-400 dark:ring-utility-brand-700\",\r\n soft:\r\n \"bg-alpha-alpha-black-10 text-fg-secondary\",\r\n secondary:\r\n \"bg-alpha-alpha-black-10 text-fg-secondary\",\r\n neutral:\r\n \"bg-alpha-alpha-black-10 text-fg-secondary\",\r\n gradient:\r\n \"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100\",\r\n ai:\r\n \"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100\",\r\n \"gradient-ai\":\r\n \"bg-gradient-buttons-button-ai text-text-primary-on-brand shadow-[0_0_0_2px_var(--color-alpha-brand-10,rgba(55,125,250,0.1))] [&_svg_path]:opacity-100\",\r\n premium:\r\n \"bg-linear-90 from-utility-premium-400 to-utility-premium-600 text-utility-premium-800 ring-1 ring-inset ring-focus-ring-premium\",\r\n },\r\n size: {\r\n \"3xs\": \"h-6 min-w-6 text-label-semibold-4 [&_svg]:size-3.5\",\r\n \"2xs\": \"h-7 min-w-7 text-label-semibold-4 [&_svg]:size-4\",\r\n xs: \"h-8 min-w-8 text-label-semibold-3 [&_svg]:size-4\",\r\n sm: \"h-9 min-w-9 text-label-semibold-3 [&_svg]:size-5\",\r\n md: \"h-10 min-w-10 text-label-semibold-2 [&_svg]:size-5\",\r\n lg: \"h-11 min-w-11 text-label-semibold-1 [&_svg]:size-5.5\",\r\n xl: \"h-12 min-w-12 text-label-semibold-1 [&_svg]:size-6\",\r\n },\r\n shape: {\r\n rounded: \"rounded-xp-card-base-sm\",\r\n circle: \"rounded-xp-full\",\r\n square: \"rounded-none\",\r\n base: \"rounded-xp-card-base\",\r\n lg: \"rounded-xp-card-base-lg\",\r\n },\r\n iconOnly: {\r\n true: \"p-0 aspect-square\",\r\n false: \"\",\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n iconOnly: false,\r\n size: \"3xs\",\r\n className: \"px-xp-sm gap-xp-xs\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"2xs\",\r\n className: \"px-xp-md gap-xp-xs\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"xs\",\r\n className: \"px-xp-lg gap-xp-sm\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"sm\",\r\n className: \"px-xp-lg gap-xp-sm\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"md\",\r\n className: \"px-3.5 gap-xp-sm\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"lg\",\r\n className: \"px-xp-xl gap-xp-md\",\r\n },\r\n {\r\n iconOnly: false,\r\n size: \"xl\",\r\n className: \"px-4.5 gap-xp-md\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"3xs\",\r\n className: \"w-6\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"2xs\",\r\n className: \"w-7\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"xs\",\r\n className: \"w-8\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"sm\",\r\n className: \"w-9\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"md\",\r\n className: \"w-10\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"lg\",\r\n className: \"w-11\",\r\n },\r\n {\r\n iconOnly: true,\r\n size: \"xl\",\r\n className: \"w-12\",\r\n },\r\n ],\r\n defaultVariants: {\r\n variant: \"solid\",\r\n size: \"3xs\",\r\n shape: \"rounded\",\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeBlueProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n Omit<VariantProps<typeof badgeBlueVariants>, \"iconOnly\"> {\r\n /**\r\n * Icon element to render inside the badge (e.g. Lucide icon or SVG)\r\n */\r\n icon?: React.ReactNode\r\n\r\n /**\r\n * Initial letters (e.g. \"JD\", \"A\"), automatically uppercased and styled\r\n */\r\n initial?: string\r\n initials?: string\r\n\r\n /**\r\n * Number or step/count value (e.g. 1, 2, \"99+\"), styled with tabular-nums\r\n */\r\n number?: number | string\r\n count?: number | string\r\n\r\n /**\r\n * Force square/aspect-square mode (true) or expanded mode with horizontal padding (false).\r\n * If omitted, automatically determined by the presence of labels vs icons/initials/numbers.\r\n */\r\n iconOnly?: boolean\r\n\r\n /**\r\n * Render using Radix Slot\r\n */\r\n asChild?: boolean\r\n}\r\n\r\n// ponytail: single polymorphic component with auto-detection for icons, initials, and step numbers.\r\nexport const BadgeBlue = React.forwardRef<HTMLDivElement, BadgeBlueProps>(\r\n (\r\n {\r\n className,\r\n variant,\r\n size = \"3xs\",\r\n shape = \"rounded\",\r\n iconOnly,\r\n icon,\r\n initial,\r\n initials,\r\n number,\r\n count,\r\n children,\r\n asChild = false,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const Comp = asChild ? Slot : \"div\"\r\n\r\n // If asChild is true, delegate rendering completely to the child element\r\n if (asChild) {\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-slot=\"badge-blue\"\r\n data-size={size}\r\n className={cn(\r\n badgeBlueVariants({\r\n variant,\r\n size,\r\n shape,\r\n iconOnly: iconOnly ?? true,\r\n }),\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Comp>\r\n )\r\n }\r\n\r\n // 1. Resolve explicit initial or number props\r\n const rawInitial = initial ?? initials\r\n const rawNumber = number ?? count\r\n\r\n // 2. Detect content type & resolved element\r\n let contentToRender: React.ReactNode = null\r\n let detectedType: \"icon\" | \"initial\" | \"number\" | \"text\" = \"icon\"\r\n let displayLength = 0\r\n\r\n if (rawInitial !== undefined && rawInitial !== null) {\r\n const initialStr = String(rawInitial).trim()\r\n detectedType = \"initial\"\r\n displayLength = initialStr.length\r\n contentToRender = (\r\n <span className=\"uppercase tracking-tight leading-none font-semibold select-none\">\r\n {initialStr.toUpperCase()}\r\n </span>\r\n )\r\n } else if (rawNumber !== undefined && rawNumber !== null) {\r\n const numStr = String(rawNumber).trim()\r\n detectedType = \"number\"\r\n displayLength = numStr.length\r\n contentToRender = (\r\n <span className=\"tabular-nums leading-none font-semibold select-none\">\r\n {rawNumber}\r\n </span>\r\n )\r\n } else if (typeof children === \"number\") {\r\n const numStr = String(children).trim()\r\n detectedType = \"number\"\r\n displayLength = numStr.length\r\n contentToRender = (\r\n <span className=\"tabular-nums leading-none font-semibold select-none\">\r\n {children}\r\n </span>\r\n )\r\n } else if (typeof children === \"string\") {\r\n const trimmed = children.trim()\r\n const isNumeric = /^\\d+(\\+)?$/.test(trimmed)\r\n const isShortInitial = trimmed.length <= 2 && /^[a-zA-Z0-9]+$/.test(trimmed)\r\n\r\n if (isNumeric) {\r\n detectedType = \"number\"\r\n displayLength = trimmed.length\r\n contentToRender = (\r\n <span className=\"tabular-nums leading-none font-semibold select-none\">\r\n {trimmed}\r\n </span>\r\n )\r\n } else if (isShortInitial && !icon) {\r\n detectedType = \"initial\"\r\n displayLength = trimmed.length\r\n contentToRender = (\r\n <span className=\"uppercase tracking-tight leading-none font-semibold select-none\">\r\n {trimmed.toUpperCase()}\r\n </span>\r\n )\r\n } else {\r\n detectedType = \"text\"\r\n displayLength = trimmed.length\r\n contentToRender = children\r\n }\r\n } else {\r\n detectedType = icon || children ? \"icon\" : \"text\"\r\n contentToRender = children\r\n }\r\n\r\n // 3. Determine compact (square) vs expanded (with horizontal padding)\r\n const hasBothIconAndText = Boolean(icon && contentToRender)\r\n let isCompact = true\r\n\r\n if (iconOnly !== undefined) {\r\n isCompact = iconOnly\r\n } else if (hasBothIconAndText || detectedType === \"text\") {\r\n isCompact = false\r\n } else {\r\n isCompact = true\r\n }\r\n\r\n // 4. Handle auto-expansion for multi-character numbers/counters (e.g. \"99+\", \"100\")\r\n const isMultiCharCounter = isCompact && displayLength > 2\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-slot=\"badge-blue\"\r\n data-size={size}\r\n className={cn(\r\n badgeBlueVariants({\r\n variant,\r\n size,\r\n shape,\r\n iconOnly: isCompact,\r\n }),\r\n isMultiCharCounter && \"w-auto px-1.5\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {icon}\r\n {contentToRender}\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nBadgeBlue.displayName = \"BadgeBlue\"\r\n\r\nexport default BadgeBlue\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,i,m,e,q,s,w,x,H}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,i,m,e,q,s,w,x,H}from'./chunk-ILE3MBTR.js';import {a as a$1}from'./chunk-Y6TKCAAJ.js';import'react';import {ChevronDownIcon}from'lucide-react';import'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';var y={"3xs":"size-3","2xs":"size-3.5",xs:"size-3.5",sm:"size-4",md:"size-4",lg:"size-4.5",xl:"size-5"},D={"3xs":"gap-1.5 pr-2","2xs":"gap-1.5 pr-2.5",xs:"gap-2 pr-2.5",sm:"gap-2 pr-3",md:"gap-2 pr-3",lg:"gap-2.5 pr-3.5",xl:"gap-2.5 pr-4"};function K({items:t,value:I,defaultValue:h,onValueChange:z,placeholder:m$1="Select",searchPlaceholder:N,icon:n,container:V,isPending:v,className:R,triggerClassName:T,contentClassName:k,disabled:q$1,size:a$2="md",infiniteScroll:w$1,showSearch:p=false,filter:l,...L}){return jsxs(a,{items:t,value:I,defaultValue:h,onValueChange:z,filter:l===null||!p?null:l,isItemEqualToValue:(e,B)=>e.value===B.value,disabled:q$1,...L,children:[jsxs(b,{className:cn(a$1({size:a$2}),"group flex cursor-pointer items-center text-left",D[a$2??"md"]??"gap-2 pr-3",T,R),children:[n&&jsx("span",{className:cn(y[a$2??"md"]??"size-4","shrink-0 text-fg-quaternary [&_svg]:size-full"),children:n}),jsx("span",{className:"flex-1 truncate",children:jsx(i,{children:e=>jsx("span",{className:e?"text-text-primary":"text-text-placeholder",children:e?.label??m$1})})}),jsx(ChevronDownIcon,{className:cn(y[a$2??"md"]??"size-4","shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180")})]}),jsxs(m,{container:V,className:cn("w-72",k),align:"start",sideOffset:8,children:[p&&jsx(e,{placeholder:N??`Search ${m$1.toLowerCase()}...`}),jsx(q,{status:v||t===void 0?"pending":t.length===0?"empty":null}),jsxs(s,{children:[t?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(H,{...w$1})]})]})]})}export{K as a};//# sourceMappingURL=chunk-YZEE43WX.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YZEE43WX.js.map
|