gbs-add-block 1.2.15 → 1.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +2 -2
  2. package/index.cjs +214 -21
  3. package/package.json +1 -1
  4. package/source/beta-components/breadcrumb/react/props.ts +2 -2
  5. package/source/beta-components/breadcrumb/styles.css +8 -8
  6. package/source/beta-components/button/react/props.ts +2 -2
  7. package/source/beta-components/button/styles.css +15 -15
  8. package/source/beta-components/checkbox/react/Checkbox.tsx +147 -146
  9. package/source/beta-components/checkbox/react/CheckboxGroup.tsx +8 -8
  10. package/source/beta-components/checkbox/react/props.ts +2 -2
  11. package/source/beta-components/checkbox/styles.css +11 -11
  12. package/source/beta-components/combobox/README.md +3 -3
  13. package/source/beta-components/combobox/react/MultiSelect.tsx +265 -263
  14. package/source/beta-components/combobox/react/Popover.tsx +38 -70
  15. package/source/beta-components/combobox/react/Select.tsx +200 -198
  16. package/source/beta-components/combobox/react/icons.tsx +6 -29
  17. package/source/beta-components/combobox/react/props.ts +4 -2
  18. package/source/beta-components/combobox/styles.css +18 -18
  19. package/source/beta-components/data-grid/react/Popover.tsx +35 -0
  20. package/source/beta-components/{datagrid → data-grid}/react/context.ts +2 -2
  21. package/source/beta-components/{datagrid → data-grid}/react/icons.tsx +8 -35
  22. package/source/beta-components/{datagrid → data-grid}/styles.css +24 -24
  23. package/source/beta-components/{datepicker → date-picker}/README.md +3 -3
  24. package/source/beta-components/{datepicker → date-picker}/react/DatePicker.tsx +249 -249
  25. package/source/beta-components/{datepicker → date-picker}/react/DateRangePicker.tsx +291 -291
  26. package/source/beta-components/date-picker/react/Popover.tsx +45 -0
  27. package/source/beta-components/date-picker/react/icons.tsx +15 -0
  28. package/source/beta-components/{datepicker → date-picker}/react/props.ts +2 -2
  29. package/source/beta-components/{datepicker → date-picker}/styles.css +18 -18
  30. package/source/beta-components/dialog/react/icons.tsx +16 -47
  31. package/source/beta-components/dialog/react/props.ts +2 -2
  32. package/source/beta-components/dialog/styles.css +21 -21
  33. package/source/beta-components/{fileuploader → file-uploader}/react/FileUploader.tsx +511 -515
  34. package/source/beta-components/{fileuploader → file-uploader}/react/icons.tsx +7 -27
  35. package/source/beta-components/{fileuploader → file-uploader}/react/props.ts +2 -2
  36. package/source/beta-components/{fileuploader → file-uploader}/styles.css +17 -17
  37. package/source/beta-components/input/core/count.ts +3 -12
  38. package/source/beta-components/input/react/Input.tsx +219 -219
  39. package/source/beta-components/input/react/OtpInput.tsx +256 -256
  40. package/source/beta-components/input/react/icons.tsx +3 -21
  41. package/source/beta-components/input/react/props.ts +2 -2
  42. package/source/beta-components/input/styles.css +15 -15
  43. package/source/beta-components/modal/react/Modal.tsx +242 -238
  44. package/source/beta-components/modal/react/icons.tsx +1 -19
  45. package/source/beta-components/modal/react/props.ts +2 -2
  46. package/source/beta-components/modal/styles.css +17 -13
  47. package/source/beta-components/shared/README.md +54 -0
  48. package/source/beta-components/shared/__tests__/boundaries.test.ts +95 -0
  49. package/source/beta-components/shared/__tests__/core.test.ts +55 -0
  50. package/source/beta-components/shared/core/cx.ts +9 -0
  51. package/source/beta-components/shared/core/field.ts +35 -0
  52. package/source/beta-components/shared/core/text.ts +14 -0
  53. package/source/beta-components/shared/index.ts +7 -0
  54. package/source/beta-components/shared/react/Popover.tsx +147 -0
  55. package/source/beta-components/shared/react/icons.tsx +74 -0
  56. package/source/beta-components/shared/react/useControllableState.ts +42 -0
  57. package/source/beta-components/shared/version.json +4 -0
  58. package/source/beta-components/shared/version.ts +6 -0
  59. package/source/beta-components/spinner/react/props.ts +2 -2
  60. package/source/beta-components/spinner/styles.css +5 -5
  61. package/source/beta-components/tabs/react/Tabs.tsx +258 -260
  62. package/source/beta-components/tabs/styles.css +15 -15
  63. package/source/beta-components/textarea/core/count.ts +3 -12
  64. package/source/beta-components/textarea/react/Textarea.tsx +208 -209
  65. package/source/beta-components/textarea/react/props.ts +2 -2
  66. package/source/beta-components/textarea/styles.css +12 -12
  67. package/source/beta-components/toaster/react/icons.tsx +19 -52
  68. package/source/beta-components/toaster/react/props.ts +2 -2
  69. package/source/beta-components/toaster/styles.css +18 -18
  70. package/source/beta-components/datagrid/react/Popover.tsx +0 -79
  71. package/source/beta-components/datepicker/react/Popover.tsx +0 -87
  72. package/source/beta-components/datepicker/react/icons.tsx +0 -32
  73. /package/source/beta-components/{datagrid → data-grid}/README.md +0 -0
  74. /package/source/beta-components/{datagrid → data-grid}/__tests__/core.test.ts +0 -0
  75. /package/source/beta-components/{datagrid → data-grid}/__tests__/export.test.ts +0 -0
  76. /package/source/beta-components/{datagrid → data-grid}/core/columnHelper.ts +0 -0
  77. /package/source/beta-components/{datagrid → data-grid}/core/columns.ts +0 -0
  78. /package/source/beta-components/{datagrid → data-grid}/core/filtering.ts +0 -0
  79. /package/source/beta-components/{datagrid → data-grid}/core/grid.ts +0 -0
  80. /package/source/beta-components/{datagrid → data-grid}/core/index.ts +0 -0
  81. /package/source/beta-components/{datagrid → data-grid}/core/rows.ts +0 -0
  82. /package/source/beta-components/{datagrid → data-grid}/core/sorting.ts +0 -0
  83. /package/source/beta-components/{datagrid → data-grid}/core/state.ts +0 -0
  84. /package/source/beta-components/{datagrid → data-grid}/core/store.ts +0 -0
  85. /package/source/beta-components/{datagrid → data-grid}/core/types.ts +0 -0
  86. /package/source/beta-components/{datagrid → data-grid}/core/values.ts +0 -0
  87. /package/source/beta-components/{datagrid → data-grid}/core/virtual.ts +0 -0
  88. /package/source/beta-components/{datagrid → data-grid}/export/csv.ts +0 -0
  89. /package/source/beta-components/{datagrid → data-grid}/export/download.ts +0 -0
  90. /package/source/beta-components/{datagrid → data-grid}/export/pdf.ts +0 -0
  91. /package/source/beta-components/{datagrid → data-grid}/export/table.ts +0 -0
  92. /package/source/beta-components/{datagrid → data-grid}/export/xlsx.ts +0 -0
  93. /package/source/beta-components/{datagrid → data-grid}/export/zip.ts +0 -0
  94. /package/source/beta-components/{datagrid → data-grid}/index.ts +0 -0
  95. /package/source/beta-components/{datagrid → data-grid}/react/Cell.tsx +0 -0
  96. /package/source/beta-components/{datagrid → data-grid}/react/ColumnMenu.tsx +0 -0
  97. /package/source/beta-components/{datagrid → data-grid}/react/DataGrid.tsx +0 -0
  98. /package/source/beta-components/{datagrid → data-grid}/react/FilterForm.tsx +0 -0
  99. /package/source/beta-components/{datagrid → data-grid}/react/HeaderRow.tsx +0 -0
  100. /package/source/beta-components/{datagrid → data-grid}/react/Pagination.tsx +0 -0
  101. /package/source/beta-components/{datagrid → data-grid}/react/Row.tsx +0 -0
  102. /package/source/beta-components/{datagrid → data-grid}/react/Toolbar.tsx +0 -0
  103. /package/source/beta-components/{datagrid → data-grid}/react/Viewport.tsx +0 -0
  104. /package/source/beta-components/{datagrid → data-grid}/react/hooks.ts +0 -0
  105. /package/source/beta-components/{datagrid → data-grid}/react/keyboard.ts +0 -0
  106. /package/source/beta-components/{datagrid → data-grid}/react/locale.ts +0 -0
  107. /package/source/beta-components/{datepicker → date-picker}/__tests__/core.test.ts +0 -0
  108. /package/source/beta-components/{datepicker → date-picker}/core/calendar.ts +0 -0
  109. /package/source/beta-components/{datepicker → date-picker}/core/format.ts +0 -0
  110. /package/source/beta-components/{datepicker → date-picker}/core/index.ts +0 -0
  111. /package/source/beta-components/{datepicker → date-picker}/core/types.ts +0 -0
  112. /package/source/beta-components/{datepicker → date-picker}/index.ts +0 -0
  113. /package/source/beta-components/{datepicker → date-picker}/react/Calendar.tsx +0 -0
  114. /package/source/beta-components/{datepicker → date-picker}/react/CalendarPanel.tsx +0 -0
  115. /package/source/beta-components/{datepicker → date-picker}/react/MonthYearPanels.tsx +0 -0
  116. /package/source/beta-components/{datepicker → date-picker}/react/locale.ts +0 -0
  117. /package/source/beta-components/{datepicker → date-picker}/react/useDatePicker.ts +0 -0
  118. /package/source/beta-components/{fileuploader → file-uploader}/README.md +0 -0
  119. /package/source/beta-components/{fileuploader → file-uploader}/__tests__/core.test.ts +0 -0
  120. /package/source/beta-components/{fileuploader → file-uploader}/core/format.ts +0 -0
  121. /package/source/beta-components/{fileuploader → file-uploader}/core/index.ts +0 -0
  122. /package/source/beta-components/{fileuploader → file-uploader}/core/store.ts +0 -0
  123. /package/source/beta-components/{fileuploader → file-uploader}/core/transport.ts +0 -0
  124. /package/source/beta-components/{fileuploader → file-uploader}/core/types.ts +0 -0
  125. /package/source/beta-components/{fileuploader → file-uploader}/core/validate.ts +0 -0
  126. /package/source/beta-components/{fileuploader → file-uploader}/index.ts +0 -0
  127. /package/source/beta-components/{fileuploader → file-uploader}/react/FileRow.tsx +0 -0
  128. /package/source/beta-components/{fileuploader → file-uploader}/react/locale.ts +0 -0
  129. /package/source/beta-components/{fileuploader → file-uploader}/react/useFileUploader.ts +0 -0
