@object-ui/components 16.1.0 → 17.2.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/CHANGELOG.md +1666 -0
- package/README.md +28 -0
- package/dist/custom/field.d.ts +20 -2
- package/dist/custom/filter-builder.d.ts +98 -4
- package/dist/custom/index.d.ts +1 -0
- package/dist/custom/resizable.d.ts +31 -0
- package/dist/custom/sort-builder.d.ts +14 -3
- package/dist/index.css +147 -32
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4534 -3568
- package/dist/index.umd.cjs +6 -6
- package/dist/lib/lazy-icon.d.ts +10 -0
- package/dist/notifications/NotificationAlerts.d.ts +42 -0
- package/dist/notifications/NotificationBanners.d.ts +36 -0
- package/dist/notifications/NotificationInline.d.ts +41 -0
- package/dist/notifications/NotificationSnackbar.d.ts +36 -0
- package/dist/notifications/index.d.ts +26 -0
- package/dist/notifications/severity.d.ts +47 -0
- package/dist/renderers/complex/data-table.d.ts +7 -0
- package/dist/renderers/feedback/toaster.d.ts +9 -1
- package/dist/renderers/form/option-value.d.ts +32 -0
- package/dist/renderers/layout/page.d.ts +2 -2
- package/dist/renderers/layout/react-page.d.ts +2 -2
- package/dist/renderers/placeholders.d.ts +21 -0
- package/dist/share/ShareDialog.d.ts +23 -27
- package/dist/ui/index.d.ts +0 -1
- package/dist/ui/select.d.ts +22 -1
- package/package.json +44 -41
package/README.md
CHANGED
|
@@ -150,6 +150,34 @@ function MyComponent() {
|
|
|
150
150
|
- `link` - Link component
|
|
151
151
|
- `breadcrumb` - Breadcrumb navigation
|
|
152
152
|
|
|
153
|
+
## Notification Surfaces
|
|
154
|
+
|
|
155
|
+
Direct-import React components (not schema blocks) that render the notifications
|
|
156
|
+
raised through `NotificationProvider` from `@object-ui/react`. One per spec
|
|
157
|
+
`displayType`, so a `banner` no longer presents as a toast:
|
|
158
|
+
|
|
159
|
+
| Component | `displayType` | Where to mount it |
|
|
160
|
+
| --- | --- | --- |
|
|
161
|
+
| `<NotificationSnackbar />` | `snackbar` | anywhere inside the provider — it anchors itself bottom-center |
|
|
162
|
+
| `<NotificationBanners />` | `banner` | top of the content area (it takes space in the flow) |
|
|
163
|
+
| `<NotificationAlerts />` | `alert` | anywhere inside the provider — blocking dialog, FIFO queue |
|
|
164
|
+
| `<NotificationInline scope="…" />` | `inline` | in the surface that raises them |
|
|
165
|
+
|
|
166
|
+
`toast` stays with the host's `onToast` delegate (sonner in the console). All of
|
|
167
|
+
them draw the notification's `severity` icon unless it declares an `icon`
|
|
168
|
+
override naming a real Lucide icon. See the
|
|
169
|
+
[notifications guide](https://objectui.org/docs/guide/notifications).
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
import { NotificationBanners, NotificationAlerts } from '@object-ui/components';
|
|
173
|
+
|
|
174
|
+
<main>
|
|
175
|
+
<NotificationBanners />
|
|
176
|
+
<Outlet />
|
|
177
|
+
<NotificationAlerts />
|
|
178
|
+
</main>
|
|
179
|
+
```
|
|
180
|
+
|
|
153
181
|
## Customization
|
|
154
182
|
|
|
155
183
|
### Override Styles
|
package/dist/custom/field.d.ts
CHANGED
|
@@ -8,6 +8,12 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
8
8
|
*/
|
|
9
9
|
import * as React from "react";
|
|
10
10
|
declare const fieldVariants: (props?: import('class-variance-authority/types').ClassProp | undefined) => string;
|
|
11
|
+
/**
|
|
12
|
+
* Props for {@link FieldContainer}.
|
|
13
|
+
*
|
|
14
|
+
* Note this one keeps its natural name: the spec does not export `FieldProps`.
|
|
15
|
+
* Only the component itself had to move — see the note on `FieldContainer`.
|
|
16
|
+
*/
|
|
11
17
|
export interface FieldProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof fieldVariants> {
|
|
12
18
|
label?: React.ReactNode;
|
|
13
19
|
description?: React.ReactNode;
|
|
@@ -15,5 +21,17 @@ export interface FieldProps extends React.HTMLAttributes<HTMLDivElement>, Varian
|
|
|
15
21
|
required?: boolean;
|
|
16
22
|
htmlFor?: string;
|
|
17
23
|
}
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
/**
|
|
25
|
+
* A labelled form-control wrapper: label, slotted control, description, error.
|
|
26
|
+
*
|
|
27
|
+
* Named `FieldContainer`, not `Field` (objectstack#4115): `@objectstack/spec/data`
|
|
28
|
+
* exports `Field` — an object FIELD's metadata (type, reference_to, options,
|
|
29
|
+
* permissions, …) and its builder namespace — which has nothing to do with this
|
|
30
|
+
* `<div>`. Two unrelated things under one name is the defect that issue exists
|
|
31
|
+
* to remove; `@object-ui/app-shell` already renamed the same kind of collision
|
|
32
|
+
* (`FieldInput` → `ScreenFieldInput`, objectui#3169) for the same reason.
|
|
33
|
+
* `__tests__/share-filter-sort-spec-parity.test.ts` pins that the spec does not
|
|
34
|
+
* own the new name.
|
|
35
|
+
*/
|
|
36
|
+
declare const FieldContainer: React.ForwardRefExoticComponent<FieldProps & React.RefAttributes<HTMLDivElement>>;
|
|
37
|
+
export { FieldContainer };
|
|
@@ -6,7 +6,23 @@
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
import * as React from "react";
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* One row of the FilterBuilder UI.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately NOT `FilterCondition` (objectstack#4115): the spec owns that
|
|
13
|
+
* name for the RECURSIVE ObjectQL predicate AST — `{ [field]: FieldOperators }`
|
|
14
|
+
* with `$and` / `$or` / `$not` branches — which is a query, not a row. This is
|
|
15
|
+
* one flat `{ field, operator, value }` line plus the React key the list needs,
|
|
16
|
+
* and `operator` here is the builder's own dropdown vocabulary
|
|
17
|
+
* (`FILTER_BUILDER_OPERATORS`), not the spec's `$`-tokens.
|
|
18
|
+
*
|
|
19
|
+
* `@object-ui/types` already renamed its identical concept to
|
|
20
|
+
* `FilterBuilderCondition` (objectui#3068); this is the same thing, so it takes
|
|
21
|
+
* the same name rather than inventing a second dialect. Note the same name is
|
|
22
|
+
* NOT the right answer everywhere: `@object-ui/app-shell`'s `FilterCondition`
|
|
23
|
+
* really was the spec's ObjectQL AST and was re-exported (objectui#3169).
|
|
24
|
+
*/
|
|
25
|
+
export interface FilterBuilderCondition {
|
|
10
26
|
id: string;
|
|
11
27
|
field: string;
|
|
12
28
|
operator: string;
|
|
@@ -15,7 +31,7 @@ export interface FilterCondition {
|
|
|
15
31
|
export interface FilterGroup {
|
|
16
32
|
id: string;
|
|
17
33
|
logic: "and" | "or";
|
|
18
|
-
conditions:
|
|
34
|
+
conditions: FilterBuilderCondition[];
|
|
19
35
|
}
|
|
20
36
|
export interface FilterBuilderProps {
|
|
21
37
|
fields?: Array<{
|
|
@@ -38,6 +54,84 @@ export interface FilterBuilderProps {
|
|
|
38
54
|
className?: string;
|
|
39
55
|
showClearAll?: boolean;
|
|
40
56
|
}
|
|
57
|
+
declare const defaultOperators: readonly [{
|
|
58
|
+
readonly value: "equals";
|
|
59
|
+
readonly label: "Equals";
|
|
60
|
+
}, {
|
|
61
|
+
readonly value: "notEquals";
|
|
62
|
+
readonly label: "Does not equal";
|
|
63
|
+
}, {
|
|
64
|
+
readonly value: "contains";
|
|
65
|
+
readonly label: "Contains";
|
|
66
|
+
}, {
|
|
67
|
+
readonly value: "notContains";
|
|
68
|
+
readonly label: "Does not contain";
|
|
69
|
+
}, {
|
|
70
|
+
readonly value: "isEmpty";
|
|
71
|
+
readonly label: "Is empty";
|
|
72
|
+
}, {
|
|
73
|
+
readonly value: "isNotEmpty";
|
|
74
|
+
readonly label: "Is not empty";
|
|
75
|
+
}, {
|
|
76
|
+
readonly value: "greaterThan";
|
|
77
|
+
readonly label: "Greater than";
|
|
78
|
+
}, {
|
|
79
|
+
readonly value: "lessThan";
|
|
80
|
+
readonly label: "Less than";
|
|
81
|
+
}, {
|
|
82
|
+
readonly value: "greaterOrEqual";
|
|
83
|
+
readonly label: "Greater than or equal";
|
|
84
|
+
}, {
|
|
85
|
+
readonly value: "lessOrEqual";
|
|
86
|
+
readonly label: "Less than or equal";
|
|
87
|
+
}, {
|
|
88
|
+
readonly value: "before";
|
|
89
|
+
readonly label: "Before";
|
|
90
|
+
}, {
|
|
91
|
+
readonly value: "after";
|
|
92
|
+
readonly label: "After";
|
|
93
|
+
}, {
|
|
94
|
+
readonly value: "between";
|
|
95
|
+
readonly label: "Between";
|
|
96
|
+
}, {
|
|
97
|
+
readonly value: "in";
|
|
98
|
+
readonly label: "In";
|
|
99
|
+
}, {
|
|
100
|
+
readonly value: "notIn";
|
|
101
|
+
readonly label: "Not in";
|
|
102
|
+
}, {
|
|
103
|
+
readonly value: "startsWith";
|
|
104
|
+
readonly label: "Starts with";
|
|
105
|
+
}, {
|
|
106
|
+
readonly value: "endsWith";
|
|
107
|
+
readonly label: "Ends with";
|
|
108
|
+
}, {
|
|
109
|
+
readonly value: "isNull";
|
|
110
|
+
readonly label: "Is null";
|
|
111
|
+
}, {
|
|
112
|
+
readonly value: "isNotNull";
|
|
113
|
+
readonly label: "Is not null";
|
|
114
|
+
}, {
|
|
115
|
+
readonly value: "exists";
|
|
116
|
+
readonly label: "Is set";
|
|
117
|
+
}, {
|
|
118
|
+
readonly value: "notExists";
|
|
119
|
+
readonly label: "Is not set";
|
|
120
|
+
}];
|
|
121
|
+
/**
|
|
122
|
+
* The FilterBuilder's own operator vocabulary — every id its dropdown can
|
|
123
|
+
* hold, derived from the operators it actually renders.
|
|
124
|
+
*
|
|
125
|
+
* Exported because several translation tables map an external vocabulary
|
|
126
|
+
* (the spec's `VIEW_FILTER_OPERATORS`, Mongo `$`-tokens) *onto* this one, and
|
|
127
|
+
* a value that is not in this list produces a condition row whose operator
|
|
128
|
+
* select has nothing to select. Those tables assert against this export
|
|
129
|
+
* rather than restating it, so adding an operator here is the only edit
|
|
130
|
+
* needed to widen them.
|
|
131
|
+
*/
|
|
132
|
+
export declare const FILTER_BUILDER_OPERATORS: ("endsWith" | "startsWith" | "in" | "after" | "equals" | "notEquals" | "contains" | "notContains" | "isEmpty" | "isNotEmpty" | "greaterThan" | "lessThan" | "greaterOrEqual" | "lessOrEqual" | "before" | "between" | "notIn" | "isNull" | "isNotNull" | "exists" | "notExists")[];
|
|
133
|
+
/** An operator id the FilterBuilder can render. */
|
|
134
|
+
export type FilterBuilderOperator = (typeof defaultOperators)[number]['value'];
|
|
41
135
|
declare function FilterBuilder({ fields, value, onChange, className, showClearAll, }: FilterBuilderProps): React.JSX.Element;
|
|
42
136
|
declare namespace FilterBuilder {
|
|
43
137
|
var displayName: string;
|
|
@@ -51,9 +145,9 @@ interface LookupValuePickerProps {
|
|
|
51
145
|
displayField?: string;
|
|
52
146
|
idField?: string;
|
|
53
147
|
};
|
|
54
|
-
value:
|
|
148
|
+
value: FilterBuilderCondition["value"];
|
|
55
149
|
multiple: boolean;
|
|
56
|
-
onChange: (value:
|
|
150
|
+
onChange: (value: FilterBuilderCondition["value"]) => void;
|
|
57
151
|
}
|
|
58
152
|
declare function LookupValuePicker({ field, value, multiple, onChange }: LookupValuePickerProps): React.JSX.Element;
|
|
59
153
|
export { FilterBuilder, LookupValuePicker };
|
package/dist/custom/index.d.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../ui/resizable';
|
|
2
|
+
/**
|
|
3
|
+
* ObjectUI
|
|
4
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The public `Resizable*` export site.
|
|
11
|
+
*
|
|
12
|
+
* This module used to wrap `ResizableHandle` to re-key its stacked-group styles
|
|
13
|
+
* from the dead `data-[panel-group-direction=vertical]` onto the
|
|
14
|
+
* `aria-orientation` attribute react-resizable-panels v4 actually emits (#3024).
|
|
15
|
+
* That fix now lives in `../ui/resizable` itself, so there is nothing left to
|
|
16
|
+
* wrap and all three components pass straight through.
|
|
17
|
+
*
|
|
18
|
+
* Editing `ui/` is normally off-limits (AGENTS.md #7), but that file is no
|
|
19
|
+
* longer upstream-synced: it is hand-migrated to v4 and listed under
|
|
20
|
+
* `customComponents` in `shadcn-components.json`, because upstream still ships
|
|
21
|
+
* the v3 file and re-syncing would break the build. See its header.
|
|
22
|
+
*
|
|
23
|
+
* This module stays as the single public export site rather than folding into
|
|
24
|
+
* `ui/index.ts`: `src/index.ts` star-exports `./ui` and `./custom` side by side,
|
|
25
|
+
* so exporting `Resizable*` from both would collide (TS2308).
|
|
26
|
+
*/
|
|
27
|
+
import type * as React from 'react';
|
|
28
|
+
/** Kept on the public surface (it is exported from the package root) even though
|
|
29
|
+
* the wrapper it was introduced for is gone. */
|
|
30
|
+
export type ResizableHandleProps = React.ComponentProps<typeof ResizableHandle>;
|
|
31
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SortItem as SpecSortItem } from '@objectstack/spec/shared';
|
|
1
2
|
/**
|
|
2
3
|
* ObjectUI
|
|
3
4
|
* Copyright (c) 2024-present ObjectStack Inc.
|
|
@@ -6,10 +7,20 @@
|
|
|
6
7
|
* LICENSE file in the root directory of this source tree.
|
|
7
8
|
*/
|
|
8
9
|
import * as React from "react";
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* One row of the SortBuilder UI: the spec's `SortItem` (`{ field, order }`)
|
|
12
|
+
* plus the React key this list needs.
|
|
13
|
+
*
|
|
14
|
+
* Derived rather than re-declared (objectstack#4115). The old hand copy agreed
|
|
15
|
+
* with the spec key-for-key, which is the state one spec release away from
|
|
16
|
+
* drifting — a new sort key (`nulls`, say) would have appeared in the spec and
|
|
17
|
+
* silently gone missing here. `id` is the ONE local addition and it is
|
|
18
|
+
* synthetic: `normalize()` mints it, and `SortBuilder`'s change comparison
|
|
19
|
+
* strips it before diffing precisely because it is not part of the contract.
|
|
20
|
+
*/
|
|
21
|
+
export interface SortItem extends SpecSortItem {
|
|
22
|
+
/** React key for the row. Synthetic — never part of the emitted sort. */
|
|
10
23
|
id: string;
|
|
11
|
-
field: string;
|
|
12
|
-
order: 'asc' | 'desc';
|
|
13
24
|
}
|
|
14
25
|
export interface SortBuilderProps {
|
|
15
26
|
fields?: Array<{
|
package/dist/index.css
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
--color-amber-200: oklch(92.4% 0.12 95.746);
|
|
20
20
|
--color-amber-300: oklch(87.9% 0.169 91.605);
|
|
21
21
|
--color-amber-400: oklch(82.8% 0.189 84.429);
|
|
22
|
+
--color-amber-600: oklch(66.6% 0.179 58.318);
|
|
22
23
|
--color-amber-700: oklch(55.5% 0.163 48.998);
|
|
23
24
|
--color-amber-800: oklch(47.3% 0.137 46.201);
|
|
24
25
|
--color-amber-900: oklch(41.4% 0.112 45.904);
|
|
@@ -28,11 +29,15 @@
|
|
|
28
29
|
--color-yellow-400: oklch(85.2% 0.199 91.936);
|
|
29
30
|
--color-green-500: oklch(72.3% 0.219 149.579);
|
|
30
31
|
--color-green-600: oklch(62.7% 0.194 149.214);
|
|
32
|
+
--color-emerald-50: oklch(97.9% 0.021 166.113);
|
|
31
33
|
--color-emerald-100: oklch(95% 0.052 163.051);
|
|
34
|
+
--color-emerald-200: oklch(90.5% 0.093 164.15);
|
|
35
|
+
--color-emerald-300: oklch(84.5% 0.143 164.978);
|
|
32
36
|
--color-emerald-400: oklch(76.5% 0.177 163.223);
|
|
33
37
|
--color-emerald-500: oklch(69.6% 0.17 162.48);
|
|
34
38
|
--color-emerald-600: oklch(59.6% 0.145 163.225);
|
|
35
39
|
--color-emerald-700: oklch(50.8% 0.118 165.612);
|
|
40
|
+
--color-emerald-900: oklch(37.8% 0.077 168.94);
|
|
36
41
|
--color-emerald-950: oklch(26.2% 0.051 172.552);
|
|
37
42
|
--color-cyan-200: oklch(91.7% 0.08 205.041);
|
|
38
43
|
--color-cyan-300: oklch(86.5% 0.127 207.078);
|
|
@@ -292,6 +297,9 @@
|
|
|
292
297
|
}
|
|
293
298
|
}
|
|
294
299
|
@layer utilities {
|
|
300
|
+
.\@container {
|
|
301
|
+
container-type: inline-size;
|
|
302
|
+
}
|
|
295
303
|
.pointer-events-auto {
|
|
296
304
|
pointer-events: auto;
|
|
297
305
|
}
|
|
@@ -429,6 +437,9 @@
|
|
|
429
437
|
.left-2\.5 {
|
|
430
438
|
left: calc(var(--spacing) * 2.5);
|
|
431
439
|
}
|
|
440
|
+
.left-4 {
|
|
441
|
+
left: calc(var(--spacing) * 4);
|
|
442
|
+
}
|
|
432
443
|
.left-\[50\%\] {
|
|
433
444
|
left: 50%;
|
|
434
445
|
}
|
|
@@ -453,6 +464,9 @@
|
|
|
453
464
|
.z-\[9999\] {
|
|
454
465
|
z-index: 9999;
|
|
455
466
|
}
|
|
467
|
+
.order-last {
|
|
468
|
+
order: 9999;
|
|
469
|
+
}
|
|
456
470
|
.col-span-2 {
|
|
457
471
|
grid-column: span 2 / span 2;
|
|
458
472
|
}
|
|
@@ -558,6 +572,9 @@
|
|
|
558
572
|
.mt-auto {
|
|
559
573
|
margin-top: auto;
|
|
560
574
|
}
|
|
575
|
+
.-mr-1 {
|
|
576
|
+
margin-right: calc(var(--spacing) * -1);
|
|
577
|
+
}
|
|
561
578
|
.mr-1 {
|
|
562
579
|
margin-right: var(--spacing);
|
|
563
580
|
}
|
|
@@ -655,6 +672,10 @@
|
|
|
655
672
|
width: var(--cell-size);
|
|
656
673
|
height: var(--cell-size);
|
|
657
674
|
}
|
|
675
|
+
.size-1\.5 {
|
|
676
|
+
width: calc(var(--spacing) * 1.5);
|
|
677
|
+
height: calc(var(--spacing) * 1.5);
|
|
678
|
+
}
|
|
658
679
|
.size-3\.5 {
|
|
659
680
|
width: calc(var(--spacing) * 3.5);
|
|
660
681
|
height: calc(var(--spacing) * 3.5);
|
|
@@ -872,6 +893,9 @@
|
|
|
872
893
|
.min-h-\[200px\] {
|
|
873
894
|
min-height: 200px;
|
|
874
895
|
}
|
|
896
|
+
.min-h-\[300px\] {
|
|
897
|
+
min-height: 300px;
|
|
898
|
+
}
|
|
875
899
|
.min-h-full {
|
|
876
900
|
min-height: 100%;
|
|
877
901
|
}
|
|
@@ -1004,6 +1028,12 @@
|
|
|
1004
1028
|
.w-\[calc\(100vw-1rem\)\] {
|
|
1005
1029
|
width: calc(100vw - 1rem);
|
|
1006
1030
|
}
|
|
1031
|
+
.w-\[min\(28rem\,calc\(100vw-2rem\)\)\] {
|
|
1032
|
+
width: min(28rem, calc(100vw - 2rem));
|
|
1033
|
+
}
|
|
1034
|
+
.w-\[var\(--radix-popover-trigger-width\)\] {
|
|
1035
|
+
width: var(--radix-popover-trigger-width);
|
|
1036
|
+
}
|
|
1007
1037
|
.w-auto {
|
|
1008
1038
|
width: auto;
|
|
1009
1039
|
}
|
|
@@ -1130,6 +1160,9 @@
|
|
|
1130
1160
|
.min-w-\[160px\] {
|
|
1131
1161
|
min-width: 160px;
|
|
1132
1162
|
}
|
|
1163
|
+
.min-w-\[200px\] {
|
|
1164
|
+
min-width: 200px;
|
|
1165
|
+
}
|
|
1133
1166
|
.min-w-\[var\(--radix-select-trigger-width\)\] {
|
|
1134
1167
|
min-width: var(--radix-select-trigger-width);
|
|
1135
1168
|
}
|
|
@@ -1142,9 +1175,15 @@
|
|
|
1142
1175
|
.flex-shrink-0 {
|
|
1143
1176
|
flex-shrink: 0;
|
|
1144
1177
|
}
|
|
1178
|
+
.shrink {
|
|
1179
|
+
flex-shrink: 1;
|
|
1180
|
+
}
|
|
1145
1181
|
.shrink-0 {
|
|
1146
1182
|
flex-shrink: 0;
|
|
1147
1183
|
}
|
|
1184
|
+
.flex-grow {
|
|
1185
|
+
flex-grow: 1;
|
|
1186
|
+
}
|
|
1148
1187
|
.grow {
|
|
1149
1188
|
flex-grow: 1;
|
|
1150
1189
|
}
|
|
@@ -1189,6 +1228,9 @@
|
|
|
1189
1228
|
.origin-\[--radix-\.\.\.\] {
|
|
1190
1229
|
transform-origin: --radix-...;
|
|
1191
1230
|
}
|
|
1231
|
+
.origin-\[--radix-…\] {
|
|
1232
|
+
transform-origin: --radix-…;
|
|
1233
|
+
}
|
|
1192
1234
|
.-translate-x-1\/2 {
|
|
1193
1235
|
--tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
|
|
1194
1236
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -1478,6 +1520,9 @@
|
|
|
1478
1520
|
margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
|
|
1479
1521
|
margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
|
|
1480
1522
|
}
|
|
1523
|
+
.gap-y-0\.5 {
|
|
1524
|
+
row-gap: calc(var(--spacing) * 0.5);
|
|
1525
|
+
}
|
|
1481
1526
|
.gap-y-1\.5 {
|
|
1482
1527
|
row-gap: calc(var(--spacing) * 1.5);
|
|
1483
1528
|
}
|
|
@@ -1630,6 +1675,12 @@
|
|
|
1630
1675
|
.border-amber-300 {
|
|
1631
1676
|
border-color: var(--color-amber-300);
|
|
1632
1677
|
}
|
|
1678
|
+
.border-amber-300\/70 {
|
|
1679
|
+
border-color: color-mix(in srgb, oklch(87.9% 0.169 91.605) 70%, transparent);
|
|
1680
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1681
|
+
border-color: color-mix(in oklab, var(--color-amber-300) 70%, transparent);
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1633
1684
|
.border-amber-400\/40 {
|
|
1634
1685
|
border-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 40%, transparent);
|
|
1635
1686
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -1678,6 +1729,12 @@
|
|
|
1678
1729
|
border-color: color-mix(in oklab, var(--color-destructive) 50%, transparent);
|
|
1679
1730
|
}
|
|
1680
1731
|
}
|
|
1732
|
+
.border-emerald-300\/70 {
|
|
1733
|
+
border-color: color-mix(in srgb, oklch(84.5% 0.143 164.978) 70%, transparent);
|
|
1734
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1735
|
+
border-color: color-mix(in oklab, var(--color-emerald-300) 70%, transparent);
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1681
1738
|
.border-gray-300 {
|
|
1682
1739
|
border-color: var(--color-gray-300);
|
|
1683
1740
|
}
|
|
@@ -1795,6 +1852,9 @@
|
|
|
1795
1852
|
background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent);
|
|
1796
1853
|
}
|
|
1797
1854
|
}
|
|
1855
|
+
.bg-emerald-50 {
|
|
1856
|
+
background-color: var(--color-emerald-50);
|
|
1857
|
+
}
|
|
1798
1858
|
.bg-emerald-100 {
|
|
1799
1859
|
background-color: var(--color-emerald-100);
|
|
1800
1860
|
}
|
|
@@ -2259,6 +2319,9 @@
|
|
|
2259
2319
|
.text-accent-foreground {
|
|
2260
2320
|
color: var(--color-accent-foreground);
|
|
2261
2321
|
}
|
|
2322
|
+
.text-amber-600 {
|
|
2323
|
+
color: var(--color-amber-600);
|
|
2324
|
+
}
|
|
2262
2325
|
.text-amber-700 {
|
|
2263
2326
|
color: var(--color-amber-700);
|
|
2264
2327
|
}
|
|
@@ -2292,6 +2355,9 @@
|
|
|
2292
2355
|
.text-emerald-700 {
|
|
2293
2356
|
color: var(--color-emerald-700);
|
|
2294
2357
|
}
|
|
2358
|
+
.text-emerald-900 {
|
|
2359
|
+
color: var(--color-emerald-900);
|
|
2360
|
+
}
|
|
2295
2361
|
.text-foreground {
|
|
2296
2362
|
color: var(--color-foreground);
|
|
2297
2363
|
}
|
|
@@ -2614,6 +2680,10 @@
|
|
|
2614
2680
|
--tw-outline-style: none;
|
|
2615
2681
|
outline-style: none;
|
|
2616
2682
|
}
|
|
2683
|
+
.select-all {
|
|
2684
|
+
-webkit-user-select: all;
|
|
2685
|
+
user-select: all;
|
|
2686
|
+
}
|
|
2617
2687
|
.select-none {
|
|
2618
2688
|
-webkit-user-select: none;
|
|
2619
2689
|
user-select: none;
|
|
@@ -2663,6 +2733,9 @@
|
|
|
2663
2733
|
.fade-in-80 {
|
|
2664
2734
|
--tw-enter-opacity: 0.8;
|
|
2665
2735
|
}
|
|
2736
|
+
.paused {
|
|
2737
|
+
animation-play-state: paused;
|
|
2738
|
+
}
|
|
2666
2739
|
.ring-inset {
|
|
2667
2740
|
--tw-ring-inset: inset;
|
|
2668
2741
|
}
|
|
@@ -3357,6 +3430,34 @@
|
|
|
3357
3430
|
.aria-selected\:text-muted-foreground[aria-selected="true"] {
|
|
3358
3431
|
color: var(--color-muted-foreground);
|
|
3359
3432
|
}
|
|
3433
|
+
.aria-\[orientation\=horizontal\]\:h-px[aria-orientation="horizontal"] {
|
|
3434
|
+
height: 1px;
|
|
3435
|
+
}
|
|
3436
|
+
.aria-\[orientation\=horizontal\]\:w-full[aria-orientation="horizontal"] {
|
|
3437
|
+
width: 100%;
|
|
3438
|
+
}
|
|
3439
|
+
.aria-\[orientation\=horizontal\]\:after\:left-0[aria-orientation="horizontal"]::after {
|
|
3440
|
+
content: var(--tw-content);
|
|
3441
|
+
left: 0px;
|
|
3442
|
+
}
|
|
3443
|
+
.aria-\[orientation\=horizontal\]\:after\:h-1[aria-orientation="horizontal"]::after {
|
|
3444
|
+
content: var(--tw-content);
|
|
3445
|
+
height: var(--spacing);
|
|
3446
|
+
}
|
|
3447
|
+
.aria-\[orientation\=horizontal\]\:after\:w-full[aria-orientation="horizontal"]::after {
|
|
3448
|
+
content: var(--tw-content);
|
|
3449
|
+
width: 100%;
|
|
3450
|
+
}
|
|
3451
|
+
.aria-\[orientation\=horizontal\]\:after\:translate-x-0[aria-orientation="horizontal"]::after {
|
|
3452
|
+
content: var(--tw-content);
|
|
3453
|
+
--tw-translate-x: 0px;
|
|
3454
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3455
|
+
}
|
|
3456
|
+
.aria-\[orientation\=horizontal\]\:after\:-translate-y-1\/2[aria-orientation="horizontal"]::after {
|
|
3457
|
+
content: var(--tw-content);
|
|
3458
|
+
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
3459
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3460
|
+
}
|
|
3360
3461
|
.data-\[active\=true\]\:bg-sidebar-accent[data-active="true"] {
|
|
3361
3462
|
background-color: var(--color-sidebar-accent);
|
|
3362
3463
|
}
|
|
@@ -3418,37 +3519,6 @@
|
|
|
3418
3519
|
.data-\[orientation\=vertical\]\:h-auto[data-orientation="vertical"] {
|
|
3419
3520
|
height: auto;
|
|
3420
3521
|
}
|
|
3421
|
-
.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction="vertical"] {
|
|
3422
|
-
height: 1px;
|
|
3423
|
-
}
|
|
3424
|
-
.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction="vertical"] {
|
|
3425
|
-
width: 100%;
|
|
3426
|
-
}
|
|
3427
|
-
.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction="vertical"] {
|
|
3428
|
-
flex-direction: column;
|
|
3429
|
-
}
|
|
3430
|
-
.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction="vertical"]::after {
|
|
3431
|
-
content: var(--tw-content);
|
|
3432
|
-
left: 0px;
|
|
3433
|
-
}
|
|
3434
|
-
.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction="vertical"]::after {
|
|
3435
|
-
content: var(--tw-content);
|
|
3436
|
-
height: var(--spacing);
|
|
3437
|
-
}
|
|
3438
|
-
.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction="vertical"]::after {
|
|
3439
|
-
content: var(--tw-content);
|
|
3440
|
-
width: 100%;
|
|
3441
|
-
}
|
|
3442
|
-
.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction="vertical"]::after {
|
|
3443
|
-
content: var(--tw-content);
|
|
3444
|
-
--tw-translate-x: 0px;
|
|
3445
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3446
|
-
}
|
|
3447
|
-
.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction="vertical"]::after {
|
|
3448
|
-
content: var(--tw-content);
|
|
3449
|
-
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
3450
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3451
|
-
}
|
|
3452
3522
|
.data-\[placeholder\]\:text-muted-foreground[data-placeholder] {
|
|
3453
3523
|
color: var(--color-muted-foreground);
|
|
3454
3524
|
}
|
|
@@ -3535,6 +3605,9 @@
|
|
|
3535
3605
|
.data-\[state\=active\]\:bg-transparent[data-state="active"] {
|
|
3536
3606
|
background-color: transparent;
|
|
3537
3607
|
}
|
|
3608
|
+
.data-\[state\=active\]\:text-destructive[data-state="active"] {
|
|
3609
|
+
color: var(--color-destructive);
|
|
3610
|
+
}
|
|
3538
3611
|
.data-\[state\=active\]\:text-foreground[data-state="active"] {
|
|
3539
3612
|
color: var(--color-foreground);
|
|
3540
3613
|
}
|
|
@@ -3614,6 +3687,9 @@
|
|
|
3614
3687
|
.data-\[state\=hidden\]\:fade-out[data-state="hidden"] {
|
|
3615
3688
|
--tw-exit-opacity: 0;
|
|
3616
3689
|
}
|
|
3690
|
+
.data-\[state\=inactive\]\:hidden[data-state="inactive"] {
|
|
3691
|
+
display: none;
|
|
3692
|
+
}
|
|
3617
3693
|
.data-\[state\=on\]\:bg-accent[data-state="on"] {
|
|
3618
3694
|
background-color: var(--color-accent);
|
|
3619
3695
|
}
|
|
@@ -3818,9 +3894,18 @@
|
|
|
3818
3894
|
.motion-safe\:duration-300 {
|
|
3819
3895
|
animation-duration: 300ms;
|
|
3820
3896
|
}
|
|
3897
|
+
.motion-safe\:fade-in {
|
|
3898
|
+
--tw-enter-opacity: 0;
|
|
3899
|
+
}
|
|
3821
3900
|
.motion-safe\:fade-in-0 {
|
|
3822
3901
|
--tw-enter-opacity: 0;
|
|
3823
3902
|
}
|
|
3903
|
+
.motion-safe\:slide-in-from-bottom-4 {
|
|
3904
|
+
--tw-enter-translate-y: 1rem;
|
|
3905
|
+
}
|
|
3906
|
+
.motion-safe\:slide-in-from-top-4 {
|
|
3907
|
+
--tw-enter-translate-y: -1rem;
|
|
3908
|
+
}
|
|
3824
3909
|
.motion-safe\:zoom-in-95 {
|
|
3825
3910
|
--tw-enter-scale: .95;
|
|
3826
3911
|
}
|
|
@@ -4456,12 +4541,24 @@
|
|
|
4456
4541
|
grid-column: span 4 / span 4;
|
|
4457
4542
|
}
|
|
4458
4543
|
}
|
|
4544
|
+
.dark\:border-amber-700\/60:where(.dark, .dark *) {
|
|
4545
|
+
border-color: color-mix(in srgb, oklch(55.5% 0.163 48.998) 60%, transparent);
|
|
4546
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4547
|
+
border-color: color-mix(in oklab, var(--color-amber-700) 60%, transparent);
|
|
4548
|
+
}
|
|
4549
|
+
}
|
|
4459
4550
|
.dark\:border-amber-900:where(.dark, .dark *) {
|
|
4460
4551
|
border-color: var(--color-amber-900);
|
|
4461
4552
|
}
|
|
4462
4553
|
.dark\:border-destructive:where(.dark, .dark *) {
|
|
4463
4554
|
border-color: var(--color-destructive);
|
|
4464
4555
|
}
|
|
4556
|
+
.dark\:border-emerald-700\/60:where(.dark, .dark *) {
|
|
4557
|
+
border-color: color-mix(in srgb, oklch(50.8% 0.118 165.612) 60%, transparent);
|
|
4558
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4559
|
+
border-color: color-mix(in oklab, var(--color-emerald-700) 60%, transparent);
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4465
4562
|
.dark\:bg-amber-950\/20:where(.dark, .dark *) {
|
|
4466
4563
|
background-color: color-mix(in srgb, oklch(27.9% 0.077 45.635) 20%, transparent);
|
|
4467
4564
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -4474,6 +4571,12 @@
|
|
|
4474
4571
|
background-color: color-mix(in oklab, var(--color-amber-950) 30%, transparent);
|
|
4475
4572
|
}
|
|
4476
4573
|
}
|
|
4574
|
+
.dark\:bg-amber-950\/40:where(.dark, .dark *) {
|
|
4575
|
+
background-color: color-mix(in srgb, oklch(27.9% 0.077 45.635) 40%, transparent);
|
|
4576
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4577
|
+
background-color: color-mix(in oklab, var(--color-amber-950) 40%, transparent);
|
|
4578
|
+
}
|
|
4579
|
+
}
|
|
4477
4580
|
.dark\:bg-background\/95:where(.dark, .dark *) {
|
|
4478
4581
|
background-color: color-mix(in srgb, hsl(var(--background)) 95%, transparent);
|
|
4479
4582
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -4486,6 +4589,12 @@
|
|
|
4486
4589
|
background-color: color-mix(in oklab, var(--color-destructive) 15%, transparent);
|
|
4487
4590
|
}
|
|
4488
4591
|
}
|
|
4592
|
+
.dark\:bg-emerald-950\/40:where(.dark, .dark *) {
|
|
4593
|
+
background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 40%, transparent);
|
|
4594
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4595
|
+
background-color: color-mix(in oklab, var(--color-emerald-950) 40%, transparent);
|
|
4596
|
+
}
|
|
4597
|
+
}
|
|
4489
4598
|
.dark\:bg-emerald-950\/50:where(.dark, .dark *) {
|
|
4490
4599
|
background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 50%, transparent);
|
|
4491
4600
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -4501,6 +4610,12 @@
|
|
|
4501
4610
|
.dark\:text-amber-400:where(.dark, .dark *) {
|
|
4502
4611
|
color: var(--color-amber-400);
|
|
4503
4612
|
}
|
|
4613
|
+
.dark\:text-destructive-foreground:where(.dark, .dark *) {
|
|
4614
|
+
color: var(--color-destructive-foreground);
|
|
4615
|
+
}
|
|
4616
|
+
.dark\:text-emerald-200:where(.dark, .dark *) {
|
|
4617
|
+
color: var(--color-emerald-200);
|
|
4618
|
+
}
|
|
4504
4619
|
.dark\:text-emerald-400:where(.dark, .dark *) {
|
|
4505
4620
|
color: var(--color-emerald-400);
|
|
4506
4621
|
}
|
|
@@ -4832,7 +4947,7 @@
|
|
|
4832
4947
|
border-bottom-style: var(--tw-border-style);
|
|
4833
4948
|
border-bottom-width: 0px;
|
|
4834
4949
|
}
|
|
4835
|
-
.\[\&\[
|
|
4950
|
+
.\[\&\[aria-orientation\=horizontal\]\>div\]\:rotate-90[aria-orientation=horizontal] > div {
|
|
4836
4951
|
rotate: 90deg;
|
|
4837
4952
|
}
|
|
4838
4953
|
.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open] > svg {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export { cn } from './lib/utils';
|
|
2
2
|
export { renderChildren } from './lib/utils';
|
|
3
3
|
export { cva } from 'class-variance-authority';
|
|
4
|
-
export { getLazyIcon, LazyIcon, toKebabIconName } from './lib/lazy-icon';
|
|
4
|
+
export { getLazyIcon, isLucideIconName, LazyIcon, toKebabIconName } from './lib/lazy-icon';
|
|
5
5
|
export { registerPlaceholders } from './renderers/placeholders';
|
|
6
6
|
export { GridFieldAuthoringProvider, useGridFieldAuthoring, type GridFieldAuthoring, } from './context/gridFieldAuthoring';
|
|
7
7
|
export * from './ui';
|
|
8
8
|
export * from './custom';
|
|
9
|
+
export * from './notifications';
|
|
10
|
+
export { TOASTER_POSITIONS } from './renderers/feedback/toaster';
|
|
9
11
|
export { useConfigDraft } from './hooks/use-config-draft';
|
|
10
12
|
export type { UseConfigDraftOptions, UseConfigDraftReturn } from './hooks/use-config-draft';
|
|
11
13
|
export { useIsMobile } from './hooks/use-mobile';
|