@firecms/ui 3.0.0-rc.3 → 3.0.0-tw4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export declare const focusedDisabled = "focus-visible:ring-0 focus-visible:ring-offset-0";
2
- export declare const focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-800 focus:dark:bg-opacity-60";
3
- export declare const focusedClasses = "z-30 outline-none ring-2 ring-primary ring-opacity-75 ring-offset-2 ring-offset-transparent ";
4
- export declare const fieldBackgroundMixin = "bg-opacity-50 bg-surface-accent-200 dark:bg-surface-800 dark:bg-opacity-60";
5
- export declare const fieldBackgroundInvisibleMixin = "bg-opacity-0 bg-surface-accent-100 dark:bg-surface-800 dark:bg-opacity-0";
6
- export declare const fieldBackgroundDisabledMixin = "dark:bg-surface-800 bg-opacity-50 dark:bg-opacity-90";
7
- export declare const fieldBackgroundHoverMixin = "hover:bg-opacity-70 dark:hover:bg-surface-700 dark:hover:bg-opacity-40";
8
- export declare const defaultBorderMixin = "border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40";
9
- export declare const paperMixin = "bg-white rounded-md dark:bg-surface-950 border border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40";
10
- export declare const cardMixin = "bg-white border border-surface-200 border-opacity-40 dark:border-transparent rounded-md dark:bg-surface-950 dark:border-surface-700 dark:border-opacity-40";
11
- export declare const cardClickableMixin = "hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800 hover:ring-2 hover:ring-primary cursor-pointer";
12
- export declare const cardSelectedMixin = "bg-primary-bg dark:bg-primary-bg bg-opacity-30 dark:bg-opacity-10 ring-1 ring-primary ring-opacity-75";
2
+ export declare const focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-800 focus:dark:bg-opacity-60 focus:bg-surface-accent-100/70 dark:focus:bg-surface-800/60";
3
+ export declare const focusedClasses = "z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-75 ring-primary/75 ring-offset-2 ring-offset-transparent ";
4
+ export declare const fieldBackgroundMixin = "bg-opacity-50 bg-surface-accent-200 bg-surface-accent-200/50 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60";
5
+ export declare const fieldBackgroundInvisibleMixin = "bg-opacity-0 bg-surface-accent-100 dark:bg-surface-800 dark:bg-opacity-0 bg-surface-accent-200/0 dark:bg-surface-800/0";
6
+ export declare const fieldBackgroundDisabledMixin = "dark:bg-surface-800 bg-opacity-50 dark:bg-opacity-90 bg-surface-accent-200/50 dark:bg-surface-800/90";
7
+ export declare const fieldBackgroundHoverMixin = "hover:bg-opacity-70 dark:hover:bg-surface-700 dark:hover:bg-opacity-40 hover:bg-surface-accent-200/70 hover:dark:bg-surface-700/40";
8
+ export declare const defaultBorderMixin = "border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40 border-surface-200/40 dark:border-surface-700/40 ";
9
+ export declare const paperMixin = "bg-white rounded-md dark:bg-surface-950 border border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40 border-surface-200/40 dark:border-surface-700/40";
10
+ export declare const cardMixin = "bg-white dark:bg-surface-950 rounded-md border border-surface-200/40 dark:border-surface-700/40 m-1 -p-1";
11
+ export declare const cardClickableMixin = "hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800 hover:ring-2 hover:ring-primary cursor-pointer hover:bg-primary/20 dark:hover:bg-primary/10 ";
12
+ export declare const cardSelectedMixin = "bg-primary-bg dark:bg-primary-bg bg-opacity-30 bg-primary-bg/30 dark:bg-opacity-10 dark:bg-primary-bg/10 ring-1 ring-primary ring-opacity-75 ring-primary/75 bg-primary/10 dark:bg-primary/10 ring-1 ring-primary/75";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/ui",
3
3
  "type": "module",
4
- "version": "3.0.0-rc.3",
4
+ "version": "3.0.0-tw4.1",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -58,21 +58,21 @@
58
58
  "@radix-ui/react-collapsible": "^1.1.12",
59
59
  "@radix-ui/react-dialog": "^1.1.15",
60
60
  "@radix-ui/react-dropdown-menu": "^2.1.16",
61
- "@radix-ui/react-label": "^2.1.7",
61
+ "@radix-ui/react-label": "^2.1.8",
62
62
  "@radix-ui/react-menubar": "^1.1.16",
63
63
  "@radix-ui/react-popover": "^1.1.15",
