@pantool/components 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +80 -0
  2. package/dist/atoms/alert-dialog/alert-dialog.d.ts +7 -0
  3. package/dist/atoms/alert-dialog/alert-dialog.js +2 -0
  4. package/dist/atoms/alert-dialog/alert-dialog.js.map +1 -0
  5. package/dist/atoms/alert-dialog/index.d.ts +1 -0
  6. package/dist/atoms/alert-dialog/index.js +1 -0
  7. package/dist/atoms/button/button.css +18 -0
  8. package/dist/atoms/button/button.d.ts +16 -0
  9. package/dist/atoms/button/button.js +2 -0
  10. package/dist/atoms/button/button.js.map +1 -0
  11. package/dist/atoms/button/button.module.js +2 -0
  12. package/dist/atoms/button/button.module.js.map +1 -0
  13. package/dist/atoms/button/index.d.ts +1 -0
  14. package/dist/atoms/button/index.js +1 -0
  15. package/dist/atoms/checkbox/checkbox.css +119 -0
  16. package/dist/atoms/checkbox/checkbox.d.ts +53 -0
  17. package/dist/atoms/checkbox/checkbox.js +2 -0
  18. package/dist/atoms/checkbox/checkbox.js.map +1 -0
  19. package/dist/atoms/checkbox/checkbox.module.js +2 -0
  20. package/dist/atoms/checkbox/checkbox.module.js.map +1 -0
  21. package/dist/atoms/checkbox/index.d.ts +1 -0
  22. package/dist/atoms/checkbox/index.js +1 -0
  23. package/dist/atoms/combobox/combobox.css +302 -0
  24. package/dist/atoms/combobox/combobox.d.ts +115 -0
  25. package/dist/atoms/combobox/combobox.js +2 -0
  26. package/dist/atoms/combobox/combobox.js.map +1 -0
  27. package/dist/atoms/combobox/combobox.module.js +2 -0
  28. package/dist/atoms/combobox/combobox.module.js.map +1 -0
  29. package/dist/atoms/combobox/components/chip.js +2 -0
  30. package/dist/atoms/combobox/components/chip.js.map +1 -0
  31. package/dist/atoms/combobox/components/item.d.ts +17 -0
  32. package/dist/atoms/combobox/components/item.js +2 -0
  33. package/dist/atoms/combobox/components/item.js.map +1 -0
  34. package/dist/atoms/combobox/index.d.ts +1 -0
  35. package/dist/atoms/combobox/index.js +1 -0
  36. package/dist/atoms/condition-guard/condition-guard.d.ts +32 -0
  37. package/dist/atoms/condition-guard/condition-guard.js +2 -0
  38. package/dist/atoms/condition-guard/condition-guard.js.map +1 -0
  39. package/dist/atoms/condition-guard/index.js +1 -0
  40. package/dist/atoms/context-menu/context-menu.css +75 -0
  41. package/dist/atoms/context-menu/context-menu.d.ts +41 -0
  42. package/dist/atoms/context-menu/context-menu.js +2 -0
  43. package/dist/atoms/context-menu/context-menu.js.map +1 -0
  44. package/dist/atoms/context-menu/context-menu.module.js +2 -0
  45. package/dist/atoms/context-menu/context-menu.module.js.map +1 -0
  46. package/dist/atoms/context-menu/index.js +1 -0
  47. package/dist/atoms/dialog/dialog.d.ts +7 -0
  48. package/dist/atoms/dialog/dialog.js +2 -0
  49. package/dist/atoms/dialog/dialog.js.map +1 -0
  50. package/dist/atoms/dialog/index.d.ts +1 -0
  51. package/dist/atoms/dialog/index.js +1 -0
  52. package/dist/atoms/icon/icon.d.ts +14 -0
  53. package/dist/atoms/icon/icon.js +2 -0
  54. package/dist/atoms/icon/icon.js.map +1 -0
  55. package/dist/atoms/icon/index.d.ts +1 -0
  56. package/dist/atoms/icon/index.js +1 -0
  57. package/dist/atoms/icon-button/icon-button.css +12 -0
  58. package/dist/atoms/icon-button/icon-button.d.ts +14 -0
  59. package/dist/atoms/icon-button/icon-button.js +2 -0
  60. package/dist/atoms/icon-button/icon-button.js.map +1 -0
  61. package/dist/atoms/icon-button/icon-button.module.js +2 -0
  62. package/dist/atoms/icon-button/icon-button.module.js.map +1 -0
  63. package/dist/atoms/icon-button/index.d.ts +1 -0
  64. package/dist/atoms/icon-button/index.js +1 -0
  65. package/dist/atoms/index.d.ts +17 -0
  66. package/dist/atoms/index.js +1 -0
  67. package/dist/atoms/input/index.d.ts +1 -0
  68. package/dist/atoms/input/index.js +1 -0
  69. package/dist/atoms/input/input.css +29 -0
  70. package/dist/atoms/input/input.d.ts +39 -0
  71. package/dist/atoms/input/input.js +2 -0
  72. package/dist/atoms/input/input.js.map +1 -0
  73. package/dist/atoms/input/input.module.js +2 -0
  74. package/dist/atoms/input/input.module.js.map +1 -0
  75. package/dist/atoms/radio/index.d.ts +1 -0
  76. package/dist/atoms/radio/index.js +1 -0
  77. package/dist/atoms/radio/radio.css +142 -0
  78. package/dist/atoms/radio/radio.d.ts +40 -0
  79. package/dist/atoms/radio/radio.js +2 -0
  80. package/dist/atoms/radio/radio.js.map +1 -0
  81. package/dist/atoms/radio/radio.module.js +2 -0
  82. package/dist/atoms/radio/radio.module.js.map +1 -0
  83. package/dist/atoms/switch/index.d.ts +1 -0
  84. package/dist/atoms/switch/index.js +1 -0
  85. package/dist/atoms/switch/switch.css +68 -0
  86. package/dist/atoms/switch/switch.d.ts +19 -0
  87. package/dist/atoms/switch/switch.js +2 -0
  88. package/dist/atoms/switch/switch.js.map +1 -0
  89. package/dist/atoms/switch/switch.module.js +2 -0
  90. package/dist/atoms/switch/switch.module.js.map +1 -0
  91. package/dist/atoms/tabs/index.d.ts +3 -0
  92. package/dist/atoms/tabs/index.js +1 -0
  93. package/dist/atoms/tabs/tabs.css +92 -0
  94. package/dist/atoms/tabs/tabs.d.ts +43 -0
  95. package/dist/atoms/tabs/tabs.js +2 -0
  96. package/dist/atoms/tabs/tabs.js.map +1 -0
  97. package/dist/atoms/tabs/tabs.module.js +2 -0
  98. package/dist/atoms/tabs/tabs.module.js.map +1 -0
  99. package/dist/atoms/text/index.d.ts +1 -0
  100. package/dist/atoms/text/index.js +1 -0
  101. package/dist/atoms/text/text.css +273 -0
  102. package/dist/atoms/text/text.d.ts +18 -0
  103. package/dist/atoms/text/text.js +2 -0
  104. package/dist/atoms/text/text.js.map +1 -0
  105. package/dist/atoms/text/text.module.js +2 -0
  106. package/dist/atoms/text/text.module.js.map +1 -0
  107. package/dist/atoms/toast/index.d.ts +1 -0
  108. package/dist/atoms/toast/index.js +1 -0
  109. package/dist/atoms/toast/toast.css +151 -0
  110. package/dist/atoms/toast/toast.d.ts +11 -0
  111. package/dist/atoms/toast/toast.js +2 -0
  112. package/dist/atoms/toast/toast.js.map +1 -0
  113. package/dist/atoms/toast/toast.module.js +2 -0
  114. package/dist/atoms/toast/toast.module.js.map +1 -0
  115. package/dist/atoms/tooltip/index.d.ts +1 -0
  116. package/dist/atoms/tooltip/index.js +1 -0
  117. package/dist/atoms/tooltip/tooltip.css +92 -0
  118. package/dist/atoms/tooltip/tooltip.d.ts +50 -0
  119. package/dist/atoms/tooltip/tooltip.js +2 -0
  120. package/dist/atoms/tooltip/tooltip.js.map +1 -0
  121. package/dist/atoms/tooltip/tooltip.module.js +2 -0
  122. package/dist/atoms/tooltip/tooltip.module.js.map +1 -0
  123. package/dist/helpers/portal/context/hooks.d.ts +7 -0
  124. package/dist/helpers/portal/context/hooks.js +2 -0
  125. package/dist/helpers/portal/context/hooks.js.map +1 -0
  126. package/dist/helpers/portal/context/index.internal.d.ts +2 -0
  127. package/dist/helpers/portal/context/index.internal.js +1 -0
  128. package/dist/helpers/portal/context/portal-config.d.ts +12 -0
  129. package/dist/helpers/portal/context/portal-config.js +2 -0
  130. package/dist/helpers/portal/context/portal-config.js.map +1 -0
  131. package/dist/helpers/portal/context/provider.d.ts +11 -0
  132. package/dist/helpers/portal/context/provider.js +2 -0
  133. package/dist/helpers/portal/context/provider.js.map +1 -0
  134. package/dist/helpers/portal/index.d.ts +3 -0
  135. package/dist/helpers/portal/index.js +1 -0
  136. package/dist/helpers/portal/portal.d.ts +24 -0
  137. package/dist/helpers/portal/portal.js +2 -0
  138. package/dist/helpers/portal/portal.js.map +1 -0
  139. package/dist/index.d.ts +27 -0
  140. package/dist/index.js +1 -0
  141. package/dist/internals/base-button/base-button.css +262 -0
  142. package/dist/internals/base-button/base-button.d.ts +19 -0
  143. package/dist/internals/base-button/base-button.js +2 -0
  144. package/dist/internals/base-button/base-button.js.map +1 -0
  145. package/dist/internals/base-button/base-button.module.js +2 -0
  146. package/dist/internals/base-button/base-button.module.js.map +1 -0
  147. package/dist/internals/base-button/index.d.ts +1 -0
  148. package/dist/internals/base-button/index.js +1 -0
  149. package/dist/internals/base-dialog/base-dialog.css +74 -0
  150. package/dist/internals/base-dialog/base-dialog.d.ts +40 -0
  151. package/dist/internals/base-dialog/base-dialog.js +2 -0
  152. package/dist/internals/base-dialog/base-dialog.js.map +1 -0
  153. package/dist/internals/base-dialog/base-dialog.module.js +2 -0
  154. package/dist/internals/base-dialog/base-dialog.module.js.map +1 -0
  155. package/dist/internals/base-dialog/index.d.ts +1 -0
  156. package/dist/internals/base-dialog/index.js +1 -0
  157. package/dist/internals/base-field/base-field.css +115 -0
  158. package/dist/internals/base-field/base-field.d.ts +75 -0
  159. package/dist/internals/base-field/base-field.js +2 -0
  160. package/dist/internals/base-field/base-field.js.map +1 -0
  161. package/dist/internals/base-field/base-field.module.js +2 -0
  162. package/dist/internals/base-field/base-field.module.js.map +1 -0
  163. package/dist/internals/base-field/components/description.js +2 -0
  164. package/dist/internals/base-field/components/description.js.map +1 -0
  165. package/dist/internals/base-field/components/error.js +2 -0
  166. package/dist/internals/base-field/components/error.js.map +1 -0
  167. package/dist/internals/base-field/components/label.js +2 -0
  168. package/dist/internals/base-field/components/label.js.map +1 -0
  169. package/dist/internals/base-field/index.d.ts +1 -0
  170. package/dist/internals/base-field/index.js +1 -0
  171. package/dist/internals/base-svg/base-svg.css +137 -0
  172. package/dist/internals/base-svg/base-svg.d.ts +29 -0
  173. package/dist/internals/base-svg/base-svg.js +2 -0
  174. package/dist/internals/base-svg/base-svg.js.map +1 -0
  175. package/dist/internals/base-svg/base-svg.module.js +2 -0
  176. package/dist/internals/base-svg/base-svg.module.js.map +1 -0
  177. package/dist/internals/base-svg/index.d.ts +1 -0
  178. package/dist/internals/base-svg/index.js +1 -0
  179. package/dist/providers/alert-dialog-provider/alert-dialog-provider.d.ts +43 -0
  180. package/dist/providers/alert-dialog-provider/alert-dialog-provider.js +2 -0
  181. package/dist/providers/alert-dialog-provider/alert-dialog-provider.js.map +1 -0
  182. package/dist/providers/alert-dialog-provider/hooks.d.ts +16 -0
  183. package/dist/providers/alert-dialog-provider/hooks.js +2 -0
  184. package/dist/providers/alert-dialog-provider/hooks.js.map +1 -0
  185. package/dist/providers/alert-dialog-provider/index.d.ts +2 -0
  186. package/dist/providers/alert-dialog-provider/index.js +1 -0
  187. package/dist/providers/dialog-provider/dialog-provider.d.ts +43 -0
  188. package/dist/providers/dialog-provider/dialog-provider.js +2 -0
  189. package/dist/providers/dialog-provider/dialog-provider.js.map +1 -0
  190. package/dist/providers/dialog-provider/hooks.d.ts +16 -0
  191. package/dist/providers/dialog-provider/hooks.js +2 -0
  192. package/dist/providers/dialog-provider/hooks.js.map +1 -0
  193. package/dist/providers/dialog-provider/index.d.ts +2 -0
  194. package/dist/providers/dialog-provider/index.js +1 -0
  195. package/dist/providers/index.d.ts +8 -0
  196. package/dist/providers/index.js +1 -0
  197. package/dist/providers/toast-provider/index.d.ts +1 -0
  198. package/dist/providers/toast-provider/index.js +1 -0
  199. package/dist/providers/toast-provider/toast-provider.css +13 -0
  200. package/dist/providers/toast-provider/toast-provider.d.ts +124 -0
  201. package/dist/providers/toast-provider/toast-provider.js +2 -0
  202. package/dist/providers/toast-provider/toast-provider.js.map +1 -0
  203. package/dist/providers/toast-provider/toast-provider.module.js +2 -0
  204. package/dist/providers/toast-provider/toast-provider.module.js.map +1 -0
  205. package/dist/types.d.ts +43 -0
  206. package/dist/types.js +1 -0
  207. package/package.json +77 -0
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # @pantool/components
2
+
3
+ The core component library for the `pantool` monorepo. Built on top of
4
+ [Base UI](https://base-ui.com/react/components) for robust accessibility and
5
+ headless architecture, styled with CSS Modules and zero-runtime CSS variables.
6
+
7
+ ## 📦 Installation
8
+
9
+ ```bash
10
+ npm install @pantool/components
11
+ # or
12
+ yarn add @pantool/components
13
+ # or
14
+ pnpm add @pantool/components
15
+ ```
16
+
17
+ > **Note:** This package requires `@pantool/theme` to function correctly, as all
18
+ > styling relies on the `--pantool-*` global CSS variables. Ensure your
19
+ > application is wrapped in the theme provider or has the theme CSS injected
20
+ > globally.
21
+
22
+ ## 🏗 Structure
23
+
24
+ This library follows a modified Atomic Design pattern:
25
+
26
+ - `/src/internals`: Foundational elements not meant for direct external
27
+ consumption (e.g., `BaseButton`).
28
+ - `/src/atoms`: Single-purpose, indivisible components (e.g., `Button`, `Badge`,
29
+ `TextInput`).
30
+ - `/src/molecules`: Combinations of atoms into slightly more complex structures
31
+ (e.g., `SearchField` = `TextInput` + `IconButton`).
32
+
33
+ ## 🛠 Anatomy of a Component
34
+
35
+ Every component in this library is fully typed and heavily documented. A
36
+ standard component folder looks like this:
37
+
38
+ ```text
39
+ src/atoms/button/
40
+ ├── button.tsx # Base UI implementation & React logic
41
+ ├── button.module.css # Local CSS variables & data-* selectors
42
+ ├── index.ts # Public exports
43
+ └── README.md # Component documentation & API
44
+ ```
45
+
46
+ ## 🎨 Styling Philosophy
47
+
48
+ We do not use runtime CSS-in-JS. Instead, we use a highly optimized approach
49
+ leveraging local CSS variables mapped to `data-*` attributes.
50
+
51
+ 1. **Local Scope:** Components define their layout and design using locally
52
+ scoped variables (e.g., `--button-bg`).
53
+ 2. **Global Tokens:** These local variables are populated by the global theme
54
+ tokens (e.g., `var(--pantool-color-brand)`).
55
+ 3. **State Overrides:** Component variants (`size`, `color`) and interactions
56
+ (`hover`, `active`, `disabled`) are handled by updating the local variable
57
+ via `data-*` attribute selectors.
58
+
59
+ Example consumption:
60
+
61
+ ```tsx
62
+ import { Button } from "@pantool/components";
63
+
64
+ export function Form() {
65
+ return (
66
+ <Button
67
+ size="lg"
68
+ color="brand"
69
+ variant="filled"
70
+ >
71
+ Submit
72
+ </Button>
73
+ );
74
+ }
75
+ ```
76
+
77
+ ## 🤝 Contributing
78
+
79
+ When adding a new component, ensure you refer to the `AGENTS.md` guidelines for
80
+ strict rules on CSS variable management and Base UI integration.
@@ -0,0 +1,7 @@
1
+ import { BaseDialogProps } from "../../internals/base-dialog/base-dialog.js";
2
+ //#region src/atoms/alert-dialog/alert-dialog.d.ts
3
+ type AlertDialogProps = Omit<BaseDialogProps, "as">;
4
+ declare const AlertDialog: (props: AlertDialogProps) => import("react/jsx-runtime").JSX.Element;
5
+ //#endregion
6
+ export { AlertDialog, AlertDialogProps };
7
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{BaseDialog as e}from"../../internals/base-dialog/base-dialog.js";import"../../internals/base-dialog/index.js";import{AlertDialog as t}from"@base-ui/react/alert-dialog";import{jsx as n}from"react/jsx-runtime";const r=r=>n(e,{as:t,...r});export{r as AlertDialog};
2
+ //# sourceMappingURL=alert-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.js","names":["AlertDialog","BaseUIAlertDialog"],"sources":["../../../src/atoms/alert-dialog/alert-dialog.tsx"],"sourcesContent":["import { AlertDialog as BaseUIAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { BaseDialog, type BaseDialogProps } from \"../../internals/base-dialog\";\n\nexport type AlertDialogProps = Omit<BaseDialogProps, \"as\">;\n\nexport const AlertDialog = (props: AlertDialogProps) => {\n return <BaseDialog as={BaseUIAlertDialog} {...props} />;\n};\n"],"mappings":"uNAKA,MAAaA,EAAe,GACnB,EAAC,EAAD,CAAY,GAAIC,EAAmB,GAAI,CAAQ,CAAA"}
@@ -0,0 +1 @@
1
+ import { AlertDialog, AlertDialogProps } from "./alert-dialog.js";
@@ -0,0 +1 @@
1
+ import"./alert-dialog.js";
@@ -0,0 +1,18 @@
1
+ .p9zh2a_root {
2
+ gap: var(--spacing-sm);
3
+ }
4
+
5
+ .p9zh2a_label {
6
+ white-space: nowrap;
7
+ text-overflow: ellipsis;
8
+ display: inline-flex;
9
+ overflow: hidden;
10
+ }
11
+
12
+ .p9zh2a_icon {
13
+ width: var(--btn-icon-size);
14
+ height: var(--btn-icon-size);
15
+ justify-content: center;
16
+ align-items: center;
17
+ display: flex;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseButtonProps } from "../../internals/base-button/base-button.js";
2
+ import * as React from "react";
3
+
4
+ //#region src/atoms/button/button.d.ts
5
+ interface ButtonProps extends BaseButtonProps {
6
+ /** The icon to display before the text. */
7
+ startIcon?: React.ReactNode;
8
+ /** The icon to display after the text. */
9
+ endIcon?: React.ReactNode;
10
+ /** The button's text. */
11
+ text?: React.ReactNode;
12
+ }
13
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
14
+ //#endregion
15
+ export { Button, ButtonProps };
16
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{BaseButton as e}from"../../internals/base-button/base-button.js";import"../../internals/base-button/index.js";import t from"./button.module.js";import*as n from"react";import{jsx as r,jsxs as i}from"react/jsx-runtime";const a=n.forwardRef((n,a)=>{let{text:o,startIcon:s,endIcon:c,className:l,...u}=n;return i(e,{ref:a,className:`${t.root} ${l||``}`.trim(),...u,children:[s&&r(`span`,{className:t.icon,children:s}),r(`span`,{className:t.label,children:o}),c&&r(`span`,{className:t.icon,children:c})]})});export{a as Button};
2
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","names":["styles"],"sources":["../../../src/atoms/button/button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { BaseButton, type BaseButtonProps } from \"../../internals/base-button\";\nimport styles from \"./button.module.css\";\n\nexport interface ButtonProps extends BaseButtonProps {\n /** The icon to display before the text. */\n startIcon?: React.ReactNode;\n /** The icon to display after the text. */\n endIcon?: React.ReactNode;\n /** The button's text. */\n text?: React.ReactNode;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const { text, startIcon, endIcon, className, ...rest } = props;\n\n return (\n <BaseButton\n ref={ref}\n className={`${styles[\"root\"]} ${className || \"\"}`.trim()}\n {...rest}\n >\n {startIcon && <span className={styles[\"icon\"]}>{startIcon}</span>}\n <span className={styles[\"label\"]}>{text}</span>\n {endIcon && <span className={styles[\"icon\"]}>{endIcon}</span>}\n </BaseButton>\n );\n },\n);\n"],"mappings":"iOAaA,MAAa,EAAS,EAAM,YACzB,EAAO,IAAQ,CACd,GAAM,CAAE,OAAM,YAAW,UAAS,YAAW,GAAG,GAAS,EAEzD,OACE,EAAC,EAAD,CACO,MACL,UAAW,GAAGA,EAAO,KAAQ,GAAG,GAAa,KAAK,KAAK,EACvD,GAAI,WAHN,CAKG,GAAa,EAAC,OAAD,CAAM,UAAWA,EAAO,cAAU,CAAgB,CAAA,EAChE,EAAC,OAAD,CAAM,UAAWA,EAAO,eAAW,CAAW,CAAA,EAC7C,GAAW,EAAC,OAAD,CAAM,UAAWA,EAAO,cAAU,CAAc,CAAA,CAClD,GAEhB,CACF"}
@@ -0,0 +1,2 @@
1
+ var e={icon:`p9zh2a_icon`,label:`p9zh2a_label`,root:`p9zh2a_root`};export{e as default};
2
+ //# sourceMappingURL=button.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.module.js","names":[],"sources":["../../../src/atoms/button/button.module.css"],"sourcesContent":[".root {\n gap: var(--spacing-sm);\n}\n\n.label {\n display: inline-flex;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n /* Icon sizing relative to text */\n width: var(--btn-icon-size);\n height: var(--btn-icon-size);\n}\n"],"mappings":"AAMA,IAAA,EAAe,CAAA,KAAA,cAAM,MAAA,eAAA,KAAA,aAAA"}
@@ -0,0 +1 @@
1
+ import { Button, ButtonProps } from "./button.js";
@@ -0,0 +1 @@
1
+ import"./button.js";
@@ -0,0 +1,119 @@
1
+ .PdmYxW_root {
2
+ --checkbox-size: 1rem;
3
+ --checkbox-bg: transparent;
4
+ --checkbox-border: var(--color-border-primary);
5
+ --checkbox-color: transparent;
6
+ --checkbox-gap: var(--spacing-xs);
7
+ --checkbox-label-color: var(--color-content-neutral-base);
8
+ font-family: var(--typography-typeface-ltr);
9
+ align-items: center;
10
+ gap: var(--checkbox-gap);
11
+ display: flex;
12
+ position: relative;
13
+ }
14
+
15
+ .PdmYxW_root [data-slot="field-label"] {
16
+ height: var(--checkbox-size);
17
+ }
18
+
19
+ .PdmYxW_control {
20
+ box-sizing: border-box;
21
+ width: var(--checkbox-size);
22
+ height: var(--checkbox-size);
23
+ background-color: var(--checkbox-bg);
24
+ color: var(--checkbox-color);
25
+ box-shadow: 0 0 0 1px var(--checkbox-border) inset;
26
+ cursor: pointer;
27
+ border: none;
28
+ border-radius: 4px;
29
+ justify-content: center;
30
+ align-items: center;
31
+ padding: 0;
32
+ transition: background-color .2s, box-shadow .2s, color .2s;
33
+ display: flex;
34
+ }
35
+
36
+ .PdmYxW_root[data-size="sm"] {
37
+ --checkbox-size: .875rem;
38
+ --checkbox-gap: var(--spacing-xs);
39
+ --checkbox-label-font-size: var(--typography-body-2-size);
40
+ --checkbox-label-line-height: var(--typography-body-2-height);
41
+ --checkbox-label-font-weight: var(--typography-body-2-weight);
42
+ }
43
+
44
+ .PdmYxW_root[data-size="md"] {
45
+ --checkbox-size: 1rem;
46
+ --checkbox-gap: var(--spacing-xs);
47
+ --checkbox-label-font-size: var(--typography-body-1-size);
48
+ --checkbox-label-line-height: var(--typography-body-1-height);
49
+ --checkbox-label-font-weight: var(--typography-body-1-weight);
50
+ }
51
+
52
+ .PdmYxW_root[data-size="lg"] {
53
+ --checkbox-size: 1.25rem;
54
+ --checkbox-gap: var(--spacing-sm);
55
+ --checkbox-label-font-size: var(--typography-body-1-size);
56
+ --checkbox-label-line-height: var(--typography-body-1-height);
57
+ --checkbox-label-font-weight: var(--typography-body-1-weight);
58
+ }
59
+
60
+ .PdmYxW_control[data-checked]:not([data-invalid]), .PdmYxW_control[data-indeterminate]:not([data-invalid]) {
61
+ --checkbox-bg: var(--color-action-neutral-base);
62
+ --checkbox-border: transparent;
63
+ --checkbox-color: var(--color-on-neutral);
64
+ }
65
+
66
+ .PdmYxW_control:focus-visible {
67
+ outline-style: solid;
68
+ outline-width: var(--stroke-focus-ring);
69
+ outline-color: var(--color-action-info-base);
70
+ outline-offset: var(--spacing-xxs);
71
+ }
72
+
73
+ .PdmYxW_root[data-disabled] {
74
+ cursor: not-allowed;
75
+ opacity: .5;
76
+
77
+ & * {
78
+ cursor: not-allowed;
79
+ }
80
+ }
81
+
82
+ .PdmYxW_root[data-invalid] {
83
+ --checkbox-border: var(--color-negative);
84
+ --field-label-color: var(--color-content-negative-muted);
85
+ --checkbox-label-color: var(--color-content-neutral-base);
86
+ }
87
+
88
+ .PdmYxW_control[data-invalid][data-checked], .PdmYxW_control[data-invalid][data-indeterminate] {
89
+ --checkbox-bg: var(--color-negative);
90
+ --checkbox-color: var(--color-on-negative);
91
+ }
92
+
93
+ .PdmYxW_indicator {
94
+ justify-content: center;
95
+ align-items: center;
96
+ width: 100%;
97
+ height: 100%;
98
+ display: flex;
99
+ }
100
+
101
+ .PdmYxW_root[data-invalid] {
102
+ --field-label-color: var(--color-content-negative-muted);
103
+ }
104
+
105
+ .PdmYxW_check-icon, .PdmYxW_minus-icon {
106
+ font-size: .85em;
107
+ display: none;
108
+ }
109
+
110
+ .PdmYxW_control[data-checked] .PdmYxW_check-icon, .PdmYxW_control[data-indeterminate] .PdmYxW_minus-icon {
111
+ display: block;
112
+ }
113
+
114
+ .PdmYxW_label {
115
+ font-size: var(--checkbox-label-font-size, var(--typography-body-2-size));
116
+ line-height: var(--checkbox-label-line-height, var(--typography-body-2-height));
117
+ font-weight: var(--checkbox-label-font-weight, var(--typography-body-2-weight));
118
+ color: var(--checkbox-label-color);
119
+ }
@@ -0,0 +1,53 @@
1
+ import { CheckboxRootProps } from "@base-ui/react/checkbox";
2
+
3
+ //#region src/atoms/checkbox/checkbox.d.ts
4
+ type CheckboxProps = Omit<CheckboxRootProps, "className"> & {
5
+ /** The size of the input. @default "md" */size?: "sm" | "md" | "lg";
6
+ /**
7
+ * The label of the field.
8
+ */
9
+ label: string;
10
+ /**
11
+ * Whether to hide the label or not.
12
+ *
13
+ * @default false
14
+ */
15
+ hideLabel?: boolean;
16
+ /**
17
+ * Gets or sets whether or not the field is in a visually invalid state.
18
+ *
19
+ * This error state overrides the error state controlled by
20
+ * `reportValidity()`.
21
+ *
22
+ * @default false
23
+ */
24
+ invalid?: boolean;
25
+ /**
26
+ * The error message that replaces feedback when `error` is true. If
27
+ * `errorText` is an empty string, then the feedback will continue to
28
+ * show.
29
+ */
30
+ errorText?: string;
31
+ /**
32
+ * Whether the field's value has been changed from its initial value.
33
+ * Useful when the field state is controlled by an external library.
34
+ */
35
+ dirty?: boolean | undefined;
36
+ /**
37
+ * Additional CSS classes for styling.
38
+ */
39
+ classNames?: {
40
+ label?: string;
41
+ feedback?: string;
42
+ root?: string;
43
+ error?: string;
44
+ control?: string;
45
+ indicator?: string;
46
+ checkIcon?: string;
47
+ minusIcon?: string;
48
+ };
49
+ };
50
+ declare const Checkbox$1: (props: CheckboxProps) => import("react/jsx-runtime").JSX.Element;
51
+ //#endregion
52
+ export { Checkbox$1 as Checkbox, CheckboxProps };
53
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{Icon as e}from"../icon/icon.js";import"../icon/index.js";import t from"./checkbox.module.js";import n from"clsx";import{useId as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{Checkbox as o}from"@base-ui/react/checkbox";import{mdiCheckBold as s,mdiMinusThick as c}from"@mdi/js";const l=l=>{let{size:u=`md`,label:d,disabled:f=!1,required:p=!1,name:m,invalid:h,errorText:g,dirty:_,readOnly:v,autoFocus:y,hideLabel:b,classNames:x,...S}=l,C=r();return a(`div`,{"data-size":u,"data-disabled":f||void 0,"data-required":p||void 0,"data-invalid":h||void 0,className:n(t.root,x?.root),"data-slot":`checkbox-root`,children:[i(o.Root,{...S,disabled:f,required:p,readOnly:v,"data-invalid":h||void 0,className:n(t.control,x?.control),"data-size":u,"data-slot":`checkbox-control`,id:C,children:a(o.Indicator,{"data-slot":`checkbox-indicator`,className:n(t.indicator,x?.indicator),children:[i(e,{data:s,"data-slot":`checkbox-check-icon`,className:n(t[`check-icon`],x?.checkIcon)}),i(e,{data:c,"data-slot":`checkbox-minus-icon`,className:n(t[`minus-icon`],x?.minusIcon)})]})}),i(`label`,{htmlFor:C,className:n(t.label,x?.label),"data-slot":`checkbox-label`,children:d})]})};export{l as Checkbox};
2
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","names":["Checkbox","styles","BaseUICheckbox"],"sources":["../../../src/atoms/checkbox/checkbox.tsx"],"sourcesContent":["import {\n Checkbox as BaseUICheckbox,\n type CheckboxRootProps,\n} from \"@base-ui/react/checkbox\";\nimport { Icon } from \"../icon\";\nimport { mdiCheckBold, mdiMinusThick } from \"@mdi/js\";\nimport styles from \"./checkbox.module.css\";\nimport clsx from \"clsx\";\nimport { useId } from \"react\";\n\nexport type CheckboxProps = Omit<CheckboxRootProps, \"className\"> & {\n /** The size of the input. @default \"md\" */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * The label of the field.\n */\n label: string;\n\n /**\n * Whether to hide the label or not.\n *\n * @default false\n */\n hideLabel?: boolean;\n /**\n * Gets or sets whether or not the field is in a visually invalid state.\n *\n * This error state overrides the error state controlled by\n * `reportValidity()`.\n *\n * @default false\n */\n invalid?: boolean;\n /**\n * The error message that replaces feedback when `error` is true. If\n * `errorText` is an empty string, then the feedback will continue to\n * show.\n */\n errorText?: string;\n\n /**\n * Whether the field's value has been changed from its initial value.\n * Useful when the field state is controlled by an external library.\n */\n dirty?: boolean | undefined;\n /**\n * Additional CSS classes for styling.\n */\n classNames?: {\n label?: string;\n feedback?: string;\n root?: string;\n error?: string;\n control?: string;\n indicator?: string;\n checkIcon?: string;\n minusIcon?: string;\n };\n};\n\nexport const Checkbox = (props: CheckboxProps) => {\n const {\n size = \"md\",\n label,\n disabled = false,\n required = false,\n name,\n invalid,\n errorText,\n dirty,\n readOnly,\n autoFocus,\n hideLabel,\n classNames,\n ...otherProps\n } = props;\n\n const id = useId();\n\n return (\n <div\n data-size={size}\n data-disabled={disabled || undefined}\n data-required={required || undefined}\n data-invalid={invalid || undefined}\n className={clsx(styles[\"root\"], classNames?.root)}\n data-slot=\"checkbox-root\"\n >\n <BaseUICheckbox.Root\n {...otherProps}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n data-invalid={invalid || undefined}\n className={clsx(styles[\"control\"], classNames?.control)}\n data-size={size}\n data-slot=\"checkbox-control\"\n id={id}\n >\n <BaseUICheckbox.Indicator\n data-slot=\"checkbox-indicator\"\n className={clsx(styles[\"indicator\"], classNames?.indicator)}\n >\n <Icon\n data={mdiCheckBold}\n data-slot=\"checkbox-check-icon\"\n className={clsx(styles[\"check-icon\"], classNames?.checkIcon)}\n />\n <Icon\n data={mdiMinusThick}\n data-slot=\"checkbox-minus-icon\"\n className={clsx(styles[\"minus-icon\"], classNames?.minusIcon)}\n />\n </BaseUICheckbox.Indicator>\n </BaseUICheckbox.Root>\n\n <label\n htmlFor={id}\n className={clsx(styles[\"label\"], classNames?.label)}\n data-slot=\"checkbox-label\"\n >\n {label}\n </label>\n </div>\n );\n};\n"],"mappings":"qTA4DA,MAAaA,EAAY,GAAyB,CAChD,GAAM,CACJ,OAAO,KACP,QACA,WAAW,GACX,WAAW,GACX,OACA,UACA,YACA,QACA,WACA,YACA,YACA,aACA,GAAG,GACD,EAEE,EAAK,EAAM,EAEjB,OACE,EAAC,MAAD,CACE,YAAW,EACX,gBAAe,GAAY,IAAA,GAC3B,gBAAe,GAAY,IAAA,GAC3B,eAAc,GAAW,IAAA,GACzB,UAAW,EAAKC,EAAO,KAAS,GAAY,IAAI,EAChD,YAAU,yBANZ,CAQE,EAACC,EAAe,KAAhB,CACE,GAAI,EACM,WACA,WACA,WACV,eAAc,GAAW,IAAA,GACzB,UAAW,EAAKD,EAAO,QAAY,GAAY,OAAO,EACtD,YAAW,EACX,YAAU,mBACN,cAEJ,EAACC,EAAe,UAAhB,CACE,YAAU,qBACV,UAAW,EAAKD,EAAO,UAAc,GAAY,SAAS,WAF5D,CAIE,EAAC,EAAD,CACE,KAAM,EACN,YAAU,sBACV,UAAW,EAAKA,EAAO,cAAe,GAAY,SAAS,CAC5D,CAAA,EACD,EAAC,EAAD,CACE,KAAM,EACN,YAAU,sBACV,UAAW,EAAKA,EAAO,cAAe,GAAY,SAAS,CAC5D,CAAA,CACuB,GACP,CAAA,EAErB,EAAC,QAAD,CACE,QAAS,EACT,UAAW,EAAKA,EAAO,MAAU,GAAY,KAAK,EAClD,YAAU,0BAET,CACI,CAAA,CACJ,GAET"}
@@ -0,0 +1,2 @@
1
+ var e={"check-icon":`PdmYxW_check-icon`,control:`PdmYxW_control`,indicator:`PdmYxW_indicator`,label:`PdmYxW_label`,"minus-icon":`PdmYxW_minus-icon`,root:`PdmYxW_root`};export{e as default};
2
+ //# sourceMappingURL=checkbox.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.module.js","names":[],"sources":["../../../src/atoms/checkbox/checkbox.module.css"],"sourcesContent":[".root {\n --checkbox-size: 1rem;\n --checkbox-bg: transparent;\n --checkbox-border: var(--color-border-primary);\n --checkbox-color: transparent;\n --checkbox-gap: var(--spacing-xs);\n --checkbox-label-color: var(--color-content-neutral-base);\n\n font-family: var(--typography-typeface-ltr);\n display: flex;\n align-items: center;\n position: relative;\n gap: var(--checkbox-gap);\n}\n.root [data-slot=\"field-label\"] {\n height: var(--checkbox-size);\n}\n\n.control {\n /* Base Styles */\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--checkbox-size);\n height: var(--checkbox-size);\n background-color: var(--checkbox-bg);\n color: var(--checkbox-color);\n box-shadow: 0 0 0 1px var(--checkbox-border) inset; /* inset shadow acts as border without altering layout size */\n border-radius: 4px; /* Hardcoded standard rounding for checkboxes, or map to a small radius token */\n border: none;\n cursor: pointer;\n padding: 0;\n transition:\n background-color 0.2s,\n box-shadow 0.2s,\n color 0.2s;\n}\n\n.root[data-size=\"sm\"] {\n --checkbox-size: 0.875rem;\n --checkbox-gap: var(--spacing-xs);\n --checkbox-label-font-size: var(--typography-body-2-size);\n --checkbox-label-line-height: var(--typography-body-2-height);\n --checkbox-label-font-weight: var(--typography-body-2-weight);\n}\n.root[data-size=\"md\"] {\n --checkbox-size: 1rem;\n --checkbox-gap: var(--spacing-xs);\n --checkbox-label-font-size: var(--typography-body-1-size);\n --checkbox-label-line-height: var(--typography-body-1-height);\n --checkbox-label-font-weight: var(--typography-body-1-weight);\n}\n.root[data-size=\"lg\"] {\n --checkbox-size: 1.25rem;\n --checkbox-gap: var(--spacing-sm);\n --checkbox-label-font-size: var(--typography-body-1-size);\n --checkbox-label-line-height: var(--typography-body-1-height);\n --checkbox-label-font-weight: var(--typography-body-1-weight);\n}\n\n/* Base UI passes data-checked and data-indeterminate to the root element when active */\n.control[data-checked]:not([data-invalid]),\n.control[data-indeterminate]:not([data-invalid]) {\n --checkbox-bg: var(--color-action-neutral-base);\n --checkbox-border: transparent;\n --checkbox-color: var(--color-on-neutral);\n}\n\n.control:focus-visible {\n outline-style: solid;\n outline-width: var(--stroke-focus-ring);\n outline-color: var(--color-action-info-base);\n outline-offset: var(--spacing-xxs);\n}\n\n.root[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n & * {\n cursor: not-allowed;\n }\n}\n\n.root[data-invalid] {\n --checkbox-border: var(--color-negative);\n --field-label-color: var(--color-content-negative-muted);\n --checkbox-label-color: var(--color-content-neutral-base);\n}\n.control[data-invalid][data-checked],\n.control[data-invalid][data-indeterminate] {\n --checkbox-bg: var(--color-negative);\n --checkbox-color: var(--color-on-negative);\n}\n\n.indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.root[data-invalid] {\n --field-label-color: var(--color-content-negative-muted);\n}\n\n.check-icon,\n.minus-icon {\n font-size: 0.85em; /* Scales the icon slightly down to fit inside the box nicely */\n display: none;\n}\n\n/* Toggle icons based on Base UI's data attributes */\n.control[data-checked] .check-icon {\n display: block;\n}\n.control[data-indeterminate] .minus-icon {\n display: block;\n}\n\n.label {\n font-size: var(--checkbox-label-font-size, var(--typography-body-2-size));\n line-height: var(\n --checkbox-label-line-height,\n var(--typography-body-2-height)\n );\n font-weight: var(\n --checkbox-label-font-weight,\n var(--typography-body-2-weight)\n );\n color: var(--checkbox-label-color);\n}\n"],"mappings":"AAYA,IAAA,EAAA,CAAA,aAAA,oBAAA,QAAA,iBAAA,UAAA,mBAAA,MAAA,eAAA,aAAA,oBAAA,KAAA,aAAA"}
@@ -0,0 +1 @@
1
+ import { Checkbox, CheckboxProps } from "./checkbox.js";
@@ -0,0 +1 @@
1
+ import"./checkbox.js";
@@ -0,0 +1,302 @@
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
+ }