@@ -1,146 +1,147 @@
1
- "use client";
2
-
3
- import {
4
- use,
5
- useId,
6
- useImperativeHandle,
7
- useLayoutEffect,
8
- useRef,
9
- useState,
10
- type ChangeEvent,
11
- type ChangeEventHandler,
12
- type InputHTMLAttributes,
13
- type ReactNode,
14
- type Ref,
15
- } from "react";
16
- import type { CheckboxSize, CheckedState } from "../core/types";
17
- import { CheckboxGroupContext } from "./context";
18
- import { cx, type CheckboxSlot } from "./props";
19
-
20
- export interface CheckboxProps
21
- extends Omit<
22
- InputHTMLAttributes<HTMLInputElement>,
23
- "type" | "size" | "checked" | "defaultChecked" | "onChange" | "value"
24
- > {
25
- /** `true`, `false` or `"indeterminate"` (controlled). */
26
- checked?: CheckedState;
27
- defaultChecked?: CheckedState;
28
- onCheckedChange?(checked: boolean): void;
29
- onChange?: ChangeEventHandler<HTMLInputElement>;
30
- /** Posted with the form when checked. Inside a CheckboxGroup, the value this box adds. */
31
- value?: string;
32
- label?: ReactNode;
33
- description?: ReactNode;
34
- error?: ReactNode;
35
- size?: CheckboxSize;
36
- classNames?: Partial<Record<CheckboxSlot, string>>;
37
- /** The `<input>` element. */
38
- ref?: Ref<HTMLInputElement>;
39
- }
40
-
41
- /**
42
- * A native checkbox, styled. It posts with forms, works with form libraries and
43
- * reads as a checkbox to every assistive technology, including the mixed state.
44
- */
45
- export function Checkbox(props: CheckboxProps) {
46
- const {
47
- ref,
48
- checked: checkedProp,
49
- defaultChecked = false,
50
- onCheckedChange,
51
- onChange,
52
- value,
53
- label,
54
- description,
55
- error,
56
- size,
57
- className,
58
- classNames,
59
- style,
60
- id: idProp,
61
- disabled,
62
- required,
63
- name,
64
- "aria-describedby": describedByProp,
65
- ...inputProps
66
- } = props;
67
-
68
- const group = use(CheckboxGroupContext);
69
- const reactId = useId();
70
- const id = idProp ?? reactId;
71
- const inputRef = useRef<HTMLInputElement>(null);
72
- useImperativeHandle(ref, () => inputRef.current as HTMLInputElement, []);
73
-
74
- const [internal, setInternal] = useState<CheckedState>(defaultChecked);
75
- const inGroup = group !== null && value !== undefined;
76
- const state: CheckedState = inGroup ? group.values.includes(value) : (checkedProp ?? internal);
77
-
78
- // "Indeterminate" exists only as a DOM property, not an attribute.
79
- useLayoutEffect(() => {
80
- if (inputRef.current) inputRef.current.indeterminate = state === "indeterminate";
81
- }, [state]);
82
-
83
- const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
84
- const next = event.target.checked;
85
- if (inGroup) group.toggle(value, next);
86
- else if (checkedProp === undefined) setInternal(next);
87
- onChange?.(event);
88
- onCheckedChange?.(next);
89
- };
90
-
91
- const invalid = Boolean(error) || (group?.invalid ?? false);
92
- const describedBy =
93
- cx(describedByProp, description ? `${id}-description` : "", error ? `${id}-error` : "") || undefined;
94
-
95
- return (
96
- <div
97
- className={cx("ck-root", classNames?.root, className)}
98
- style={style}
99
- data-size={size ?? group?.size ?? "md"}
100
- data-disabled={disabled || group?.disabled || undefined}
101
- data-invalid={invalid ? "" : undefined}
102
- >
103
- <span className={cx("ck-control", classNames?.control)}>
104
- <input
105
- {...inputProps}
106
- ref={inputRef}
107
- id={id}
108
- type="checkbox"
109
- className={cx("ck-input", classNames?.input)}
110
- checked={state === true}
111
- value={value}
112
- name={name ?? group?.name}
113
- disabled={disabled}
114
- required={required}
115
- aria-invalid={invalid || undefined}
116
- aria-describedby={describedBy}
117
- onChange={handleChange}
118
- />
119
- <svg className="ck-icon" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
120
- <path className="ck-check" d="M3.5 8.5 6.5 11.5 12.5 4.5" pathLength={1} />
121
- <path className="ck-dash" d="M4 8h8" />
122
- </svg>
123
- </span>
124
-
125
- {(label || description || error) && (
126
- <span className="ck-text">
127
- {label && (
128
- <label htmlFor={id} className={cx("ck-label", classNames?.label)} data-required={required || undefined}>
129
- {label}
130
- </label>
131
- )}
132
- {description && (
133
- <span id={`${id}-description`} className={cx("ck-description", classNames?.description)}>
134
- {description}
135
- </span>
136
- )}
137
- {error && (
138
- <span id={`${id}-error`} className={cx("ck-error", classNames?.error)} role="alert">
139
- {error}
140
- </span>
141
- )}
142
- </span>
143
- )}
144
- </div>
145
- );
146
- }
1
+ "use client";
2
+
3
+ import {
4
+ use,
5
+ useId,
6
+ useImperativeHandle,
7
+ useLayoutEffect,
8
+ useRef,
9
+ type ChangeEvent,
10
+ type ChangeEventHandler,
11
+ type InputHTMLAttributes,
12
+ type ReactNode,
13
+ type Ref,
14
+ } from "react";
15
+ import { useControllableState } from "../../shared/react/useControllableState";
16
+ import { describeField } from "../../shared/core/field";
17
+ import type { CheckboxSize, CheckedState } from "../core/types";
18
+ import { CheckboxGroupContext } from "./context";
19
+ import { cx, type CheckboxSlot } from "./props";
20
+
21
+ export interface CheckboxProps
22
+ extends Omit<
23
+ InputHTMLAttributes<HTMLInputElement>,
24
+ "type" | "size" | "checked" | "defaultChecked" | "onChange" | "value"
25
+ > {
26
+ /** `true`, `false` or `"indeterminate"` (controlled). */
27
+ checked?: CheckedState;
28
+ defaultChecked?: CheckedState;
29
+ onCheckedChange?(checked: boolean): void;
30
+ onChange?: ChangeEventHandler<HTMLInputElement>;
31
+ /** Posted with the form when checked. Inside a CheckboxGroup, the value this box adds. */
32
+ value?: string;
33
+ label?: ReactNode;
34
+ description?: ReactNode;
35
+ error?: ReactNode;
36
+ size?: CheckboxSize;
37
+ classNames?: Partial<Record<CheckboxSlot, string>>;
38
+ /** The `<input>` element. */
39
+ ref?: Ref<HTMLInputElement>;
40
+ }
41
+
42
+ /**
43
+ * A native checkbox, styled. It posts with forms, works with form libraries and
44
+ * reads as a checkbox to every assistive technology, including the mixed state.
45
+ */
46
+ export function Checkbox(props: CheckboxProps) {
47
+ const {
48
+ ref,
49
+ checked: checkedProp,
50
+ defaultChecked = false,
51
+ onCheckedChange,
52
+ onChange,
53
+ value,
54
+ label,
55
+ description,
56
+ error,
57
+ size,
58
+ className,
59
+ classNames,
60
+ style,
61
+ id: idProp,
62
+ disabled,
63
+ required,
64
+ name,
65
+ "aria-describedby": describedByProp,
66
+ ...inputProps
67
+ } = props;
68
+
69
+ const group = use(CheckboxGroupContext);
70
+ const reactId = useId();
71
+ const id = idProp ?? reactId;
72
+ const inputRef = useRef<HTMLInputElement>(null);
73
+ useImperativeHandle(ref, () => inputRef.current as HTMLInputElement, []);
74
+
75
+ const [own, setOwn] = useControllableState<CheckedState>(checkedProp, defaultChecked);
76
+ const inGroup = group !== null && value !== undefined;
77
+ // Inside a group the group owns the state, whoever owns it outside one.
78
+ const state: CheckedState = inGroup ? group.values.includes(value) : own;
79
+
80
+ // "Indeterminate" exists only as a DOM property, not an attribute.
81
+ useLayoutEffect(() => {
82
+ if (inputRef.current) inputRef.current.indeterminate = state === "indeterminate";
83
+ }, [state]);
84
+
85
+ const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
86
+ const next = event.target.checked;
87
+ if (inGroup) group.toggle(value, next);
88
+ else setOwn(next);
89
+ onChange?.(event);
90
+ onCheckedChange?.(next);
91
+ };
92
+
93
+ const invalid = Boolean(error) || (group?.invalid ?? false);
94
+ const describedBy = describeField(id, { extra: describedByProp, description, error });
95
+
96
+ return (
97
+ <div
98
+ className={cx("ck-root", classNames?.root, className)}
99
+ style={style}
100
+ data-size={size ?? group?.size ?? "md"}
101
+ data-disabled={disabled || group?.disabled || undefined}
102
+ data-invalid={invalid ? "" : undefined}
103
+ >
104
+ <span className={cx("ck-control", classNames?.control)}>
105
+ <input
106
+ {...inputProps}
107
+ ref={inputRef}
108
+ id={id}
109
+ type="checkbox"
110
+ className={cx("ck-input", classNames?.input)}
111
+ checked={state === true}
112
+ value={value}
113
+ name={name ?? group?.name}
114
+ disabled={disabled}
115
+ required={required}
116
+ aria-invalid={invalid || undefined}
117
+ aria-describedby={describedBy}
118
+ onChange={handleChange}
119
+ />
120
+ <svg className="ck-icon" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
121
+ <path className="ck-check" d="M3.5 8.5 6.5 11.5 12.5 4.5" pathLength={1} />
122
+ <path className="ck-dash" d="M4 8h8" />
123
+ </svg>
124
+ </span>
125
+
126
+ {(label || description || error) && (
127
+ <span className="ck-text">
128
+ {label && (
129
+ <label htmlFor={id} className={cx("ck-label", classNames?.label)} data-required={required || undefined}>
130
+ {label}
131
+ </label>
132
+ )}
133
+ {description && (
134
+ <span id={`${id}-description`} className={cx("ck-description", classNames?.description)}>
135
+ {description}
136
+ </span>
137
+ )}
138
+ {error && (
139
+ <span id={`${id}-error`} className={cx("ck-error", classNames?.error)} role="alert">
140
+ {error}
141
+ </span>
142
+ )}
143
+ </span>
144
+ )}
145
+ </div>
146
+ );
147
+ }
@@ -1,6 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useId, useMemo, useState, type CSSProperties, type ReactNode } from "react";
3
+ import { useId, useMemo, type CSSProperties, type ReactNode } from "react";
4
+ import { useControllableState } from "../../shared/react/useControllableState";
5
+ import { describeField } from "../../shared/core/field";
4
6
  import { groupState, toggleAll, toggleValue } from "../core/group";