64
- "@radix-ui/react-portal": "^1.1.9",
64
+ "@radix-ui/react-portal": "^1.1.10",
65
65
  "@radix-ui/react-radio-group": "^1.3.8",
66
66
  "@radix-ui/react-scroll-area": "^1.2.10",
67
67
  "@radix-ui/react-select": "^2.2.6",
68
- "@radix-ui/react-separator": "^1.1.7",
68
+ "@radix-ui/react-separator": "^1.1.8",
69
69
  "@radix-ui/react-slider": "^1.3.6",
70
70
  "@radix-ui/react-switch": "^1.2.6",
71
71
  "@radix-ui/react-tabs": "^1.1.13",
72
72
  "@radix-ui/react-tooltip": "^1.2.8",
73
- "@radix-ui/react-visually-hidden": "^1.2.3",
73
+ "@radix-ui/react-visually-hidden": "^1.2.4",
74
74
  "clsx": "^2.1.1",
75
- "cmdk": "^0.2.1",
75
+ "cmdk": "^1.1.1",
76
76
  "date-fns": "^3.6.0",
77
77
  "markdown-it": "^14.1.0",
78
78
  "react-dropzone": "^14.3.8",
@@ -84,9 +84,9 @@
84
84
  "react-dom": ">=18.0.0"
85
85
  },
86
86
  "devDependencies": {
87
- "@jest/globals": "^30.1.2",
88
- "@tailwindcss/postcss": "^4.1.13",
89
- "@testing-library/jest-dom": "^6.8.0",
87
+ "@jest/globals": "^30.2.0",
88
+ "@tailwindcss/postcss": "^4.1.17",
89
+ "@testing-library/jest-dom": "^6.9.1",
90
90
  "@testing-library/react": "^16.3.0",
91
91
  "@testing-library/user-event": "^14.6.1",
92
92
  "@types/jest": "^29.5.14",
@@ -98,16 +98,16 @@
98
98
  "@vitejs/plugin-react": "^4.7.0",
99
99
  "babel-plugin-react-compiler": "^19.0.0-beta-af1b7da-20250417",
100
100
  "cross-env": "^7.0.3",
101
- "eslint-plugin-react-compiler": "^19.0.0-beta-af1b7da-20250417",
101
+ "eslint-plugin-react-compiler": "^19.1.0-rc.2",
102
102
  "jest": "^29.7.0",
103
103
  "npm-run-all": "^4.1.5",
104
104
  "rollup-preserve-directives": "^1.1.3",
105
- "ts-jest": "^29.4.3",
105
+ "ts-jest": "^29.4.5",
106
106
  "ts-node": "^10.9.2",
107
107
  "tsd": "^0.31.2",
108
- "typescript": "^5.9.2",
109
- "vite": "^7.1.6",
110
- "vite-plugin-static-copy": "^3.1.2"
108
+ "typescript": "^5.9.3",
109
+ "vite": "^7.2.4",
110
+ "vite-plugin-static-copy": "^3.1.4"
111
111
  },
112
112
  "files": [
113
113
  "dist",
@@ -115,7 +115,7 @@
115
115
  "index.css",
116
116
  "tailwind.config.js"
117
117
  ],
118
- "gitHead": "213f4c106eb3e6639eb1ad23c7d94282ef54d444",
118
+ "gitHead": "a054392bdc44c6eae1b0265aee488d5995610f96",
119
119
  "publishConfig": {
120
120
  "access": "public"
121
121
  }
@@ -42,10 +42,10 @@ export const BooleanSwitch = React.forwardRef(function BooleanSwitch({
42
42
  }}
43
43
  className={cls(
44
44
  size === "smallest" ? "w-[34px] h-[18px] min-w-[34px] min-h-[18px]" : size === "small" ? "w-[38px] h-[22px] min-w-[38px] min-h-[22px]" : "w-[42px] h-[26px] min-w-[42px] min-h-[26px]",
45
- "outline-none rounded-full relative shadow-sm",
45
+ "outline-none outline-hidden rounded-full relative shadow-sm",
46
46
  value ? (disabled
47
- ? "bg-white bg-opacity-54 dark:bg-surface-accent-950 border-surface-accent-100 dark:border-surface-accent-700 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700"
48
- : "ring-secondary ring-1 bg-secondary dark:bg-secondary") : "bg-white bg-opacity-54 dark:bg-surface-accent-900 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700",
47
+ ? "bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-950 border-surface-accent-100 dark:border-surface-accent-700 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700"
48
+ : "ring-secondary ring-1 bg-secondary dark:bg-secondary") : "bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-900 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700",
49
49
  className
50
50
  )}
51
51
  {...props}
