@pantool/components 1.0.0-alpha.1 → 1.0.0-alpha.11
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/atoms/autocomplete/autocomplete.css +1 -0
- package/dist/atoms/autocomplete/autocomplete.d.ts +77 -0
- package/dist/atoms/autocomplete/autocomplete.js +2 -0
- package/dist/atoms/autocomplete/autocomplete.js.map +1 -0
- package/dist/atoms/autocomplete/autocomplete.module.js +3 -0
- package/dist/atoms/autocomplete/autocomplete.module.js.map +1 -0
- package/dist/atoms/autocomplete/index.d.ts +1 -0
- package/dist/atoms/autocomplete/index.js +1 -0
- package/dist/atoms/avatar/avatar.css +1 -0
- package/dist/atoms/avatar/avatar.d.ts +17 -0
- package/dist/atoms/avatar/avatar.js +2 -0
- package/dist/atoms/avatar/avatar.js.map +1 -0
- package/dist/atoms/avatar/avatar.module.js +3 -0
- package/dist/atoms/avatar/avatar.module.js.map +1 -0
- package/dist/atoms/avatar/index.d.ts +1 -0
- package/dist/atoms/avatar/index.js +1 -0
- package/dist/atoms/badge/badge.d.ts +42 -0
- package/dist/atoms/badge/badge.js +2 -0
- package/dist/atoms/badge/badge.js.map +1 -0
- package/dist/atoms/badge/index.d.ts +1 -0
- package/dist/atoms/badge/index.js +1 -0
- package/dist/atoms/badge/styles.css +1 -0
- package/dist/atoms/badge/styles.module.js +3 -0
- package/dist/atoms/badge/styles.module.js.map +1 -0
- package/dist/atoms/button/button.css +1 -18
- package/dist/atoms/button/button.d.ts +5 -5
- package/dist/atoms/button/button.js.map +1 -1
- package/dist/atoms/button/button.module.js +1 -0
- package/dist/atoms/button/button.module.js.map +1 -1
- package/dist/atoms/checkbox/checkbox.css +1 -119
- package/dist/atoms/checkbox/checkbox.d.ts +16 -32
- package/dist/atoms/checkbox/checkbox.js +1 -1
- package/dist/atoms/checkbox/checkbox.js.map +1 -1
- package/dist/atoms/checkbox/checkbox.module.js +2 -1
- package/dist/atoms/checkbox/checkbox.module.js.map +1 -1
- package/dist/atoms/checkbox-group/checkbox-group.css +1 -0
- package/dist/atoms/checkbox-group/checkbox-group.d.ts +47 -0
- package/dist/atoms/checkbox-group/checkbox-group.js +2 -0
- package/dist/atoms/checkbox-group/checkbox-group.js.map +1 -0
- package/dist/atoms/checkbox-group/checkbox-group.module.js +3 -0
- package/dist/atoms/checkbox-group/checkbox-group.module.js.map +1 -0
- package/dist/atoms/checkbox-group/index.d.ts +1 -0
- package/dist/atoms/checkbox-group/index.js +1 -0
- package/dist/atoms/clickable-area/clickable-area.d.ts +15 -0
- package/dist/atoms/clickable-area/clickable-area.js +2 -0
- package/dist/atoms/clickable-area/clickable-area.js.map +1 -0
- package/dist/atoms/clickable-area/index.d.ts +1 -0
- package/dist/atoms/clickable-area/index.js +1 -0
- package/dist/atoms/clickable-area/styles.css +1 -0
- package/dist/atoms/clickable-area/styles.module.js +3 -0
- package/dist/atoms/clickable-area/styles.module.js.map +1 -0
- package/dist/atoms/collapsible/collapsible.css +1 -0
- package/dist/atoms/collapsible/collapsible.d.ts +16 -0
- package/dist/atoms/collapsible/collapsible.js +2 -0
- package/dist/atoms/collapsible/collapsible.js.map +1 -0
- package/dist/atoms/collapsible/collapsible.module.js +3 -0
- package/dist/atoms/collapsible/collapsible.module.js.map +1 -0
- package/dist/atoms/collapsible/index.d.ts +1 -0
- package/dist/atoms/collapsible/index.js +1 -0
- package/dist/atoms/combobox/combobox.css +1 -302
- package/dist/atoms/combobox/combobox.d.ts +14 -13
- package/dist/atoms/combobox/combobox.js +1 -1
- package/dist/atoms/combobox/combobox.js.map +1 -1
- package/dist/atoms/combobox/combobox.module.js +2 -1
- package/dist/atoms/combobox/combobox.module.js.map +1 -1
- package/dist/atoms/combobox/components/item.js +1 -1
- package/dist/atoms/combobox/components/item.js.map +1 -1
- package/dist/atoms/combobox/index.d.ts +1 -0
- package/dist/atoms/context-menu/context-menu.css +1 -75
- package/dist/atoms/context-menu/context-menu.module.js +1 -0
- package/dist/atoms/context-menu/context-menu.module.js.map +1 -1
- package/dist/atoms/icon/icon.d.ts +2 -2
- package/dist/atoms/icon/icon.js.map +1 -1
- package/dist/atoms/icon-button/icon-button.css +1 -12
- package/dist/atoms/icon-button/icon-button.d.ts +4 -4
- package/dist/atoms/icon-button/icon-button.js +1 -1
- package/dist/atoms/icon-button/icon-button.js.map +1 -1
- package/dist/atoms/icon-button/icon-button.module.js +1 -0
- package/dist/atoms/index.d.ts +19 -4
- package/dist/atoms/index.js +1 -1
- package/dist/atoms/input/input.css +1 -29
- package/dist/atoms/input/input.d.ts +13 -14
- package/dist/atoms/input/input.js +1 -1
- package/dist/atoms/input/input.js.map +1 -1
- package/dist/atoms/input/input.module.js +1 -0
- package/dist/atoms/input/input.module.js.map +1 -1
- package/dist/atoms/menu/index.d.ts +1 -0
- package/dist/atoms/menu/index.js +1 -0
- package/dist/atoms/menu/menu.css +1 -0
- package/dist/atoms/menu/menu.d.ts +69 -0
- package/dist/atoms/menu/menu.js +2 -0
- package/dist/atoms/menu/menu.js.map +1 -0
- package/dist/atoms/menu/menu.module.js +3 -0
- package/dist/atoms/menu/menu.module.js.map +1 -0
- package/dist/atoms/menubar/index.d.ts +1 -0
- package/dist/atoms/menubar/index.js +1 -0
- package/dist/atoms/menubar/menubar.css +1 -0
- package/dist/atoms/menubar/menubar.d.ts +12 -0
- package/dist/atoms/menubar/menubar.js +2 -0
- package/dist/atoms/menubar/menubar.js.map +1 -0
- package/dist/atoms/menubar/menubar.module.js +3 -0
- package/dist/atoms/menubar/menubar.module.js.map +1 -0
- package/dist/atoms/notice/index.d.ts +1 -0
- package/dist/atoms/notice/index.js +1 -0
- package/dist/atoms/notice/notice.d.ts +28 -0
- package/dist/atoms/notice/notice.js +2 -0
- package/dist/atoms/notice/notice.js.map +1 -0
- package/dist/atoms/notice/styles.css +1 -0
- package/dist/atoms/notice/styles.module.js +3 -0
- package/dist/atoms/notice/styles.module.js.map +1 -0
- package/dist/atoms/radio/index.d.ts +1 -1
- package/dist/atoms/radio/radio.css +1 -142
- package/dist/atoms/radio/radio.d.ts +14 -17
- package/dist/atoms/radio/radio.js +1 -1
- package/dist/atoms/radio/radio.js.map +1 -1
- package/dist/atoms/radio/radio.module.js +2 -1
- package/dist/atoms/radio/radio.module.js.map +1 -1
- package/dist/atoms/radio-group/index.d.ts +1 -0
- package/dist/atoms/radio-group/index.js +1 -0
- package/dist/atoms/radio-group/radio-group.css +1 -0
- package/dist/atoms/radio-group/radio-group.d.ts +48 -0
- package/dist/atoms/radio-group/radio-group.js +2 -0
- package/dist/atoms/radio-group/radio-group.js.map +1 -0
- package/dist/atoms/radio-group/radio-group.module.js +3 -0
- package/dist/atoms/radio-group/radio-group.module.js.map +1 -0
- package/dist/atoms/select/components/item.d.ts +17 -0
- package/dist/atoms/select/components/item.js +2 -0
- package/dist/atoms/select/components/item.js.map +1 -0
- package/dist/atoms/select/index.d.ts +2 -0
- package/dist/atoms/select/index.js +1 -0
- package/dist/atoms/select/select.css +1 -0
- package/dist/atoms/select/select.d.ts +67 -0
- package/dist/atoms/select/select.js +2 -0
- package/dist/atoms/select/select.js.map +1 -0
- package/dist/atoms/select/select.module.js +3 -0
- package/dist/atoms/select/select.module.js.map +1 -0
- package/dist/atoms/slider/index.d.ts +1 -0
- package/dist/atoms/slider/index.js +1 -0
- package/dist/atoms/slider/slider.css +1 -0
- package/dist/atoms/slider/slider.d.ts +53 -0
- package/dist/atoms/slider/slider.js +2 -0
- package/dist/atoms/slider/slider.js.map +1 -0
- package/dist/atoms/slider/slider.module.js +3 -0
- package/dist/atoms/slider/slider.module.js.map +1 -0
- package/dist/atoms/stepper/index.d.ts +1 -0
- package/dist/atoms/stepper/index.js +1 -0
- package/dist/atoms/stepper/stepper.css +1 -0
- package/dist/atoms/stepper/stepper.d.ts +42 -0
- package/dist/atoms/stepper/stepper.js +2 -0
- package/dist/atoms/stepper/stepper.js.map +1 -0
- package/dist/atoms/stepper/stepper.module.js +3 -0
- package/dist/atoms/stepper/stepper.module.js.map +1 -0
- package/dist/atoms/switch/switch.css +1 -68
- package/dist/atoms/switch/switch.module.js +1 -0
- package/dist/atoms/switch/switch.module.js.map +1 -1
- package/dist/atoms/tabs/tabs.css +1 -92
- package/dist/atoms/tabs/tabs.d.ts +3 -3
- package/dist/atoms/tabs/tabs.module.js +1 -0
- package/dist/atoms/tabs/tabs.module.js.map +1 -1
- package/dist/atoms/text/text.css +1 -273
- package/dist/atoms/text/text.d.ts +3 -3
- package/dist/atoms/text/text.module.js +1 -0
- package/dist/atoms/text/text.module.js.map +1 -1
- package/dist/atoms/toast/toast.css +1 -151
- package/dist/atoms/toast/toast.module.js +1 -0
- package/dist/atoms/toast/toast.module.js.map +1 -1
- package/dist/atoms/tooltip/tooltip.css +1 -92
- package/dist/atoms/tooltip/tooltip.d.ts +3 -3
- package/dist/atoms/tooltip/tooltip.module.js +1 -0
- package/dist/atoms/tooltip/tooltip.module.js.map +1 -1
- package/dist/fields/autocomplete-field/autocomplete-field.d.ts +26 -0
- package/dist/fields/autocomplete-field/autocomplete-field.js +2 -0
- package/dist/fields/autocomplete-field/autocomplete-field.js.map +1 -0
- package/dist/fields/autocomplete-field/index.d.ts +1 -0
- package/dist/fields/autocomplete-field/index.js +1 -0
- package/dist/fields/checkbox-field/checkbox-field.d.ts +23 -0
- package/dist/fields/checkbox-field/checkbox-field.js +2 -0
- package/dist/fields/checkbox-field/checkbox-field.js.map +1 -0
- package/dist/fields/checkbox-field/index.d.ts +1 -0
- package/dist/fields/checkbox-field/index.js +1 -0
- package/dist/fields/checkbox-group-field/checkbox-group-field.d.ts +26 -0
- package/dist/fields/checkbox-group-field/checkbox-group-field.js +2 -0
- package/dist/fields/checkbox-group-field/checkbox-group-field.js.map +1 -0
- package/dist/fields/checkbox-group-field/index.d.ts +1 -0
- package/dist/fields/checkbox-group-field/index.js +1 -0
- package/dist/fields/combobox-field/combobox-field.d.ts +26 -0
- package/dist/fields/combobox-field/combobox-field.js +2 -0
- package/dist/fields/combobox-field/combobox-field.js.map +1 -0
- package/dist/fields/combobox-field/index.d.ts +1 -0
- package/dist/fields/combobox-field/index.js +1 -0
- package/dist/fields/index.d.ts +9 -0
- package/dist/fields/index.js +1 -0
- package/dist/fields/input-field/index.d.ts +1 -0
- package/dist/fields/input-field/index.js +1 -0
- package/dist/fields/input-field/input-field.d.ts +26 -0
- package/dist/fields/input-field/input-field.js +2 -0
- package/dist/fields/input-field/input-field.js.map +1 -0
- package/dist/fields/radio-group-field/index.d.ts +1 -0
- package/dist/fields/radio-group-field/index.js +1 -0
- package/dist/fields/radio-group-field/radio-group-field.d.ts +26 -0
- package/dist/fields/radio-group-field/radio-group-field.js +2 -0
- package/dist/fields/radio-group-field/radio-group-field.js.map +1 -0
- package/dist/fields/select-field/index.d.ts +1 -0
- package/dist/fields/select-field/index.js +1 -0
- package/dist/fields/select-field/select-field.d.ts +26 -0
- package/dist/fields/select-field/select-field.js +2 -0
- package/dist/fields/select-field/select-field.js.map +1 -0
- package/dist/fields/slider-field/index.d.ts +1 -0
- package/dist/fields/slider-field/index.js +1 -0
- package/dist/fields/slider-field/slider-field.d.ts +26 -0
- package/dist/fields/slider-field/slider-field.js +2 -0
- package/dist/fields/slider-field/slider-field.js.map +1 -0
- package/dist/fields/stepper-field/index.d.ts +1 -0
- package/dist/fields/stepper-field/index.js +1 -0
- package/dist/fields/stepper-field/stepper-field.d.ts +26 -0
- package/dist/fields/stepper-field/stepper-field.js +2 -0
- package/dist/fields/stepper-field/stepper-field.js.map +1 -0
- package/dist/helpers/flex/flex.d.ts +45 -0
- package/dist/helpers/flex/flex.js +2 -0
- package/dist/helpers/flex/flex.js.map +1 -0
- package/dist/helpers/flex/index.d.ts +1 -0
- package/dist/helpers/flex/index.js +1 -0
- package/dist/helpers/flex/styles.css +1 -0
- package/dist/helpers/flex/styles.module.js +3 -0
- package/dist/helpers/flex/styles.module.js.map +1 -0
- package/dist/helpers/index.d.ts +4 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/portal/context/portal-config.js.map +1 -1
- package/dist/index.d.ts +30 -5
- package/dist/index.js +1 -1
- package/dist/internals/base-button/base-button.css +1 -262
- package/dist/internals/base-button/base-button.d.ts +2 -2
- package/dist/internals/base-button/base-button.js.map +1 -1
- package/dist/internals/base-button/base-button.module.js +1 -0
- package/dist/internals/base-button/base-button.module.js.map +1 -1
- package/dist/internals/base-dialog/base-dialog.css +1 -74
- package/dist/internals/base-dialog/base-dialog.module.js +1 -0
- package/dist/internals/base-field/base-field.css +1 -115
- package/dist/internals/base-field/base-field.js +1 -1
- package/dist/internals/base-field/base-field.js.map +1 -1
- package/dist/internals/base-field/base-field.module.js +1 -0
- package/dist/internals/base-field/base-field.module.js.map +1 -1
- package/dist/internals/base-field/components/error.js +1 -1
- package/dist/internals/base-field/components/error.js.map +1 -1
- package/dist/internals/base-field/components/label.js.map +1 -1
- package/dist/internals/base-svg/base-svg.css +1 -137
- package/dist/internals/base-svg/base-svg.d.ts +2 -2
- package/dist/internals/base-svg/base-svg.js.map +1 -1
- package/dist/internals/base-svg/base-svg.module.js +1 -0
- package/dist/internals/base-svg/base-svg.module.js.map +1 -1
- package/dist/providers/index.d.ts +0 -3
- package/dist/providers/index.js +1 -1
- package/dist/providers/toast-provider/toast-provider.css +1 -13
- package/dist/providers/toast-provider/toast-provider.module.js +1 -0
- package/dist/providers/toast-provider/toast-provider.module.js.map +1 -1
- package/package.json +16 -30
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CheckboxGroupProps } from "@base-ui/react/checkbox-group";
|
|
2
|
+
|
|
3
|
+
//#region src/atoms/checkbox-group/checkbox-group.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Represents an item in the checkbox group.
|
|
6
|
+
*/
|
|
7
|
+
interface CheckboxGroupItem {
|
|
8
|
+
/** The value of the checkbox option. */
|
|
9
|
+
value: string;
|
|
10
|
+
/** The display label for the checkbox option. */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Whether this option is disabled. */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
type CheckboxGroupProps$1 = Omit<CheckboxGroupProps, "className"> & {
|
|
16
|
+
/** The items to render as checkbox options. */items: CheckboxGroupItem[]; /** The size applied to all checkbox items. @default "md" */
|
|
17
|
+
size?: "sm" | "md" | "lg";
|
|
18
|
+
/**
|
|
19
|
+
* The layout orientation of the checkbox group.
|
|
20
|
+
* @default "vertical"
|
|
21
|
+
*/
|
|
22
|
+
orientation?: "horizontal" | "vertical";
|
|
23
|
+
/**
|
|
24
|
+
* Whether the group is in a visually invalid state.
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
invalid?: boolean; /** Additional CSS classes for styling. */
|
|
28
|
+
classNames?: {
|
|
29
|
+
root?: string;
|
|
30
|
+
item?: string;
|
|
31
|
+
itemControl?: string;
|
|
32
|
+
itemIndicator?: string;
|
|
33
|
+
itemLabel?: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
declare const CheckboxGroup$1: ({
|
|
37
|
+
items,
|
|
38
|
+
size,
|
|
39
|
+
orientation,
|
|
40
|
+
invalid,
|
|
41
|
+
disabled,
|
|
42
|
+
classNames,
|
|
43
|
+
...props
|
|
44
|
+
}: CheckboxGroupProps$1) => import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { CheckboxGroup$1 as CheckboxGroup, CheckboxGroupItem, CheckboxGroupProps$1 as CheckboxGroupProps };
|
|
47
|
+
//# sourceMappingURL=checkbox-group.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./checkbox-group.module.js";import{Checkbox as t}from"../checkbox/checkbox.js";import"../checkbox/index.js";import n from"clsx";import{jsx as r}from"react/jsx-runtime";import{CheckboxGroup as i}from"@base-ui/react/checkbox-group";const a=({items:a,size:o=`md`,orientation:s=`vertical`,invalid:c,disabled:l=!1,classNames:u,...d})=>r(i,{...d,disabled:l,"data-size":o,"data-orientation":s,"data-invalid":c||void 0,className:n(e.group,u?.root),"data-slot":`checkbox-group`,children:a.map(e=>r(t,{value:e.value,label:e.label,disabled:e.disabled,size:o,invalid:c,classNames:{root:u?.item,control:u?.itemControl,indicator:u?.itemIndicator,label:u?.itemLabel}},e.value))});export{a as CheckboxGroup};
|
|
2
|
+
//# sourceMappingURL=checkbox-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.js","names":["CheckboxGroup","BaseUICheckboxGroup","styles"],"sources":["../../../src/atoms/checkbox-group/checkbox-group.tsx"],"sourcesContent":["import {\n CheckboxGroup as BaseUICheckboxGroup,\n type CheckboxGroupProps as BaseUICheckboxGroupProps,\n} from \"@base-ui/react/checkbox-group\";\nimport clsx from \"clsx\";\nimport styles from \"./checkbox-group.module.css\";\nimport { Checkbox } from \"../checkbox\";\n\n/**\n * Represents an item in the checkbox group.\n */\nexport interface CheckboxGroupItem {\n /** The value of the checkbox option. */\n value: string;\n /** The display label for the checkbox option. */\n label: string;\n /** Whether this option is disabled. */\n disabled?: boolean;\n}\n\nexport type CheckboxGroupProps = Omit<BaseUICheckboxGroupProps, \"className\"> & {\n /** The items to render as checkbox options. */\n items: CheckboxGroupItem[];\n /** The size applied to all checkbox items. @default \"md\" */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * The layout orientation of the checkbox group.\n * @default \"vertical\"\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the group is in a visually invalid state.\n * @default false\n */\n invalid?: boolean;\n /** Additional CSS classes for styling. */\n classNames?: {\n root?: string;\n item?: string;\n itemControl?: string;\n itemIndicator?: string;\n itemLabel?: string;\n };\n};\n\nexport const CheckboxGroup = ({\n items,\n size = \"md\",\n orientation = \"vertical\",\n invalid,\n disabled = false,\n classNames,\n ...props\n}: CheckboxGroupProps) => {\n return (\n <BaseUICheckboxGroup\n {...props}\n disabled={disabled}\n data-size={size}\n data-orientation={orientation}\n data-invalid={invalid || undefined}\n className={clsx(styles[\"group\"], classNames?.root)}\n data-slot=\"checkbox-group\"\n >\n {items.map(item => (\n <Checkbox\n key={item.value}\n value={item.value}\n label={item.label}\n disabled={item.disabled}\n size={size}\n invalid={invalid}\n classNames={{\n root: classNames?.item,\n control: classNames?.itemControl,\n indicator: classNames?.itemIndicator,\n label: classNames?.itemLabel,\n }}\n />\n ))}\n </BaseUICheckboxGroup>\n );\n};\n"],"mappings":"oPA6CA,MAAaA,GAAiB,CAC5B,QACA,OAAO,KACP,cAAc,WACd,UACA,WAAW,GACX,aACA,GAAG,KAGD,EAACC,EAAD,CACE,GAAI,EACM,WACV,YAAW,EACX,mBAAkB,EAClB,eAAc,GAAW,IAAA,GACzB,UAAW,EAAKC,EAAO,MAAU,GAAY,IAAI,EACjD,YAAU,0BAET,EAAM,IAAI,GACT,EAAC,EAAD,CAEE,MAAO,EAAK,MACZ,MAAO,EAAK,MACZ,SAAU,EAAK,SACT,OACG,UACT,WAAY,CACV,KAAM,GAAY,KAClB,QAAS,GAAY,YACrB,UAAW,GAAY,cACvB,MAAO,GAAY,SACrB,CACD,EAZM,EAAK,KAYX,CACF,CACkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.module.js","names":[],"sources":["../../../src/atoms/checkbox-group/checkbox-group.module.css"],"sourcesContent":[".group {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n}\n\n.group[data-orientation=\"horizontal\"] {\n flex-direction: row;\n flex-wrap: wrap;\n}\n\n.group[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n & * {\n cursor: not-allowed;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { CheckboxGroup, CheckboxGroupItem, CheckboxGroupProps } from "./checkbox-group.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./checkbox-group.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MergeElementProps, WithBaseProps } from "../../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/atoms/clickable-area/clickable-area.d.ts
|
|
4
|
+
type ClickableAreaProps = MergeElementProps<"button", WithBaseProps<{
|
|
5
|
+
/**
|
|
6
|
+
* If true, the button will be disabled and non-interactive.
|
|
7
|
+
*
|
|
8
|
+
* @default false
|
|
9
|
+
*/
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}>>;
|
|
12
|
+
declare const ClickableArea: React.FC<ClickableAreaProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { ClickableArea, ClickableAreaProps };
|
|
15
|
+
//# sourceMappingURL=clickable-area.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./styles.module.js";import t from"clsx";import{jsx as n}from"react/jsx-runtime";const r=r=>{let{children:i,className:a,disabled:o=!1,tabIndex:s,...c}=r,l=o?-1:s??0;return n(`button`,{...c,inert:o,disabled:o,tabIndex:l,className:t(e.root,a),children:i})};export{r as ClickableArea};
|
|
2
|
+
//# sourceMappingURL=clickable-area.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickable-area.js","names":["classes"],"sources":["../../../src/atoms/clickable-area/clickable-area.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport type { MergeElementProps, WithBaseProps } from \"../../types\";\nimport classes from \"./styles.module.css\";\n\nexport type ClickableAreaProps = MergeElementProps<\n \"button\",\n WithBaseProps<{\n /**\n * If true, the button will be disabled and non-interactive.\n *\n * @default false\n */\n disabled?: boolean;\n }>\n>;\n\nexport const ClickableArea: React.FC<ClickableAreaProps> = props => {\n const {\n children,\n className,\n disabled = false,\n tabIndex: tabIndexProp,\n ...otherProps\n } = props;\n\n const tabIndex = disabled ? -1 : (tabIndexProp ?? 0);\n\n return (\n <button\n {...otherProps}\n inert={disabled}\n disabled={disabled}\n tabIndex={tabIndex}\n className={clsx(classes[\"root\"], className)}\n >\n {children}\n </button>\n );\n};\n"],"mappings":"8FAgBA,MAAa,EAA8C,GAAS,CAClE,GAAM,CACJ,WACA,YACA,WAAW,GACX,SAAU,EACV,GAAG,GACD,EAEE,EAAW,EAAW,GAAM,GAAgB,EAElD,OACE,EAAC,SAAD,CACE,GAAI,EACJ,MAAO,EACG,WACA,WACV,UAAW,EAAKA,EAAQ,KAAS,CAAS,EAEzC,UACK,CAAA,CAEZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { ClickableArea, ClickableAreaProps } from "./clickable-area.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./clickable-area.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.TyvJFa_root{--clickable-area-background:transparent;all:unset;cursor:pointer;border-radius:var(--radius-lg);background-color:var(--clickable-area-background)}.TyvJFa_root:focus-visible{outline-style:solid;outline-width:var(--token-focus-ring-stroke);outline-color:var(--token-focus-ring-color);outline-offset:var(--token-focus-ring-offset)}.TyvJFa_root.TyvJFa_disabled{pointer-events:none}@media (hover:hover){.TyvJFa_root:not(.TyvJFa_disabled):hover{--clickable-area-background:#ffffff1f}}.TyvJFa_root:not(.TyvJFa_disabled):active{--clickable-area-background:#ffffff0f}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.module.js","names":[],"sources":["../../../src/atoms/clickable-area/styles.module.css"],"sourcesContent":[".root {\n --clickable-area-background: transparent;\n\n all: unset;\n cursor: pointer;\n\n border-radius: var(--radius-lg);\n background-color: var(--clickable-area-background);\n}\n\n.root:focus-visible {\n outline-style: solid;\n outline-width: var(--token-focus-ring-stroke);\n outline-color: var(--token-focus-ring-color);\n outline-offset: var(--token-focus-ring-offset);\n}\n\n.root.disabled {\n pointer-events: none;\n}\n\n@media (hover: hover) {\n .root:not(.disabled):hover {\n --clickable-area-background: rgba(255, 255, 255, 0.12);\n }\n}\n\n.root:not(.disabled):active {\n --clickable-area-background: rgba(255, 255, 255, 0.06);\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.uQwcna_panel{height:var(--collapsible-panel-height);width:var(--collapsible-panel-width);transition:height .15s ease-out;overflow:hidden;&[hidden]:not([hidden=until-found]){display:none}&[data-starting-style],&[data-ending-style]{height:0}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CollapsibleRootProps } from "@base-ui/react";
|
|
2
|
+
|
|
3
|
+
//#region src/atoms/collapsible/collapsible.d.ts
|
|
4
|
+
type CollapsibleProps = Omit<CollapsibleRootProps, "className"> & {
|
|
5
|
+
renderTrigger: React.ReactElement;
|
|
6
|
+
classNames?: {
|
|
7
|
+
root?: string;
|
|
8
|
+
trigger?: string;
|
|
9
|
+
panel?: string;
|
|
10
|
+
};
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
};
|
|
13
|
+
declare const Collapsible$1: React.FC<CollapsibleProps>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Collapsible$1 as Collapsible };
|
|
16
|
+
//# sourceMappingURL=collapsible.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"./collapsible.module.js";import t from"clsx";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{Collapsible as i}from"@base-ui/react";const a=a=>{let{renderTrigger:o,classNames:s,children:c}=a;return r(i.Root,{className:s?.root,children:[n(i.Trigger,{className:s?.trigger,render:o}),n(i.Panel,{className:t(e.panel,s?.panel),children:c})]})};export{a as Collapsible};
|
|
2
|
+
//# sourceMappingURL=collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.js","names":["Collapsible","BaseUiCollapsible","styles"],"sources":["../../../src/atoms/collapsible/collapsible.tsx"],"sourcesContent":["import {\n Collapsible as BaseUiCollapsible,\n type CollapsibleRootProps as BaseUiCollapsibleRootProps,\n} from \"@base-ui/react\";\nimport clsx from \"clsx\";\nimport styles from \"./collapsible.module.css\";\n\ntype CollapsibleProps = Omit<BaseUiCollapsibleRootProps, \"className\"> & {\n renderTrigger: React.ReactElement;\n classNames?: {\n root?: string;\n trigger?: string;\n panel?: string;\n };\n children: React.ReactNode;\n};\n\nexport const Collapsible: React.FC<CollapsibleProps> = props => {\n const { renderTrigger, classNames, children } = props;\n return (\n <BaseUiCollapsible.Root className={classNames?.root}>\n <BaseUiCollapsible.Trigger\n className={classNames?.trigger}\n render={renderTrigger}\n />\n <BaseUiCollapsible.Panel\n className={clsx(styles[\"panel\"], classNames?.panel)}\n >\n {children}\n </BaseUiCollapsible.Panel>\n </BaseUiCollapsible.Root>\n );\n};\n"],"mappings":"0JAiBA,MAAaA,EAA0C,GAAS,CAC9D,GAAM,CAAE,gBAAe,aAAY,YAAa,EAChD,OACE,EAACC,EAAkB,KAAnB,CAAwB,UAAW,GAAY,cAA/C,CACE,EAACA,EAAkB,QAAnB,CACE,UAAW,GAAY,QACvB,OAAQ,CACT,CAAA,EACD,EAACA,EAAkB,MAAnB,CACE,UAAW,EAAKC,EAAO,MAAU,GAAY,KAAK,EAEjD,UACsB,CAAA,CACH,GAE5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.module.js","names":[],"sources":["../../../src/atoms/collapsible/collapsible.module.css"],"sourcesContent":[".panel {\n height: var(--collapsible-panel-height);\n width: var(--collapsible-panel-width);\n overflow: hidden;\n transition: height 150ms ease-out;\n\n &[hidden]:not([hidden=\"until-found\"]) {\n display: none;\n }\n\n &[data-starting-style],\n &[data-ending-style] {\n height: 0;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Collapsible } from "./collapsible.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./collapsible.js";
|
|
@@ -1,302 +1 @@
|
|
|
1
|
-
.KAWYaW_control {
|
|
2
|
-
align-items: center;
|
|
3
|
-
gap: var(--spacing-xs);
|
|
4
|
-
width: 100%;
|
|
5
|
-
display: flex;
|
|
6
|
-
position: relative;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.KAWYaW_start-adornment, .KAWYaW_end-adornment {
|
|
10
|
-
height: var(--field-control-icon-size);
|
|
11
|
-
align-items: center;
|
|
12
|
-
display: flex;
|
|
13
|
-
|
|
14
|
-
& [data-slot="input-adornment-root"] {
|
|
15
|
-
&[data-kind="icon"] {
|
|
16
|
-
width: var(--adornment-icon-size);
|
|
17
|
-
height: var(--adornment-icon-size);
|
|
18
|
-
color: var(--field-label-color);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
&[data-kind="button"] {
|
|
22
|
-
width: var(--adornment-button-size);
|
|
23
|
-
height: var(--adornment-button-size);
|
|
24
|
-
color: var(--field-label-color);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.KAWYaW_control[data-size="sm"] {
|
|
30
|
-
--adornment-icon-size: 1rem;
|
|
31
|
-
--adornment-button-size: 1.5rem;
|
|
32
|
-
--input-group-gap: var(--spacing-xs);
|
|
33
|
-
--combobox-chip-size: 1rem;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.KAWYaW_control[data-size="md"] {
|
|
37
|
-
--adornment-icon-size: 1.5rem;
|
|
38
|
-
--adornment-button-size: 2rem;
|
|
39
|
-
--input-group-gap: var(--spacing-xs);
|
|
40
|
-
--combobox-chip-size: 1rem;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.KAWYaW_control[data-size="lg"] {
|
|
44
|
-
--adornment-icon-size: 2rem;
|
|
45
|
-
--adornment-button-size: 2.5rem;
|
|
46
|
-
--input-group-gap: var(--spacing-sm);
|
|
47
|
-
--combobox-chip-size: 1rem;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.KAWYaW_input-group {
|
|
51
|
-
box-sizing: border-box;
|
|
52
|
-
min-width: 12rem;
|
|
53
|
-
min-height: var(--field-control-height);
|
|
54
|
-
border: 1px solid var(--color-border-primary);
|
|
55
|
-
background-color: var(--color-surface-base);
|
|
56
|
-
border-radius: var(--field-control-radius);
|
|
57
|
-
align-items: center;
|
|
58
|
-
gap: var(--input-group-gap);
|
|
59
|
-
padding: 0 var(--spacing-sm);
|
|
60
|
-
flex-wrap: wrap;
|
|
61
|
-
flex: 1;
|
|
62
|
-
transition: border-color .2s ease-in-out;
|
|
63
|
-
display: flex;
|
|
64
|
-
position: relative;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.KAWYaW_input-group:focus-within {
|
|
68
|
-
outline-style: solid;
|
|
69
|
-
outline-width: var(--stroke-focus-ring);
|
|
70
|
-
outline-color: var(--color-action-info-base);
|
|
71
|
-
outline-offset: var(--spacing-xxs);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.KAWYaW_input {
|
|
75
|
-
box-sizing: border-box;
|
|
76
|
-
min-width: 4rem;
|
|
77
|
-
height: calc(var(--field-control-height) - 2px);
|
|
78
|
-
font-family: var(--typography-typeface-ltr);
|
|
79
|
-
font-size: var(--field-control-font-size);
|
|
80
|
-
line-height: var(--field-control-line-height);
|
|
81
|
-
font-weight: var(--field-control-font-weight);
|
|
82
|
-
color: var(--field-control-text-color);
|
|
83
|
-
background-color: #0000;
|
|
84
|
-
border: none;
|
|
85
|
-
border-radius: 0;
|
|
86
|
-
outline: none;
|
|
87
|
-
flex: 1;
|
|
88
|
-
margin: 0;
|
|
89
|
-
padding: 0;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.KAWYaW_input::placeholder {
|
|
93
|
-
color: var(--field-control-placeholder-color);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.KAWYaW_input:focus {
|
|
97
|
-
outline: none;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.KAWYaW_chips {
|
|
101
|
-
align-items: center;
|
|
102
|
-
gap: var(--spacing-xs);
|
|
103
|
-
padding: var(--spacing-xxs) 0;
|
|
104
|
-
flex-wrap: wrap;
|
|
105
|
-
flex: 1;
|
|
106
|
-
display: flex;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.KAWYaW_chip {
|
|
110
|
-
--combobox-chip-bg: var(--color-surface-secondary);
|
|
111
|
-
--combobox-chip-color: var(--color-content-brand-secondary);
|
|
112
|
-
box-sizing: border-box;
|
|
113
|
-
align-items: center;
|
|
114
|
-
gap: var(--spacing-xxs);
|
|
115
|
-
background-color: var(--combobox-chip-bg);
|
|
116
|
-
color: var(--combobox-chip-color);
|
|
117
|
-
border: 1px solid var(--combobox-chip-color);
|
|
118
|
-
padding: 0 var(--spacing-sm);
|
|
119
|
-
height: calc(var(--field-control-height) * .7);
|
|
120
|
-
border-radius: var(--radius-full);
|
|
121
|
-
font-size: var(--typography-caption-base-size);
|
|
122
|
-
cursor: default;
|
|
123
|
-
outline: none;
|
|
124
|
-
display: flex;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.KAWYaW_chip[data-highlighted] {
|
|
128
|
-
background-color: var(--color-action-neutral-muted);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.KAWYaW_chip-text {
|
|
132
|
-
white-space: nowrap;
|
|
133
|
-
color: var(--combobox-chip-color);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
.KAWYaW_chip-remove {
|
|
137
|
-
color: var(--combobox-chip-color);
|
|
138
|
-
background-color: var(--combobox-chip-bg);
|
|
139
|
-
cursor: pointer;
|
|
140
|
-
height: var(--combobox-chip-size);
|
|
141
|
-
width: var(--combobox-chip-size);
|
|
142
|
-
border: none;
|
|
143
|
-
border-radius: 50%;
|
|
144
|
-
justify-content: center;
|
|
145
|
-
align-items: center;
|
|
146
|
-
padding: 0;
|
|
147
|
-
transition: background-color .1s;
|
|
148
|
-
display: flex;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.KAWYaW_chip-remove:hover {
|
|
152
|
-
--combobox-chip-bg: var(--color-surface-tertiary);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.KAWYaW_action-buttons {
|
|
156
|
-
box-sizing: border-box;
|
|
157
|
-
align-items: center;
|
|
158
|
-
gap: var(--spacing-xxs);
|
|
159
|
-
padding-left: var(--spacing-sm);
|
|
160
|
-
height: 100%;
|
|
161
|
-
margin-left: auto;
|
|
162
|
-
display: flex;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.KAWYaW_trigger, .KAWYaW_clear {
|
|
166
|
-
box-sizing: border-box;
|
|
167
|
-
width: var(--field-control-icon-size);
|
|
168
|
-
height: var(--field-control-icon-size);
|
|
169
|
-
color: var(--field-label-color);
|
|
170
|
-
border-radius: var(--radius-full);
|
|
171
|
-
background: none;
|
|
172
|
-
border: none;
|
|
173
|
-
justify-content: center;
|
|
174
|
-
align-items: center;
|
|
175
|
-
padding: 0;
|
|
176
|
-
transition: color .1s, background-color .1s;
|
|
177
|
-
display: flex;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.KAWYaW_trigger:hover, .KAWYaW_clear:hover {
|
|
181
|
-
color: var(--color-content-neutral-base);
|
|
182
|
-
background-color: var(--color-surface-secondary);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
.KAWYaW_trigger:focus-visible, .KAWYaW_clear:focus-visible {
|
|
186
|
-
outline-style: solid;
|
|
187
|
-
outline-width: var(--stroke-focus-ring);
|
|
188
|
-
outline-color: var(--color-action-info-base);
|
|
189
|
-
outline-offset: var(--spacing-xxs);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.KAWYaW_trigger[data-disabled], .KAWYaW_clear[data-disabled] {
|
|
193
|
-
cursor: not-allowed;
|
|
194
|
-
user-select: none;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.KAWYaW_positioner {
|
|
198
|
-
z-index: var(--zindex-1);
|
|
199
|
-
outline: 0;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.KAWYaW_popup {
|
|
203
|
-
box-sizing: border-box;
|
|
204
|
-
background-color: var(--color-surface-base);
|
|
205
|
-
color: var(--color-content-neutral-base);
|
|
206
|
-
width: var(--anchor-width);
|
|
207
|
-
max-width: var(--available-width);
|
|
208
|
-
min-width: 12rem;
|
|
209
|
-
transform-origin: var(--transform-origin);
|
|
210
|
-
border: 1px solid var(--color-border-primary);
|
|
211
|
-
transition: opacity .1s, transform .1s;
|
|
212
|
-
overflow: hidden;
|
|
213
|
-
box-shadow: 0 4px 12px #0000001a;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
.KAWYaW_popup.KAWYaW_full-width {
|
|
217
|
-
width: 100%;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.KAWYaW_popup[data-starting-style], .KAWYaW_popup[data-ending-style] {
|
|
221
|
-
opacity: 0;
|
|
222
|
-
transform: scale(.95);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.KAWYaW_list {
|
|
226
|
-
box-sizing: border-box;
|
|
227
|
-
overscroll-behavior: contain;
|
|
228
|
-
padding-block: var(--spacing-xs);
|
|
229
|
-
scroll-padding-block: var(--spacing-xs);
|
|
230
|
-
max-height: min(22.5rem, var(--available-height));
|
|
231
|
-
outline: 0;
|
|
232
|
-
overflow-y: auto;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.KAWYaW_list[data-empty] {
|
|
236
|
-
padding: 0;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
.KAWYaW_group {
|
|
240
|
-
padding-block: var(--spacing-xs);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.KAWYaW_group-label {
|
|
244
|
-
padding: var(--spacing-xxs) var(--spacing-md);
|
|
245
|
-
font-size: var(--typography-caption-base-size);
|
|
246
|
-
font-weight: var(--typography-subheading-2-weight);
|
|
247
|
-
color: var(--color-content-neutral-muted);
|
|
248
|
-
text-transform: uppercase;
|
|
249
|
-
letter-spacing: .05em;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.KAWYaW_item {
|
|
253
|
-
box-sizing: border-box;
|
|
254
|
-
cursor: default;
|
|
255
|
-
user-select: none;
|
|
256
|
-
padding-block: var(--spacing-sm);
|
|
257
|
-
padding-left: var(--spacing-md);
|
|
258
|
-
padding-right: var(--spacing-md);
|
|
259
|
-
gap: var(--spacing-sm);
|
|
260
|
-
font-size: var(--field-control-font-size);
|
|
261
|
-
line-height: var(--field-control-line-height);
|
|
262
|
-
font-weight: var(--field-control-font-weight);
|
|
263
|
-
outline: 0;
|
|
264
|
-
grid-template-columns: 1rem 1fr;
|
|
265
|
-
align-items: center;
|
|
266
|
-
transition: background-color .1s;
|
|
267
|
-
display: grid;
|
|
268
|
-
position: relative;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
.KAWYaW_item[data-highlighted] {
|
|
272
|
-
background-color: var(--color-surface-secondary);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
.KAWYaW_item[data-selected] {
|
|
276
|
-
color: var(--color-content-brand-base);
|
|
277
|
-
font-weight: var(--typography-subheading-2-weight);
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
.KAWYaW_item[data-disabled] {
|
|
281
|
-
opacity: .5;
|
|
282
|
-
cursor: not-allowed;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.KAWYaW_item-indicator {
|
|
286
|
-
grid-column-start: 1;
|
|
287
|
-
justify-content: center;
|
|
288
|
-
align-items: center;
|
|
289
|
-
display: flex;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
.KAWYaW_item-text {
|
|
293
|
-
grid-column-start: 2;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
.KAWYaW_empty {
|
|
297
|
-
box-sizing: border-box;
|
|
298
|
-
padding: var(--spacing-md);
|
|
299
|
-
font-size: var(--field-control-font-size);
|
|
300
|
-
color: var(--color-content-neutral-muted);
|
|
301
|
-
text-align: center;
|
|
302
|
-
}
|
|
1
|
+
.KAWYaW_root{width:100%}.KAWYaW_control{--field-control-radius:var(--radius-md);--field-control-bg-color:var(--color-surface-base);--field-control-text-color:var(--color-content-neutral-base);--field-control-border-color:var(--color-border-secondary);--field-control-placeholder-color:var(--color-content-neutral-muted);--field-label-color:var(--color-content-neutral-secondary);align-items:center;gap:var(--spacing-xs);border-radius:999px;width:100%;display:flex;position:relative}.KAWYaW_control[data-size=sm]{--field-control-height:1.5rem;--field-control-icon-size:1.5rem;--field-control-font-size:var(--typography-caption-base-size);--field-control-line-height:var(--typography-caption-base-height);--field-control-font-weight:var(--typography-caption-base-weight);--adornment-icon-size:1rem;--adornment-button-size:1.5rem;--input-group-gap:var(--spacing-xs);--combobox-chip-size:1rem}.KAWYaW_control[data-size=md]{--field-control-height:2rem;--field-control-icon-size:2rem;--field-control-font-size:var(--typography-body-2-size);--field-control-line-height:var(--typography-body-2-height);--field-control-font-weight:var(--typography-body-2-weight);--adornment-icon-size:1.5rem;--adornment-button-size:2rem;--input-group-gap:var(--spacing-xs);--combobox-chip-size:1rem}.KAWYaW_control[data-size=lg]{--field-control-height:2.5rem;--field-control-icon-size:2rem;--field-control-font-size:var(--typography-body-1-size);--field-control-line-height:var(--typography-body-1-height);--field-control-font-weight:var(--typography-body-1-weight);--adornment-icon-size:2rem;--adornment-button-size:2.5rem;--input-group-gap:var(--spacing-sm);--combobox-chip-size:1rem}.KAWYaW_control[data-invalid]{--field-control-border-color:var(--color-content-negative-base);--field-control-text-color:var(--color-content-negative-base)}.KAWYaW_start-adornment,.KAWYaW_end-adornment{height:var(--field-control-icon-size);align-items:center;display:flex;& [data-slot=input-adornment-root]{&[data-kind=icon]{width:var(--adornment-icon-size);height:var(--adornment-icon-size);color:var(--field-label-color)}&[data-kind=button]{width:var(--adornment-button-size);height:var(--adornment-button-size);color:var(--field-label-color)}}}.KAWYaW_input-group{box-sizing:border-box;min-width:12rem;min-height:var(--field-control-height);border:1px solid var(--field-control-border-color);background-color:var(--field-control-bg-color);border-radius:var(--field-control-radius);align-items:center;gap:var(--input-group-gap);padding:0 var(--spacing-sm);flex-wrap:wrap;flex:1;transition:border-color .2s ease-in-out;display:flex;position:relative}.KAWYaW_input-group:focus-within{outline-style:solid;outline-width:var(--stroke-focus-ring);outline-color:var(--color-action-info-base);outline-offset:var(--spacing-xxs)}.KAWYaW_input{box-sizing:border-box;min-width:4rem;height:calc(var(--field-control-height) - 2px);font-family:var(--typography-typeface-ltr);font-size:var(--field-control-font-size);line-height:var(--field-control-line-height);font-weight:var(--field-control-font-weight);color:var(--field-control-text-color);background-color:#0000;border:none;border-radius:0;outline:none;flex:1;margin:0;padding:0}.KAWYaW_input::placeholder{color:var(--field-control-placeholder-color)}.KAWYaW_input:focus{outline:none}.KAWYaW_chips{align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xxs) 0;flex-wrap:wrap;flex:1;display:flex}.KAWYaW_chip{--combobox-chip-bg:var(--color-surface-tertiary);--combobox-chip-color:var(--color-content-neutral-base);box-sizing:border-box;align-items:center;gap:var(--spacing-xxs);background-color:var(--combobox-chip-bg);color:var(--combobox-chip-color);padding:0 var(--spacing-sm);height:calc(var(--field-control-height) * .7);border-radius:var(--radius-sm);font-size:var(--typography-caption-base-size);cursor:default;outline:none;display:flex}.KAWYaW_chip[data-highlighted]{background-color:var(--color-action-neutral-muted)}.KAWYaW_chip-text{white-space:nowrap;color:var(--combobox-chip-color)}.KAWYaW_chip-remove{color:var(--combobox-chip-color);background-color:var(--combobox-chip-bg);cursor:pointer;height:var(--combobox-chip-size);width:var(--combobox-chip-size);border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background-color .1s;display:flex}.KAWYaW_chip-remove:hover{--combobox-chip-bg:var(--color-surface-tertiary)}.KAWYaW_action-buttons{box-sizing:border-box;align-items:center;gap:var(--spacing-xxs);padding-left:var(--spacing-sm);height:100%;margin-left:auto;display:flex}.KAWYaW_trigger,.KAWYaW_clear{box-sizing:border-box;width:var(--field-control-icon-size);height:var(--field-control-icon-size);color:var(--field-label-color);padding:var(--spacing-xxs);border-radius:var(--radius-full);background:0 0;border:none;justify-content:center;align-items:center;transition:color .1s,background-color .1s;display:flex}.KAWYaW_trigger:hover,.KAWYaW_clear:hover{color:var(--color-content-neutral-base);background-color:var(--color-surface-secondary)}.KAWYaW_trigger:focus-visible,.KAWYaW_clear:focus-visible{outline-style:solid;outline-width:var(--stroke-focus-ring);outline-color:var(--color-action-info-base);outline-offset:var(--spacing-xxs)}.KAWYaW_trigger[data-disabled],.KAWYaW_clear[data-disabled]{cursor:not-allowed;user-select:none}.KAWYaW_positioner{z-index:var(--zindex-1);outline:0}.KAWYaW_popup{box-sizing:border-box;background-color:var(--color-surface-base);color:var(--color-content-neutral-base);width:var(--anchor-width);max-width:var(--available-width);min-width:12rem;transform-origin:var(--transform-origin);border:1px solid var(--color-border-primary);transition:opacity .1s,transform .1s;overflow:hidden;box-shadow:0 4px 12px #0000001a}.KAWYaW_popup.KAWYaW_full-width{width:100%}.KAWYaW_popup[data-starting-style],.KAWYaW_popup[data-ending-style]{opacity:0;transform:scale(.95)}.KAWYaW_list{box-sizing:border-box;overscroll-behavior:contain;padding-block:var(--spacing-xs);scroll-padding-block:var(--spacing-xs);max-height:min(22.5rem, var(--available-height));outline:0;overflow-y:auto}.KAWYaW_list[data-empty]{padding:0}.KAWYaW_group{padding-block:var(--spacing-xs)}.KAWYaW_group-label{padding:var(--spacing-xxs) var(--spacing-md);font-size:var(--typography-caption-base-size);font-weight:var(--typography-subheading-2-weight);color:var(--color-content-neutral-muted);text-transform:uppercase;letter-spacing:.05em}.KAWYaW_item{box-sizing:border-box;cursor:default;user-select:none;padding-block:var(--spacing-sm);padding-left:var(--spacing-md);padding-right:var(--spacing-md);gap:var(--spacing-sm);outline:0;grid-template-columns:1rem 1fr;align-items:center;transition:background-color .1s;display:grid;position:relative}.KAWYaW_item[data-size=sm]{font-size:var(--typography-caption-base-size);line-height:var(--typography-caption-base-height);font-weight:var(--typography-caption-base-weight)}.KAWYaW_item[data-size=md]{font-size:var(--typography-body-2-size);line-height:var(--typography-body-2-height);font-weight:var(--typography-body-2-weight)}.KAWYaW_item[data-size=lg]{font-size:var(--typography-body-1-size);line-height:var(--typography-body-1-height);font-weight:var(--typography-body-1-weight)}.KAWYaW_item[data-highlighted]{background-color:var(--color-surface-secondary)}.KAWYaW_item[data-selected]{color:var(--color-content-brand-base);font-weight:var(--typography-subheading-2-weight)}.KAWYaW_item[data-disabled]{opacity:.5;cursor:not-allowed}.KAWYaW_item-indicator{visibility:hidden;grid-column-start:1;justify-content:center;align-items:center;display:flex}.KAWYaW_item[data-selected] .KAWYaW_item-indicator{visibility:visible}.KAWYaW_item-text{grid-column-start:2}.KAWYaW_empty{box-sizing:border-box;padding:var(--spacing-md);font-size:var(--field-control-font-size);color:var(--color-content-neutral-muted);text-align:center}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { FieldProps } from "../../internals/base-field/base-field.js";
|
|
2
1
|
import { ComboboxItem } from "./components/item.js";
|
|
3
|
-
import * as React from "react";
|
|
2
|
+
import * as React$1 from "react";
|
|
4
3
|
import { ComboboxRootProps } from "@base-ui/react/combobox";
|
|
5
4
|
|
|
6
5
|
//#region src/atoms/combobox/combobox.d.ts
|
|
@@ -16,7 +15,17 @@ interface ComboboxGroup {
|
|
|
16
15
|
/**
|
|
17
16
|
* Props for the Combobox component.
|
|
18
17
|
*/
|
|
19
|
-
type ComboboxProps<T = string, Multiple extends boolean | undefined = false> =
|
|
18
|
+
type ComboboxProps<T = string, Multiple extends boolean | undefined = false> = ComboboxRootProps<T, Multiple> & {
|
|
19
|
+
/**
|
|
20
|
+
* The size of the combobox.
|
|
21
|
+
* @default "md"
|
|
22
|
+
*/
|
|
23
|
+
size?: "sm" | "md" | "lg";
|
|
24
|
+
/**
|
|
25
|
+
* Whether the combobox is in an invalid state.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
invalid?: boolean;
|
|
20
29
|
/**
|
|
21
30
|
* Whether the combobox is clearable when a value is selected.
|
|
22
31
|
* @default false
|
|
@@ -37,9 +46,6 @@ type ComboboxProps<T = string, Multiple extends boolean | undefined = false> = P
|
|
|
37
46
|
*/
|
|
38
47
|
classNames?: {
|
|
39
48
|
root?: string;
|
|
40
|
-
label?: string;
|
|
41
|
-
description?: string;
|
|
42
|
-
error?: string;
|
|
43
49
|
control?: string;
|
|
44
50
|
inputGroup?: string;
|
|
45
51
|
startAdornment?: string;
|
|
@@ -63,11 +69,11 @@ type ComboboxProps<T = string, Multiple extends boolean | undefined = false> = P
|
|
|
63
69
|
/**
|
|
64
70
|
* Slot for element placed at the start of the input group.
|
|
65
71
|
*/
|
|
66
|
-
startAdornment?: React.ReactNode;
|
|
72
|
+
startAdornment?: React$1.ReactNode;
|
|
67
73
|
/**
|
|
68
74
|
* Slot for element placed at the end of the input group.
|
|
69
75
|
*/
|
|
70
|
-
endAdornment?: React.ReactNode;
|
|
76
|
+
endAdornment?: React$1.ReactNode;
|
|
71
77
|
/**
|
|
72
78
|
* Placeholder text for the input.
|
|
73
79
|
*/
|
|
@@ -90,15 +96,10 @@ type ComboboxProps<T = string, Multiple extends boolean | undefined = false> = P
|
|
|
90
96
|
* ```
|
|
91
97
|
*/
|
|
92
98
|
declare const Combobox$1: <T = string, Multiple extends boolean | undefined = false>({
|
|
93
|
-
label,
|
|
94
|
-
description,
|
|
95
99
|
fullWidthContents,
|
|
96
100
|
invalid,
|
|
97
|
-
errorText,
|
|
98
|
-
hideLabel,
|
|
99
101
|
clearable,
|
|
100
102
|
searchable,
|
|
101
|
-
required,
|
|
102
103
|
size,
|
|
103
104
|
readOnly,
|
|
104
105
|
disabled,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{usePortalConfig as e}from"../../helpers/portal/context/hooks.js";import"../../helpers/portal/index.js";import{Icon as t}from"../icon/icon.js";import"../icon/index.js";import
|
|
1
|
+
import{usePortalConfig as e}from"../../helpers/portal/context/hooks.js";import"../../helpers/portal/index.js";import{Icon as t}from"../icon/icon.js";import"../icon/index.js";import n from"./combobox.module.js";import{Chip as r}from"./components/chip.js";import{ItemRow as i}from"./components/item.js";import a from"clsx";import"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{mdiChevronDown as l,mdiClose as u}from"@mdi/js";import{Combobox as d}from"@base-ui/react/combobox";const f=({fullWidthContents:f=!1,invalid:p=!1,clearable:m=!1,searchable:h=!0,size:g=`md`,readOnly:_=!1,disabled:v=!1,endAdornment:y,startAdornment:b,placeholder:x=`Select an option`,classNames:S,items:C,multiple:w,...T})=>{let{resolveContainer:E}=e(),D=E();return s(`div`,{"data-slot":`combobox-root`,className:a(n.root,S?.root),children:c(d.Root,{items:C,multiple:w,disabled:v,readOnly:_,...T,children:[s(`div`,{className:a(n.control,S?.control),"data-size":g,"data-invalid":p||void 0,"data-slot":`combobox-control`,children:c(d.InputGroup,{className:a(n[`input-group`],S?.inputGroup),"data-slot":`combobox-input-group`,children:[b&&s(`div`,{className:a(n[`start-adornment`],S?.startAdornment),"data-slot":`combobox-start-adornment`,children:b}),w?s(d.Chips,{className:a(n.chips,S?.chips),"data-slot":`combobox-chips`,children:s(d.Value,{children:e=>c(o,{children:[e.map(e=>s(r,{item:e,classNames:{root:S?.chip,text:S?.chipText,remove:S?.chipRemove}},e.id)),s(d.Input,{className:a(n.input,S?.input),"data-slot":`combobox-input`,placeholder:e.length>0?``:x})]})})}):s(d.Input,{className:a(n.input,S?.input),"data-slot":`combobox-input`,placeholder:x}),c(`div`,{className:a(n[`action-buttons`],S?.actionButtons),"data-slot":`combobox-action-buttons`,children:[m&&s(d.Clear,{className:a(n.clear,S?.clear),"data-slot":`combobox-clear`,"aria-label":`Clear selection`,disabled:v,children:s(t,{data:u})}),s(d.Trigger,{className:a(n.trigger,S?.trigger),"data-slot":`combobox-trigger`,disabled:v,"aria-label":`Open dropdown`,children:s(t,{data:l})}),y&&s(`div`,{className:a(n[`end-adornment`],S?.endAdornment),"data-slot":`combobox-end-adornment`,children:y})]})]})}),s(d.Portal,{container:D,children:s(d.Positioner,{className:a(n.positioner,S?.positioner),"data-slot":`combobox-positioner`,sideOffset:4,children:c(d.Popup,{className:a(n.popup,S?.popup,{[n[`full-width`]]:f}),"data-slot":`combobox-popup`,children:[s(d.Empty,{children:s(`div`,{className:a(n.empty,S?.empty),"data-slot":`combobox-empty`,children:`No items found.`})}),s(d.List,{className:a(n.list,S?.list),"data-slot":`combobox-list`,children:e=>`items`in e?c(d.Group,{className:a(n.group,S?.group),items:e.items,"data-slot":`combobox-group`,children:[s(d.GroupLabel,{className:a(n[`group-label`],S?.groupLabel),"data-slot":`combobox-group-label`,children:e.label}),s(d.Collection,{children:e=>s(i,{className:S?.item,item:e,size:g},e.id)})]},e.label):s(i,{className:S?.item,item:e,size:g},e.id)})]})})})]})})};export{f as Combobox};
|
|
2
2
|
//# sourceMappingURL=combobox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.js","names":["Combobox","BaseUICombobox","styles"],"sources":["../../../src/atoms/combobox/combobox.tsx"],"sourcesContent":["import {\n Combobox as BaseUICombobox,\n type ComboboxRootProps,\n} from \"@base-ui/react/combobox\";\nimport { mdiChevronDown, mdiClose } from \"@mdi/js\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport { usePortalConfig } from \"../../helpers/portal\";\nimport { Field, type FieldProps } from \"../../internals/base-field\";\nimport { Icon } from \"../icon\";\nimport styles from \"./combobox.module.css\";\nimport { Chip } from \"./components/chip\";\nimport { ItemRow, type ComboboxItem } from \"./components/item\";\n\n/**\n * Represents a group of items in the combobox.\n */\nexport interface ComboboxGroup {\n /** The text label of the group */\n label: string;\n /** The items in the group */\n items: ComboboxItem[];\n}\n\n/**\n * Props for the Combobox component.\n */\nexport type ComboboxProps<\n T = string,\n Multiple extends boolean | undefined = false,\n> = Pick<\n FieldProps,\n | \"label\"\n | \"hideLabel\"\n | \"name\"\n | \"required\"\n | \"description\"\n | \"invalid\"\n | \"errorText\"\n | \"dirty\"\n | \"size\"\n | \"disabled\"\n | \"autoFocus\"\n> &\n ComboboxRootProps<T, Multiple> & {\n /**\n * Whether the combobox is clearable when a value is selected.\n * @default false\n */\n clearable?: boolean;\n /**\n * Whether the combobox is searchable.\n * @default true\n */\n searchable?: boolean;\n /**\n * Whether the combobox contents should be full width.\n * @default false\n */\n fullWidthContents?: boolean;\n /**\n * Additional CSS classes for styling.\n */\n classNames?: {\n root?: string;\n label?: string;\n description?: string;\n error?: string;\n control?: string;\n inputGroup?: string;\n startAdornment?: string;\n endAdornment?: string;\n input?: string;\n actionButtons?: string;\n chips?: string;\n chip?: string;\n chipText?: string;\n chipRemove?: string;\n positioner?: string;\n empty?: string;\n list?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n trigger?: string;\n clear?: string;\n popup?: string;\n };\n /**\n * Slot for element placed at the start of the input group.\n */\n startAdornment?: React.ReactNode;\n /**\n * Slot for element placed at the end of the input group.\n */\n endAdornment?: React.ReactNode;\n /**\n * Placeholder text for the input.\n */\n placeholder?: string;\n };\n\n/**\n * A combobox component that combines an input with a list of selectable items.\n * Built on top of Base UI's combobox primitive with zero-runtime CSS styling.\n *\n * @example\n * ```tsx\n * <Combobox\n * label=\"Favorite Fruit\"\n * items={[\n * { id: \"1\", label: \"Apple\", value: \"apple\" },\n * { id: \"2\", label: \"Banana\", value: \"banana\" },\n * ]}\n * placeholder=\"Select a fruit\"\n * />\n * ```\n */\nexport const Combobox = <\n T = string,\n Multiple extends boolean | undefined = false,\n>({\n label,\n description,\n fullWidthContents = false,\n invalid = false,\n errorText,\n hideLabel = false,\n clearable = false,\n searchable = true,\n required = false,\n size = \"md\",\n readOnly = false,\n disabled = false,\n endAdornment,\n startAdornment,\n placeholder = \"Select an option\",\n classNames,\n items,\n multiple,\n ...props\n}: ComboboxProps<T, Multiple>) => {\n const { resolveContainer } = usePortalConfig();\n const portalContainer = resolveContainer();\n\n return (\n <Field\n label={label}\n hideLabel={hideLabel}\n size={size}\n disabled={disabled}\n required={required}\n errorText={errorText}\n invalid={invalid}\n description={description}\n classNames={{\n root: classNames?.root,\n label: classNames?.label,\n description: classNames?.description,\n error: classNames?.error,\n }}\n data-slot=\"combobox-root\"\n >\n <BaseUICombobox.Root<T, Multiple>\n items={items}\n multiple={multiple}\n disabled={disabled}\n readOnly={readOnly}\n {...props}\n >\n <div\n className={clsx(styles[\"control\"], classNames?.control)}\n data-size={size}\n data-slot=\"combobox-control\"\n >\n <BaseUICombobox.InputGroup\n className={clsx(styles[\"input-group\"], classNames?.inputGroup)}\n data-slot=\"combobox-input-group\"\n >\n {startAdornment && (\n <div\n className={clsx(\n styles[\"start-adornment\"],\n classNames?.startAdornment,\n )}\n data-slot=\"combobox-start-adornment\"\n >\n {startAdornment}\n </div>\n )}\n\n {multiple ? (\n <BaseUICombobox.Chips\n className={clsx(styles[\"chips\"], classNames?.chips)}\n data-slot=\"combobox-chips\"\n >\n <BaseUICombobox.Value>\n {(selectedValues: ComboboxItem[]) => (\n <>\n {selectedValues.map(item => (\n <Chip\n item={item}\n classNames={{\n root: classNames?.chip,\n text: classNames?.chipText,\n remove: classNames?.chipRemove,\n }}\n key={item.id}\n />\n ))}\n <BaseUICombobox.Input\n className={clsx(styles[\"input\"], classNames?.input)}\n data-slot=\"combobox-input\"\n placeholder={\n selectedValues.length > 0 ? \"\" : placeholder\n }\n />\n </>\n )}\n </BaseUICombobox.Value>\n </BaseUICombobox.Chips>\n ) : (\n <BaseUICombobox.Input\n className={clsx(styles[\"input\"], classNames?.input)}\n data-slot=\"combobox-input\"\n placeholder={placeholder}\n />\n )}\n\n <div\n className={clsx(\n styles[\"action-buttons\"],\n classNames?.actionButtons,\n )}\n data-slot=\"combobox-action-buttons\"\n >\n {clearable && (\n <BaseUICombobox.Clear\n className={clsx(styles[\"clear\"], classNames?.clear)}\n data-slot=\"combobox-clear\"\n aria-label=\"Clear selection\"\n disabled={disabled}\n >\n <Icon data={mdiClose} />\n </BaseUICombobox.Clear>\n )}\n\n <BaseUICombobox.Trigger\n className={clsx(styles[\"trigger\"], classNames?.trigger)}\n data-slot=\"combobox-trigger\"\n disabled={disabled}\n aria-label=\"Open dropdown\"\n >\n <Icon data={mdiChevronDown} />\n </BaseUICombobox.Trigger>\n\n {endAdornment && (\n <div\n className={clsx(\n styles[\"end-adornment\"],\n classNames?.endAdornment,\n )}\n data-slot=\"combobox-end-adornment\"\n >\n {endAdornment}\n </div>\n )}\n </div>\n </BaseUICombobox.InputGroup>\n </div>\n\n <BaseUICombobox.Portal container={portalContainer}>\n <BaseUICombobox.Positioner\n className={clsx(styles[\"positioner\"], classNames?.positioner)}\n data-slot=\"combobox-positioner\"\n sideOffset={4}\n >\n <BaseUICombobox.Popup\n className={clsx(styles[\"popup\"], classNames?.popup, {\n [styles[\"full-width\"]!]: fullWidthContents,\n })}\n data-slot=\"combobox-popup\"\n >\n <BaseUICombobox.Empty>\n <div\n className={clsx(styles[\"empty\"], classNames?.empty)}\n data-slot=\"combobox-empty\"\n >\n No items found.\n </div>\n </BaseUICombobox.Empty>\n\n <BaseUICombobox.List\n className={clsx(styles[\"list\"], classNames?.list)}\n data-slot=\"combobox-list\"\n >\n {(itemOrGroup: ComboboxItem | ComboboxGroup) => {\n if (\"items\" in itemOrGroup) {\n return (\n <BaseUICombobox.Group\n className={clsx(styles[\"group\"], classNames?.group)}\n key={itemOrGroup.label}\n items={itemOrGroup.items}\n data-slot=\"combobox-group\"\n >\n <BaseUICombobox.GroupLabel\n className={clsx(\n styles[\"group-label\"],\n classNames?.groupLabel,\n )}\n data-slot=\"combobox-group-label\"\n >\n {itemOrGroup.label}\n </BaseUICombobox.GroupLabel>\n <BaseUICombobox.Collection>\n {(item: ComboboxItem) => (\n <ItemRow\n className={classNames?.item}\n key={item.id}\n item={item}\n />\n )}\n </BaseUICombobox.Collection>\n </BaseUICombobox.Group>\n );\n }\n\n return (\n <ItemRow\n className={classNames?.item}\n key={itemOrGroup.id}\n item={itemOrGroup}\n />\n );\n }}\n </BaseUICombobox.List>\n </BaseUICombobox.Popup>\n </BaseUICombobox.Positioner>\n </BaseUICombobox.Portal>\n </BaseUICombobox.Root>\n </Field>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox.js","names":["Combobox","styles","BaseUICombobox"],"sources":["../../../src/atoms/combobox/combobox.tsx"],"sourcesContent":["import {\n Combobox as BaseUICombobox,\n type ComboboxRootProps,\n} from \"@base-ui/react/combobox\";\nimport { mdiChevronDown, mdiClose } from \"@mdi/js\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport { usePortalConfig } from \"../../helpers/portal\";\nimport { Icon } from \"../icon\";\nimport styles from \"./combobox.module.css\";\nimport { Chip } from \"./components/chip\";\nimport { ItemRow, type ComboboxItem } from \"./components/item\";\n\n/**\n * Represents a group of items in the combobox.\n */\nexport interface ComboboxGroup {\n /** The text label of the group */\n label: string;\n /** The items in the group */\n items: ComboboxItem[];\n}\n\n/**\n * Props for the Combobox component.\n */\nexport type ComboboxProps<\n T = string,\n Multiple extends boolean | undefined = false,\n> = ComboboxRootProps<T, Multiple> & {\n /**\n * The size of the combobox.\n * @default \"md\"\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Whether the combobox is in an invalid state.\n * @default false\n */\n invalid?: boolean;\n /**\n * Whether the combobox is clearable when a value is selected.\n * @default false\n */\n clearable?: boolean;\n /**\n * Whether the combobox is searchable.\n * @default true\n */\n searchable?: boolean;\n /**\n * Whether the combobox contents should be full width.\n * @default false\n */\n fullWidthContents?: boolean;\n /**\n * Additional CSS classes for styling.\n */\n classNames?: {\n root?: string;\n control?: string;\n inputGroup?: string;\n startAdornment?: string;\n endAdornment?: string;\n input?: string;\n actionButtons?: string;\n chips?: string;\n chip?: string;\n chipText?: string;\n chipRemove?: string;\n positioner?: string;\n empty?: string;\n list?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n trigger?: string;\n clear?: string;\n popup?: string;\n };\n /**\n * Slot for element placed at the start of the input group.\n */\n startAdornment?: React.ReactNode;\n /**\n * Slot for element placed at the end of the input group.\n */\n endAdornment?: React.ReactNode;\n /**\n * Placeholder text for the input.\n */\n placeholder?: string;\n};\n\n/**\n * A combobox component that combines an input with a list of selectable items.\n * Built on top of Base UI's combobox primitive with zero-runtime CSS styling.\n *\n * @example\n * ```tsx\n * <Combobox\n * label=\"Favorite Fruit\"\n * items={[\n * { id: \"1\", label: \"Apple\", value: \"apple\" },\n * { id: \"2\", label: \"Banana\", value: \"banana\" },\n * ]}\n * placeholder=\"Select a fruit\"\n * />\n * ```\n */\nexport const Combobox = <\n T = string,\n Multiple extends boolean | undefined = false,\n>({\n fullWidthContents = false,\n invalid = false,\n clearable = false,\n searchable = true,\n size = \"md\",\n readOnly = false,\n disabled = false,\n endAdornment,\n startAdornment,\n placeholder = \"Select an option\",\n classNames,\n items,\n multiple,\n ...props\n}: ComboboxProps<T, Multiple>) => {\n const { resolveContainer } = usePortalConfig();\n const portalContainer = resolveContainer();\n return (\n <div\n data-slot=\"combobox-root\"\n className={clsx(styles[\"root\"], classNames?.root)}\n >\n <BaseUICombobox.Root<T, Multiple>\n items={items}\n multiple={multiple}\n disabled={disabled}\n readOnly={readOnly}\n {...props}\n >\n <div\n className={clsx(styles[\"control\"], classNames?.control)}\n data-size={size}\n data-invalid={invalid || undefined}\n data-slot=\"combobox-control\"\n >\n <BaseUICombobox.InputGroup\n className={clsx(styles[\"input-group\"], classNames?.inputGroup)}\n data-slot=\"combobox-input-group\"\n >\n {startAdornment && (\n <div\n className={clsx(\n styles[\"start-adornment\"],\n classNames?.startAdornment,\n )}\n data-slot=\"combobox-start-adornment\"\n >\n {startAdornment}\n </div>\n )}\n\n {multiple ? (\n <BaseUICombobox.Chips\n className={clsx(styles[\"chips\"], classNames?.chips)}\n data-slot=\"combobox-chips\"\n >\n <BaseUICombobox.Value>\n {(selectedValues: ComboboxItem[]) => (\n <>\n {selectedValues.map(item => (\n <Chip\n item={item}\n classNames={{\n root: classNames?.chip,\n text: classNames?.chipText,\n remove: classNames?.chipRemove,\n }}\n key={item.id}\n />\n ))}\n <BaseUICombobox.Input\n className={clsx(styles[\"input\"], classNames?.input)}\n data-slot=\"combobox-input\"\n placeholder={\n selectedValues.length > 0 ? \"\" : placeholder\n }\n />\n </>\n )}\n </BaseUICombobox.Value>\n </BaseUICombobox.Chips>\n ) : (\n <BaseUICombobox.Input\n className={clsx(styles[\"input\"], classNames?.input)}\n data-slot=\"combobox-input\"\n placeholder={placeholder}\n />\n )}\n\n <div\n className={clsx(\n styles[\"action-buttons\"],\n classNames?.actionButtons,\n )}\n data-slot=\"combobox-action-buttons\"\n >\n {clearable && (\n <BaseUICombobox.Clear\n className={clsx(styles[\"clear\"], classNames?.clear)}\n data-slot=\"combobox-clear\"\n aria-label=\"Clear selection\"\n disabled={disabled}\n >\n <Icon data={mdiClose} />\n </BaseUICombobox.Clear>\n )}\n\n <BaseUICombobox.Trigger\n className={clsx(styles[\"trigger\"], classNames?.trigger)}\n data-slot=\"combobox-trigger\"\n disabled={disabled}\n aria-label=\"Open dropdown\"\n >\n <Icon data={mdiChevronDown} />\n </BaseUICombobox.Trigger>\n\n {endAdornment && (\n <div\n className={clsx(\n styles[\"end-adornment\"],\n classNames?.endAdornment,\n )}\n data-slot=\"combobox-end-adornment\"\n >\n {endAdornment}\n </div>\n )}\n </div>\n </BaseUICombobox.InputGroup>\n </div>\n\n <BaseUICombobox.Portal container={portalContainer}>\n <BaseUICombobox.Positioner\n className={clsx(styles[\"positioner\"], classNames?.positioner)}\n data-slot=\"combobox-positioner\"\n sideOffset={4}\n >\n <BaseUICombobox.Popup\n className={clsx(styles[\"popup\"], classNames?.popup, {\n [styles[\"full-width\"]!]: fullWidthContents,\n })}\n data-slot=\"combobox-popup\"\n >\n <BaseUICombobox.Empty>\n <div\n className={clsx(styles[\"empty\"], classNames?.empty)}\n data-slot=\"combobox-empty\"\n >\n No items found.\n </div>\n </BaseUICombobox.Empty>\n\n <BaseUICombobox.List\n className={clsx(styles[\"list\"], classNames?.list)}\n data-slot=\"combobox-list\"\n >\n {(itemOrGroup: ComboboxItem | ComboboxGroup) => {\n if (\"items\" in itemOrGroup) {\n return (\n <BaseUICombobox.Group\n className={clsx(styles[\"group\"], classNames?.group)}\n key={itemOrGroup.label}\n items={itemOrGroup.items}\n data-slot=\"combobox-group\"\n >\n <BaseUICombobox.GroupLabel\n className={clsx(\n styles[\"group-label\"],\n classNames?.groupLabel,\n )}\n data-slot=\"combobox-group-label\"\n >\n {itemOrGroup.label}\n </BaseUICombobox.GroupLabel>\n <BaseUICombobox.Collection>\n {(item: ComboboxItem) => (\n <ItemRow\n className={classNames?.item}\n key={item.id}\n item={item}\n size={size}\n />\n )}\n </BaseUICombobox.Collection>\n </BaseUICombobox.Group>\n );\n }\n\n return (\n <ItemRow\n className={classNames?.item}\n key={itemOrGroup.id}\n item={itemOrGroup}\n size={size}\n />\n );\n }}\n </BaseUICombobox.List>\n </BaseUICombobox.Popup>\n </BaseUICombobox.Positioner>\n </BaseUICombobox.Portal>\n </BaseUICombobox.Root>\n </div>\n );\n};\n"],"mappings":"yfA8GA,MAAaA,GAGX,CACA,oBAAoB,GACpB,UAAU,GACV,YAAY,GACZ,aAAa,GACb,OAAO,KACP,WAAW,GACX,WAAW,GACX,eACA,iBACA,cAAc,mBACd,aACA,QACA,WACA,GAAG,KAC6B,CAChC,GAAM,CAAE,oBAAqB,EAAgB,EACvC,EAAkB,EAAiB,EACzC,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAKC,EAAO,KAAS,GAAY,IAAI,WAEhD,EAACC,EAAe,KAAhB,CACS,QACG,WACA,WACA,WACV,GAAI,WALN,CAOE,EAAC,MAAD,CACE,UAAW,EAAKD,EAAO,QAAY,GAAY,OAAO,EACtD,YAAW,EACX,eAAc,GAAW,IAAA,GACzB,YAAU,4BAEV,EAACC,EAAe,WAAhB,CACE,UAAW,EAAKD,EAAO,eAAgB,GAAY,UAAU,EAC7D,YAAU,gCAFZ,CAIG,GACC,EAAC,MAAD,CACE,UAAW,EACTA,EAAO,mBACP,GAAY,cACd,EACA,YAAU,oCAET,CACE,CAAA,EAGN,EACC,EAACC,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,0BAEV,EAACC,EAAe,MAAhB,CAAA,SACI,GACA,EAAA,EAAA,CAAA,SAAA,CACG,EAAe,IAAI,GAClB,EAAC,EAAD,CACQ,OACN,WAAY,CACV,KAAM,GAAY,KAClB,KAAM,GAAY,SAClB,OAAQ,GAAY,UACtB,CAED,EADM,EAAK,EACX,CACF,EACD,EAACA,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,iBACV,YACE,EAAe,OAAS,EAAI,GAAK,CAEpC,CAAA,CACD,CAAA,CAAA,CAEgB,CAAA,CACF,CAAA,EAEtB,EAACC,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,iBACG,aACd,CAAA,EAGH,EAAC,MAAD,CACE,UAAW,EACTA,EAAO,kBACP,GAAY,aACd,EACA,YAAU,mCALZ,CAOG,GACC,EAACC,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,iBACV,aAAW,kBACD,oBAEV,EAAC,EAAD,CAAM,KAAM,CAAW,CAAA,CACH,CAAA,EAGxB,EAACC,EAAe,QAAhB,CACE,UAAW,EAAKD,EAAO,QAAY,GAAY,OAAO,EACtD,YAAU,mBACA,WACV,aAAW,yBAEX,EAAC,EAAD,CAAM,KAAM,CAAiB,CAAA,CACP,CAAA,EAEvB,GACC,EAAC,MAAD,CACE,UAAW,EACTA,EAAO,iBACP,GAAY,YACd,EACA,YAAU,kCAET,CACE,CAAA,CAEJ,GACoB,GACxB,CAAA,EAEL,EAACC,EAAe,OAAhB,CAAuB,UAAW,WAChC,EAACA,EAAe,WAAhB,CACE,UAAW,EAAKD,EAAO,WAAe,GAAY,UAAU,EAC5D,YAAU,sBACV,WAAY,WAEZ,EAACC,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,MAAO,EACjDA,EAAO,eAAiB,CAC3B,CAAC,EACD,YAAU,0BAJZ,CAME,EAACC,EAAe,MAAhB,CAAA,SACE,EAAC,MAAD,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,0BACX,iBAEI,CAAA,CACe,CAAA,EAEtB,EAACC,EAAe,KAAhB,CACE,UAAW,EAAKD,EAAO,KAAS,GAAY,IAAI,EAChD,YAAU,yBAER,GACI,UAAW,EAEX,EAACC,EAAe,MAAhB,CACE,UAAW,EAAKD,EAAO,MAAU,GAAY,KAAK,EAElD,MAAO,EAAY,MACnB,YAAU,0BAJZ,CAME,EAACC,EAAe,WAAhB,CACE,UAAW,EACTD,EAAO,eACP,GAAY,UACd,EACA,YAAU,gCAET,EAAY,KACY,CAAA,EAC3B,EAACC,EAAe,WAAhB,CAAA,SACI,GACA,EAAC,EAAD,CACE,UAAW,GAAY,KAEjB,OACA,MACP,EAHM,EAAK,EAGX,CAEsB,CAAA,CACP,GAvBf,EAAY,KAuBG,EAKxB,EAAC,EAAD,CACE,UAAW,GAAY,KAEvB,KAAM,EACA,MACP,EAHM,EAAY,EAGlB,CAGc,CAAA,CACD,GACG,CAAA,CACN,CAAA,CACJ,GAClB,CAAA,CAET"}
|