5
7
  import type { CheckboxLocaleText, CheckboxOption, CheckboxSize } from "../core/types";
6
8
  import { Checkbox } from "./Checkbox";
@@ -63,12 +65,11 @@ export function CheckboxGroup(props: CheckboxGroupProps) {
63
65
  const reactId = useId();
64
66
  const id = idProp ?? reactId;
65
67
  const text = useMemo(() => ({ ...defaultCheckboxText, ...localeText }), [localeText]);
66
- const [internal, setInternal] = useState<string[]>(defaultValue ?? []);
67
- const values = value ?? internal;
68
+ const [values, setValues] = useControllableState<string[]>(value, defaultValue ?? []);
68
69
 
69
70
  const context = useMemo<CheckboxGroupContextValue>(() => {
70
71
  const commit = (next: string[]) => {
71
- if (value === undefined) setInternal(next);
72
+ setValues(next);
72
73
  onValueChange?.(next);
73
74
  };
74
75
  return {
@@ -79,11 +80,10 @@ export function CheckboxGroup(props: CheckboxGroupProps) {
79
80
  invalid: Boolean(error),
80
81
  size,
81
82
  };
82
- }, [values, value, onValueChange, name, disabled, error, size]);
83
+ }, [values, setValues, onValueChange, name, disabled, error, size]);
83
84
 