@@ -46,14 +46,14 @@ const ButtonInner = React.forwardRef<
46
46
  "border border-transparent bg-surface-100 hover:bg-surface-accent-200 text-text-primary dark:bg-surface-800 dark:hover:bg-surface-accent-700 dark:text-text-primary-dark hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark": variant === "filled" && color === "neutral" && !disabled,
47
47
 
48
48
  // Text Variants
49
- "border border-transparent text-primary hover:text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-800": variant === "text" && color === "primary" && !disabled,
50
- "border border-transparent text-secondary hover:text-secondary hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-800": variant === "text" && color === "secondary" && !disabled,
51
- "border border-transparent text-red-500 hover:text-red-500 hover:bg-red-500 hover:bg-opacity-10": variant === "text" && color === "error" && !disabled,
49
+ "border border-transparent text-primary hover:text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "text" && color === "primary" && !disabled,
50
+ "border border-transparent text-secondary hover:text-secondary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "text" && color === "secondary" && !disabled,
51
+ "border border-transparent text-red-500 hover:text-red-500 hover:bg-red-500 hover:bg-opacity-10 hover:bg-red-500/10": variant === "text" && color === "error" && !disabled,
52
52
  "border border-transparent text-text-primary hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark hover:bg-surface-accent-200 hover:dark:bg-surface-700": variant === "text" && color === "text" && !disabled,
53
53
  "border border-transparent text-text-primary hover:text-text-primary hover:bg-surface-accent-200 dark:text-text-primary-dark dark:hover:text-text-primary-dark dark:hover:bg-surface-accent-700": variant === "text" && color === "neutral" && !disabled,
54
54
 
55
55
  // Outlined Variants
56
- "border border-primary text-primary hover:text-primary hover:bg-primary-bg": variant === "outlined" && color === "primary" && !disabled,
56
+ "border border-primary text-primary hover:text-primary hover:bg-primary-bg hover:bg-primary/10": variant === "outlined" && color === "primary" && !disabled,
57
57
  "border border-secondary text-secondary hover:text-secondary hover:bg-secondary-bg": variant === "outlined" && color === "secondary" && !disabled,
58
58
  "border border-red-500 text-red-500 hover:text-red-500 hover:bg-red-500 hover:text-white": variant === "outlined" && color === "error" && !disabled,
59
59
  "border border-surface-accent-400 text-text-primary hover:text-text-primary dark:text-text-primary-dark hover:bg-surface-accent-200": variant === "outlined" && color === "text" && !disabled,
@@ -63,7 +63,7 @@ const ButtonInner = React.forwardRef<
63
63
  "text-text-disabled dark:text-text-disabled-dark": disabled,
64
64
  "border border-transparent opacity-50": variant === "text" && disabled,
65
65
  "border border-surface-500 opacity-50": variant === "outlined" && disabled,
66
- "border border-transparent bg-surface-300 dark:bg-surface-500 opacity-40": variant === "filled" && disabled,
66
+ "border border-transparent bg-surface-300 dark:bg-surface-500 opacity-40 bg-surface-300/40 dark:bg-surface-500/40": variant === "filled" && disabled,
67
67
  });
68
68
 
