@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.
- package/README.md +80 -0
- package/dist/atoms/alert-dialog/alert-dialog.d.ts +7 -0
- package/dist/atoms/alert-dialog/alert-dialog.js +2 -0
- package/dist/atoms/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/atoms/alert-dialog/index.d.ts +1 -0
- package/dist/atoms/alert-dialog/index.js +1 -0
- package/dist/atoms/button/button.css +18 -0
- package/dist/atoms/button/button.d.ts +16 -0
- package/dist/atoms/button/button.js +2 -0
- package/dist/atoms/button/button.js.map +1 -0
- package/dist/atoms/button/button.module.js +2 -0
- package/dist/atoms/button/button.module.js.map +1 -0
- package/dist/atoms/button/index.d.ts +1 -0
- package/dist/atoms/button/index.js +1 -0
- package/dist/atoms/checkbox/checkbox.css +119 -0
- package/dist/atoms/checkbox/checkbox.d.ts +53 -0
- package/dist/atoms/checkbox/checkbox.js +2 -0
- package/dist/atoms/checkbox/checkbox.js.map +1 -0
- package/dist/atoms/checkbox/checkbox.module.js +2 -0
- package/dist/atoms/checkbox/checkbox.module.js.map +1 -0
- package/dist/atoms/checkbox/index.d.ts +1 -0
- package/dist/atoms/checkbox/index.js +1 -0
- package/dist/atoms/combobox/combobox.css +302 -0
- package/dist/atoms/combobox/combobox.d.ts +115 -0
- package/dist/atoms/combobox/combobox.js +2 -0
- package/dist/atoms/combobox/combobox.js.map +1 -0
- package/dist/atoms/combobox/combobox.module.js +2 -0
- package/dist/atoms/combobox/combobox.module.js.map +1 -0
- package/dist/atoms/combobox/components/chip.js +2 -0
- package/dist/atoms/combobox/components/chip.js.map +1 -0
- package/dist/atoms/combobox/components/item.d.ts +17 -0
- package/dist/atoms/combobox/components/item.js +2 -0
- package/dist/atoms/combobox/components/item.js.map +1 -0
- package/dist/atoms/combobox/index.d.ts +1 -0
- package/dist/atoms/combobox/index.js +1 -0
- package/dist/atoms/condition-guard/condition-guard.d.ts +32 -0
- package/dist/atoms/condition-guard/condition-guard.js +2 -0
- package/dist/atoms/condition-guard/condition-guard.js.map +1 -0
- package/dist/atoms/condition-guard/index.js +1 -0
- package/dist/atoms/context-menu/context-menu.css +75 -0
- package/dist/atoms/context-menu/context-menu.d.ts +41 -0
- package/dist/atoms/context-menu/context-menu.js +2 -0
- package/dist/atoms/context-menu/context-menu.js.map +1 -0
- package/dist/atoms/context-menu/context-menu.module.js +2 -0
- package/dist/atoms/context-menu/context-menu.module.js.map +1 -0
- package/dist/atoms/context-menu/index.js +1 -0
- package/dist/atoms/dialog/dialog.d.ts +7 -0
- package/dist/atoms/dialog/dialog.js +2 -0
- package/dist/atoms/dialog/dialog.js.map +1 -0
- package/dist/atoms/dialog/index.d.ts +1 -0
- package/dist/atoms/dialog/index.js +1 -0
- package/dist/atoms/icon/icon.d.ts +14 -0
- package/dist/atoms/icon/icon.js +2 -0
- package/dist/atoms/icon/icon.js.map +1 -0
- package/dist/atoms/icon/index.d.ts +1 -0
- package/dist/atoms/icon/index.js +1 -0
- package/dist/atoms/icon-button/icon-button.css +12 -0
- package/dist/atoms/icon-button/icon-button.d.ts +14 -0
- package/dist/atoms/icon-button/icon-button.js +2 -0
- package/dist/atoms/icon-button/icon-button.js.map +1 -0
- package/dist/atoms/icon-button/icon-button.module.js +2 -0
- package/dist/atoms/icon-button/icon-button.module.js.map +1 -0
- package/dist/atoms/icon-button/index.d.ts +1 -0
- package/dist/atoms/icon-button/index.js +1 -0
- package/dist/atoms/index.d.ts +17 -0
- package/dist/atoms/index.js +1 -0
- package/dist/atoms/input/index.d.ts +1 -0
- package/dist/atoms/input/index.js +1 -0
- package/dist/atoms/input/input.css +29 -0
- package/dist/atoms/input/input.d.ts +39 -0
- package/dist/atoms/input/input.js +2 -0
- package/dist/atoms/input/input.js.map +1 -0
- package/dist/atoms/input/input.module.js +2 -0
- package/dist/atoms/input/input.module.js.map +1 -0
- package/dist/atoms/radio/index.d.ts +1 -0
- package/dist/atoms/radio/index.js +1 -0
- package/dist/atoms/radio/radio.css +142 -0
- package/dist/atoms/radio/radio.d.ts +40 -0
- package/dist/atoms/radio/radio.js +2 -0
- package/dist/atoms/radio/radio.js.map +1 -0
- package/dist/atoms/radio/radio.module.js +2 -0
- package/dist/atoms/radio/radio.module.js.map +1 -0
- package/dist/atoms/switch/index.d.ts +1 -0
- package/dist/atoms/switch/index.js +1 -0
- package/dist/atoms/switch/switch.css +68 -0
- package/dist/atoms/switch/switch.d.ts +19 -0
- package/dist/atoms/switch/switch.js +2 -0
- package/dist/atoms/switch/switch.js.map +1 -0
- package/dist/atoms/switch/switch.module.js +2 -0
- package/dist/atoms/switch/switch.module.js.map +1 -0
- package/dist/atoms/tabs/index.d.ts +3 -0
- package/dist/atoms/tabs/index.js +1 -0
- package/dist/atoms/tabs/tabs.css +92 -0
- package/dist/atoms/tabs/tabs.d.ts +43 -0
- package/dist/atoms/tabs/tabs.js +2 -0
- package/dist/atoms/tabs/tabs.js.map +1 -0
- package/dist/atoms/tabs/tabs.module.js +2 -0
- package/dist/atoms/tabs/tabs.module.js.map +1 -0
- package/dist/atoms/text/index.d.ts +1 -0
- package/dist/atoms/text/index.js +1 -0
- package/dist/atoms/text/text.css +273 -0
- package/dist/atoms/text/text.d.ts +18 -0
- package/dist/atoms/text/text.js +2 -0
- package/dist/atoms/text/text.js.map +1 -0
- package/dist/atoms/text/text.module.js +2 -0
- package/dist/atoms/text/text.module.js.map +1 -0
- package/dist/atoms/toast/index.d.ts +1 -0
- package/dist/atoms/toast/index.js +1 -0
- package/dist/atoms/toast/toast.css +151 -0
- package/dist/atoms/toast/toast.d.ts +11 -0
- package/dist/atoms/toast/toast.js +2 -0
- package/dist/atoms/toast/toast.js.map +1 -0
- package/dist/atoms/toast/toast.module.js +2 -0
- package/dist/atoms/toast/toast.module.js.map +1 -0
- package/dist/atoms/tooltip/index.d.ts +1 -0
- package/dist/atoms/tooltip/index.js +1 -0
- package/dist/atoms/tooltip/tooltip.css +92 -0
- package/dist/atoms/tooltip/tooltip.d.ts +50 -0
- package/dist/atoms/tooltip/tooltip.js +2 -0
- package/dist/atoms/tooltip/tooltip.js.map +1 -0
- package/dist/atoms/tooltip/tooltip.module.js +2 -0
- package/dist/atoms/tooltip/tooltip.module.js.map +1 -0
- package/dist/helpers/portal/context/hooks.d.ts +7 -0
- package/dist/helpers/portal/context/hooks.js +2 -0
- package/dist/helpers/portal/context/hooks.js.map +1 -0
- package/dist/helpers/portal/context/index.internal.d.ts +2 -0
- package/dist/helpers/portal/context/index.internal.js +1 -0
- package/dist/helpers/portal/context/portal-config.d.ts +12 -0
- package/dist/helpers/portal/context/portal-config.js +2 -0
- package/dist/helpers/portal/context/portal-config.js.map +1 -0
- package/dist/helpers/portal/context/provider.d.ts +11 -0
- package/dist/helpers/portal/context/provider.js +2 -0
- package/dist/helpers/portal/context/provider.js.map +1 -0
- package/dist/helpers/portal/index.d.ts +3 -0
- package/dist/helpers/portal/index.js +1 -0
- package/dist/helpers/portal/portal.d.ts +24 -0
- package/dist/helpers/portal/portal.js +2 -0
- package/dist/helpers/portal/portal.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +1 -0
- package/dist/internals/base-button/base-button.css +262 -0
- package/dist/internals/base-button/base-button.d.ts +19 -0
- package/dist/internals/base-button/base-button.js +2 -0
- package/dist/internals/base-button/base-button.js.map +1 -0
- package/dist/internals/base-button/base-button.module.js +2 -0
- package/dist/internals/base-button/base-button.module.js.map +1 -0
- package/dist/internals/base-button/index.d.ts +1 -0
- package/dist/internals/base-button/index.js +1 -0
- package/dist/internals/base-dialog/base-dialog.css +74 -0
- package/dist/internals/base-dialog/base-dialog.d.ts +40 -0
- package/dist/internals/base-dialog/base-dialog.js +2 -0
- package/dist/internals/base-dialog/base-dialog.js.map +1 -0
- package/dist/internals/base-dialog/base-dialog.module.js +2 -0
- package/dist/internals/base-dialog/base-dialog.module.js.map +1 -0
- package/dist/internals/base-dialog/index.d.ts +1 -0
- package/dist/internals/base-dialog/index.js +1 -0
- package/dist/internals/base-field/base-field.css +115 -0
- package/dist/internals/base-field/base-field.d.ts +75 -0
- package/dist/internals/base-field/base-field.js +2 -0
- package/dist/internals/base-field/base-field.js.map +1 -0
- package/dist/internals/base-field/base-field.module.js +2 -0
- package/dist/internals/base-field/base-field.module.js.map +1 -0
- package/dist/internals/base-field/components/description.js +2 -0
- package/dist/internals/base-field/components/description.js.map +1 -0
- package/dist/internals/base-field/components/error.js +2 -0
- package/dist/internals/base-field/components/error.js.map +1 -0
- package/dist/internals/base-field/components/label.js +2 -0
- package/dist/internals/base-field/components/label.js.map +1 -0
- package/dist/internals/base-field/index.d.ts +1 -0
- package/dist/internals/base-field/index.js +1 -0
- package/dist/internals/base-svg/base-svg.css +137 -0
- package/dist/internals/base-svg/base-svg.d.ts +29 -0
- package/dist/internals/base-svg/base-svg.js +2 -0
- package/dist/internals/base-svg/base-svg.js.map +1 -0
- package/dist/internals/base-svg/base-svg.module.js +2 -0
- package/dist/internals/base-svg/base-svg.module.js.map +1 -0
- package/dist/internals/base-svg/index.d.ts +1 -0
- package/dist/internals/base-svg/index.js +1 -0
- package/dist/providers/alert-dialog-provider/alert-dialog-provider.d.ts +43 -0
- package/dist/providers/alert-dialog-provider/alert-dialog-provider.js +2 -0
- package/dist/providers/alert-dialog-provider/alert-dialog-provider.js.map +1 -0
- package/dist/providers/alert-dialog-provider/hooks.d.ts +16 -0
- package/dist/providers/alert-dialog-provider/hooks.js +2 -0
- package/dist/providers/alert-dialog-provider/hooks.js.map +1 -0
- package/dist/providers/alert-dialog-provider/index.d.ts +2 -0
- package/dist/providers/alert-dialog-provider/index.js +1 -0
- package/dist/providers/dialog-provider/dialog-provider.d.ts +43 -0
- package/dist/providers/dialog-provider/dialog-provider.js +2 -0
- package/dist/providers/dialog-provider/dialog-provider.js.map +1 -0
- package/dist/providers/dialog-provider/hooks.d.ts +16 -0
- package/dist/providers/dialog-provider/hooks.js +2 -0
- package/dist/providers/dialog-provider/hooks.js.map +1 -0
- package/dist/providers/dialog-provider/index.d.ts +2 -0
- package/dist/providers/dialog-provider/index.js +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/toast-provider/index.d.ts +1 -0
- package/dist/providers/toast-provider/index.js +1 -0
- package/dist/providers/toast-provider/toast-provider.css +13 -0
- package/dist/providers/toast-provider/toast-provider.d.ts +124 -0
- package/dist/providers/toast-provider/toast-provider.js +2 -0
- package/dist/providers/toast-provider/toast-provider.js.map +1 -0
- package/dist/providers/toast-provider/toast-provider.module.js +2 -0
- package/dist/providers/toast-provider/toast-provider.module.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.js +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|