@crisp-ui-kit/crisp 0.54.7 → 0.54.8
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/authshell.css +5 -1
- package/dist/authshell.layered.css +5 -1
- package/dist/badge.css +5 -5
- package/dist/badge.layered.css +5 -5
- package/dist/board.css +13 -9
- package/dist/board.layered.css +13 -9
- package/dist/button.css +3 -1
- package/dist/button.layered.css +3 -1
- package/dist/cjs/components/badge/badge.recipe.js +28 -5
- package/dist/cjs/components/button/button.js +33 -2
- package/dist/cjs/components/button/button.recipe.js +31 -5
- package/dist/cjs/components/datatable/datatable.js +66 -7
- package/dist/cjs/components/datatable/datatable.recipe.js +57 -2
- package/dist/cjs/components/dialog/dialog.js +8 -5
- package/dist/cjs/components/dialog/dialog.recipe.js +15 -1
- package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +12 -3
- package/dist/cjs/components/tabletoolbar/tabletoolbar.js +231 -48
- package/dist/cjs/components/tabletoolbar/tabletoolbar.recipe.js +44 -0
- package/dist/cjs/components/tabs/tabs.recipe.js +11 -2
- package/dist/cjs/components/tooltip/tooltip.js +23 -9
- package/dist/cjs/components/tooltip/tooltip.recipe.js +10 -9
- package/dist/cjs/product/authshell/authshell.js +14 -1
- package/dist/cjs/product/authshell/authshell.recipe.js +13 -1
- package/dist/cjs/product/board/board.js +122 -27
- package/dist/cjs/product/board/board.recipe.js +14 -2
- package/dist/cjs/product/comments/comments.js +23 -10
- package/dist/cjs/product/comments/comments.recipe.js +17 -3
- package/dist/cjs/product/formdialog/formdialog.js +10 -4
- package/dist/cjs/product/navitem/navitem.js +7 -2
- package/dist/cjs/product/navitem/navitem.recipe.js +16 -0
- package/dist/cjs/product/objectsettings/index.js +1 -2
- package/dist/cjs/product/objectsettings/objectsettings.js +3 -13
- package/dist/cjs/product/richtext/richtext.js +76 -1
- package/dist/cjs/product/sidebar/sidebar.js +68 -15
- package/dist/cjs/product/sidebar/sidebar.recipe.js +6 -1
- package/dist/cjs/tokens/palette.js +32 -1
- package/dist/cjs/tokens/semantic.js +11 -0
- package/dist/comments.css +36 -10
- package/dist/comments.layered.css +36 -10
- package/dist/datatable.css +47 -9
- package/dist/datatable.layered.css +47 -9
- package/dist/dialog.css +13 -1
- package/dist/dialog.layered.css +13 -1
- package/dist/esm/components/badge/badge.recipe.js +28 -5
- package/dist/esm/components/button/button.js +34 -3
- package/dist/esm/components/button/button.recipe.js +31 -5
- package/dist/esm/components/datatable/datatable.js +67 -8
- package/dist/esm/components/datatable/datatable.recipe.js +57 -2
- package/dist/esm/components/dialog/dialog.js +8 -5
- package/dist/esm/components/dialog/dialog.recipe.js +15 -1
- package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +12 -3
- package/dist/esm/components/tabletoolbar/tabletoolbar.js +231 -48
- package/dist/esm/components/tabletoolbar/tabletoolbar.recipe.js +44 -0
- package/dist/esm/components/tabs/tabs.recipe.js +11 -2
- package/dist/esm/components/tooltip/tooltip.js +23 -9
- package/dist/esm/components/tooltip/tooltip.recipe.js +10 -9
- package/dist/esm/product/authshell/authshell.js +15 -2
- package/dist/esm/product/authshell/authshell.recipe.js +13 -1
- package/dist/esm/product/authshell/index.js +1 -1
- package/dist/esm/product/board/board.js +122 -27
- package/dist/esm/product/board/board.recipe.js +14 -2
- package/dist/esm/product/comments/comments.js +23 -10
- package/dist/esm/product/comments/comments.recipe.js +17 -3
- package/dist/esm/product/formdialog/formdialog.js +10 -4
- package/dist/esm/product/navitem/index.js +1 -1
- package/dist/esm/product/navitem/navitem.js +7 -2
- package/dist/esm/product/navitem/navitem.recipe.js +16 -0
- package/dist/esm/product/objectsettings/index.js +1 -1
- package/dist/esm/product/objectsettings/objectsettings.js +2 -12
- package/dist/esm/product/richtext/richtext.js +76 -1
- package/dist/esm/product/sidebar/sidebar.js +69 -16
- package/dist/esm/product/sidebar/sidebar.recipe.js +6 -1
- package/dist/esm/tokens/palette.js +32 -1
- package/dist/esm/tokens/semantic.js +11 -0
- package/dist/native/tokens.d.ts +1 -1
- package/dist/native/tokens.js +16 -2
- package/dist/navitem.css +7 -0
- package/dist/navitem.layered.css +7 -0
- package/dist/recordstable.css +1 -1
- package/dist/recordstable.layered.css +1 -1
- package/dist/sidebar.css +6 -1
- package/dist/sidebar.layered.css +6 -1
- package/dist/styles.css +163 -42
- package/dist/styles.layered.css +163 -42
- package/dist/tabletoolbar.css +16 -1
- package/dist/tabletoolbar.layered.css +16 -1
- package/dist/tabs.css +1 -1
- package/dist/tabs.layered.css +1 -1
- package/dist/tokens.css +9 -1
- package/dist/tokens.json +16 -2
- package/dist/tooltip.css +1 -1
- package/dist/tooltip.layered.css +1 -1
- package/dist/types/components/badge/badge.recipe.d.ts +5 -1
- package/dist/types/components/button/button.recipe.d.ts +18 -5
- package/dist/types/components/datatable/datatable.d.ts +9 -0
- package/dist/types/components/dialog/dialog.d.ts +25 -2
- package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +43 -3
- package/dist/types/components/tooltip/tooltip.d.ts +12 -4
- package/dist/types/components/tooltip/tooltip.recipe.d.ts +1 -1
- package/dist/types/product/authshell/authshell.d.ts +26 -2
- package/dist/types/product/authshell/index.d.ts +1 -1
- package/dist/types/product/board/board.d.ts +5 -4
- package/dist/types/product/comments/comments.d.ts +10 -2
- package/dist/types/product/formdialog/formdialog.d.ts +2 -1
- package/dist/types/product/navitem/index.d.ts +1 -1
- package/dist/types/product/navitem/navitem.d.ts +23 -0
- package/dist/types/product/objectsettings/index.d.ts +1 -1
- package/dist/types/product/objectsettings/objectsettings.d.ts +0 -10
- package/dist/types/product/sidebar/sidebar.d.ts +33 -5
- package/dist/types/tokens/contract.d.ts +4 -0
- package/dist/types/tokens/palette.d.ts +13 -1
- package/dist/types/tokens/semantic.d.ts +11 -0
- package/package.json +1 -1
package/dist/tokens.css
CHANGED
|
@@ -5,14 +5,18 @@
|
|
|
5
5
|
--crisp-fg-on-tone: #101112;
|
|
6
6
|
--crisp-bg-surface: #ffffff;
|
|
7
7
|
--crisp-bg-raised: #f4f4f5;
|
|
8
|
+
--crisp-bg-surface-muted: #f6f7f7;
|
|
8
9
|
--crisp-border-default: #e4e4e7;
|
|
9
10
|
--crisp-border-subtle: #eeeff1;
|
|
10
11
|
--crisp-border-dropzone: #e6e7ea;
|
|
12
|
+
--crisp-border-divider: #e6e7ea;
|
|
11
13
|
--crisp-ring-neutral: transparent;
|
|
12
14
|
--crisp-ring-field: rgba(0,0,0,0.06);
|
|
13
15
|
--crisp-ring-switch: #d9dade;
|
|
14
16
|
--crisp-bg-tile-active: #ffffff;
|
|
15
17
|
--crisp-shadow-tile-active: rgba(0,0,0,0.04);
|
|
18
|
+
--crisp-bg-scrim: rgba(0,0,0,0.25);
|
|
19
|
+
--crisp-fg-alert-description: rgba(0,0,0,0.63);
|
|
16
20
|
--crisp-bg-overlay-frost: #ffffff;
|
|
17
21
|
--crisp-shadow-overlay1: rgba(28,40,64,0.12);
|
|
18
22
|
--crisp-shadow-overlay2: rgba(28,40,64,0.16);
|
|
@@ -46,7 +50,7 @@
|
|
|
46
50
|
--crisp-fg-success-soft: #186b3d;
|
|
47
51
|
--crisp-fg-warning-soft: #80520d;
|
|
48
52
|
--crisp-fg-danger-soft: #a33539;
|
|
49
|
-
--crisp-fg-neutral-soft: #
|
|
53
|
+
--crisp-fg-neutral-soft: #505155;
|
|
50
54
|
--crisp-bg-purple-soft: #f5f0ff;
|
|
51
55
|
--crisp-fg-purple-soft: #6238b5;
|
|
52
56
|
--crisp-ring-purple-soft: #e8ddfe;
|
|
@@ -59,14 +63,18 @@
|
|
|
59
63
|
--crisp-fg-on-tone: #101112;
|
|
60
64
|
--crisp-bg-surface: #0a0a0a;
|
|
61
65
|
--crisp-bg-raised: #101112;
|
|
66
|
+
--crisp-bg-surface-muted: #101112;
|
|
62
67
|
--crisp-border-default: #212224;
|
|
63
68
|
--crisp-border-subtle: #1c1d1f;
|
|
64
69
|
--crisp-border-dropzone: #212224;
|
|
70
|
+
--crisp-border-divider: #212224;
|
|
65
71
|
--crisp-ring-neutral: #212224;
|
|
66
72
|
--crisp-ring-field: #212224;
|
|
67
73
|
--crisp-ring-switch: #212224;
|
|
68
74
|
--crisp-bg-tile-active: #101112;
|
|
69
75
|
--crisp-shadow-tile-active: rgba(0,0,0,0);
|
|
76
|
+
--crisp-bg-scrim: rgba(0,0,0,0.55);
|
|
77
|
+
--crisp-fg-alert-description: rgba(255,255,255,0.6);
|
|
70
78
|
--crisp-bg-overlay-frost: #1c1d1f;
|
|
71
79
|
--crisp-shadow-overlay1: rgba(0,0,0,0.48);
|
|
72
80
|
--crisp-shadow-overlay2: rgba(0,0,0,0.64);
|
package/dist/tokens.json
CHANGED
|
@@ -7,14 +7,18 @@
|
|
|
7
7
|
"fgOnTone": "#101112",
|
|
8
8
|
"bgSurface": "#ffffff",
|
|
9
9
|
"bgRaised": "#f4f4f5",
|
|
10
|
+
"bgSurfaceMuted": "#f6f7f7",
|
|
10
11
|
"borderDefault": "#e4e4e7",
|
|
11
12
|
"borderSubtle": "#eeeff1",
|
|
12
13
|
"borderDropzone": "#e6e7ea",
|
|
14
|
+
"borderDivider": "#e6e7ea",
|
|
13
15
|
"ringNeutral": "transparent",
|
|
14
16
|
"ringField": "rgba(0,0,0,0.06)",
|
|
15
17
|
"ringSwitch": "#d9dade",
|
|
16
18
|
"bgTileActive": "#ffffff",
|
|
17
19
|
"shadowTileActive": "rgba(0,0,0,0.04)",
|
|
20
|
+
"bgScrim": "rgba(0,0,0,0.25)",
|
|
21
|
+
"fgAlertDescription": "rgba(0,0,0,0.63)",
|
|
18
22
|
"bgOverlayFrost": "#ffffff",
|
|
19
23
|
"shadowOverlay1": "rgba(28,40,64,0.12)",
|
|
20
24
|
"shadowOverlay2": "rgba(28,40,64,0.16)",
|
|
@@ -48,7 +52,7 @@
|
|
|
48
52
|
"fgSuccessSoft": "#186b3d",
|
|
49
53
|
"fgWarningSoft": "#80520d",
|
|
50
54
|
"fgDangerSoft": "#a33539",
|
|
51
|
-
"fgNeutralSoft": "#
|
|
55
|
+
"fgNeutralSoft": "#505155",
|
|
52
56
|
"bgPurpleSoft": "#f5f0ff",
|
|
53
57
|
"fgPurpleSoft": "#6238b5",
|
|
54
58
|
"ringPurpleSoft": "#e8ddfe"
|
|
@@ -60,14 +64,18 @@
|
|
|
60
64
|
"fgOnTone": "#101112",
|
|
61
65
|
"bgSurface": "#0a0a0a",
|
|
62
66
|
"bgRaised": "#101112",
|
|
67
|
+
"bgSurfaceMuted": "#101112",
|
|
63
68
|
"borderDefault": "#212224",
|
|
64
69
|
"borderSubtle": "#1c1d1f",
|
|
65
70
|
"borderDropzone": "#212224",
|
|
71
|
+
"borderDivider": "#212224",
|
|
66
72
|
"ringNeutral": "#212224",
|
|
67
73
|
"ringField": "#212224",
|
|
68
74
|
"ringSwitch": "#212224",
|
|
69
75
|
"bgTileActive": "#101112",
|
|
70
76
|
"shadowTileActive": "rgba(0,0,0,0)",
|
|
77
|
+
"bgScrim": "rgba(0,0,0,0.55)",
|
|
78
|
+
"fgAlertDescription": "rgba(255,255,255,0.6)",
|
|
71
79
|
"bgOverlayFrost": "#1c1d1f",
|
|
72
80
|
"shadowOverlay1": "rgba(0,0,0,0.48)",
|
|
73
81
|
"shadowOverlay2": "rgba(0,0,0,0.64)",
|
|
@@ -117,11 +125,14 @@
|
|
|
117
125
|
"line200": "#e4e4e7",
|
|
118
126
|
"line100": "#eeeff1",
|
|
119
127
|
"line150": "#e6e7ea",
|
|
128
|
+
"gray25": "#f6f7f7",
|
|
120
129
|
"ringNeutral": "transparent",
|
|
121
130
|
"ringField": "rgba(0,0,0,0.06)",
|
|
122
131
|
"ringSwitch": "#d9dade",
|
|
123
132
|
"tileActive": "#ffffff",
|
|
124
133
|
"tileActiveShadow": "rgba(0,0,0,0.04)",
|
|
134
|
+
"bgScrim": "rgba(0,0,0,0.25)",
|
|
135
|
+
"fgAlertDescription": "rgba(0,0,0,0.63)",
|
|
125
136
|
"overlayFrost": "#ffffff",
|
|
126
137
|
"shadowOverlay1": "rgba(28,40,64,0.12)",
|
|
127
138
|
"shadowOverlay2": "rgba(28,40,64,0.16)",
|
|
@@ -155,7 +166,7 @@
|
|
|
155
166
|
"softSuccessText": "#186b3d",
|
|
156
167
|
"softWarningText": "#80520d",
|
|
157
168
|
"softDangerText": "#a33539",
|
|
158
|
-
"softNeutralText": "#
|
|
169
|
+
"softNeutralText": "#505155",
|
|
159
170
|
"purpleTint": "#f5f0ff",
|
|
160
171
|
"softPurpleText": "#6238b5",
|
|
161
172
|
"purpleRing": "#e8ddfe"
|
|
@@ -169,11 +180,14 @@
|
|
|
169
180
|
"line200": "#212224",
|
|
170
181
|
"line100": "#1c1d1f",
|
|
171
182
|
"line150": "#212224",
|
|
183
|
+
"gray25": "#101112",
|
|
172
184
|
"ringNeutral": "#212224",
|
|
173
185
|
"ringField": "#212224",
|
|
174
186
|
"ringSwitch": "#212224",
|
|
175
187
|
"tileActive": "#101112",
|
|
176
188
|
"tileActiveShadow": "rgba(0,0,0,0)",
|
|
189
|
+
"bgScrim": "rgba(0,0,0,0.55)",
|
|
190
|
+
"fgAlertDescription": "rgba(255,255,255,0.6)",
|
|
177
191
|
"overlayFrost": "#1c1d1f",
|
|
178
192
|
"shadowOverlay1": "rgba(0,0,0,0.48)",
|
|
179
193
|
"shadowOverlay2": "rgba(0,0,0,0.64)",
|
package/dist/tooltip.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.crisp-tooltip {
|
|
2
|
-
position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1-5) var(--crisp-space-2); border-radius: var(--crisp-radius-md); background: #101112; color: #eeeff1; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: 0
|
|
2
|
+
position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1-5) var(--crisp-space-2); border-radius: var(--crisp-radius-md); background: #101112; color: #eeeff1; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: rgb(33,34,36) 0 0 0 1px inset, rgba(0,0,0,0.04) 0 0 2px 0, rgba(0,0,0,0.12) 0 1px 3px 0; opacity: 1; transition: opacity 0.12s ease;
|
|
3
3
|
@starting-style { opacity: 0; }
|
|
4
4
|
& .crisp-tooltip-reference-row { display: inline-flex; align-items: center; gap: var(--crisp-space-1); }
|
|
5
5
|
}
|
package/dist/tooltip.layered.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer crisp-components {
|
|
2
2
|
.crisp-tooltip {
|
|
3
|
-
position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1-5) var(--crisp-space-2); border-radius: var(--crisp-radius-md); background: #101112; color: #eeeff1; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: 0
|
|
3
|
+
position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1-5) var(--crisp-space-2); border-radius: var(--crisp-radius-md); background: #101112; color: #eeeff1; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: rgb(33,34,36) 0 0 0 1px inset, rgba(0,0,0,0.04) 0 0 2px 0, rgba(0,0,0,0.12) 0 1px 3px 0; opacity: 1; transition: opacity 0.12s ease;
|
|
4
4
|
@starting-style { opacity: 0; }
|
|
5
5
|
& .crisp-tooltip-reference-row { display: inline-flex; align-items: center; gap: var(--crisp-space-1); }
|
|
6
6
|
}
|
|
@@ -7,7 +7,7 @@ declare const spec: {
|
|
|
7
7
|
readonly gap: `var(--${string})`;
|
|
8
8
|
readonly fontFamily: `var(--${string})`;
|
|
9
9
|
readonly fontWeight: `var(--${string})`;
|
|
10
|
-
readonly letterSpacing: "
|
|
10
|
+
readonly letterSpacing: "normal";
|
|
11
11
|
readonly whiteSpace: "nowrap";
|
|
12
12
|
};
|
|
13
13
|
readonly parts: [{
|
|
@@ -59,18 +59,22 @@ declare const spec: {
|
|
|
59
59
|
readonly height: "16px";
|
|
60
60
|
readonly paddingInline: `var(--${string})`;
|
|
61
61
|
readonly fontSize: `var(--${string})`;
|
|
62
|
+
readonly lineHeight: "16px";
|
|
62
63
|
readonly borderRadius: `var(--${string})`;
|
|
63
64
|
};
|
|
64
65
|
readonly medium: {
|
|
65
66
|
readonly height: "20px";
|
|
66
67
|
readonly paddingInline: `var(--${string})`;
|
|
67
68
|
readonly fontSize: `var(--${string})`;
|
|
69
|
+
readonly lineHeight: "16px";
|
|
70
|
+
readonly gap: "3px";
|
|
68
71
|
readonly borderRadius: `var(--${string})`;
|
|
69
72
|
};
|
|
70
73
|
readonly large: {
|
|
71
74
|
readonly height: `var(--${string})`;
|
|
72
75
|
readonly paddingInline: "9px";
|
|
73
76
|
readonly fontSize: `var(--${string})`;
|
|
77
|
+
readonly letterSpacing: "-0.1px";
|
|
74
78
|
readonly borderRadius: `var(--${string})`;
|
|
75
79
|
};
|
|
76
80
|
};
|
|
@@ -7,7 +7,7 @@ declare const spec: {
|
|
|
7
7
|
readonly gap: `var(--${string})`;
|
|
8
8
|
readonly fontFamily: `var(--${string})`;
|
|
9
9
|
readonly fontWeight: `var(--${string})`;
|
|
10
|
-
readonly letterSpacing: "-0.
|
|
10
|
+
readonly letterSpacing: "-0.07px";
|
|
11
11
|
readonly lineHeight: "20px";
|
|
12
12
|
readonly whiteSpace: "nowrap";
|
|
13
13
|
readonly border: "none";
|
|
@@ -95,10 +95,23 @@ declare const spec: {
|
|
|
95
95
|
readonly borderRadius: `var(--${string})`;
|
|
96
96
|
};
|
|
97
97
|
readonly md: {
|
|
98
|
-
readonly
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
readonly decls: {
|
|
99
|
+
readonly height: "28px";
|
|
100
|
+
readonly paddingInline: `var(--${string})`;
|
|
101
|
+
readonly fontSize: `var(--${string})`;
|
|
102
|
+
readonly borderRadius: `var(--${string})`;
|
|
103
|
+
};
|
|
104
|
+
readonly parts: [{
|
|
105
|
+
readonly selector: "&[data-icon-start]";
|
|
106
|
+
readonly decls: {
|
|
107
|
+
paddingInlineStart: `var(--${string})`;
|
|
108
|
+
};
|
|
109
|
+
}, {
|
|
110
|
+
readonly selector: "&[data-icon-end]";
|
|
111
|
+
readonly decls: {
|
|
112
|
+
paddingInlineEnd: `var(--${string})`;
|
|
113
|
+
};
|
|
114
|
+
}];
|
|
102
115
|
};
|
|
103
116
|
readonly lg: {
|
|
104
117
|
readonly height: "40px";
|
|
@@ -144,6 +144,15 @@ export type DataTableColumn<T> = {
|
|
|
144
144
|
managed?: boolean;
|
|
145
145
|
/** Hidden from the grid but still listed in the column manager. */
|
|
146
146
|
hidden?: boolean;
|
|
147
|
+
/** A "no-edit" marker icon before the resize handle, for a read-only/
|
|
148
|
+
* computed column (crisp/#596, checklist G-027 — seen live on Attio's
|
|
149
|
+
* "Connection strength"/"Last interaction"). Attio's own icon is
|
|
150
|
+
* proprietary and isn't reproduced (AUTHORING.md: never copy Attio's
|
|
151
|
+
* icon set); this uses a Lucide `Lock`, the same substitution every
|
|
152
|
+
* other crisp icon makes. Purely a visual marker — it does NOT disable
|
|
153
|
+
* editing on its own; a column that shouldn't be editable simply
|
|
154
|
+
* doesn't set `editable: true`, the same as any other column. */
|
|
155
|
+
readOnly?: boolean;
|
|
147
156
|
/** `type: "entity"` only (#501) — makes the cell's name its own click
|
|
148
157
|
* target, separate from the row's own `onRowClick`: the name renders as a
|
|
149
158
|
* `stopPropagation`-guarded button instead of a plain span, the same
|
|
@@ -22,6 +22,25 @@ export type DialogProps = Omit<React.ComponentPropsWithoutRef<"div">, "title" |
|
|
|
22
22
|
"aria-label"?: string;
|
|
23
23
|
/** aria-label on the close button (default "Close") — override for non-English UIs. */
|
|
24
24
|
closeLabel?: string;
|
|
25
|
+
/**
|
|
26
|
+
* `"panel"` (default): the frosted content dialog measured everywhere
|
|
27
|
+
* else in crisp — top-anchored 15vh from the viewport, a bordered
|
|
28
|
+
* header with a close button, `role="dialog"`.
|
|
29
|
+
*
|
|
30
|
+
* `"alert"` (crisp#677): a small confirm — Attio's own "Discard changes"
|
|
31
|
+
* measured live, both themes: vertically centered (not top-anchored), a
|
|
32
|
+
* plain `bgPopover` surface with `elevation.floating` (not the frosted
|
|
33
|
+
* bezel), `radius.xl` (12px, not the panel's 16px), NO close button, and
|
|
34
|
+
* `role="alertdialog"`. Pairs with `description` below — a plain
|
|
35
|
+
* `title` alone reads oddly stacked with no border under it, since the
|
|
36
|
+
* alert variant has no header chrome to separate title from body.
|
|
37
|
+
*/
|
|
38
|
+
variant?: "panel" | "alert";
|
|
39
|
+
/** `variant="alert"` only: the confirm's body sentence, stacked directly
|
|
40
|
+
* under `title` with no divider (Attio's own two-line shape — a bold
|
|
41
|
+
* title, then a muted sentence). Wired to Zag's `getDescriptionProps()`
|
|
42
|
+
* so `aria-describedby` follows it automatically. */
|
|
43
|
+
description?: React.ReactNode;
|
|
25
44
|
children?: React.ReactNode;
|
|
26
45
|
};
|
|
27
46
|
/**
|
|
@@ -29,7 +48,7 @@ export type DialogProps = Omit<React.ComponentPropsWithoutRef<"div">, "title" |
|
|
|
29
48
|
* Escape / outside-click dismissal) with the measured modal surface.
|
|
30
49
|
* Compose the body with `DialogBody` and actions with `DialogFooter`.
|
|
31
50
|
*/
|
|
32
|
-
export declare function Dialog({ open, onOpenChange, title, icon, width, "aria-label": ariaLabel, closeLabel: closeLabelProp, children, className, style, "aria-describedby": describedBy, ...rest }: DialogProps): React.JSX.Element | null;
|
|
51
|
+
export declare function Dialog({ open, onOpenChange, title, icon, width, variant, description, "aria-label": ariaLabel, closeLabel: closeLabelProp, children, className, style, "aria-describedby": describedBy, ...rest }: DialogProps): React.JSX.Element | null;
|
|
33
52
|
export declare namespace Dialog {
|
|
34
53
|
var displayName: string;
|
|
35
54
|
}
|
|
@@ -37,6 +56,10 @@ export declare function DialogBody({ children, className, }: {
|
|
|
37
56
|
children?: React.ReactNode;
|
|
38
57
|
className?: string;
|
|
39
58
|
}): React.JSX.Element;
|
|
40
|
-
export declare function DialogFooter({ children }: {
|
|
59
|
+
export declare function DialogFooter({ children, variant, }: {
|
|
41
60
|
children?: React.ReactNode;
|
|
61
|
+
/** Matches the owning `Dialog`'s own `variant` (crisp#677) — `"alert"`
|
|
62
|
+
* is a shorter bar (45px vs. the panel's 56px) with uniform 8px padding
|
|
63
|
+
* instead of the panel's 0/16px, measured off Attio's discard confirm. */
|
|
64
|
+
variant?: "panel" | "alert";
|
|
42
65
|
}): React.JSX.Element;
|
|
@@ -8,11 +8,21 @@ export type ToolbarSort = {
|
|
|
8
8
|
key: string;
|
|
9
9
|
dir: SortDir;
|
|
10
10
|
};
|
|
11
|
-
export type ToolbarFilterOp = "contains" | "doesnotcontain" | "startswith" | "endswith" | "is" | "isnot" | "isanyof" | "empty" | "notempty"
|
|
11
|
+
export type ToolbarFilterOp = "contains" | "doesnotcontain" | "startswith" | "endswith" | "is" | "isnot" | "isanyof" | "empty" | "notempty"
|
|
12
|
+
/** Number columns only (#593). */
|
|
13
|
+
| "lessthan" | "greaterthan"
|
|
14
|
+
/** Date columns only (#593). */
|
|
15
|
+
| "before" | "after";
|
|
12
16
|
export type ToolbarFilter = {
|
|
13
17
|
id: string;
|
|
14
18
|
key: string;
|
|
15
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Unset right after the field is (re)chosen — measured live, 2026-09-25:
|
|
21
|
+
* Attio's own chip shows "Select condition" until an operator is actually
|
|
22
|
+
* picked, rather than defaulting silently to one. Once set, it never goes
|
|
23
|
+
* back to unset short of changing the field, which resets it.
|
|
24
|
+
*/
|
|
25
|
+
op?: ToolbarFilterOp;
|
|
16
26
|
value: string;
|
|
17
27
|
/** Selected values for `"isanyof"` — ignored by every other op. */
|
|
18
28
|
values?: string[];
|
|
@@ -29,6 +39,17 @@ export type TableToolbarColumn = {
|
|
|
29
39
|
* for a free-text column; there is nothing to check off.
|
|
30
40
|
*/
|
|
31
41
|
values?: string[];
|
|
42
|
+
/**
|
|
43
|
+
* The column's value kind, gating which operators (and which value editor)
|
|
44
|
+
* its condition offers (#593). Defaults to a free-text column: `contains`/
|
|
45
|
+
* `does not contain`/`starts with`/`ends with`/`is`/`is not`/`empty`/
|
|
46
|
+
* `not empty`. `"number"` swaps in `is`/`is not`/`less than`/`greater
|
|
47
|
+
* than`/`empty`/`not empty` with a spinner number input; `"date"` swaps in
|
|
48
|
+
* `is`/`is not`/`before`/`after`/`empty`/`not empty` with a calendar +
|
|
49
|
+
* Today/Tomorrow/Next week quick-picks — both sets, and the number
|
|
50
|
+
* spinner, measured live against Attio's own column-typed filter menus.
|
|
51
|
+
*/
|
|
52
|
+
type?: "text" | "number" | "date";
|
|
32
53
|
};
|
|
33
54
|
export type TableToolbarProps = Omit<React.ComponentPropsWithoutRef<"div">, "children"> & {
|
|
34
55
|
/**
|
|
@@ -121,6 +142,25 @@ export type TableToolbarProps = Omit<React.ComponentPropsWithoutRef<"div">, "chi
|
|
|
121
142
|
*/
|
|
122
143
|
inline?: boolean;
|
|
123
144
|
className?: string;
|
|
145
|
+
/**
|
|
146
|
+
* Renders the Sort trigger (and its popover) when true (default). Set
|
|
147
|
+
* `false` for a table with no client-side sort at all — GRC's Audit log,
|
|
148
|
+
* server-filtered with nothing for a sort control to do, is the case that
|
|
149
|
+
* added this (your-moon/crisp#714, internal/grc !146): the trigger was
|
|
150
|
+
* inert chrome, not a real control. The divider that otherwise separates
|
|
151
|
+
* Sort from Filter is dropped along with it, so Filter becomes the row's
|
|
152
|
+
* first tool rather than leaving a leading divider with nothing before it.
|
|
153
|
+
*/
|
|
154
|
+
showSort?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Renders the View settings trigger (and its popover) when true (default).
|
|
157
|
+
* Set `false` when a consumer renders its own view-settings control —
|
|
158
|
+
* GRC's Tasks page (internal/grc !149) rendered its own alongside
|
|
159
|
+
* `TableToolbar`'s, ending up with two "View settings" buttons; this is
|
|
160
|
+
* the opt-out (your-moon/crisp#714). The divider that otherwise separates
|
|
161
|
+
* the filter chips from View settings is dropped along with it.
|
|
162
|
+
*/
|
|
163
|
+
showViewSettings?: boolean;
|
|
124
164
|
/**
|
|
125
165
|
* The full set of attributes View settings offers — every attribute on
|
|
126
166
|
* the object, shown or not. Defaults to `columns`. Omit both, along with
|
|
@@ -178,7 +218,7 @@ export declare function applySorts<T>(rows: T[], sorts: ToolbarSort[], get?: (ro
|
|
|
178
218
|
* this (Sort: Due date/Assignee/Creation date; Filter: Assignee/Record/
|
|
179
219
|
* Created by), which one shared list can't reproduce.
|
|
180
220
|
*/
|
|
181
|
-
export declare function TableToolbar({ columns, sortColumns: sortColumnsProp, filterColumns: filterColumnsProp, sorts: sortsProp, defaultSorts, onSortsChange, filters: filtersProp, defaultFilters, onFiltersChange, count, children, helpHref, className, sortLabel: sortLabelProp, filterLabel: filterLabelProp, reorderSortLabel: reorderSortLabelProp, noSortsLabel: noSortsLabelProp, addSortLabel: addSortLabelProp, learnSortingLabel: learnSortingLabelProp, selectConditionLabel: selectConditionLabelProp, sortFieldLabel: sortFieldLabelProp, sortDirectionLabel: sortDirectionLabelProp, removeSortLabel: removeSortLabelProp, filterFieldLabel: filterFieldLabelProp, filterFieldPlaceholder: filterFieldPlaceholderProp, filterValuePlaceholder: filterValuePlaceholderProp, filterOptionsLabel: filterOptionsLabelProp, deleteFilterLabel: deleteFilterLabelProp, ascendingLabel: ascendingLabelProp, descendingLabel: descendingLabelProp, sortTriggerLabel, filterTriggerLabel, inline, viewColumns: viewColumnsProp, shownKeys: shownKeysProp, defaultShownKeys, onShownKeysChange, viewSettingsLabel: viewSettingsLabelProp, reorderAttributeLabel: reorderAttributeLabelProp, hideAttributeLabel, addAttributeToViewLabel: addAttributeToViewLabelProp, searchAttributesPlaceholder: searchAttributesPlaceholderProp, ...rest }: TableToolbarProps): React.JSX.Element;
|
|
221
|
+
export declare function TableToolbar({ columns, sortColumns: sortColumnsProp, filterColumns: filterColumnsProp, sorts: sortsProp, defaultSorts, onSortsChange, filters: filtersProp, defaultFilters, onFiltersChange, count, children, helpHref, className, sortLabel: sortLabelProp, filterLabel: filterLabelProp, reorderSortLabel: reorderSortLabelProp, noSortsLabel: noSortsLabelProp, addSortLabel: addSortLabelProp, learnSortingLabel: learnSortingLabelProp, selectConditionLabel: selectConditionLabelProp, sortFieldLabel: sortFieldLabelProp, sortDirectionLabel: sortDirectionLabelProp, removeSortLabel: removeSortLabelProp, filterFieldLabel: filterFieldLabelProp, filterFieldPlaceholder: filterFieldPlaceholderProp, filterValuePlaceholder: filterValuePlaceholderProp, filterOptionsLabel: filterOptionsLabelProp, deleteFilterLabel: deleteFilterLabelProp, ascendingLabel: ascendingLabelProp, descendingLabel: descendingLabelProp, sortTriggerLabel, filterTriggerLabel, inline, showSort, showViewSettings, viewColumns: viewColumnsProp, shownKeys: shownKeysProp, defaultShownKeys, onShownKeysChange, viewSettingsLabel: viewSettingsLabelProp, reorderAttributeLabel: reorderAttributeLabelProp, hideAttributeLabel, addAttributeToViewLabel: addAttributeToViewLabelProp, searchAttributesPlaceholder: searchAttributesPlaceholderProp, ...rest }: TableToolbarProps): React.JSX.Element;
|
|
182
222
|
export type ToolbarToolProps = React.ComponentPropsWithoutRef<"button"> & {
|
|
183
223
|
/** Drawn the way Sort/Filter are once a condition is set (#399). */
|
|
184
224
|
active?: boolean;
|
|
@@ -11,8 +11,12 @@ export type TooltipProps = Omit<React.ComponentPropsWithoutRef<"span">, "content
|
|
|
11
11
|
* renders and hovers correctly but can't carry either.
|
|
12
12
|
*/
|
|
13
13
|
children: React.ReactNode;
|
|
14
|
-
/** Preferred side;
|
|
15
|
-
|
|
14
|
+
/** Preferred side; "top"/"bottom" flip to the other axis end when there's
|
|
15
|
+
* no room. "right" (crisp#633: the sidebar's hotkey hint, measured 8px off
|
|
16
|
+
* the trigger's end edge, vertically centred) never flips -- every known
|
|
17
|
+
* user pins its trigger to the viewport's left edge, so there is always
|
|
18
|
+
* room. */
|
|
19
|
+
side?: "top" | "bottom" | "right";
|
|
16
20
|
/** Delay in ms before showing (default 350). Hides immediately. */
|
|
17
21
|
delay?: number;
|
|
18
22
|
/** Controlled open state. Omit to let Tooltip manage it (see defaultOpen).
|
|
@@ -71,8 +75,12 @@ export declare const Tooltip: React.ForwardRefExoticComponent<Omit<Omit<React.De
|
|
|
71
75
|
* renders and hovers correctly but can't carry either.
|
|
72
76
|
*/
|
|
73
77
|
children: React.ReactNode;
|
|
74
|
-
/** Preferred side;
|
|
75
|
-
|
|
78
|
+
/** Preferred side; "top"/"bottom" flip to the other axis end when there's
|
|
79
|
+
* no room. "right" (crisp#633: the sidebar's hotkey hint, measured 8px off
|
|
80
|
+
* the trigger's end edge, vertically centred) never flips -- every known
|
|
81
|
+
* user pins its trigger to the viewport's left edge, so there is always
|
|
82
|
+
* room. */
|
|
83
|
+
side?: "top" | "bottom" | "right";
|
|
76
84
|
/** Delay in ms before showing (default 350). Hides immediately. */
|
|
77
85
|
delay?: number;
|
|
78
86
|
/** Controlled open state. Omit to let Tooltip manage it (see defaultOpen).
|
|
@@ -14,7 +14,7 @@ declare const spec: {
|
|
|
14
14
|
readonly fontSize: `var(--${string})`;
|
|
15
15
|
readonly fontWeight: `var(--${string})`;
|
|
16
16
|
readonly lineHeight: "1.45";
|
|
17
|
-
readonly boxShadow: "0
|
|
17
|
+
readonly boxShadow: "rgb(33,34,36) 0 0 0 1px inset, rgba(0,0,0,0.04) 0 0 2px 0, rgba(0,0,0,0.12) 0 1px 3px 0";
|
|
18
18
|
readonly opacity: 1;
|
|
19
19
|
readonly transition: "opacity 0.12s ease";
|
|
20
20
|
};
|
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
import type * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A multi-part brand mark — an icon badge beside a bold wordmark and an
|
|
4
|
+
* optional tagline (your-moon/crisp#728) — for a consumer whose logo isn't a
|
|
5
|
+
* single flat image the way Attio's own `/login` mark is. `AuthShell` lays
|
|
6
|
+
* this out itself (badge + two-line stack, `authshell.recipe.ts`), so a
|
|
7
|
+
* consumer never writes its own `style`/`className` to compose one. Not
|
|
8
|
+
* measured against Attio: its own login has no such compound mark, so
|
|
9
|
+
* there's nothing to measure past what `.crisp-authshell-logo` already
|
|
10
|
+
* establishes (the 24px floor, the 32px top margin).
|
|
11
|
+
*/
|
|
12
|
+
export type AuthShellBrand = {
|
|
13
|
+
/** A small glyph, rendered inside a 32px rounded brand-tone badge. */
|
|
14
|
+
icon: React.ReactNode;
|
|
15
|
+
/** The bold wordmark line. */
|
|
16
|
+
title: React.ReactNode;
|
|
17
|
+
/** An optional second line under the wordmark. */
|
|
18
|
+
subtitle?: React.ReactNode;
|
|
19
|
+
};
|
|
2
20
|
export type AuthShellProps = Omit<React.ComponentPropsWithoutRef<"div">, "title"> & {
|
|
3
21
|
/** 0–1. Omit for no progress bar. */
|
|
4
22
|
progress?: number;
|
|
5
|
-
/** Brand mark above the card (measured 96x24
|
|
6
|
-
|
|
23
|
+
/** Brand mark above the card (measured 96x24 on Attio's own logged-out
|
|
24
|
+
* `/login`). The slot's own `min-height` is 24px, not a fixed height
|
|
25
|
+
* (your-moon/crisp#722) — a taller lockup (an icon beside a two-line
|
|
26
|
+
* wordmark, say) grows the slot instead of getting clipped to it. Pass a
|
|
27
|
+
* plain node for a single flat mark (Attio's own shape), or an
|
|
28
|
+
* `AuthShellBrand` (`{ icon, title, subtitle? }`, your-moon/crisp#728)
|
|
29
|
+
* for a compound one `AuthShell` lays out itself. */
|
|
30
|
+
logo?: React.ReactNode | AuthShellBrand;
|
|
7
31
|
/** Card heading. */
|
|
8
32
|
title?: React.ReactNode;
|
|
9
33
|
/** The form / body content. */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AuthShell, type AuthShellProps } from "./authshell";
|
|
1
|
+
export { AuthShell, type AuthShellBrand, type AuthShellProps, } from "./authshell";
|
|
2
2
|
export { authshellRecipe } from "./authshell.recipe";
|
|
@@ -48,10 +48,11 @@ export type BoardProps<T extends BoardCard> = Omit<React.ComponentPropsWithoutRe
|
|
|
48
48
|
className?: string;
|
|
49
49
|
};
|
|
50
50
|
/**
|
|
51
|
-
* A kanban board with
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
51
|
+
* A kanban board with pointer-events drag-and-drop between columns (#674 —
|
|
52
|
+
* Attio's own mechanism, confirmed live: mousedown, several mousemoves,
|
|
53
|
+
* mouseup, no `[draggable]` anywhere). Dropping a card on a column reparents
|
|
54
|
+
* it via `onCardsChange` (the parent owns the cards, so the move is a
|
|
55
|
+
* controlled state update). Measured from a deals pipeline.
|
|
55
56
|
*/
|
|
56
57
|
export declare function Board<T extends BoardCard>({ columns, cards, onCardsChange, renderCard, onNewCard, newCardLabel: newCardLabelProp, getCardLabel, announceMove: announceMoveProp, calc, className, ...rest }: BoardProps<T>): React.JSX.Element;
|
|
57
58
|
export declare namespace Board {
|
|
@@ -99,11 +99,19 @@ export type CommentsPanelProps = Omit<React.ComponentPropsWithoutRef<"div">, "ch
|
|
|
99
99
|
* live DOM, which is why a caret placed anywhere in the field, including
|
|
100
100
|
* on top of a mention, can't corrupt what gets posted. */
|
|
101
101
|
onPost: (text: string, threadId: string | null) => void;
|
|
102
|
-
|
|
102
|
+
/** Omit for a consumer with no reaction capability of its own (crisp#705's
|
|
103
|
+
* follow-up) — the hover "React" trigger and the reactions row's own
|
|
104
|
+
* "add" button both disappear, the same way omitting `onResolve` already
|
|
105
|
+
* drops "Resolve". Existing `comment.reactions` still render, read-only. */
|
|
106
|
+
onReact?: (threadId: string, commentId: string, emoji: string) => void;
|
|
103
107
|
/** Resolving only ever applies to the thread as a whole (its root),
|
|
104
108
|
* matching the live behaviour -- no per-reply resolve was found. */
|
|
105
109
|
onResolve?: (threadId: string) => void;
|
|
106
|
-
|
|
110
|
+
/** Omit for a consumer whose comments can't be deleted at all (crisp#705's
|
|
111
|
+
* follow-up — an audit-trail/sign-off record, e.g.) — the "Delete"
|
|
112
|
+
* item drops out of the row's "…" menu (Copy link, the only other item
|
|
113
|
+
* there, is unaffected) and the confirm dialog never opens. */
|
|
114
|
+
onDelete?: (threadId: string, commentId: string) => void;
|
|
107
115
|
/** Defaults to copying `#comment-{commentId}` appended to the current
|
|
108
116
|
* URL -- override for a real permalink scheme. */
|
|
109
117
|
onCopyLink?: (threadId: string, commentId: string) => void;
|
|
@@ -34,6 +34,7 @@ export type FormDialogProps = Omit<React.ComponentPropsWithoutRef<"div">, "title
|
|
|
34
34
|
createMoreLabel?: string;
|
|
35
35
|
cancelLabel?: string;
|
|
36
36
|
discardTitle?: string;
|
|
37
|
+
discardDescription?: string;
|
|
37
38
|
discardConfirmLabel?: string;
|
|
38
39
|
discardCancelLabel?: string;
|
|
39
40
|
};
|
|
@@ -51,7 +52,7 @@ export type FormDialogProps = Omit<React.ComponentPropsWithoutRef<"div">, "title
|
|
|
51
52
|
* per-field wiring). A record needs several fields at once to be valid,
|
|
52
53
|
* which is why records are not created by inline editing.
|
|
53
54
|
*/
|
|
54
|
-
export declare function FormDialog({ title, submitLabel, onSubmit, onClose, busy, error, children, wide, size, createMode, createMoreLabel: createMoreLabelProp, cancelLabel: cancelLabelProp, discardTitle: discardTitleProp, discardConfirmLabel: discardConfirmLabelProp, discardCancelLabel: discardCancelLabelProp, className, ...rest }: FormDialogProps): React.JSX.Element;
|
|
55
|
+
export declare function FormDialog({ title, submitLabel, onSubmit, onClose, busy, error, children, wide, size, createMode, createMoreLabel: createMoreLabelProp, cancelLabel: cancelLabelProp, discardTitle: discardTitleProp, discardDescription: discardDescriptionProp, discardConfirmLabel: discardConfirmLabelProp, discardCancelLabel: discardCancelLabelProp, className, ...rest }: FormDialogProps): React.JSX.Element;
|
|
55
56
|
export declare namespace FormDialog {
|
|
56
57
|
var displayName: string;
|
|
57
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { NavItem, type NavItemProps } from "./navitem";
|
|
1
|
+
export { NavItem, type NavItemProps, type NavItemShortcut, } from "./navitem";
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A row's hotkey hint (crisp#633, P-108) -- Attio's own "G then <letter>"
|
|
4
|
+
* tooltip, measured live on `product/companies`, `/people`, `/home`, etc.
|
|
5
|
+
* `description` is the tooltip's full sentence ("Go to all companies page"),
|
|
6
|
+
* NOT derived from the row's `children` (the short label) -- Attio's copy
|
|
7
|
+
* differs per row ("Go to all companies page" vs "Go to home page") in a way
|
|
8
|
+
* a template can't guess. `keys` is the whole chord in press order
|
|
9
|
+
* (`["g","c"]`), lower-case, same as Attio's own DOM text -- the visible
|
|
10
|
+
* upper-case letters are a CSS `text-transform`, not the source text a
|
|
11
|
+
* screen reader gets. Only some rows have one: Deals/Users/Workspaces/Calls/
|
|
12
|
+
* Sequences/Workflows showed no tooltip at all after a 1.2s hover, measured
|
|
13
|
+
* across repeated attempts -- left unset rather than guessed.
|
|
14
|
+
*/
|
|
15
|
+
export type NavItemShortcut = {
|
|
16
|
+
description: string;
|
|
17
|
+
keys: string[];
|
|
18
|
+
};
|
|
2
19
|
export type NavItemProps = React.ComponentPropsWithoutRef<"a"> & {
|
|
3
20
|
asChild?: boolean;
|
|
4
21
|
active?: boolean;
|
|
@@ -6,6 +23,9 @@ export type NavItemProps = React.ComponentPropsWithoutRef<"a"> & {
|
|
|
6
23
|
icon?: React.ReactNode;
|
|
7
24
|
/** Right-aligned content (count badge / options). */
|
|
8
25
|
trailing?: React.ReactNode;
|
|
26
|
+
/** The hotkey hint tooltip (see `NavItemShortcut`). Omit for no tooltip
|
|
27
|
+
* (unchanged default). */
|
|
28
|
+
shortcut?: NavItemShortcut;
|
|
9
29
|
};
|
|
10
30
|
export declare const NavItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & {
|
|
11
31
|
asChild?: boolean;
|
|
@@ -14,4 +34,7 @@ export declare const NavItem: React.ForwardRefExoticComponent<Omit<React.Detaile
|
|
|
14
34
|
icon?: React.ReactNode;
|
|
15
35
|
/** Right-aligned content (count badge / options). */
|
|
16
36
|
trailing?: React.ReactNode;
|
|
37
|
+
/** The hotkey hint tooltip (see `NavItemShortcut`). Omit for no tooltip
|
|
38
|
+
* (unchanged default). */
|
|
39
|
+
shortcut?: NavItemShortcut;
|
|
17
40
|
} & React.RefAttributes<HTMLAnchorElement>>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ATTRIBUTE_AI_AUTOFILL_OPTIONS, ATTRIBUTE_TYPE_OPTIONS, type AttributeRow, AttributesTable, type AttributesTableProps, type AttributeTypeOption, AttributeTypeSelect, type AttributeTypeSelectProps, CreateAttributeDialog, type CreateAttributeDialogProps, ObjectAppearanceSection, type ObjectAppearanceSectionProps, ObjectDetailPage, type ObjectDetailPageProps, type ObjectDetailTab, ObjectGeneralSection, type ObjectGeneralSectionProps,
|
|
1
|
+
export { ATTRIBUTE_AI_AUTOFILL_OPTIONS, ATTRIBUTE_TYPE_OPTIONS, type AttributeRow, AttributesTable, type AttributesTableProps, type AttributeTypeOption, AttributeTypeSelect, type AttributeTypeSelectProps, CreateAttributeDialog, type CreateAttributeDialogProps, ObjectAppearanceSection, type ObjectAppearanceSectionProps, ObjectDetailPage, type ObjectDetailPageProps, type ObjectDetailTab, ObjectGeneralSection, type ObjectGeneralSectionProps, type ObjectSummary, ObjectsList, type ObjectsListProps, } from "./objectsettings";
|
|
2
2
|
export { objectsettingsRecipe } from "./objectsettings.recipe";
|
|
@@ -249,13 +249,3 @@ export declare function CreateAttributeDialog({ type, onTypeChange, typeOptions,
|
|
|
249
249
|
export declare namespace CreateAttributeDialog {
|
|
250
250
|
var displayName: string;
|
|
251
251
|
}
|
|
252
|
-
/**
|
|
253
|
-
* This folder holds several components (`ObjectsList`, `ObjectDetailPage`,
|
|
254
|
-
* `AttributesTable`, `CreateAttributeDialog`, …), not one named after the
|
|
255
|
-
* slug — unlike every other product dir, whose docs `<ManualInstallation>`
|
|
256
|
-
* resolves an import binding from the folder slug ("avatargroup" →
|
|
257
|
-
* `AvatarGroup`) by reading this file's exports. This alias exists only so
|
|
258
|
-
* that resolver finds a match for "objectsettings"; consumers should import
|
|
259
|
-
* the real names above, never this one.
|
|
260
|
-
*/
|
|
261
|
-
export declare const ObjectSettings: typeof ObjectsList;
|