69
69
  const sizeClasses = cls(
@@ -71,7 +71,7 @@ export const Checkbox = ({
71
71
  padding ? paddingClasses[size] : "",
72
72
  outerSizeClasses[size],
73
73
  "inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150",
74
- onCheckedChange ? "rounded-full hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-700 dark:hover:bg-opacity-75" : "",
74
+ onCheckedChange ? "rounded-full hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-700 dark:hover:bg-opacity-75 dark:hover:bg-surface-accent-700/75" : "",
75
75
  onCheckedChange ? "cursor-pointer" : "cursor-default"
76
76
  )}>
77
77
  <div
@@ -27,18 +27,18 @@ export type DialogProps = {
27
27
  };
28
28
 
29
29
  const widthClasses = {
30
- xs: "max-w-xs min-w-xs w-xs",
31
- sm: "max-w-sm min-w-sm w-sm",
32
- md: "max-w-md min-w-md w-md",
33
- lg: "max-w-lg min-w-lg w-lg",
34
- xl: "max-w-xl min-w-xl w-xl",
35
- "2xl": "max-w-2xl min-w-2xl w-2xl",
36
- "3xl": "max-w-3xl min-w-3xl w-3xl",
37
- "4xl": "max-w-4xl min-w-4xl w-4xl",
38
- "5xl": "max-w-5xl min-w-5xl w-5xl",
39
- "6xl": "max-w-6xl min-w-6xl w-6xl",
40
- "7xl": "max-w-7xl min-w-7xl w-7xl",
41
- full: "max-w-full min-w-full w-full"
30
+ xs: "max-w-xs w-xs",
31
+ sm: "max-w-sm w-sm",
32
+ md: "max-w-md w-md",
33
+ lg: "max-w-lg w-lg",
34
+ xl: "max-w-xl w-xl",
35
+ "2xl": "max-w-2xl w-2xl",
36
+ "3xl": "max-w-3xl w-3xl",
37
+ "4xl": "max-w-4xl w-4xl",
38
+ "5xl": "max-w-5xl w-5xl",
39
+ "6xl": "max-w-6xl w-6xl",
40
+ "7xl": "max-w-7xl w-7xl",
41
+ full: "max-w-full w-full"
42
42
  };
43
43
 
44
44
  export const Dialog = ({
@@ -83,7 +83,7 @@ export const Dialog = ({
83
83
  <div className={cls("fixed inset-0 z-30", containerClassName)}>
84
84
 
85
85
  <DialogPrimitive.Overlay
86
- className={cls("fixed inset-0 transition-opacity z-20 ease-in-out duration-200 bg-black bg-opacity-50 dark:bg-opacity-60 backdrop-blur-sm ",
86
+ className={cls("fixed inset-0 transition-opacity z-20 ease-in-out duration-200 bg-black dark:bg-opacity-60 dark:bg-black/60 bg-opacity-50 bg-black/50 dark: bg-black/60 backdrop-blur-sm ",
87
87
  displayed && open ? "opacity-100" : "opacity-0",
88
88
  "z-20 fixed top-0 left-0 w-full h-full flex justify-center items-center"
89
89
  )}
@@ -19,7 +19,7 @@ export function DialogActions({
19
19
  defaultBorderMixin,
20
20
  "pt-2 pb-4 px-4 border-t flex flex-row items-center justify-end bottom-0 right-0 left-0 text-right z-2 gap-2",
21
21
  position,
22
- "bg-white bg-opacity-60 dark:bg-surface-900 dark:bg-opacity-60",
22
+ "bg-white bg-opacity-60 bg-white/60 dark:bg-surface-900 dark:bg-opacity-60 dark:bg-surface-900/60",
23
23
  translucent ? "backdrop-blur-sm" : "",
24
24
  className)}>
25
25
  {children}
@@ -94,7 +94,7 @@ export function ExpandablePanel({
94
94
  <Collapsible.Trigger
95
95
  className={cls(
96
96
  "rounded-t flex items-center justify-between w-full min-h-[52px]",
97
- "hover:bg-surface-accent-200 hover:bg-opacity-40 dark:hover:bg-surface-800 dark:hover:bg-opacity-40",
97
+ "hover:bg-surface-accent-200 hover:bg-opacity-40 hover:bg-surface-accent-200/40 dark:hover:bg-surface-800 dark:hover:bg-opacity-40 dark:hover:bg-surface-800/40",
98
98
  invisible ? "border-b px-2" : "p-4",
99
99
  open ? "py-6" : "py-4",
100
100
  "transition-all duration-200",
@@ -14,7 +14,7 @@ export type IconButtonProps<C extends React.ElementType> =
14
14
  onClick?: React.MouseEventHandler<any>
15
15
  }
16
16
 
17
- const buttonClasses = "hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-800 hover:scale-105 transition-transform";
17
+ const buttonClasses = "hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800 hover:scale-105 transition-transform";
18
18
  const baseClasses = "inline-flex items-center justify-center p-2 text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150";
19
19
  const colorClasses = "text-surface-accent-600 visited:text-surface-accent-600 dark:text-surface-accent-300 dark:visited:text-surface-300";
20
20
  const sizeClasses = {
@@ -40,7 +40,7 @@ const IconButtonInner = <C extends React.ElementType = "button">({
40
40
  ...props
41
41
  }: IconButtonProps<C>, ref: React.ForwardedRef<HTMLButtonElement>) => {
42
42
 
43
- const bgClasses = variant === "ghost" ? "bg-transparent" : "bg-surface-accent-200 bg-opacity-50 dark:bg-surface-950 dark:bg-opacity-50";
43
+ const bgClasses = variant === "ghost" ? "bg-transparent" : "bg-surface-accent-200 bg-opacity-50 bg-surface-accent-200/50 dark:bg-surface-950 dark:bg-opacity-50 dark:bg-surface-950/50";
44
44
  const Component: React.ElementType<any> = component || "button";
45
45
  return (
46
46
  <Component
@@ -50,6 +50,7 @@ const IconButtonInner = <C extends React.ElementType = "button">({
50
50
  className={cls(
51
51
  disabled ? "opacity-50 pointer-events-none" : "cursor-pointer",
52
52
  toggled ? "outline outline-2 outline-primary" : "",
53
+ "text-inherit dark:text-inherit",
53
54
  colorClasses,
54
55
  bgClasses,
55
56
  baseClasses,
@@ -44,7 +44,7 @@ export function MenubarTrigger({
44
44
  return (
45
45
  <MenubarPrimitive.Trigger
46
46
  onSelect={onSelect}
47
- className={cls("py-2 px-3 outline-none select-none font-medium leading-none rounded text-text-primary dark:text-text-primary-dark text-[13px] flex items-center justify-between gap-[2px] data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-800 data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-800 hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-800",
47
+ className={cls("py-2 px-3 outline-none select-none font-medium leading-none rounded text-text-primary dark:text-text-primary-dark text-[13px] flex items-center justify-between gap-[2px] data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-800 data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-800 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800",
48
48
  className)}>
49
49
  {children}
50
50
  </MenubarPrimitive.Trigger>
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import * as PopoverPrimitive from "@radix-ui/react-popover";
3
3
  import * as React from "react";
4
- import { ChangeEvent, Children, useEffect } from "react";
4
+ import { ChangeEvent, Children, useEffect, useState } from "react";
5
5
  import { Command as CommandPrimitive } from "cmdk";
6
6
  import { cls } from "../util";
7
7
  import { CheckIcon, CloseIcon, KeyboardArrowDownIcon } from "../icons";
@@ -88,9 +88,13 @@ export const MultiSelect = React.forwardRef<
88
88
  },
89
89
  ref
90
90
  ) => {
91
- // Properly type the state variables to match the generic props
92
- const [isPopoverOpen, setIsPopoverOpen] = React.useState(open ?? false);
93
- const [selectedValues, setSelectedValues] = React.useState<any[]>(value ?? []);
91
+ const [isMounted, setIsMounted] = useState(false);
92
+ const [isPopoverOpen, setIsPopoverOpen] = useState(open ?? false);
93
+ const [selectedValues, setSelectedValues] = useState<any[]>(value ?? []);
94
+
95
+ useEffect(() => {
96
+ setIsMounted(true);
97
+ }, []);
94
98
 
95
99
  const onPopoverOpenChange = (open: boolean) => {
96
100
  setIsPopoverOpen(open);
@@ -184,7 +188,7 @@ export const MultiSelect = React.forwardRef<
184
188
  {typeof label === "string" ? <SelectInputLabel error={error}>{label}</SelectInputLabel> : label}
185
189
 
186
190
  <PopoverPrimitive.Root
187
- open={isPopoverOpen}
191
+ open={isMounted && isPopoverOpen}
188
192
  onOpenChange={onPopoverOpenChange}
189
193
  modal={modalPopover}
190
194
  >
@@ -278,7 +282,7 @@ export const MultiSelect = React.forwardRef<
278
282
  </button>
279
283
  </PopoverPrimitive.Trigger>
280
284
  <PopoverPrimitive.Content
281
- className={cls("z-50 relative overflow-hidden border bg-white dark:bg-surface-900 rounded-lg w-[400px]", defaultBorderMixin)}
285
+ className={cls("z-50 overflow-hidden border bg-white dark:bg-surface-900 rounded-lg w-[400px]", defaultBorderMixin)}
282
286
  align="start"
283
287
  sideOffset={8}
284
288
  onEscapeKeyDown={() => onPopoverOpenChange(false)}
@@ -313,7 +317,7 @@ export const MultiSelect = React.forwardRef<
313
317
  "cursor-pointer",
314
318
  "m-1",
315
319
  "ring-offset-transparent",
316
- "p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-offset-2",
320
+ "p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2",
317
321
  "aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900",
318
322
  "cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900"
319
323
  )
@@ -369,7 +373,7 @@ export function MultiSelectItem<T extends MultiSelectValue = string>({
369
373
  "cursor-pointer",
370
374
  "m-1",
371
375
  "ring-offset-transparent",
372
- "p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-offset-2",
376
+ "p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2",
373
377
  "aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900",
374
378
  "cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900",
375
379
  className
@@ -398,4 +402,3 @@ function InnerCheckBox({ checked }: { checked: boolean }) {
398
402
  </div>
399
403
  </div>
400
404
  }
401
-
@@ -142,6 +142,7 @@ export const Select = forwardRef<HTMLDivElement, SelectProps>(({
142
142
  "px-3": size === "medium",
143
143
  "px-2": size === "small" || size === "smallest",
144
144
  } : "",
145
+ "outline-hidden focus:outline-hidden",
145
146
  "outline-none focus:outline-none",
146
147
  "select-none rounded-md text-sm",
147
148
  error ? "text-red-500 dark:text-red-600" : "focus:text-text-primary dark:focus:text-text-primary-dark",
@@ -15,12 +15,12 @@ export function Separator({
15
15
  <SeparatorPrimitive.Root
16
16
  decorative={decorative}
17
17
  orientation="horizontal"
18
- className={cls("dark:bg-opacity-80 dark:bg-surface-800 bg-surface-100 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-4", className)}/>
18
+ className={cls("dark:bg-opacity-80 dark:bg-surface-800 dark:bg-surface-800/80 bg-surface-100 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-4", className)}/>
19
19
  );
20
20
  else
21
21
  return (
22
22
  <SeparatorPrimitive.Root
23
- className={cls("dark:bg-opacity-80 dark:bg-surface-800 bg-surface-100 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px mx-4", className)}
23
+ className={cls("dark:bg-opacity-80 dark:bg-surface-800 dark:bg-surface-800/80 bg-surface-100 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px mx-4", className)}
24
24
  decorative={decorative}
25
25
  orientation="vertical"
26
26
  />
@@ -70,8 +70,8 @@ export const Sheet: React.FC<SheetProps> = ({
70
70
  className={cls(
71
71
  "outline-none",
72
72
  "fixed inset-0 transition-opacity z-20 ease-in-out duration-100 backdrop-blur-sm",
73
- "bg-black bg-opacity-50",
74
- "dark:bg-surface-900 dark:bg-opacity-60",
73
+ "bg-black bg-opacity-50 bg-black/50",
74
+ "dark:bg-surface-900 dark:bg-opacity-60 dark:bg-surface-900/60",
75
75
  displayed && open ? "opacity-100" : "opacity-0",
76
76
  overlayClassName
77
77
  )}
@@ -37,8 +37,8 @@ function SliderThumb(props: {
37
37
  "border-surface-accent-300 bg-surface-accent-300 dark:border-surface-700 dark:bg-surface-700": props.props.disabled
38
38
  },
39
39
  props.classes,
40
- "focus-visible:ring-4 focus-visible:ring-primary focus-visible:ring-opacity-50",
41
- "hover:ring-4 hover:ring-primary hover:ring-opacity-25",
40
+ "focus-visible:ring-4 focus-visible:ring-primary focus-visible:ring-opacity-50 focus-visible:ring-primary/50",
41
+ "hover:ring-4 hover:ring-primary hover:ring-opacity-25 hover:ring-primary/25",
42
42
  "block rounded-full transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50")}
43
43
 
44
44
  />
@@ -48,7 +48,7 @@ function SliderThumb(props: {
48
48
  className={cls(
49
49
  "TooltipContent",
50
50
  "max-w-lg leading-relaxed",
51
- "z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100",
51
+ "z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100",
52
52
  )}>
53
53
  {props.props.value?.[props.index]}
54
54
  </TooltipPrimitive.Content>
@@ -84,7 +84,7 @@ const Slider = React.forwardRef<
84
84
  >
85
85
  <SliderPrimitive.Track
86
86
  style={{ height: size === "small" ? 4 : 8 }}
87
- className={"relative w-full grow overflow-hidden rounded-full bg-surface-accent-300 bg-opacity-40 dark:bg-surface-700 dark:bg-opacity-40"}>
87
+ className={"relative w-full grow overflow-hidden rounded-full bg-surface-accent-300 bg-opacity-40 bg-surface-accent-300/40 dark:bg-surface-700 dark:bg-opacity-40 dark:bg-surface-700/40"}>
88
88
 
89
89
  <SliderPrimitive.Range
90
90
  className={cls("absolute h-full", {
@@ -57,7 +57,7 @@ export function Tab({
57
57
  className)}>
58
58
  <div className={cls("line-clamp-1",
59
59
  "uppercase inline-block p-2 px-4 rounded",
60
- "hover:bg-surface-accent-200 hover:bg-opacity-75 dark:hover:bg-surface-accent-800",
60
+ "hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800",
61
61
  innerClassName)}>
62
62
  {children}
63
63
  </div>
@@ -85,10 +85,16 @@ export const TextField = forwardRef<HTMLDivElement, TextFieldProps<string | numb
85
85
 
86
86
  const inputRef = inputRefProp ?? useRef(null);
87
87
 
88
- // @ts-ignore
89
- const [focused, setFocused] = React.useState(document.activeElement === inputRef.current);
88
+ const [focused, setFocused] = React.useState(false);
90
89
  const hasValue = value !== undefined && value !== null && value !== "";
91
90
 
91
+ useEffect(() => {
92
+ // @ts-ignore
93
+ if (inputRef.current && document.activeElement === inputRef.current) {
94
+ setFocused(true);
95
+ }
96
+ }, []);
97
+
92
98
  useEffect(() => {
93
99
  if (type !== "number") return;
94
100
  const handleWheel = (event: any) => {
@@ -114,6 +120,8 @@ export const TextField = forwardRef<HTMLDivElement, TextFieldProps<string | numb
114
120
  maxRows={maxRows}
115
121
  value={value ?? ""}
116
122
  onChange={onChange}
123
+ onFocus={() => setFocused(true)}
124
+ onBlur={() => setFocused(false)}
117
125
  style={inputStyle}
118
126
  className={cls(
119
127
  invisible ? focusedInvisibleMixin : "",
@@ -64,7 +64,7 @@ export const Tooltip = ({
64
64
  <TooltipPrimitive.Content
65
65
  className={cls("TooltipContent",
66
66
  "max-w-lg leading-relaxed",
67
- "z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100",
67
+ "z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100",
68
68
  tooltipClassName)}
69
69
  style={tooltipStyle}
70
70
  sideOffset={sideOffset === undefined ? 4 : sideOffset}
package/src/index.css CHANGED
@@ -1,3 +1,57 @@
1
+ @theme {
2
+ /* Font Families */
3
+ --font-sans: 'Rubik', 'Roboto', 'Helvetica', 'Arial', sans-serif;
4
+ --font-headers: 'Rubik', 'Roboto', 'Helvetica', 'Arial', sans-serif;
5
+ --font-mono: 'JetBrains Mono', 'Space Mono', 'Lucida Console', monospace;
6
+
7
+ /* Colors */
8
+ --color-primary: #0070F4;
9
+ --color-primary-light: oklch(from var(--color-primary) calc(l + 0.15) c h);
10
+ --color-primary-dark: oklch(from var(--color-primary) calc(l - 0.15) c h);
11
+ --color-secondary: #FF5B79;
12
+ --color-secondary-light: oklch(from var(--color-secondary) calc(l + 0.15) c h);
13
+ --color-secondary-dark: oklch(from var(--color-secondary) calc(l - 0.15) c h);
14
+
15
+ /* Field Colors */
16
+ --color-field-disabled: rgb(224 224 226);
17
+ --color-field-disabled-dark: rgb(35 35 37);
18
+
19
+ /* Text Colors */
20
+ --color-text-primary: rgba(0, 0, 0, 0.87);
21
+ --color-text-secondary: rgba(0, 0, 0, 0.52);
22
+ --color-text-disabled: rgba(0, 0, 0, 0.38);
23
+ --color-text-primary-dark: #ffffff;
24
+ --color-text-secondary-dark: rgba(255, 255, 255, 0.6);
25
+ --color-text-disabled-dark: rgba(255, 255, 255, 0.48);
26
+
27
+ /* Surface Colors */
28
+ --color-surface-50: #f8f8fc;
29
+ --color-surface-100: #e7e7eb;
30
+ --color-surface-200: #cfcfd6;
31
+ --color-surface-300: #b7b7bf;
32
+ --color-surface-400: #a0a0a9;
33
+ --color-surface-500: #87878f;
34
+ --color-surface-600: #6b6b74;
35
+ --color-surface-700: #454552;
36
+ --color-surface-800: #292934;
37
+ --color-surface-900: #18181c;
38
+ --color-surface-950: #101013;
39
+
40
+ /* Surface Accent Colors */
41
+ --color-surface-accent-50: #f8fafc;
42
+ --color-surface-accent-100: #f1f5f9;
43
+ --color-surface-accent-200: #e2e8f0;
44
+ --color-surface-accent-300: #cbd5e1;
45
+ --color-surface-accent-400: #94a3b8;
46
+ --color-surface-accent-500: #64748b;
47
+ --color-surface-accent-600: #475569;
48
+ --color-surface-accent-700: #334155;
49
+ --color-surface-accent-800: #1e293b;
50
+ --color-surface-accent-900: #0f172a;
51
+ --color-surface-accent-950: #020617;
52
+ }
53
+
54
+
1
55
  /* Chrome, Safari and Opera */
2
56
  .no-scrollbar::-webkit-scrollbar {
3
57
  display: none;
@@ -63,12 +117,7 @@
63
117
  @apply text-sm font-semibold uppercase;
64
118
  }
65
119
 
66
-
67
120
  :focus-visible {
68
- @apply outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent
69
- }
70
-
71
- a {
72
- @apply text-blue-600 dark:text-blue-400 dark:hover:text-blue-600 hover:text-blue-800
121
+ @apply outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-transparent
73
122
  }
74
123
 
package/src/styles.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export const focusedDisabled = "focus-visible:ring-0 focus-visible:ring-offset-0";
2
- export const focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-800 focus:dark:bg-opacity-60";
3
- export const focusedClasses = "z-30 outline-none ring-2 ring-primary ring-opacity-75 ring-offset-2 ring-offset-transparent ";
4
- export const fieldBackgroundMixin = "bg-opacity-50 bg-surface-accent-200 dark:bg-surface-800 dark:bg-opacity-60";
5
- export const fieldBackgroundInvisibleMixin = "bg-opacity-0 bg-surface-accent-100 dark:bg-surface-800 dark:bg-opacity-0";
6
- export const fieldBackgroundDisabledMixin = "dark:bg-surface-800 bg-opacity-50 dark:bg-opacity-90";
7
- export const fieldBackgroundHoverMixin = "hover:bg-opacity-70 dark:hover:bg-surface-700 dark:hover:bg-opacity-40";
8
- export const defaultBorderMixin = "border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40";
9
- export const paperMixin = "bg-white rounded-md dark:bg-surface-950 border border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40";
10
- export const cardMixin = "bg-white border border-surface-200 border-opacity-40 dark:border-transparent rounded-md dark:bg-surface-950 dark:border-surface-700 dark:border-opacity-40";
11
- export const cardClickableMixin = "hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800 hover:ring-2 hover:ring-primary cursor-pointer";
12
- export const cardSelectedMixin = "bg-primary-bg dark:bg-primary-bg bg-opacity-30 dark:bg-opacity-10 ring-1 ring-primary ring-opacity-75";
2
+ export const focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-800 focus:dark:bg-opacity-60 focus:bg-surface-accent-100/70 dark:focus:bg-surface-800/60";
3
+ export const focusedClasses = "z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-75 ring-primary/75 ring-offset-2 ring-offset-transparent ";
4
+ export const fieldBackgroundMixin = "bg-opacity-50 bg-surface-accent-200 bg-surface-accent-200/50 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60";
5
+ export const fieldBackgroundInvisibleMixin = "bg-opacity-0 bg-surface-accent-100 dark:bg-surface-800 dark:bg-opacity-0 bg-surface-accent-200/0 dark:bg-surface-800/0";
6
+ export const fieldBackgroundDisabledMixin = "dark:bg-surface-800 bg-opacity-50 dark:bg-opacity-90 bg-surface-accent-200/50 dark:bg-surface-800/90";
7
+ export const fieldBackgroundHoverMixin = "hover:bg-opacity-70 dark:hover:bg-surface-700 dark:hover:bg-opacity-40 hover:bg-surface-accent-200/70 hover:dark:bg-surface-700/40";
8
+ export const defaultBorderMixin = "border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40 border-surface-200/40 dark:border-surface-700/40 ";
9
+ export const paperMixin = "bg-white rounded-md dark:bg-surface-950 border border-surface-200 border-opacity-40 dark:border-surface-700 dark:border-opacity-40 border-surface-200/40 dark:border-surface-700/40";
10
+ export const cardMixin = "bg-white dark:bg-surface-950 rounded-md border border-surface-200/40 dark:border-surface-700/40 m-1 -p-1";
11
+ export const cardClickableMixin = "hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800 hover:ring-2 hover:ring-primary cursor-pointer hover:bg-primary/20 dark:hover:bg-primary/10 ";
12
+ export const cardSelectedMixin = "bg-primary-bg dark:bg-primary-bg bg-opacity-30 bg-primary-bg/30 dark:bg-opacity-10 dark:bg-primary-bg/10 ring-1 ring-primary ring-opacity-75 ring-primary/75 bg-primary/10 dark:bg-primary/10 ring-1 ring-primary/75";
package/src/util/cls.ts CHANGED
@@ -2,7 +2,7 @@ import { type ClassValue, clsx } from "clsx";
2
2
  import { twMerge } from "tailwind-merge";
3
3
 
4
4
  export function cls(...classes: ClassValue[]) {
5
- return twMerge(clsx(classes))
5
+ return twMerge(clsx(classes));
6
6
  }
7
7
 
8
8
  /**