@blenx-dev/core 0.1.0 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/iconify.config.ts +23 -0
- package/package.json +17 -7
- package/scripts/generate-icons.ts +82 -0
- package/src/components/Accordion/accordion.tsx +2 -2
- package/src/components/Autocomplete/autocomplete.tsx +2 -2
- package/src/components/Breadcrumbs/breadcrumbs.tsx +3 -3
- package/src/components/Checkbox/checkbox.tsx +2 -15
- package/src/components/CloseButton/close-button.tsx +2 -5
- package/src/components/Combobox/combobox.tsx +5 -5
- package/src/components/Command/command.tsx +2 -2
- package/src/components/CopyButton/copy-button.tsx +3 -11
- package/src/components/Drawer/drawer.tsx +3 -29
- package/src/components/Icon/icon.tsx +3 -3
- package/src/components/Popover/popover.tsx +24 -14
- package/src/components/Select/select.tsx +5 -5
- package/src/components/Spinner/spinner.tsx +3 -5
- package/src/components/Stack/stack.tsx +5 -15
- package/src/components/Text/text.tsx +1 -1
- package/src/components/index.ts +0 -3
- package/src/icons/ArrowRightIcon.tsx +20 -0
- package/src/icons/CalendarIcon.tsx +20 -0
- package/src/icons/CheckIcon.tsx +20 -0
- package/src/icons/ChevronDownIcon.tsx +20 -0
- package/src/icons/ChevronLeftIcon.tsx +20 -0
- package/src/icons/ChevronRightIcon.tsx +20 -0
- package/src/icons/ChevronUpIcon.tsx +20 -0
- package/src/icons/CircleAlertIcon.tsx +20 -0
- package/src/icons/CopyIcon.tsx +20 -0
- package/src/icons/EllipsisIcon.tsx +20 -0
- package/src/icons/FolderOpenIcon.tsx +20 -0
- package/src/icons/ListIcon.tsx +20 -0
- package/src/icons/LoaderCircleIcon.tsx +20 -0
- package/src/icons/SearchIcon.tsx +20 -0
- package/src/icons/SquareCheckIcon.tsx +20 -0
- package/src/icons/XIcon.tsx +20 -0
- package/src/icons/index.ts +17 -0
- package/src/utils/sprinkles.css.ts +18 -4
- package/src/DataTable/data-table-column-toggle.tsx +0 -73
- package/src/DataTable/data-table-empty.tsx +0 -27
- package/src/DataTable/data-table-error.tsx +0 -25
- package/src/DataTable/data-table-infinite-loader.tsx +0 -73
- package/src/DataTable/data-table-loading.tsx +0 -67
- package/src/DataTable/data-table-pagination.tsx +0 -80
- package/src/DataTable/data-table-toolbar.tsx +0 -62
- package/src/DataTable/data-table.css.ts +0 -420
- package/src/DataTable/data-table.tsx +0 -507
- package/src/DataTable/index.ts +0 -24
- package/src/DataTable/types.ts +0 -169
- package/src/DataTable/use-infinite-scroll.ts +0 -67
- package/src/components/Calendar/calendar.css.ts +0 -187
- package/src/components/Calendar/calendar.tsx +0 -143
- package/src/components/Calendar/index.ts +0 -1
- package/src/components/ColorPicker/color-picker.tsx +0 -123
- package/src/components/ColorPicker/index.ts +0 -1
- package/src/components/DatePicker/date-picker.tsx +0 -75
- package/src/components/DatePicker/index.ts +0 -1
- package/src/components/Stack/stack.css.ts +0 -42
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// packages/core/iconify.config.ts
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
collection: "lucide",
|
|
5
|
+
icons: [
|
|
6
|
+
"chevron-left",
|
|
7
|
+
"chevron-right",
|
|
8
|
+
"chevron-up",
|
|
9
|
+
"chevron-down",
|
|
10
|
+
"calendar",
|
|
11
|
+
"square-check",
|
|
12
|
+
"search",
|
|
13
|
+
"check",
|
|
14
|
+
"x",
|
|
15
|
+
"folder-open",
|
|
16
|
+
"loader-circle",
|
|
17
|
+
"circle-alert",
|
|
18
|
+
"copy",
|
|
19
|
+
"list",
|
|
20
|
+
"ellipsis",
|
|
21
|
+
"arrow-right",
|
|
22
|
+
],
|
|
23
|
+
};
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blenx-dev/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./src/index.ts",
|
|
8
|
+
"./icons": {
|
|
9
|
+
"types": "./src/icons/index.ts",
|
|
10
|
+
"default": "./src/icons/index.ts"
|
|
11
|
+
},
|
|
8
12
|
"./*": "./src/components/*/index.ts",
|
|
9
13
|
"./components": {
|
|
10
14
|
"types": "./src/components/index.ts",
|
|
@@ -25,25 +29,31 @@
|
|
|
25
29
|
"dependencies": {
|
|
26
30
|
"@base-ui/react": "^1.0.0",
|
|
27
31
|
"@phosphor-icons/react": "^2.1.10",
|
|
28
|
-
"@tanstack/react-table": "^8.21.3",
|
|
29
32
|
"@vanilla-extract/css": "^1.20.1",
|
|
30
33
|
"@vanilla-extract/recipes": "^0.5.7",
|
|
31
34
|
"@vanilla-extract/sprinkles": "^1.6.5",
|
|
32
35
|
"clsx": "^2.1.1",
|
|
33
|
-
"react-colorful": "^5.7.0",
|
|
34
|
-
"react-day-picker": "^10.0.1",
|
|
35
36
|
"sonner": "^2.0.5",
|
|
36
37
|
"tailwind-merge": "^3.3.1",
|
|
37
|
-
"@blenx-dev/theme": "
|
|
38
|
+
"@blenx-dev/theme": "0.2.3"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
41
|
+
"@iconify/json": "^2.2.493",
|
|
42
|
+
"@iconify/tools": "^5.0.12",
|
|
43
|
+
"@iconify/types": "^2.0.0",
|
|
44
|
+
"@iconify/utils": "^3.1.3",
|
|
40
45
|
"@types/react": "^19.2.15",
|
|
41
46
|
"@types/react-dom": "^19.2.3",
|
|
42
|
-
"changeset": "^0.2.6"
|
|
47
|
+
"changeset": "^0.2.6",
|
|
48
|
+
"prettier": "^3.9.3",
|
|
49
|
+
"tsx": "^4.22.4"
|
|
43
50
|
},
|
|
44
51
|
"peerDependencies": {
|
|
45
52
|
"react": "^19.2.6",
|
|
46
53
|
"react-dom": "^19.2.6",
|
|
47
|
-
"@blenx-dev/theme": "
|
|
54
|
+
"@blenx-dev/theme": "0.2.3"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"gen:icons": "tsx scripts/generate-icons.ts"
|
|
48
58
|
}
|
|
49
59
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// scripts/generate-icons.ts
|
|
2
|
+
|
|
3
|
+
import { promises as fs } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
import config from "../iconify.config";
|
|
7
|
+
type IconCollection = {
|
|
8
|
+
prefix: string;
|
|
9
|
+
icons: Record<
|
|
10
|
+
string,
|
|
11
|
+
{
|
|
12
|
+
body: string;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
}
|
|
16
|
+
>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
function pascalCase(name: string) {
|
|
20
|
+
return name
|
|
21
|
+
.split(/[-_]/g)
|
|
22
|
+
.map((x) => x.charAt(0).toUpperCase() + x.slice(1))
|
|
23
|
+
.join("");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async function main() {
|
|
27
|
+
const collection = (
|
|
28
|
+
await import(`@iconify/json/json/${config.collection}.json`, {
|
|
29
|
+
with: { type: "json" },
|
|
30
|
+
} as never)
|
|
31
|
+
).default as IconCollection;
|
|
32
|
+
|
|
33
|
+
const outDir = path.resolve("src/icons");
|
|
34
|
+
|
|
35
|
+
await fs.rm(outDir, { recursive: true, force: true });
|
|
36
|
+
await fs.mkdir(outDir, { recursive: true });
|
|
37
|
+
|
|
38
|
+
const exports: string[] = ["export interface IconProps extends React.SVGProps<SVGSVGElement> {}"];
|
|
39
|
+
const writePromises = [];
|
|
40
|
+
for (const iconName of config.icons) {
|
|
41
|
+
const icon = collection.icons[iconName];
|
|
42
|
+
|
|
43
|
+
if (!icon) {
|
|
44
|
+
throw new Error(`Missing icon "${iconName}"`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const component = `${pascalCase(iconName)}Icon`;
|
|
48
|
+
|
|
49
|
+
const width = icon.width ?? 24;
|
|
50
|
+
const height = icon.height ?? 24;
|
|
51
|
+
|
|
52
|
+
const source = `import * as React from "react";
|
|
53
|
+
|
|
54
|
+
interface IconProps extends React.SVGProps<SVGSVGElement> {}
|
|
55
|
+
|
|
56
|
+
export const ${component} = React.forwardRef<SVGSVGElement, IconProps>(
|
|
57
|
+
(props, ref) => (
|
|
58
|
+
<svg
|
|
59
|
+
ref={ref}
|
|
60
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
61
|
+
viewBox="0 0 ${width} ${height}"
|
|
62
|
+
fill="none"
|
|
63
|
+
stroke="currentColor"
|
|
64
|
+
dangerouslySetInnerHTML={{ __html: ${JSON.stringify(icon.body)} }}
|
|
65
|
+
{...props}
|
|
66
|
+
/>
|
|
67
|
+
)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
${component}.displayName = "${component}";
|
|
71
|
+
`;
|
|
72
|
+
writePromises.push(fs.writeFile(path.join(outDir, `${component}.tsx`), source, "utf8"));
|
|
73
|
+
|
|
74
|
+
exports.push(`export * from "./${component}";`);
|
|
75
|
+
}
|
|
76
|
+
await Promise.all(writePromises);
|
|
77
|
+
await fs.writeFile(path.join(outDir, "index.ts"), exports.join("\n"), "utf8");
|
|
78
|
+
|
|
79
|
+
console.log(`Generated ${exports.length} icons`);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
main();
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
|
|
4
|
-
import { CaretDownIcon } from "@phosphor-icons/react";
|
|
5
4
|
import clsx from "clsx";
|
|
6
5
|
import {
|
|
7
6
|
root,
|
|
@@ -12,6 +11,7 @@ import {
|
|
|
12
11
|
triggerIcon,
|
|
13
12
|
panel,
|
|
14
13
|
} from "./accordion.css";
|
|
14
|
+
import { ChevronDownIcon } from "../../icons";
|
|
15
15
|
|
|
16
16
|
type AccordionRootProps = AccordionPrimitive.Root.Props;
|
|
17
17
|
|
|
@@ -54,7 +54,7 @@ type AccordionTriggerProps = AccordionPrimitive.Trigger.Props;
|
|
|
54
54
|
function AccordionTrigger({ children, className, ...props }: AccordionTriggerProps) {
|
|
55
55
|
return (
|
|
56
56
|
<AccordionPrimitive.Trigger className={clsx(trigger, className)} {...props}>
|
|
57
|
-
<
|
|
57
|
+
<ChevronDownIcon width={16} className={triggerIcon} />
|
|
58
58
|
{children}
|
|
59
59
|
</AccordionPrimitive.Trigger>
|
|
60
60
|
);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Autocomplete as AutocompletePrimitive } from "@base-ui/react/autocomplete";
|
|
2
|
-
import { CaretUpDownIcon } from "@phosphor-icons/react";
|
|
3
2
|
import clsx from "clsx";
|
|
4
3
|
import type React from "react";
|
|
5
4
|
import { Input } from "../Input/input";
|
|
@@ -29,6 +28,7 @@ import {
|
|
|
29
28
|
item,
|
|
30
29
|
} from "./autocomplete.css";
|
|
31
30
|
import { CloseButton } from "../CloseButton";
|
|
31
|
+
import { ChevronUpIcon } from "../../icons";
|
|
32
32
|
|
|
33
33
|
const Autocomplete: typeof AutocompletePrimitive.Root = AutocompletePrimitive.Root;
|
|
34
34
|
|
|
@@ -106,7 +106,7 @@ function AutocompleteInput({
|
|
|
106
106
|
data-slot="autocomplete-trigger"
|
|
107
107
|
{...triggerProps}
|
|
108
108
|
>
|
|
109
|
-
<
|
|
109
|
+
<ChevronUpIcon width={resolvedSize === "sm" ? 16 : 18} />
|
|
110
110
|
</AutocompletePrimitive.Trigger>
|
|
111
111
|
)}
|
|
112
112
|
{showClear && (
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { mergeProps, useRender } from "@base-ui/react";
|
|
4
|
-
import { CaretRightIcon, DotsThreeIcon } from "@phosphor-icons/react";
|
|
5
4
|
import clsx from "clsx";
|
|
6
5
|
import type { ComponentPropsWithoutRef } from "react";
|
|
7
6
|
import { root, list, item, link, page, separator, ellipsis, srOnly } from "./breadcrumbs.css";
|
|
7
|
+
import { ChevronRightIcon, EllipsisIcon } from "../../icons";
|
|
8
8
|
|
|
9
9
|
type NavProps = useRender.ComponentProps<"nav"> & {
|
|
10
10
|
className?: string;
|
|
@@ -64,7 +64,7 @@ export function BreadcrumbSeparator({ children, className, style, ...props }: Li
|
|
|
64
64
|
style={style}
|
|
65
65
|
{...props}
|
|
66
66
|
>
|
|
67
|
-
{children ?? <
|
|
67
|
+
{children ?? <ChevronRightIcon width={16} />}
|
|
68
68
|
</li>
|
|
69
69
|
);
|
|
70
70
|
}
|
|
@@ -72,7 +72,7 @@ export function BreadcrumbSeparator({ children, className, style, ...props }: Li
|
|
|
72
72
|
export function BreadcrumbEllipsis({ className, style, ...props }: SpanProps) {
|
|
73
73
|
return (
|
|
74
74
|
<span role="presentation" className={clsx(ellipsis, className)} style={style} {...props}>
|
|
75
|
-
<
|
|
75
|
+
<EllipsisIcon width={16} />
|
|
76
76
|
<span className={srOnly}>More</span>
|
|
77
77
|
</span>
|
|
78
78
|
);
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
indicatorIndeterminate,
|
|
13
13
|
icon,
|
|
14
14
|
} from "./checkbox.css";
|
|
15
|
+
import { SquareCheckIcon } from "../../icons";
|
|
15
16
|
|
|
16
17
|
type CheckboxGroupProps = CheckboxGroupPrimitive.Props & {
|
|
17
18
|
className?: string;
|
|
@@ -66,21 +67,7 @@ function Checkbox({ className, style, ...props }: CheckboxProps) {
|
|
|
66
67
|
<path d="M5.252 12h13.496" />
|
|
67
68
|
</svg>
|
|
68
69
|
) : (
|
|
69
|
-
<
|
|
70
|
-
aria-hidden="true"
|
|
71
|
-
className={icon}
|
|
72
|
-
fill="none"
|
|
73
|
-
height="24"
|
|
74
|
-
stroke="currentColor"
|
|
75
|
-
strokeLinecap="round"
|
|
76
|
-
strokeLinejoin="round"
|
|
77
|
-
strokeWidth="3"
|
|
78
|
-
viewBox="0 0 24 24"
|
|
79
|
-
width="24"
|
|
80
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
81
|
-
>
|
|
82
|
-
<path d="M5.252 12.7 10.2 18.63 18.748 5.37" />
|
|
83
|
-
</svg>
|
|
70
|
+
<SquareCheckIcon width={24} />
|
|
84
71
|
)}
|
|
85
72
|
</span>
|
|
86
73
|
)}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
+
import { XIcon } from "../../icons";
|
|
1
2
|
import { IconButton, type IconButtonProps } from "../IconButton/icon-button";
|
|
2
|
-
import { icon } from "./close-button.css";
|
|
3
3
|
|
|
4
4
|
export type { IconButtonProps as CloseButtonProps };
|
|
5
5
|
|
|
6
6
|
export function CloseButton(props: IconButtonProps) {
|
|
7
7
|
return (
|
|
8
8
|
<IconButton {...props}>
|
|
9
|
-
<
|
|
10
|
-
<line x1="18" y1="6" x2="6" y2="18" />
|
|
11
|
-
<line x1="6" y1="6" x2="18" y2="18" />
|
|
12
|
-
</svg>
|
|
9
|
+
<XIcon width={18} />
|
|
13
10
|
</IconButton>
|
|
14
11
|
);
|
|
15
12
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Combobox as ComboboxPrimitive } from "@base-ui/react/combobox";
|
|
2
|
-
import { CaretUpDownIcon, CheckIcon, XIcon } from "@phosphor-icons/react";
|
|
3
2
|
import clsx from "clsx";
|
|
4
3
|
import * as React from "react";
|
|
5
4
|
import { Input } from "../Input/input";
|
|
@@ -37,6 +36,7 @@ import {
|
|
|
37
36
|
chipRemove,
|
|
38
37
|
} from "./combobox.css";
|
|
39
38
|
import { CloseButton } from "../CloseButton";
|
|
39
|
+
import { CheckIcon, ChevronDownIcon, XIcon } from "../../icons";
|
|
40
40
|
|
|
41
41
|
type InputSize = "sm" | "default" | "lg" | number;
|
|
42
42
|
|
|
@@ -105,7 +105,7 @@ export function ComboboxClear({
|
|
|
105
105
|
data-slot="combobox-clear"
|
|
106
106
|
{...props}
|
|
107
107
|
>
|
|
108
|
-
{children ?? <XIcon
|
|
108
|
+
{children ?? <XIcon width={18} />}
|
|
109
109
|
</ComboboxPrimitive.Clear>
|
|
110
110
|
);
|
|
111
111
|
}
|
|
@@ -163,7 +163,7 @@ export function ComboboxInput({
|
|
|
163
163
|
data-slot="combobox-trigger"
|
|
164
164
|
{...triggerProps}
|
|
165
165
|
>
|
|
166
|
-
<
|
|
166
|
+
<ChevronDownIcon width={resolvedSize === "sm" ? 16 : 18} />
|
|
167
167
|
</ComboboxPrimitive.Trigger>
|
|
168
168
|
)}
|
|
169
169
|
{showClear && (
|
|
@@ -231,7 +231,7 @@ export function ComboboxItem({
|
|
|
231
231
|
return (
|
|
232
232
|
<ComboboxPrimitive.Item className={clsx(item, className)} data-slot="combobox-item" {...props}>
|
|
233
233
|
<ComboboxPrimitive.ItemIndicator className={itemIndicator}>
|
|
234
|
-
<CheckIcon
|
|
234
|
+
<CheckIcon width={16} />
|
|
235
235
|
</ComboboxPrimitive.ItemIndicator>
|
|
236
236
|
<div className={itemContent}>{children}</div>
|
|
237
237
|
</ComboboxPrimitive.Item>
|
|
@@ -340,7 +340,7 @@ function ComboboxChipRemove({
|
|
|
340
340
|
data-slot="combobox-chip-remove"
|
|
341
341
|
{...props}
|
|
342
342
|
>
|
|
343
|
-
<XIcon
|
|
343
|
+
<XIcon width={16} />
|
|
344
344
|
</ComboboxPrimitive.ChipRemove>
|
|
345
345
|
);
|
|
346
346
|
}
|
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
useRef,
|
|
15
15
|
} from "react";
|
|
16
16
|
import clsx from "clsx";
|
|
17
|
-
import { MagnifyingGlass } from "@phosphor-icons/react";
|
|
18
17
|
import {
|
|
19
18
|
root,
|
|
20
19
|
inputWrapper,
|
|
@@ -29,6 +28,7 @@ import {
|
|
|
29
28
|
itemDisabled,
|
|
30
29
|
separator,
|
|
31
30
|
} from "./command.css";
|
|
31
|
+
import { SearchIcon } from "../../icons";
|
|
32
32
|
|
|
33
33
|
interface CommandItemData {
|
|
34
34
|
id: string;
|
|
@@ -182,7 +182,7 @@ export function CommandInput({
|
|
|
182
182
|
return (
|
|
183
183
|
<div className={clsx(inputWrapper, className)} style={style}>
|
|
184
184
|
<span className={inputIcon}>
|
|
185
|
-
<
|
|
185
|
+
<SearchIcon width={16} />
|
|
186
186
|
</span>
|
|
187
187
|
<input
|
|
188
188
|
className={inputStyle}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useCallback, type MouseEvent } from "react";
|
|
2
2
|
import { IconButton, type IconButtonProps } from "../IconButton/icon-button";
|
|
3
|
-
import {
|
|
3
|
+
import { CheckIcon, CopyIcon } from "../../icons";
|
|
4
4
|
|
|
5
5
|
export type CopyButtonProps = Omit<IconButtonProps, "onClick"> & {
|
|
6
6
|
copyValue?: string;
|
|
@@ -26,20 +26,12 @@ export function CopyButton({ copyValue, onClick, ...props }: CopyButtonProps) {
|
|
|
26
26
|
return (
|
|
27
27
|
<IconButton
|
|
28
28
|
variant="soft"
|
|
29
|
+
color={copied ? "success" : "secondary"}
|
|
29
30
|
{...props}
|
|
30
31
|
title={copied ? "Copied!" : `Copy ${copyValue ?? ""}`}
|
|
31
32
|
onClick={handleClick}
|
|
32
33
|
>
|
|
33
|
-
{copied ?
|
|
34
|
-
<svg className={icon} viewBox="0 0 24 24" aria-hidden="true">
|
|
35
|
-
<polyline points="20 6 9 17 4 12" />
|
|
36
|
-
</svg>
|
|
37
|
-
) : (
|
|
38
|
-
<svg className={icon} viewBox="0 0 24 24" aria-hidden="true">
|
|
39
|
-
<rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
|
|
40
|
-
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
|
|
41
|
-
</svg>
|
|
42
|
-
)}
|
|
34
|
+
{copied ? <CheckIcon width={16} /> : <CopyIcon width={16} />}
|
|
43
35
|
</IconButton>
|
|
44
36
|
);
|
|
45
37
|
}
|
|
@@ -5,7 +5,6 @@ import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
|
|
|
5
5
|
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
6
6
|
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
7
7
|
import { useRender } from "@base-ui/react/use-render";
|
|
8
|
-
import { ArrowRightIcon } from "@phosphor-icons/react";
|
|
9
8
|
import clsx from "clsx";
|
|
10
9
|
import type React from "react";
|
|
11
10
|
import { createContext, useContext, useMemo } from "react";
|
|
@@ -68,6 +67,7 @@ import {
|
|
|
68
67
|
import { CloseButton } from "../CloseButton";
|
|
69
68
|
import type { _BaseDivProps } from "../../utils/types";
|
|
70
69
|
import { Box } from "../Box";
|
|
70
|
+
import { ArrowRightIcon, SquareCheckIcon } from "../../icons";
|
|
71
71
|
|
|
72
72
|
type DrawerPosition = "right" | "left" | "top" | "bottom";
|
|
73
73
|
|
|
@@ -494,20 +494,7 @@ export function DrawerMenuCheckboxItem({
|
|
|
494
494
|
) : (
|
|
495
495
|
<>
|
|
496
496
|
<CheckboxPrimitive.Indicator className={menuCheckboxIndicator}>
|
|
497
|
-
<
|
|
498
|
-
fill="none"
|
|
499
|
-
height="24"
|
|
500
|
-
stroke="currentColor"
|
|
501
|
-
strokeLinecap="round"
|
|
502
|
-
strokeLinejoin="round"
|
|
503
|
-
strokeWidth="2"
|
|
504
|
-
viewBox="0 0 24 24"
|
|
505
|
-
width="24"
|
|
506
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
507
|
-
>
|
|
508
|
-
<title>fd</title>
|
|
509
|
-
<path d="M5.252 12.7 10.2 18.63 18.748 5.37" />
|
|
510
|
-
</svg>
|
|
497
|
+
<SquareCheckIcon width={16} />
|
|
511
498
|
</CheckboxPrimitive.Indicator>
|
|
512
499
|
<span className={menuCheckboxLabel}>{children}</span>
|
|
513
500
|
</>
|
|
@@ -550,20 +537,7 @@ function DrawerMenuRadioItem({
|
|
|
550
537
|
{...props}
|
|
551
538
|
>
|
|
552
539
|
<RadioPrimitive.Indicator className={menuRadioIndicator}>
|
|
553
|
-
<
|
|
554
|
-
fill="none"
|
|
555
|
-
height="24"
|
|
556
|
-
stroke="currentColor"
|
|
557
|
-
strokeLinecap="round"
|
|
558
|
-
strokeLinejoin="round"
|
|
559
|
-
strokeWidth="2"
|
|
560
|
-
viewBox="0 0 24 24"
|
|
561
|
-
width="24"
|
|
562
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
563
|
-
>
|
|
564
|
-
<title>fd</title>
|
|
565
|
-
<path d="M5.252 12.7 10.2 18.63 18.748 5.37" />
|
|
566
|
-
</svg>
|
|
540
|
+
<SquareCheckIcon width={16} />
|
|
567
541
|
</RadioPrimitive.Indicator>
|
|
568
542
|
<span className={menuRadioLabel}>{children}</span>
|
|
569
543
|
</RadioPrimitive.Root>
|
|
@@ -2,11 +2,11 @@ import clsx from "clsx";
|
|
|
2
2
|
import { iconWrapper } from "./icon.css";
|
|
3
3
|
import { Box, type BoxProps } from "../Box/box";
|
|
4
4
|
|
|
5
|
-
type IconProps = BoxProps;
|
|
5
|
+
type IconProps = Omit<BoxProps, "fontSize"> & { size?: BoxProps["fontSize"] };
|
|
6
6
|
|
|
7
|
-
export function Icon({ children, className, style, ...props }: IconProps) {
|
|
7
|
+
export function Icon({ children, className, style, size, ...props }: IconProps) {
|
|
8
8
|
return (
|
|
9
|
-
<Box className={clsx(iconWrapper, className)} style={style} {...props}>
|
|
9
|
+
<Box className={clsx(iconWrapper, className)} fontSize={size} style={style} {...props}>
|
|
10
10
|
{children}
|
|
11
11
|
</Box>
|
|
12
12
|
);
|
|
@@ -5,26 +5,25 @@ import clsx from "clsx";
|
|
|
5
5
|
import type React from "react";
|
|
6
6
|
import { backdrop, positioner, popup, arrow, arrowFill, title, description } from "./popover.css";
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
PopoverPrimitive.createHandle;
|
|
8
|
+
const PopoverCreateHandle: typeof PopoverPrimitive.createHandle = PopoverPrimitive.createHandle;
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
function Popover(props: PopoverPrimitive.Root.Props): React.ReactElement {
|
|
12
11
|
return <PopoverPrimitive.Root {...props} />;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
function PopoverTrigger(props: PopoverPrimitive.Trigger.Props): React.ReactElement {
|
|
16
15
|
return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
function PopoverClose(props: PopoverPrimitive.Close.Props): React.ReactElement {
|
|
20
19
|
return <PopoverPrimitive.Close data-slot="popover-close" {...props} />;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
function PopoverPortal(props: PopoverPrimitive.Portal.Props): React.ReactElement {
|
|
24
23
|
return <PopoverPrimitive.Portal {...props} />;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
function PopoverPositioner({
|
|
28
27
|
sideOffset = 4,
|
|
29
28
|
side = "bottom",
|
|
30
29
|
align = "center",
|
|
@@ -48,7 +47,7 @@ export function PopoverPositioner({
|
|
|
48
47
|
);
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
function PopoverPopup({
|
|
52
51
|
className,
|
|
53
52
|
style,
|
|
54
53
|
...props
|
|
@@ -70,7 +69,7 @@ export function PopoverPopup({
|
|
|
70
69
|
);
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
function PopoverArrow(props: PopoverPrimitive.Arrow.Props): React.ReactElement {
|
|
74
73
|
return (
|
|
75
74
|
<PopoverPrimitive.Arrow className={arrow} data-slot="popover-arrow" {...props}>
|
|
76
75
|
<div className={arrowFill} />
|
|
@@ -78,15 +77,15 @@ export function PopoverArrow(props: PopoverPrimitive.Arrow.Props): React.ReactEl
|
|
|
78
77
|
);
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
|
|
80
|
+
function PopoverBackdrop(props: PopoverPrimitive.Backdrop.Props): React.ReactElement {
|
|
82
81
|
return <PopoverPrimitive.Backdrop className={backdrop} data-slot="popover-backdrop" {...props} />;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
|
|
84
|
+
function PopoverTitle(props: PopoverPrimitive.Title.Props): React.ReactElement {
|
|
86
85
|
return <PopoverPrimitive.Title className={title} data-slot="popover-title" {...props} />;
|
|
87
86
|
}
|
|
88
87
|
|
|
89
|
-
|
|
88
|
+
function PopoverDescription(props: PopoverPrimitive.Description.Props): React.ReactElement {
|
|
90
89
|
return (
|
|
91
90
|
<PopoverPrimitive.Description
|
|
92
91
|
className={description}
|
|
@@ -96,8 +95,6 @@ export function PopoverDescription(props: PopoverPrimitive.Description.Props): R
|
|
|
96
95
|
);
|
|
97
96
|
}
|
|
98
97
|
|
|
99
|
-
export const PopoverRoot = Popover;
|
|
100
|
-
|
|
101
98
|
export const PopoverCompound = {
|
|
102
99
|
Root: Popover,
|
|
103
100
|
Trigger: PopoverTrigger,
|
|
@@ -111,3 +108,16 @@ export const PopoverCompound = {
|
|
|
111
108
|
Description: PopoverDescription,
|
|
112
109
|
createHandle: PopoverCreateHandle,
|
|
113
110
|
};
|
|
111
|
+
export {
|
|
112
|
+
Popover,
|
|
113
|
+
PopoverTrigger,
|
|
114
|
+
PopoverClose,
|
|
115
|
+
PopoverPortal,
|
|
116
|
+
PopoverPositioner,
|
|
117
|
+
PopoverPopup,
|
|
118
|
+
PopoverArrow,
|
|
119
|
+
PopoverBackdrop,
|
|
120
|
+
PopoverTitle,
|
|
121
|
+
PopoverDescription,
|
|
122
|
+
PopoverCreateHandle,
|
|
123
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
|
2
|
-
import { CaretDownIcon, CaretUpIcon, CheckIcon } from "@phosphor-icons/react";
|
|
3
2
|
import clsx from "clsx";
|
|
4
3
|
import type * as React from "react";
|
|
5
4
|
import { Field, FieldError, FieldLabel } from "../Field/field";
|
|
@@ -16,6 +15,7 @@ import {
|
|
|
16
15
|
triggerLg,
|
|
17
16
|
triggerSm,
|
|
18
17
|
} from "./select.css";
|
|
18
|
+
import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "../../icons";
|
|
19
19
|
|
|
20
20
|
type SelectSize = "sm" | "default" | "lg";
|
|
21
21
|
|
|
@@ -62,7 +62,7 @@ export function SelectValue({ placeholder, ...props }: SelectPrimitive.Value.Pro
|
|
|
62
62
|
export function SelectIcon(props: SelectPrimitive.Icon.Props) {
|
|
63
63
|
return (
|
|
64
64
|
<SelectPrimitive.Icon className={iconStyle} {...props}>
|
|
65
|
-
<
|
|
65
|
+
<ChevronDownIcon width={16} />
|
|
66
66
|
</SelectPrimitive.Icon>
|
|
67
67
|
);
|
|
68
68
|
}
|
|
@@ -90,7 +90,7 @@ export function SelectItem({
|
|
|
90
90
|
return (
|
|
91
91
|
<SelectPrimitive.Item className={itemStyle} {...props}>
|
|
92
92
|
<SelectPrimitive.ItemIndicator className={itemIndicator}>
|
|
93
|
-
<CheckIcon
|
|
93
|
+
<CheckIcon width={14} />
|
|
94
94
|
</SelectPrimitive.ItemIndicator>
|
|
95
95
|
<SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
|
|
96
96
|
</SelectPrimitive.Item>
|
|
@@ -112,7 +112,7 @@ export function SelectGroupLabel(props: SelectPrimitive.GroupLabel.Props) {
|
|
|
112
112
|
export function SelectScrollUpArrow(props: SelectPrimitive.ScrollUpArrow.Props) {
|
|
113
113
|
return (
|
|
114
114
|
<SelectPrimitive.ScrollUpArrow className={scrollArrow} {...props}>
|
|
115
|
-
<
|
|
115
|
+
<ChevronUpIcon width={12} />
|
|
116
116
|
</SelectPrimitive.ScrollUpArrow>
|
|
117
117
|
);
|
|
118
118
|
}
|
|
@@ -120,7 +120,7 @@ export function SelectScrollUpArrow(props: SelectPrimitive.ScrollUpArrow.Props)
|
|
|
120
120
|
export function SelectScrollDownArrow(props: SelectPrimitive.ScrollDownArrow.Props) {
|
|
121
121
|
return (
|
|
122
122
|
<SelectPrimitive.ScrollDownArrow className={scrollArrow} {...props}>
|
|
123
|
-
<
|
|
123
|
+
<ChevronDownIcon width={12} />
|
|
124
124
|
</SelectPrimitive.ScrollDownArrow>
|
|
125
125
|
);
|
|
126
126
|
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { CircleNotchIcon } from "@phosphor-icons/react";
|
|
2
1
|
import clsx from "clsx";
|
|
3
2
|
import type React from "react";
|
|
4
3
|
import { spinner } from "./spinner.css";
|
|
4
|
+
import { LoaderCircleIcon } from "../../icons";
|
|
5
5
|
|
|
6
|
-
type Props = Omit<React.ComponentProps<typeof
|
|
6
|
+
type Props = Omit<React.ComponentProps<typeof LoaderCircleIcon>, "className" | "style"> & {
|
|
7
7
|
className?: string;
|
|
8
8
|
style?: React.CSSProperties;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export function Spinner({ className, style, ...props }: Props): React.ReactElement {
|
|
12
|
-
return (
|
|
13
|
-
<CircleNotchIcon weight="bold" className={clsx(spinner, className)} style={style} {...props} />
|
|
14
|
-
);
|
|
12
|
+
return <LoaderCircleIcon className={clsx(spinner, className)} style={style} {...props} />;
|
|
15
13
|
}
|