84
85
  const showSelectAll = Boolean(selectAll) && options !== undefined && options.length > 0;
85
- const describedBy =
86
- cx(description ? `${id}-description` : "", error ? `${id}-error` : "") || undefined;
86
+ const describedBy = describeField(id, { description, error });
87
87
 
88
88
  return (
89
89
  <fieldset
@@ -117,7 +117,7 @@ export function CheckboxGroup(props: CheckboxGroupProps) {
117
117
  checked={groupState(values, options)}
118
118
  onCheckedChange={() => {
119
119
  const next = toggleAll(values, options);
120
- if (value === undefined) setInternal(next);
120
+ setValues(next);
121
121
  onValueChange?.(next);
122
122
  }}
123
123
  />
@@ -2,5 +2,5 @@ export type CheckboxSlot = "root" | "control" | "input" | "label" | "description
2
2
 
3
3
  export type CheckboxGroupSlot = "root" | "legend" | "description" | "items" | "error";
4
4
 
5
- export const cx = (...names: (string | false | null | undefined)[]) =>
6
- names.filter(Boolean).join(" ");
5
+ // Shared with every other component, so class handling cannot drift.
6
+ export { cx } from "../../shared/core/cx";
@@ -2,8 +2,8 @@
2
2
  * Checkbox and CheckboxGroup styles.
3
3
  *
4
4
  * The box is the native <input> with `appearance: none`, so it keeps native
5
- * behavior. Tokens read the DataGrid's --dg-* variables when they are set on an
6
- * ancestor. Rules live in the `components` layer, so utility classes passed
5
+ * behavior. Tokens read the shared --gbs-* variables when they are set on an
6
+ * ancestor (set them on :root to theme every component at once). Rules live in the `components` layer, so utility classes passed
7
7
  * through `className` / `classNames` override them.
8
8
  */
9
9
  @layer theme, base, components, utilities;
@@ -11,15 +11,15 @@
11
11
  @layer components {
12
12
  .ck-root,
13
13
  .ck-group {
14
- --ck-fg: var(--dg-fg, light-dark(#18181b, #f4f4f5));
15
- --ck-muted: var(--dg-muted, light-dark(#71717a, #a1a1aa));
16
- --ck-border: light-dark(#a1a1aa, #52525b);
17
- --ck-input-bg: var(--dg-input-bg, light-dark(#ffffff, #121216));
18
- --ck-accent: var(--dg-accent, light-dark(#2563eb, #60a5fa));
19
- --ck-accent-fg: var(--dg-accent-fg, light-dark(#ffffff, #0b1220));
20
- --ck-focus: var(--dg-focus, light-dark(#2563eb, #60a5fa));
21
- --ck-danger: var(--dg-danger, light-dark(#dc2626, #f87171));
22
- --ck-font-size: var(--dg-font-size, 13px);
14
+ --ck-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
15
+ --ck-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
16
+ --ck-border: var(--gbs-border-control, light-dark(#a1a1aa, #52525b));
17
+ --ck-input-bg: var(--gbs-input-bg, var(--dg-input-bg, light-dark(#ffffff, #121216)));
18
+ --ck-accent: var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa)));
19
+ --ck-accent-fg: var(--gbs-accent-fg, var(--dg-accent-fg, light-dark(#ffffff, #0b1220)));
20
+ --ck-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
21
+ --ck-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
22
+ --ck-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
23
23
  --ck-size: 16px;
24
24
  --ck-radius: 4px;
25
25
 
@@ -17,9 +17,9 @@ import { MultiSelect, Select } from "@/components/combobox";
17
17
  import "@/components/combobox/styles.css";
18
18
  ```
19
19
 
20
- The stylesheet reuses the DataGrid's `--dg-*` variables when that stylesheet is
21
- loaded, so both components share a theme, and falls back to the same palette
22
- when used on its own.
20
+ The stylesheet reads the shared `--gbs-*` variables when you set them on
21
+ `:root`, so every component in the library shares one theme, and falls back to
22
+ the same default palette otherwise.
23
23
 
24
24
  ## Basic usage
25
25