@lattice-php/lattice 0.24.0 → 0.26.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/dist/action/components/action-form.js +37 -5
- package/dist/action/components/action-form.js.map +1 -1
- package/dist/action/components/action-group.js +1 -1
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action.js +3 -2
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/hooks/use-action.js +2 -1
- package/dist/action/hooks/use-action.js.map +1 -1
- package/dist/appearance/index.d.ts +1 -1
- package/dist/appearance/index.js +8 -8
- package/dist/appearance/index.js.map +1 -1
- package/dist/chat/components/prompt-input.js +1 -2
- package/dist/chat/components/prompt-input.js.map +1 -1
- package/dist/create-app.js +2 -2
- package/dist/create-app.js.map +1 -1
- package/dist/form/components/base/submit-button.d.ts +4 -3
- package/dist/form/components/base/submit-button.js +2 -1
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/fields/date-picker-field.js +3 -3
- package/dist/form/components/fields/date-picker-field.js.map +1 -1
- package/dist/form/components/fields/number-input.js +1 -1
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/rich-editor-field.js +1 -1
- package/dist/form/components/fields/rich-editor-field.js.map +1 -1
- package/dist/form/components/fields/row-action-menu.js +3 -3
- package/dist/form/components/fields/row-action-menu.js.map +1 -1
- package/dist/form/components/fields/row-actions.d.ts +1 -1
- package/dist/form/components/fields/row-actions.js +4 -4
- package/dist/form/components/fields/row-actions.js.map +1 -1
- package/dist/form/components/fields/toggle.js +1 -1
- package/dist/form/components/fields/toggle.js.map +1 -1
- package/dist/form/components/form.js +15 -5
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +1 -0
- package/dist/form/components/index.js +2 -1
- package/dist/form/components/wizard.d.ts +3 -0
- package/dist/form/components/wizard.js +148 -0
- package/dist/form/components/wizard.js.map +1 -0
- package/dist/form/embed.d.ts +1 -1
- package/dist/form/embed.js +2 -2
- package/dist/form/hooks/context.d.ts +7 -2
- package/dist/form/hooks/context.js +4 -1
- package/dist/form/hooks/context.js.map +1 -1
- package/dist/form/index.js +2 -1
- package/dist/form/lib/field-errors.d.ts +2 -0
- package/dist/form/lib/field-errors.js +5 -1
- package/dist/form/lib/field-errors.js.map +1 -1
- package/dist/form/lib/field-props.d.ts +6 -0
- package/dist/form/lib/field-props.js +7 -1
- package/dist/form/lib/field-props.js.map +1 -1
- package/dist/form/lib/prefill-targets.js +2 -3
- package/dist/form/lib/prefill-targets.js.map +1 -1
- package/dist/form/lib/wizard-steps.d.ts +5 -0
- package/dist/form/lib/wizard-steps.js +44 -0
- package/dist/form/lib/wizard-steps.js.map +1 -0
- package/dist/form/plugin.js +4 -1
- package/dist/form/plugin.js.map +1 -1
- package/dist/i18n/translatable.d.ts +1 -0
- package/dist/i18n/translatable.js +4 -1
- package/dist/i18n/translatable.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/lattice.css +183 -115
- package/dist/layout/components/callouts.js +3 -2
- package/dist/layout/components/callouts.js.map +1 -1
- package/dist/notifications/components/notification-item.js +10 -5
- package/dist/notifications/components/notification-item.js.map +1 -1
- package/dist/notifications/components/notifications.js +2 -4
- package/dist/notifications/components/notifications.js.map +1 -1
- package/dist/table/components/bulk-bar.js +2 -0
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.js +3 -6
- package/dist/table/components/cells/badge-cell.js.map +1 -1
- package/dist/table/components/cells/text-cell.js +6 -9
- package/dist/table/components/cells/text-cell.js.map +1 -1
- package/dist/table/components/column-filter-control.js +2 -2
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/filter-bar.js +1 -1
- package/dist/table/components/filter-bar.js.map +1 -1
- package/dist/table/components/filter-controls.js +4 -1
- package/dist/table/components/filter-controls.js.map +1 -1
- package/dist/table/components/pagination.js +6 -6
- package/dist/table/components/pagination.js.map +1 -1
- package/dist/table/lib/bulk.d.ts +3 -2
- package/dist/table/lib/bulk.js +2 -1
- package/dist/table/lib/bulk.js.map +1 -1
- package/dist/toast/callout.js +6 -3
- package/dist/toast/callout.js.map +1 -1
- package/dist/toast/toast.js +3 -1
- package/dist/toast/toast.js.map +1 -1
- package/dist/toast/toaster.js +2 -2
- package/dist/toast/toaster.js.map +1 -1
- package/dist/toast/variant-styles.js +15 -1
- package/dist/toast/variant-styles.js.map +1 -1
- package/dist/types/generated.d.ts +31 -16
- package/dist/ui/action-menu-context.d.ts +1 -1
- package/dist/ui/action-menu-context.js +1 -1
- package/dist/ui/action-menu-context.js.map +1 -1
- package/dist/ui/affix-group.js +1 -1
- package/dist/ui/affix-group.js.map +1 -1
- package/dist/ui/badge.d.ts +4 -7
- package/dist/ui/badge.js +11 -17
- package/dist/ui/badge.js.map +1 -1
- package/dist/ui/button.d.ts +6 -5
- package/dist/ui/button.js +154 -15
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/chart-view.js +9 -7
- package/dist/ui/chart-view.js.map +1 -1
- package/dist/ui/checkbox.js +1 -1
- package/dist/ui/checkbox.js.map +1 -1
- package/dist/ui/confirm-dialog.d.ts +4 -3
- package/dist/ui/confirm-dialog.js +3 -2
- package/dist/ui/confirm-dialog.js.map +1 -1
- package/dist/ui/control.d.ts +1 -1
- package/dist/ui/control.js +1 -1
- package/dist/ui/control.js.map +1 -1
- package/dist/ui/dialog.js +1 -1
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/dropdown-menu.d.ts +2 -2
- package/dist/ui/dropdown-menu.js +2 -2
- package/dist/ui/dropdown-menu.js.map +1 -1
- package/dist/ui/icon-button.d.ts +3 -3
- package/dist/ui/icon-button.js +6 -6
- package/dist/ui/icon-button.js.map +1 -1
- package/dist/ui/image-preview.js +1 -1
- package/dist/ui/image-preview.js.map +1 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.js +2 -2
- package/dist/ui/info-tooltip.js +1 -1
- package/dist/ui/info-tooltip.js.map +1 -1
- package/dist/ui/input-otp.js +1 -1
- package/dist/ui/input-otp.js.map +1 -1
- package/dist/ui/label.js +1 -1
- package/dist/ui/label.js.map +1 -1
- package/dist/ui/password-input.js +1 -1
- package/dist/ui/password-input.js.map +1 -1
- package/dist/ui/progress.js +2 -2
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/text.js +1 -1
- package/dist/ui/tooltip.js +1 -1
- package/dist/ui/tooltip.js.map +1 -1
- package/dist/vite-typescript-refresh.d.ts +9 -0
- package/dist/vite-typescript-refresh.js +47 -0
- package/dist/vite-typescript-refresh.js.map +1 -0
- package/dist/vite.d.ts +22 -1
- package/dist/vite.js +60 -7
- package/dist/vite.js.map +1 -1
- package/dist-standalone/chunks/{chart-view-DEwGTt9d.js → chart-view-8xEKTUJV.js} +1 -1
- package/dist-standalone/chunks/{date-picker-field-CCQ9nWx0.js → date-picker-field-cdhxtVSG.js} +1 -1
- package/dist-standalone/chunks/{rich-editor-field-B9Nv1qia.js → rich-editor-field-47ov3Bny.js} +1 -1
- package/dist-standalone/lattice.css +1 -1
- package/dist-standalone/lattice.js +15 -15
- package/dist-standalone/manifest.json +5 -5
- package/package.json +1 -1
package/dist/lattice.css
CHANGED
|
@@ -1,49 +1,83 @@
|
|
|
1
1
|
@source "./**/*.js";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
--lt-
|
|
12
|
-
--lt-
|
|
13
|
-
--lt-
|
|
14
|
-
--lt-
|
|
15
|
-
--lt-
|
|
16
|
-
--lt-
|
|
17
|
-
--lt-
|
|
18
|
-
--lt-
|
|
19
|
-
--lt-
|
|
20
|
-
--lt-
|
|
21
|
-
--lt-
|
|
22
|
-
--lt-
|
|
23
|
-
--lt-
|
|
24
|
-
--lt-
|
|
25
|
-
--lt-
|
|
26
|
-
--lt-
|
|
27
|
-
--lt-
|
|
28
|
-
--lt-
|
|
29
|
-
--lt-
|
|
30
|
-
--lt-
|
|
31
|
-
--lt-
|
|
32
|
-
--lt-
|
|
33
|
-
--lt-
|
|
34
|
-
--lt-
|
|
35
|
-
--lt-
|
|
36
|
-
--lt-
|
|
37
|
-
--lt-
|
|
38
|
-
--lt-
|
|
39
|
-
--lt-
|
|
40
|
-
--lt-
|
|
41
|
-
--lt-
|
|
3
|
+
/*
|
|
4
|
+
* Token defaults live in a cascade layer so any unlayered override wins
|
|
5
|
+
* regardless of stylesheet order — the @latticeTheme style tag and plain
|
|
6
|
+
* `:root { --lt-primary: … }` rules in an app's CSS both take precedence.
|
|
7
|
+
*/
|
|
8
|
+
@layer lattice {
|
|
9
|
+
:root,
|
|
10
|
+
[data-theme="light"] {
|
|
11
|
+
--lt-bg: oklch(0.976 0.003 210);
|
|
12
|
+
--lt-fg: oklch(0.18 0.01 220);
|
|
13
|
+
--lt-surface: oklch(1 0 0);
|
|
14
|
+
--lt-surface-fg: oklch(0.18 0.01 220);
|
|
15
|
+
--lt-popover: oklch(1 0 0);
|
|
16
|
+
--lt-popover-fg: oklch(0.18 0.01 220);
|
|
17
|
+
--lt-primary: oklch(0.51 0.12 195);
|
|
18
|
+
--lt-primary-fg: oklch(0.985 0 0);
|
|
19
|
+
--lt-secondary: oklch(0.955 0.005 210);
|
|
20
|
+
--lt-secondary-fg: oklch(0.25 0.012 220);
|
|
21
|
+
--lt-muted: oklch(0.955 0.004 210);
|
|
22
|
+
--lt-muted-fg: oklch(0.52 0.015 220);
|
|
23
|
+
--lt-accent: oklch(0.95 0.024 195);
|
|
24
|
+
--lt-accent-fg: oklch(0.36 0.085 195);
|
|
25
|
+
--lt-danger: oklch(0.55 0.2 26);
|
|
26
|
+
--lt-danger-fg: oklch(0.985 0 0);
|
|
27
|
+
--lt-border: oklch(0.915 0.005 210);
|
|
28
|
+
--lt-input: oklch(0.88 0.007 210);
|
|
29
|
+
--lt-ring: oklch(0.7 0.1 195);
|
|
30
|
+
--lt-overlay: oklch(0.15 0.02 225 / 0.5);
|
|
31
|
+
--lt-warning: oklch(0.83 0.15 85);
|
|
32
|
+
--lt-success: oklch(0.56 0.13 158);
|
|
33
|
+
--lt-success-fg: oklch(0.985 0 0);
|
|
34
|
+
--lt-info: oklch(0.55 0.13 245);
|
|
35
|
+
--lt-info-fg: oklch(0.985 0 0);
|
|
36
|
+
--lt-primary-hover: oklch(0.46 0.12 195);
|
|
37
|
+
--lt-primary-active: oklch(0.41 0.12 195);
|
|
38
|
+
--lt-danger-hover: oklch(0.5 0.2 26);
|
|
39
|
+
--lt-danger-active: oklch(0.45 0.2 26);
|
|
40
|
+
--lt-success-hover: oklch(0.51 0.13 158);
|
|
41
|
+
--lt-success-active: oklch(0.47 0.13 158);
|
|
42
|
+
--lt-info-hover: oklch(0.5 0.13 245);
|
|
43
|
+
--lt-info-active: oklch(0.46 0.13 245);
|
|
44
|
+
--lt-warning-hover: oklch(0.78 0.15 85);
|
|
45
|
+
--lt-warning-active: oklch(0.73 0.15 85);
|
|
46
|
+
--lt-secondary-hover: oklch(0.925 0.006 210);
|
|
47
|
+
--lt-secondary-active: oklch(0.9 0.007 210);
|
|
48
|
+
--lt-disabled: oklch(0.945 0.003 210);
|
|
49
|
+
--lt-disabled-fg: oklch(0.68 0.008 220);
|
|
42
50
|
|
|
43
51
|
/* Radius: base = cards, -sm = controls, -xs = chips */
|
|
44
|
-
--lt-radius:
|
|
52
|
+
--lt-radius: 0.5rem;
|
|
45
53
|
--lt-radius-sm: calc(var(--lt-radius) - 0.125rem);
|
|
46
54
|
--lt-radius-xs: calc(var(--lt-radius) - 0.25rem);
|
|
55
|
+
--lt-radius-lg: calc(var(--lt-radius) + 0.25rem);
|
|
56
|
+
--lt-radius-xl: calc(var(--lt-radius) + 0.5rem);
|
|
57
|
+
--lt-radius-full: 9999px;
|
|
58
|
+
|
|
59
|
+
--lt-ring-width: 3px;
|
|
60
|
+
--lt-ring-offset: 0px;
|
|
61
|
+
|
|
62
|
+
--lt-font-sans:
|
|
63
|
+
"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
|
|
64
|
+
"Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
|
|
65
|
+
"Segoe UI Symbol", "Noto Color Emoji";
|
|
66
|
+
--lt-font-mono: ui-monospace, "SFMono-Regular", "Menlo", monospace;
|
|
67
|
+
--lt-font-display: var(--lt-font-sans);
|
|
68
|
+
|
|
69
|
+
--lt-warning-fg: oklch(0.28 0.06 70);
|
|
70
|
+
|
|
71
|
+
--lt-shadow-inner: inset 0 1px 2px 0 oklch(0.2 0.02 225 / 0.06);
|
|
72
|
+
|
|
73
|
+
--lt-chart-1: oklch(0.55 0.12 195);
|
|
74
|
+
--lt-chart-2: oklch(0.58 0.14 250);
|
|
75
|
+
--lt-chart-3: oklch(0.68 0.14 60);
|
|
76
|
+
--lt-chart-4: oklch(0.58 0.19 305);
|
|
77
|
+
--lt-chart-5: oklch(0.6 0.16 20);
|
|
78
|
+
--lt-chart-6: oklch(0.62 0.13 150);
|
|
79
|
+
--lt-chart-7: oklch(0.6 0.13 100);
|
|
80
|
+
--lt-chart-8: oklch(0.55 0.05 280);
|
|
47
81
|
|
|
48
82
|
--lt-icon-xs: 0.75rem;
|
|
49
83
|
--lt-icon-sm: 0.875rem;
|
|
@@ -69,12 +103,12 @@
|
|
|
69
103
|
--lt-font-weight-semibold: 600;
|
|
70
104
|
--lt-font-weight-bold: 700;
|
|
71
105
|
|
|
72
|
-
--lt-shadow-xs: 0 1px 1px 0 oklch(0 0
|
|
73
|
-
--lt-shadow-sm: 0 1px 2px 0 oklch(0 0
|
|
106
|
+
--lt-shadow-xs: 0 1px 1px 0 oklch(0.2 0.02 225 / 0.05);
|
|
107
|
+
--lt-shadow-sm: 0 1px 2px 0 oklch(0.2 0.02 225 / 0.06);
|
|
74
108
|
--lt-shadow-md:
|
|
75
|
-
0 2px 4px -1px oklch(0 0
|
|
109
|
+
0 2px 4px -1px oklch(0.2 0.02 225 / 0.09), 0 1px 2px -1px oklch(0.2 0.02 225 / 0.06);
|
|
76
110
|
--lt-shadow-lg:
|
|
77
|
-
0 8px 16px -4px oklch(0 0
|
|
111
|
+
0 8px 16px -4px oklch(0.2 0.02 225 / 0.13), 0 2px 4px -2px oklch(0.2 0.02 225 / 0.08);
|
|
78
112
|
|
|
79
113
|
--lt-z-dropdown: 1000;
|
|
80
114
|
--lt-z-sticky: 1100;
|
|
@@ -95,6 +129,7 @@
|
|
|
95
129
|
--lt-gutter: calc(var(--spacing) * 6);
|
|
96
130
|
|
|
97
131
|
color-scheme: light;
|
|
132
|
+
}
|
|
98
133
|
}
|
|
99
134
|
|
|
100
135
|
/*
|
|
@@ -111,51 +146,66 @@
|
|
|
111
146
|
}
|
|
112
147
|
}
|
|
113
148
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
--lt-
|
|
118
|
-
--lt-
|
|
119
|
-
--lt-surface
|
|
120
|
-
--lt-
|
|
121
|
-
--lt-popover
|
|
122
|
-
--lt-
|
|
123
|
-
--lt-primary
|
|
124
|
-
--lt-
|
|
125
|
-
--lt-secondary
|
|
126
|
-
--lt-
|
|
127
|
-
--lt-muted
|
|
128
|
-
--lt-
|
|
129
|
-
--lt-accent
|
|
130
|
-
--lt-
|
|
131
|
-
--lt-danger
|
|
132
|
-
--lt-
|
|
133
|
-
--lt-
|
|
134
|
-
--lt-
|
|
135
|
-
--lt-
|
|
136
|
-
--lt-
|
|
137
|
-
--lt-
|
|
138
|
-
--lt-success
|
|
139
|
-
--lt-
|
|
140
|
-
--lt-info
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
--lt-primary-
|
|
144
|
-
--lt-
|
|
145
|
-
--lt-danger-
|
|
146
|
-
--lt-
|
|
147
|
-
--lt-success-
|
|
148
|
-
--lt-
|
|
149
|
-
--lt-info-
|
|
150
|
-
--lt-
|
|
151
|
-
--lt-
|
|
152
|
-
--lt-
|
|
153
|
-
--lt-
|
|
149
|
+
@layer lattice {
|
|
150
|
+
[data-theme="dark"],
|
|
151
|
+
.dark {
|
|
152
|
+
--lt-bg: oklch(0.155 0.008 225);
|
|
153
|
+
--lt-fg: oklch(0.955 0.005 210);
|
|
154
|
+
--lt-surface: oklch(0.195 0.01 225);
|
|
155
|
+
--lt-surface-fg: oklch(0.955 0.005 210);
|
|
156
|
+
--lt-popover: oklch(0.225 0.012 225);
|
|
157
|
+
--lt-popover-fg: oklch(0.955 0.005 210);
|
|
158
|
+
--lt-primary: oklch(0.75 0.115 190);
|
|
159
|
+
--lt-primary-fg: oklch(0.17 0.03 195);
|
|
160
|
+
--lt-secondary: oklch(0.27 0.012 225);
|
|
161
|
+
--lt-secondary-fg: oklch(0.955 0.005 210);
|
|
162
|
+
--lt-muted: oklch(0.26 0.01 225);
|
|
163
|
+
--lt-muted-fg: oklch(0.72 0.012 220);
|
|
164
|
+
--lt-accent: oklch(0.29 0.03 195);
|
|
165
|
+
--lt-accent-fg: oklch(0.97 0.005 210);
|
|
166
|
+
--lt-danger: oklch(0.55 0.18 25);
|
|
167
|
+
--lt-danger-fg: oklch(0.985 0 0);
|
|
168
|
+
--lt-border: oklch(0.285 0.012 225);
|
|
169
|
+
--lt-input: oklch(0.33 0.014 225);
|
|
170
|
+
--lt-ring: oklch(0.6 0.1 192);
|
|
171
|
+
--lt-overlay: oklch(0.08 0.01 225 / 0.65);
|
|
172
|
+
--lt-warning: oklch(0.75 0.14 82);
|
|
173
|
+
--lt-success: oklch(0.72 0.14 160);
|
|
174
|
+
--lt-success-fg: oklch(0.2 0.04 160);
|
|
175
|
+
--lt-info: oklch(0.72 0.13 242);
|
|
176
|
+
--lt-info-fg: oklch(0.2 0.04 242);
|
|
177
|
+
|
|
178
|
+
--lt-primary-hover: oklch(0.79 0.115 190);
|
|
179
|
+
--lt-primary-active: oklch(0.83 0.11 190);
|
|
180
|
+
--lt-danger-hover: oklch(0.6 0.18 25);
|
|
181
|
+
--lt-danger-active: oklch(0.65 0.17 25);
|
|
182
|
+
--lt-success-hover: oklch(0.76 0.14 160);
|
|
183
|
+
--lt-success-active: oklch(0.8 0.13 160);
|
|
184
|
+
--lt-info-hover: oklch(0.76 0.13 242);
|
|
185
|
+
--lt-info-active: oklch(0.8 0.12 242);
|
|
186
|
+
--lt-warning-hover: oklch(0.79 0.14 82);
|
|
187
|
+
--lt-warning-active: oklch(0.83 0.13 82);
|
|
188
|
+
--lt-secondary-hover: oklch(0.31 0.013 225);
|
|
189
|
+
--lt-secondary-active: oklch(0.35 0.014 225);
|
|
190
|
+
--lt-disabled: oklch(0.28 0.01 225);
|
|
191
|
+
--lt-disabled-fg: oklch(0.56 0.012 225);
|
|
192
|
+
|
|
193
|
+
--lt-chart-1: oklch(0.72 0.12 190);
|
|
194
|
+
--lt-chart-2: oklch(0.7 0.12 250);
|
|
195
|
+
--lt-chart-3: oklch(0.76 0.14 60);
|
|
196
|
+
--lt-chart-4: oklch(0.7 0.16 305);
|
|
197
|
+
--lt-chart-5: oklch(0.7 0.16 20);
|
|
198
|
+
--lt-chart-6: oklch(0.74 0.12 150);
|
|
199
|
+
--lt-chart-7: oklch(0.72 0.12 100);
|
|
200
|
+
--lt-chart-8: oklch(0.68 0.05 280);
|
|
154
201
|
|
|
155
202
|
color-scheme: dark;
|
|
203
|
+
}
|
|
156
204
|
}
|
|
157
205
|
|
|
158
206
|
@theme inline {
|
|
207
|
+
--font-sans: var(--lt-font-sans);
|
|
208
|
+
--font-mono: var(--lt-font-mono);
|
|
159
209
|
--color-lt-bg: var(--lt-bg);
|
|
160
210
|
--color-lt-fg: var(--lt-fg);
|
|
161
211
|
--color-lt-surface: var(--lt-surface);
|
|
@@ -189,6 +239,8 @@
|
|
|
189
239
|
--color-lt-success-active: var(--lt-success-active);
|
|
190
240
|
--color-lt-info-hover: var(--lt-info-hover);
|
|
191
241
|
--color-lt-info-active: var(--lt-info-active);
|
|
242
|
+
--color-lt-warning-hover: var(--lt-warning-hover);
|
|
243
|
+
--color-lt-warning-active: var(--lt-warning-active);
|
|
192
244
|
--color-lt-secondary-hover: var(--lt-secondary-hover);
|
|
193
245
|
--color-lt-secondary-active: var(--lt-secondary-active);
|
|
194
246
|
--color-lt-disabled: var(--lt-disabled);
|
|
@@ -200,6 +252,24 @@
|
|
|
200
252
|
--shadow-lt-sm: var(--lt-shadow-sm);
|
|
201
253
|
--shadow-lt-md: var(--lt-shadow-md);
|
|
202
254
|
--shadow-lt-lg: var(--lt-shadow-lg);
|
|
255
|
+
--shadow-lt-inner: var(--lt-shadow-inner);
|
|
256
|
+
--radius-lt-lg: var(--lt-radius-lg);
|
|
257
|
+
--radius-lt-xl: var(--lt-radius-xl);
|
|
258
|
+
--radius-lt-full: var(--lt-radius-full);
|
|
259
|
+
--color-lt-warning-fg: var(--lt-warning-fg);
|
|
260
|
+
--color-lt-chart-1: var(--lt-chart-1);
|
|
261
|
+
--color-lt-chart-2: var(--lt-chart-2);
|
|
262
|
+
--color-lt-chart-3: var(--lt-chart-3);
|
|
263
|
+
--color-lt-chart-4: var(--lt-chart-4);
|
|
264
|
+
--color-lt-chart-5: var(--lt-chart-5);
|
|
265
|
+
--color-lt-chart-6: var(--lt-chart-6);
|
|
266
|
+
--color-lt-chart-7: var(--lt-chart-7);
|
|
267
|
+
--color-lt-chart-8: var(--lt-chart-8);
|
|
268
|
+
--font-lt-mono: var(--lt-font-mono);
|
|
269
|
+
--font-lt-display: var(--lt-font-display);
|
|
270
|
+
--spacing-lt-sidebar: var(--lt-sidebar-w);
|
|
271
|
+
--spacing-lt-sidebar-collapsed: var(--lt-sidebar-w-collapsed);
|
|
272
|
+
--spacing-lt-container: var(--lt-container-max);
|
|
203
273
|
--spacing-lt-icon-xs: var(--lt-icon-xs);
|
|
204
274
|
--spacing-lt-icon-sm: var(--lt-icon-sm);
|
|
205
275
|
--spacing-lt-icon-md: var(--lt-icon-md);
|
|
@@ -231,34 +301,30 @@
|
|
|
231
301
|
}
|
|
232
302
|
|
|
233
303
|
@theme {
|
|
234
|
-
--font-sans:
|
|
235
|
-
"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
|
|
236
|
-
"Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
|
|
237
|
-
"Segoe UI Symbol", "Noto Color Emoji";
|
|
238
304
|
|
|
239
305
|
--spacing: 0.25rem;
|
|
240
306
|
|
|
241
|
-
--text-xs: 0.
|
|
242
|
-
--text-xs--line-height: 1.
|
|
243
|
-
--text-sm: 0.
|
|
244
|
-
--text-sm--line-height: 1.
|
|
245
|
-
--text-base: 0.
|
|
246
|
-
--text-base--line-height: 1.
|
|
247
|
-
--text-lg:
|
|
248
|
-
--text-lg--line-height: 1.
|
|
249
|
-
--text-xl:
|
|
250
|
-
--text-xl--line-height: 1.
|
|
251
|
-
--text-2xl: 1.
|
|
252
|
-
--text-2xl--line-height: 1.
|
|
253
|
-
--text-3xl: 1.
|
|
254
|
-
--text-3xl--line-height: 1.
|
|
255
|
-
--text-4xl:
|
|
256
|
-
--text-4xl--line-height: 1.
|
|
257
|
-
--text-5xl:
|
|
258
|
-
--text-5xl--line-height: 1;
|
|
259
|
-
--text-6xl:
|
|
307
|
+
--text-xs: 0.75rem;
|
|
308
|
+
--text-xs--line-height: 1.5;
|
|
309
|
+
--text-sm: 0.8125rem;
|
|
310
|
+
--text-sm--line-height: 1.5385;
|
|
311
|
+
--text-base: 0.875rem;
|
|
312
|
+
--text-base--line-height: 1.5714;
|
|
313
|
+
--text-lg: 1rem;
|
|
314
|
+
--text-lg--line-height: 1.5;
|
|
315
|
+
--text-xl: 1.125rem;
|
|
316
|
+
--text-xl--line-height: 1.5556;
|
|
317
|
+
--text-2xl: 1.375rem;
|
|
318
|
+
--text-2xl--line-height: 1.2727;
|
|
319
|
+
--text-3xl: 1.625rem;
|
|
320
|
+
--text-3xl--line-height: 1.2308;
|
|
321
|
+
--text-4xl: 2rem;
|
|
322
|
+
--text-4xl--line-height: 1.25;
|
|
323
|
+
--text-5xl: 2.5rem;
|
|
324
|
+
--text-5xl--line-height: 1.1;
|
|
325
|
+
--text-6xl: 3rem;
|
|
260
326
|
--text-6xl--line-height: 1;
|
|
261
|
-
--text-7xl:
|
|
327
|
+
--text-7xl: 3.75rem;
|
|
262
328
|
--text-7xl--line-height: 1;
|
|
263
329
|
}
|
|
264
330
|
|
|
@@ -399,7 +465,8 @@
|
|
|
399
465
|
* theme and can be overridden, and so a colour can be picked by name at
|
|
400
466
|
* runtime without Tailwind needing to see every class.
|
|
401
467
|
*/
|
|
402
|
-
|
|
468
|
+
@layer lattice {
|
|
469
|
+
:root {
|
|
403
470
|
--lt-color-default: var(--lt-fg);
|
|
404
471
|
--lt-color-muted: var(--lt-muted-fg);
|
|
405
472
|
--lt-color-primary: var(--lt-primary);
|
|
@@ -414,19 +481,20 @@
|
|
|
414
481
|
--lt-color-green: oklch(0.52 0.13 152);
|
|
415
482
|
--lt-color-blue: oklch(0.54 0.17 252);
|
|
416
483
|
--lt-color-purple: oklch(0.53 0.19 305);
|
|
417
|
-
}
|
|
484
|
+
}
|
|
418
485
|
|
|
419
|
-
[data-theme="dark"],
|
|
420
|
-
.dark {
|
|
486
|
+
[data-theme="dark"],
|
|
487
|
+
.dark {
|
|
421
488
|
--lt-color-red: oklch(0.83 0.11 27);
|
|
422
489
|
--lt-color-orange: oklch(0.84 0.1 65);
|
|
423
490
|
--lt-color-yellow: oklch(0.87 0.11 100);
|
|
424
491
|
--lt-color-green: oklch(0.85 0.13 155);
|
|
425
492
|
--lt-color-blue: oklch(0.84 0.11 250);
|
|
426
493
|
--lt-color-purple: oklch(0.85 0.11 305);
|
|
494
|
+
}
|
|
427
495
|
}
|
|
428
496
|
|
|
429
|
-
.lt-
|
|
497
|
+
.lt-badge {
|
|
430
498
|
display: inline-flex;
|
|
431
499
|
align-items: center;
|
|
432
500
|
gap: 0.25rem;
|
|
@@ -631,7 +699,7 @@
|
|
|
631
699
|
background: var(--lt-muted);
|
|
632
700
|
border-radius: var(--lt-radius-sm);
|
|
633
701
|
padding: calc(var(--spacing) * 0.5) var(--spacing);
|
|
634
|
-
font-family:
|
|
702
|
+
font-family: var(--lt-font-mono);
|
|
635
703
|
font-size: 0.875em;
|
|
636
704
|
}
|
|
637
705
|
|
|
@@ -641,7 +709,7 @@
|
|
|
641
709
|
padding: calc(var(--spacing) * 3) calc(var(--spacing) * 4);
|
|
642
710
|
margin: calc(var(--spacing) * 3) 0;
|
|
643
711
|
overflow-x: auto;
|
|
644
|
-
font-family:
|
|
712
|
+
font-family: var(--lt-font-mono);
|
|
645
713
|
font-size: var(--text-lg);
|
|
646
714
|
}
|
|
647
715
|
|
|
@@ -2,6 +2,7 @@ import { useT } from "../../i18n/instance.js";
|
|
|
2
2
|
import { cn } from "../../lib/utils.js";
|
|
3
3
|
import { Icon } from "../../icons/sprite.js";
|
|
4
4
|
import { RenderNode } from "../../core/renderer.js";
|
|
5
|
+
import { resolveText } from "../../i18n/translatable.js";
|
|
5
6
|
import { onCallout } from "../../toast/callout.js";
|
|
6
7
|
import { variantStyles } from "../../toast/variant-styles.js";
|
|
7
8
|
import { useEffect, useState } from "react";
|
|
@@ -34,11 +35,11 @@ var Callouts = () => {
|
|
|
34
35
|
children: [
|
|
35
36
|
callout.title ? /* @__PURE__ */ jsx("p", {
|
|
36
37
|
className: "text-sm font-medium text-lt-fg",
|
|
37
|
-
children: callout.title
|
|
38
|
+
children: resolveText(callout.title, t)
|
|
38
39
|
}) : null,
|
|
39
40
|
/* @__PURE__ */ jsx("p", {
|
|
40
41
|
className: "text-sm text-lt-fg",
|
|
41
|
-
children: callout.message
|
|
42
|
+
children: resolveText(callout.message, t)
|
|
42
43
|
}),
|
|
43
44
|
callout.action ? /* @__PURE__ */ jsx("div", {
|
|
44
45
|
className: "flex flex-wrap gap-2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callouts.js","names":[],"sources":["../../../resources/js/layout/components/callouts.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useEffect, useState } from \"react\";\nimport { RenderNode } from \"@lattice-php/lattice/core/renderer\";\nimport type { Callout } from \"@lattice-php/lattice/types/generated\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { onCallout } from \"@lattice-php/lattice/toast\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { variantStyles } from \"@lattice-php/lattice/toast\";\n\ntype CalloutItem = Callout & { id: number };\n\nlet nextId = 0;\n\nconst Callouts: RendererComponent<\"callouts\"> = () => {\n const { t } = useT(\"lattice\");\n const [callouts, setCallouts] = useState<CalloutItem[]>([]);\n\n useEffect(\n () =>\n onCallout((callout) => {\n setCallouts((current) => [...current, { ...callout, id: nextId++ }]);\n }),\n [],\n );\n\n function dismiss(id: number): void {\n setCallouts((current) => current.filter((callout) => callout.id !== id));\n }\n\n if (callouts.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n {callouts.map((callout) => (\n <div\n key={callout.id}\n role=\"status\"\n data-test={`callout-${callout.variant}`}\n className={cn(\n \"flex items-start gap-3 rounded-lt border border-l-4 border-lt-border bg-lt-popover p-4 text-lt-popover-fg\",\n variantStyles[callout.variant].accent,\n )}\n >\n {variantStyles[callout.variant].icon}\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {callout.title ? (\n <p className=\"text-sm font-medium text-lt-fg\">{callout.title}</p>\n ) : null}\n <p className=\"text-sm text-lt-fg\">{callout.message}</p>\n {callout.action ? (\n <div className=\"flex flex-wrap gap-2\">\n <RenderNode node={callout.action} />\n </div>\n ) : null}\n </div>\n {callout.dismissible ? (\n <button\n type=\"button\"\n aria-label={t(\"common.dismiss\", \"Dismiss\")}\n data-test=\"callout-dismiss\"\n className=\"shrink-0 rounded-lt-sm p-1 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg\"\n onClick={() => dismiss(callout.id)}\n >\n <Icon name=\"x\" className=\"size-lt-icon-md\" />\n </button>\n ) : null}\n </div>\n ))}\n </div>\n );\n};\n\nexport default Callouts;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"callouts.js","names":[],"sources":["../../../resources/js/layout/components/callouts.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useEffect, useState } from \"react\";\nimport { RenderNode } from \"@lattice-php/lattice/core/renderer\";\nimport type { Callout } from \"@lattice-php/lattice/types/generated\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { onCallout } from \"@lattice-php/lattice/toast\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { resolveText } from \"@lattice-php/lattice/i18n/translatable\";\nimport { variantStyles } from \"@lattice-php/lattice/toast\";\n\ntype CalloutItem = Callout & { id: number };\n\nlet nextId = 0;\n\nconst Callouts: RendererComponent<\"callouts\"> = () => {\n const { t } = useT(\"lattice\");\n const [callouts, setCallouts] = useState<CalloutItem[]>([]);\n\n useEffect(\n () =>\n onCallout((callout) => {\n setCallouts((current) => [...current, { ...callout, id: nextId++ }]);\n }),\n [],\n );\n\n function dismiss(id: number): void {\n setCallouts((current) => current.filter((callout) => callout.id !== id));\n }\n\n if (callouts.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n {callouts.map((callout) => (\n <div\n key={callout.id}\n role=\"status\"\n data-test={`callout-${callout.variant}`}\n className={cn(\n \"flex items-start gap-3 rounded-lt border border-l-4 border-lt-border bg-lt-popover p-4 text-lt-popover-fg\",\n variantStyles[callout.variant].accent,\n )}\n >\n {variantStyles[callout.variant].icon}\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {callout.title ? (\n <p className=\"text-sm font-medium text-lt-fg\">{resolveText(callout.title, t)}</p>\n ) : null}\n <p className=\"text-sm text-lt-fg\">{resolveText(callout.message, t)}</p>\n {callout.action ? (\n <div className=\"flex flex-wrap gap-2\">\n <RenderNode node={callout.action} />\n </div>\n ) : null}\n </div>\n {callout.dismissible ? (\n <button\n type=\"button\"\n aria-label={t(\"common.dismiss\", \"Dismiss\")}\n data-test=\"callout-dismiss\"\n className=\"shrink-0 rounded-lt-sm p-1 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg\"\n onClick={() => dismiss(callout.id)}\n >\n <Icon name=\"x\" className=\"size-lt-icon-md\" />\n </button>\n ) : null}\n </div>\n ))}\n </div>\n );\n};\n\nexport default Callouts;\n"],"mappings":";;;;;;;;;;AAaA,IAAI,SAAS;AAEb,IAAM,iBAAgD;CACpD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,UAAU,eAAe,SAAwB,CAAC,CAAC;CAE1D,gBAEI,WAAW,YAAY;EACrB,aAAa,YAAY,CAAC,GAAG,SAAS;GAAE,GAAG;GAAS,IAAI;EAAS,CAAC,CAAC;CACrE,CAAC,GACH,CAAC,CACH;CAEA,SAAS,QAAQ,IAAkB;EACjC,aAAa,YAAY,QAAQ,QAAQ,YAAY,QAAQ,OAAO,EAAE,CAAC;CACzE;CAEA,IAAI,SAAS,WAAW,GACtB,OAAO;CAGT,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,SAAS,KAAK,YACb,qBAAC,OAAD;GAEE,MAAK;GACL,aAAW,WAAW,QAAQ;GAC9B,WAAW,GACT,6GACA,cAAc,QAAQ,SAAS,MACjC;aAPF;IASG,cAAc,QAAQ,SAAS;IAChC,qBAAC,OAAD;KAAK,WAAU;eAAf;MACG,QAAQ,QACP,oBAAC,KAAD;OAAG,WAAU;iBAAkC,YAAY,QAAQ,OAAO,CAAC;MAAK,CAAA,IAC9E;MACJ,oBAAC,KAAD;OAAG,WAAU;iBAAsB,YAAY,QAAQ,SAAS,CAAC;MAAK,CAAA;MACrE,QAAQ,SACP,oBAAC,OAAD;OAAK,WAAU;iBACb,oBAAC,YAAD,EAAY,MAAM,QAAQ,OAAS,CAAA;MAChC,CAAA,IACH;KACD;;IACJ,QAAQ,cACP,oBAAC,UAAD;KACE,MAAK;KACL,cAAY,EAAE,kBAAkB,SAAS;KACzC,aAAU;KACV,WAAU;KACV,eAAe,QAAQ,QAAQ,EAAE;eAEjC,oBAAC,MAAD;MAAM,MAAK;MAAI,WAAU;KAAmB,CAAA;IACtC,CAAA,IACN;GACD;KA/BE,QAAQ,EA+BV,CACN;CACE,CAAA;AAET"}
|
|
@@ -2,23 +2,28 @@ import { useT } from "../../i18n/instance.js";
|
|
|
2
2
|
import { cn } from "../../lib/utils.js";
|
|
3
3
|
import { IconRenderer } from "../../icons/icon-renderer.js";
|
|
4
4
|
import { RenderNode } from "../../core/renderer.js";
|
|
5
|
+
import { resolveText } from "../../i18n/translatable.js";
|
|
5
6
|
import { Link } from "@inertiajs/react";
|
|
6
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
//#region resources/js/notifications/components/notification-item.tsx
|
|
8
9
|
var variantIconClass = {
|
|
10
|
+
primary: "text-lt-primary",
|
|
11
|
+
secondary: "text-lt-muted-fg",
|
|
9
12
|
success: "text-lt-success",
|
|
10
13
|
info: "text-lt-info",
|
|
11
14
|
warning: "text-lt-warning",
|
|
12
|
-
|
|
15
|
+
danger: "text-lt-danger"
|
|
13
16
|
};
|
|
14
17
|
function NotificationItemRow({ notification, onMarkRead, onDismiss }) {
|
|
15
18
|
const { t } = useT("lattice");
|
|
16
|
-
const
|
|
19
|
+
const title = resolveText(notification.title, t);
|
|
20
|
+
const body = resolveText(notification.body, t);
|
|
21
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [title ? /* @__PURE__ */ jsx("p", {
|
|
17
22
|
className: "truncate text-sm font-medium text-lt-fg",
|
|
18
|
-
children:
|
|
19
|
-
}) : null,
|
|
23
|
+
children: title
|
|
24
|
+
}) : null, body ? /* @__PURE__ */ jsx("p", {
|
|
20
25
|
className: "text-sm text-lt-muted-fg",
|
|
21
|
-
children:
|
|
26
|
+
children: body
|
|
22
27
|
}) : null] });
|
|
23
28
|
return /* @__PURE__ */ jsxs("li", {
|
|
24
29
|
className: cn("flex gap-3 px-3 py-3", !notification.isRead && "bg-lt-muted/40"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-item.js","names":[],"sources":["../../../resources/js/notifications/components/notification-item.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { RenderNode } from \"@lattice-php/lattice/core/renderer\";\nimport { IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { NotificationItem } from \"@lattice-php/lattice/notifications/types\";\n\nconst variantIconClass: Record<NonNullable<NotificationItem[\"variant\"]>, string> = {\n success: \"text-lt-success\",\n info: \"text-lt-info\",\n warning: \"text-lt-warning\",\n
|
|
1
|
+
{"version":3,"file":"notification-item.js","names":[],"sources":["../../../resources/js/notifications/components/notification-item.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { RenderNode } from \"@lattice-php/lattice/core/renderer\";\nimport { IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { resolveText } from \"@lattice-php/lattice/i18n/translatable\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { NotificationItem } from \"@lattice-php/lattice/notifications/types\";\n\nconst variantIconClass: Record<NonNullable<NotificationItem[\"variant\"]>, string> = {\n primary: \"text-lt-primary\",\n secondary: \"text-lt-muted-fg\",\n success: \"text-lt-success\",\n info: \"text-lt-info\",\n warning: \"text-lt-warning\",\n danger: \"text-lt-danger\",\n};\n\nexport function NotificationItemRow({\n notification,\n onMarkRead,\n onDismiss,\n}: {\n notification: NotificationItem;\n onMarkRead: (id: string) => void;\n onDismiss: (id: string) => void;\n}) {\n const { t } = useT(\"lattice\");\n\n const title = resolveText(notification.title, t);\n const body = resolveText(notification.body, t);\n\n const content = (\n <>\n {title ? <p className=\"truncate text-sm font-medium text-lt-fg\">{title}</p> : null}\n {body ? <p className=\"text-sm text-lt-muted-fg\">{body}</p> : null}\n </>\n );\n\n return (\n <li\n className={cn(\"flex gap-3 px-3 py-3\", !notification.isRead && \"bg-lt-muted/40\")}\n data-test=\"notification\"\n >\n {notification.icon ? (\n <IconRenderer\n icon={notification.icon}\n className={cn(\n \"mt-0.5 size-lt-icon-md\",\n notification.variant ? variantIconClass[notification.variant] : undefined,\n )}\n />\n ) : null}\n <div className=\"min-w-0 flex-1\">\n {notification.href ? (\n <Link\n href={notification.href}\n className=\"block\"\n data-test=\"notification-link\"\n onClick={() => onMarkRead(notification.id)}\n >\n {content}\n </Link>\n ) : (\n content\n )}\n {notification.actions.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {notification.actions.map((node, index) => (\n <RenderNode key={node.key ?? node.id ?? `action-${index}`} node={node} />\n ))}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 flex-col gap-1\">\n {!notification.isRead ? (\n <button\n type=\"button\"\n className=\"text-xs text-lt-muted-fg hover:text-lt-fg\"\n onClick={() => onMarkRead(notification.id)}\n >\n {t(\"notifications.mark-read\", \"Mark read\")}\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label={t(\"notifications.dismiss\", \"Dismiss\")}\n className=\"text-xs text-lt-muted-fg hover:text-lt-fg\"\n onClick={() => onDismiss(notification.id)}\n >\n {t(\"notifications.dismiss\", \"Dismiss\")}\n </button>\n </div>\n </li>\n );\n}\n"],"mappings":";;;;;;;;AAQA,IAAM,mBAA6E;CACjF,SAAS;CACT,WAAW;CACX,SAAS;CACT,MAAM;CACN,SAAS;CACT,QAAQ;AACV;AAEA,SAAgB,oBAAoB,EAClC,cACA,YACA,aAKC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,MAAM,QAAQ,YAAY,aAAa,OAAO,CAAC;CAC/C,MAAM,OAAO,YAAY,aAAa,MAAM,CAAC;CAE7C,MAAM,UACJ,qBAAA,UAAA,EAAA,UAAA,CACG,QAAQ,oBAAC,KAAD;EAAG,WAAU;YAA2C;CAAS,CAAA,IAAI,MAC7E,OAAO,oBAAC,KAAD;EAAG,WAAU;YAA4B;CAAQ,CAAA,IAAI,IAC7D,EAAA,CAAA;CAGJ,OACE,qBAAC,MAAD;EACE,WAAW,GAAG,wBAAwB,CAAC,aAAa,UAAU,gBAAgB;EAC9E,aAAU;YAFZ;GAIG,aAAa,OACZ,oBAAC,cAAD;IACE,MAAM,aAAa;IACnB,WAAW,GACT,0BACA,aAAa,UAAU,iBAAiB,aAAa,WAAW,KAAA,CAClE;GACD,CAAA,IACC;GACJ,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,aAAa,OACZ,oBAAC,MAAD;KACE,MAAM,aAAa;KACnB,WAAU;KACV,aAAU;KACV,eAAe,WAAW,aAAa,EAAE;eAExC;IACG,CAAA,IAEN,SAED,aAAa,QAAQ,SAAS,IAC7B,oBAAC,OAAD;KAAK,WAAU;eACZ,aAAa,QAAQ,KAAK,MAAM,UAC/B,oBAAC,YAAD,EAAiE,KAAO,GAAvD,KAAK,OAAO,KAAK,MAAM,UAAU,OAAsB,CACzE;IACE,CAAA,IACH,IACD;;GACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,CAAC,aAAa,SACb,oBAAC,UAAD;KACE,MAAK;KACL,WAAU;KACV,eAAe,WAAW,aAAa,EAAE;eAExC,EAAE,2BAA2B,WAAW;IACnC,CAAA,IACN,MACJ,oBAAC,UAAD;KACE,MAAK;KACL,cAAY,EAAE,yBAAyB,SAAS;KAChD,WAAU;KACV,eAAe,UAAU,aAAa,EAAE;eAEvC,EAAE,yBAAyB,SAAS;IAC/B,CAAA,CACL;;EACH;;AAER"}
|
|
@@ -2,7 +2,6 @@ import { useT } from "../../i18n/instance.js";
|
|
|
2
2
|
import { Icon } from "../../icons/sprite.js";
|
|
3
3
|
import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover.js";
|
|
4
4
|
import { Dialog, DialogContent, DialogTitle } from "../../ui/dialog.js";
|
|
5
|
-
import { Badge } from "../../ui/badge.js";
|
|
6
5
|
import { useNotifications } from "../store.js";
|
|
7
6
|
import { NotificationList } from "./notification-list.js";
|
|
8
7
|
import { Component, Suspense, lazy } from "react";
|
|
@@ -33,10 +32,9 @@ var NotificationsComponent = ({ node }) => {
|
|
|
33
32
|
children: [/* @__PURE__ */ jsx(Icon, {
|
|
34
33
|
name: "bell",
|
|
35
34
|
className: "size-lt-icon-md"
|
|
36
|
-
}), store.unreadCount > 0 ? /* @__PURE__ */ jsx(
|
|
37
|
-
variant: "destructive",
|
|
35
|
+
}), store.unreadCount > 0 ? /* @__PURE__ */ jsx("span", {
|
|
38
36
|
"data-test": "notifications-badge",
|
|
39
|
-
className: "absolute -right-0.5 -top-0.5 min-w-4 px-1 py-0 text-[10px]",
|
|
37
|
+
className: "absolute -right-0.5 -top-0.5 inline-flex min-w-4 items-center justify-center rounded-lt-full bg-lt-danger px-1 py-0 text-[10px] font-medium text-lt-danger-fg",
|
|
40
38
|
children: store.unreadCount
|
|
41
39
|
}) : null]
|
|
42
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.js","names":[],"sources":["../../../resources/js/notifications/components/notifications.tsx"],"sourcesContent":["import { Component, lazy, Suspense, type ReactNode } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"notifications.js","names":[],"sources":["../../../resources/js/notifications/components/notifications.tsx"],"sourcesContent":["import { Component, lazy, Suspense, type ReactNode } from \"react\";\nimport { Dialog, DialogContent, DialogTitle } from \"@lattice-php/lattice/ui/dialog\";\nimport {\n Popover as PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n} from \"@lattice-php/lattice/ui/popover\";\nimport { Icon } from \"@lattice-php/lattice/icons\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { useNotifications } from \"@lattice-php/lattice/notifications/store\";\nimport type { NotificationItem } from \"@lattice-php/lattice/notifications/types\";\nimport { NotificationList } from \"./notification-list\";\n\nconst NotificationsEcho = lazy(() =>\n import(\"./notifications-echo\").then((m) => ({ default: m.NotificationsEcho })),\n);\n\nclass EchoBoundary extends Component<{ children: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n\n static getDerivedStateFromError(): { failed: boolean } {\n return { failed: true };\n }\n\n componentDidCatch(): void {\n console.warn(\n \"[lattice] The notifications bell declares a realtime channel but Echo is unavailable. Install @laravel/echo-react and call configureEcho().\",\n );\n }\n\n render(): ReactNode {\n return this.state.failed ? null : this.props.children;\n }\n}\n\nconst NotificationsComponent: RendererComponent<\"notifications\"> = ({ node }) => {\n const { t } = useT(\"lattice\");\n const store = useNotifications({\n endpoint: node.props.endpoint,\n pollingInterval: node.props.pollingInterval,\n });\n\n const label = t(\"notifications.label\", \"Notifications\");\n\n const trigger = (\n <span className=\"relative inline-flex items-center justify-center rounded-lt-sm p-2 hover:bg-lt-muted\">\n <Icon name=\"bell\" className=\"size-lt-icon-md\" />\n {store.unreadCount > 0 ? (\n <span\n data-test=\"notifications-badge\"\n className=\"absolute -right-0.5 -top-0.5 inline-flex min-w-4 items-center justify-center rounded-lt-full bg-lt-danger px-1 py-0 text-[10px] font-medium text-lt-danger-fg\"\n >\n {store.unreadCount}\n </span>\n ) : null}\n </span>\n );\n\n const panel = (\n <div className=\"w-80\" data-test=\"notifications-panel\">\n <div className=\"flex items-center justify-between border-b border-lt-border px-3 py-2\">\n <span className=\"text-sm font-medium\">{t(\"notifications.heading\", \"Notifications\")}</span>\n {store.unreadCount > 0 ? (\n <button\n type=\"button\"\n className=\"text-xs text-lt-muted-fg hover:text-lt-fg\"\n onClick={store.markAllRead}\n >\n {t(\"notifications.mark-all-read\", \"Mark all read\")}\n </button>\n ) : null}\n </div>\n <NotificationList\n notifications={store.notifications}\n status={store.status}\n hasMore={store.hasMore}\n onMarkRead={store.markRead}\n onDismiss={store.dismiss}\n onLoadMore={store.loadMore}\n />\n </div>\n );\n\n return (\n <>\n {node.props.channel ? (\n <EchoBoundary>\n <Suspense fallback={null}>\n <NotificationsEcho\n channel={node.props.channel}\n onReceive={(item: NotificationItem) => store.receive(item)}\n />\n </Suspense>\n </EchoBoundary>\n ) : null}\n\n {node.props.slideOut ? (\n <>\n <button\n type=\"button\"\n aria-label={label}\n data-test=\"notifications-trigger\"\n onClick={() => store.setOpen(true)}\n >\n {trigger}\n </button>\n <Dialog open={store.open} onOpenChange={store.setOpen}>\n <DialogContent aria-describedby={undefined} className=\"p-0\" placement=\"end\" width=\"sm\">\n <DialogTitle className=\"sr-only\">{label}</DialogTitle>\n {panel}\n </DialogContent>\n </Dialog>\n </>\n ) : (\n <PopoverRoot open={store.open} onOpenChange={store.setOpen}>\n <PopoverTrigger asChild>\n <button type=\"button\" aria-label={label} data-test=\"notifications-trigger\">\n {trigger}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"p-0\">\n {panel}\n </PopoverContent>\n </PopoverRoot>\n )}\n </>\n );\n};\n\nexport default NotificationsComponent;\n"],"mappings":";;;;;;;;;AAcA,IAAM,oBAAoB,WACxB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAC/E;AAEA,IAAM,eAAN,cAA2B,UAAwD;CACjF,QAAQ,EAAE,QAAQ,MAAM;CAExB,OAAO,2BAAgD;EACrD,OAAO,EAAE,QAAQ,KAAK;CACxB;CAEA,oBAA0B;EACxB,QAAQ,KACN,6IACF;CACF;CAEA,SAAoB;EAClB,OAAO,KAAK,MAAM,SAAS,OAAO,KAAK,MAAM;CAC/C;AACF;AAEA,IAAM,0BAA8D,EAAE,WAAW;CAC/E,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,QAAQ,iBAAiB;EAC7B,UAAU,KAAK,MAAM;EACrB,iBAAiB,KAAK,MAAM;CAC9B,CAAC;CAED,MAAM,QAAQ,EAAE,uBAAuB,eAAe;CAEtD,MAAM,UACJ,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,MAAD;GAAM,MAAK;GAAO,WAAU;EAAmB,CAAA,GAC9C,MAAM,cAAc,IACnB,oBAAC,QAAD;GACE,aAAU;GACV,WAAU;aAET,MAAM;EACH,CAAA,IACJ,IACA;;CAGR,MAAM,QACJ,qBAAC,OAAD;EAAK,WAAU;EAAO,aAAU;YAAhC,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,QAAD;IAAM,WAAU;cAAuB,EAAE,yBAAyB,eAAe;GAAQ,CAAA,GACxF,MAAM,cAAc,IACnB,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,SAAS,MAAM;cAEd,EAAE,+BAA+B,eAAe;GAC3C,CAAA,IACN,IACD;MACL,oBAAC,kBAAD;GACE,eAAe,MAAM;GACrB,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,YAAY,MAAM;GAClB,WAAW,MAAM;GACjB,YAAY,MAAM;EACnB,CAAA,CACE;;CAGP,OACE,qBAAA,YAAA,EAAA,UAAA,CACG,KAAK,MAAM,UACV,oBAAC,cAAD,EAAA,UACE,oBAAC,UAAD;EAAU,UAAU;YAClB,oBAAC,mBAAD;GACE,SAAS,KAAK,MAAM;GACpB,YAAY,SAA2B,MAAM,QAAQ,IAAI;EAC1D,CAAA;CACO,CAAA,EACE,CAAA,IACZ,MAEH,KAAK,MAAM,WACV,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,UAAD;EACE,MAAK;EACL,cAAY;EACZ,aAAU;EACV,eAAe,MAAM,QAAQ,IAAI;YAEhC;CACK,CAAA,GACR,oBAAC,QAAD;EAAQ,MAAM,MAAM;EAAM,cAAc,MAAM;YAC5C,qBAAC,eAAD;GAAe,oBAAkB,KAAA;GAAW,WAAU;GAAM,WAAU;GAAM,OAAM;aAAlF,CACE,oBAAC,aAAD;IAAa,WAAU;cAAW;GAAmB,CAAA,GACpD,KACY;;CACT,CAAA,CACR,EAAA,CAAA,IAEF,qBAAC,SAAD;EAAa,MAAM,MAAM;EAAM,cAAc,MAAM;YAAnD,CACE,oBAAC,gBAAD;GAAgB,SAAA;aACd,oBAAC,UAAD;IAAQ,MAAK;IAAS,cAAY;IAAO,aAAU;cAChD;GACK,CAAA;EACM,CAAA,GAChB,oBAAC,gBAAD;GAAgB,OAAM;GAAM,WAAU;aACnC;EACa,CAAA,CACL;GAEf,EAAA,CAAA;AAEN"}
|
|
@@ -66,6 +66,7 @@ function BulkBar({ actions, selectedKeys, allMatching, total, query, canSelectAl
|
|
|
66
66
|
type: "button",
|
|
67
67
|
"data-test": prefixedTestId("bulk-action", action.id),
|
|
68
68
|
variant: action.variant,
|
|
69
|
+
emphasis: action.emphasis,
|
|
69
70
|
disabled: processing,
|
|
70
71
|
onClick: () => run(action),
|
|
71
72
|
children: [processing && /* @__PURE__ */ jsx(Spinner, {}), action.label]
|
|
@@ -77,6 +78,7 @@ function BulkBar({ actions, selectedKeys, allMatching, total, query, canSelectAl
|
|
|
77
78
|
confirmLabel: confirming.confirmation.confirmLabel ?? confirming.label,
|
|
78
79
|
cancelLabel: confirming.confirmation.cancelLabel ?? t("common.cancel", "Cancel"),
|
|
79
80
|
confirmVariant: confirming.variant,
|
|
81
|
+
confirmEmphasis: confirming.emphasis,
|
|
80
82
|
processing,
|
|
81
83
|
onConfirm: () => void submit(confirming),
|
|
82
84
|
onCancel: () => setConfirming(null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-bar.js","names":[],"sources":["../../../resources/js/table/components/bulk-bar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { ActionForm, runAction } from \"@lattice-php/lattice/action\";\nimport { apiFetch } from \"@lattice-php/lattice/core/api\";\nimport { useEffectDispatcher } from \"@lattice-php/lattice/effects/use-effect-dispatcher\";\nimport { Button } from \"@lattice-php/lattice/ui/button\";\nimport { ConfirmDialog } from \"@lattice-php/lattice/ui/confirm-dialog\";\nimport { Spinner } from \"@lattice-php/lattice/ui/spinner\";\nimport { prefixedTestId } from \"@lattice-php/lattice/core/test-id\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { BulkAction } from \"@lattice-php/lattice/table/lib/bulk\";\n\nexport function BulkBar({\n actions,\n selectedKeys,\n allMatching,\n total,\n query,\n canSelectAllMatching,\n onSelectAllMatching,\n onCompleted,\n}: {\n actions: BulkAction[];\n selectedKeys: string[];\n allMatching: boolean;\n total?: number;\n query: Record<string, unknown>;\n canSelectAllMatching: boolean;\n onSelectAllMatching: () => void;\n onCompleted: () => void;\n}) {\n const { t } = useT(\"lattice\");\n const [processing, setProcessing] = useState(false);\n const dispatch = useEffectDispatcher();\n const [confirming, setConfirming] = useState<BulkAction | null>(null);\n const [filling, setFilling] = useState<BulkAction | null>(null);\n\n const selectionPayload = (): Record<string, unknown> =>\n allMatching ? { allMatching: true, ...query } : { selected: selectedKeys };\n\n async function submit(action: BulkAction): Promise<void> {\n setProcessing(true);\n\n const ok = await runAction(\n () =>\n apiFetch(action.endpoint, {\n method: action.method,\n ref: action.ref,\n body: JSON.stringify(selectionPayload()),\n throwOnError: false,\n }),\n dispatch,\n );\n\n setProcessing(false);\n\n if (ok) {\n setConfirming(null);\n onCompleted();\n }\n }\n\n function run(action: BulkAction): void {\n if (action.form) {\n setFilling(action);\n\n return;\n }\n\n if (action.confirmation) {\n setConfirming(action);\n\n return;\n }\n\n void submit(action);\n }\n\n const count = allMatching ? (total ?? selectedKeys.length) : selectedKeys.length;\n\n return (\n <div className=\"flex flex-wrap items-center gap-3 border-b border-lt-border bg-lt-muted/50 p-4 text-sm\">\n <span className=\"font-medium\">\n {allMatching\n ? t(\"table.bulk.all-selected\", \"All {{count}} selected\", { count })\n : t(\"table.bulk.selected\", \"{{count}} selected\", { count })}\n </span>\n {canSelectAllMatching && (\n <button\n type=\"button\"\n data-test=\"bulk-select-all-matching\"\n className=\"font-medium text-lt-primary underline underline-offset-2\"\n onClick={onSelectAllMatching}\n >\n {t(\"table.bulk.select-all-matching\", \"Select all {{total}} matching\", { total })}\n </button>\n )}\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n type=\"button\"\n data-test={prefixedTestId(\"bulk-action\", action.id)}\n variant={action.variant}\n disabled={processing}\n onClick={() => run(action)}\n >\n {processing && <Spinner />}\n {action.label}\n </Button>\n ))}\n </div>\n\n {confirming?.confirmation && (\n <ConfirmDialog\n title={confirming.confirmation.title ?? confirming.label}\n description={confirming.confirmation.description ?? undefined}\n confirmLabel={confirming.confirmation.confirmLabel ?? confirming.label}\n cancelLabel={confirming.confirmation.cancelLabel ?? t(\"common.cancel\", \"Cancel\")}\n confirmVariant={confirming.variant}\n processing={processing}\n onConfirm={() => void submit(confirming)}\n onCancel={() => setConfirming(null)}\n />\n )}\n\n {filling?.form && (\n <ActionForm\n cancelLabel={filling.confirmation?.cancelLabel ?? t(\"common.cancel\", \"Cancel\")}\n componentRef={filling.ref}\n description={filling.confirmation?.description ?? undefined}\n endpoint={filling.endpoint}\n extraData={selectionPayload()}\n formNode={filling.form}\n method={filling.method}\n onClose={() => setFilling(null)}\n onSuccess={() => {\n setFilling(null);\n onCompleted();\n }}\n placement={filling.modalSide ?? \"center\"}\n submitLabel={filling.confirmation?.confirmLabel ?? filling.label}\n title={filling.confirmation?.title ?? filling.label}\n width={filling.modalWidth ?? undefined}\n />\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,QAAQ,EACtB,SACA,cACA,aACA,OACA,OACA,sBACA,qBACA,eAUC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,WAAW,oBAAoB;CACrC,MAAM,CAAC,YAAY,iBAAiB,SAA4B,IAAI;CACpE,MAAM,CAAC,SAAS,cAAc,SAA4B,IAAI;CAE9D,MAAM,yBACJ,cAAc;EAAE,aAAa;EAAM,GAAG;CAAM,IAAI,EAAE,UAAU,aAAa;CAE3E,eAAe,OAAO,QAAmC;EACvD,cAAc,IAAI;EAElB,MAAM,KAAK,MAAM,gBAEb,SAAS,OAAO,UAAU;GACxB,QAAQ,OAAO;GACf,KAAK,OAAO;GACZ,MAAM,KAAK,UAAU,iBAAiB,CAAC;GACvC,cAAc;EAChB,CAAC,GACH,QACF;EAEA,cAAc,KAAK;EAEnB,IAAI,IAAI;GACN,cAAc,IAAI;GAClB,YAAY;EACd;CACF;CAEA,SAAS,IAAI,QAA0B;EACrC,IAAI,OAAO,MAAM;GACf,WAAW,MAAM;GAEjB;EACF;EAEA,IAAI,OAAO,cAAc;GACvB,cAAc,MAAM;GAEpB;EACF;EAEA,OAAY,MAAM;CACpB;CAEA,MAAM,QAAQ,cAAe,SAAS,aAAa,SAAU,aAAa;CAE1E,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,QAAD;IAAM,WAAU;cACb,cACG,EAAE,2BAA2B,0BAA0B,EAAE,MAAM,CAAC,IAChE,EAAE,uBAAuB,sBAAsB,EAAE,MAAM,CAAC;GACxD,CAAA;GACL,wBACC,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,SAAS;cAER,EAAE,kCAAkC,iCAAiC,EAAE,MAAM,CAAC;GACzE,CAAA;GAEV,oBAAC,OAAD;IAAK,WAAU;cACZ,QAAQ,KAAK,WACZ,qBAAC,QAAD;KAEE,MAAK;KACL,aAAW,eAAe,eAAe,OAAO,EAAE;KAClD,SAAS,OAAO;KAChB,UAAU;KACV,eAAe,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"bulk-bar.js","names":[],"sources":["../../../resources/js/table/components/bulk-bar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { ActionForm, runAction } from \"@lattice-php/lattice/action\";\nimport { apiFetch } from \"@lattice-php/lattice/core/api\";\nimport { useEffectDispatcher } from \"@lattice-php/lattice/effects/use-effect-dispatcher\";\nimport { Button } from \"@lattice-php/lattice/ui/button\";\nimport { ConfirmDialog } from \"@lattice-php/lattice/ui/confirm-dialog\";\nimport { Spinner } from \"@lattice-php/lattice/ui/spinner\";\nimport { prefixedTestId } from \"@lattice-php/lattice/core/test-id\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { BulkAction } from \"@lattice-php/lattice/table/lib/bulk\";\n\nexport function BulkBar({\n actions,\n selectedKeys,\n allMatching,\n total,\n query,\n canSelectAllMatching,\n onSelectAllMatching,\n onCompleted,\n}: {\n actions: BulkAction[];\n selectedKeys: string[];\n allMatching: boolean;\n total?: number;\n query: Record<string, unknown>;\n canSelectAllMatching: boolean;\n onSelectAllMatching: () => void;\n onCompleted: () => void;\n}) {\n const { t } = useT(\"lattice\");\n const [processing, setProcessing] = useState(false);\n const dispatch = useEffectDispatcher();\n const [confirming, setConfirming] = useState<BulkAction | null>(null);\n const [filling, setFilling] = useState<BulkAction | null>(null);\n\n const selectionPayload = (): Record<string, unknown> =>\n allMatching ? { allMatching: true, ...query } : { selected: selectedKeys };\n\n async function submit(action: BulkAction): Promise<void> {\n setProcessing(true);\n\n const ok = await runAction(\n () =>\n apiFetch(action.endpoint, {\n method: action.method,\n ref: action.ref,\n body: JSON.stringify(selectionPayload()),\n throwOnError: false,\n }),\n dispatch,\n );\n\n setProcessing(false);\n\n if (ok) {\n setConfirming(null);\n onCompleted();\n }\n }\n\n function run(action: BulkAction): void {\n if (action.form) {\n setFilling(action);\n\n return;\n }\n\n if (action.confirmation) {\n setConfirming(action);\n\n return;\n }\n\n void submit(action);\n }\n\n const count = allMatching ? (total ?? selectedKeys.length) : selectedKeys.length;\n\n return (\n <div className=\"flex flex-wrap items-center gap-3 border-b border-lt-border bg-lt-muted/50 p-4 text-sm\">\n <span className=\"font-medium\">\n {allMatching\n ? t(\"table.bulk.all-selected\", \"All {{count}} selected\", { count })\n : t(\"table.bulk.selected\", \"{{count}} selected\", { count })}\n </span>\n {canSelectAllMatching && (\n <button\n type=\"button\"\n data-test=\"bulk-select-all-matching\"\n className=\"font-medium text-lt-primary underline underline-offset-2\"\n onClick={onSelectAllMatching}\n >\n {t(\"table.bulk.select-all-matching\", \"Select all {{total}} matching\", { total })}\n </button>\n )}\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n type=\"button\"\n data-test={prefixedTestId(\"bulk-action\", action.id)}\n variant={action.variant}\n emphasis={action.emphasis}\n disabled={processing}\n onClick={() => run(action)}\n >\n {processing && <Spinner />}\n {action.label}\n </Button>\n ))}\n </div>\n\n {confirming?.confirmation && (\n <ConfirmDialog\n title={confirming.confirmation.title ?? confirming.label}\n description={confirming.confirmation.description ?? undefined}\n confirmLabel={confirming.confirmation.confirmLabel ?? confirming.label}\n cancelLabel={confirming.confirmation.cancelLabel ?? t(\"common.cancel\", \"Cancel\")}\n confirmVariant={confirming.variant}\n confirmEmphasis={confirming.emphasis}\n processing={processing}\n onConfirm={() => void submit(confirming)}\n onCancel={() => setConfirming(null)}\n />\n )}\n\n {filling?.form && (\n <ActionForm\n cancelLabel={filling.confirmation?.cancelLabel ?? t(\"common.cancel\", \"Cancel\")}\n componentRef={filling.ref}\n description={filling.confirmation?.description ?? undefined}\n endpoint={filling.endpoint}\n extraData={selectionPayload()}\n formNode={filling.form}\n method={filling.method}\n onClose={() => setFilling(null)}\n onSuccess={() => {\n setFilling(null);\n onCompleted();\n }}\n placement={filling.modalSide ?? \"center\"}\n submitLabel={filling.confirmation?.confirmLabel ?? filling.label}\n title={filling.confirmation?.title ?? filling.label}\n width={filling.modalWidth ?? undefined}\n />\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,QAAQ,EACtB,SACA,cACA,aACA,OACA,OACA,sBACA,qBACA,eAUC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,WAAW,oBAAoB;CACrC,MAAM,CAAC,YAAY,iBAAiB,SAA4B,IAAI;CACpE,MAAM,CAAC,SAAS,cAAc,SAA4B,IAAI;CAE9D,MAAM,yBACJ,cAAc;EAAE,aAAa;EAAM,GAAG;CAAM,IAAI,EAAE,UAAU,aAAa;CAE3E,eAAe,OAAO,QAAmC;EACvD,cAAc,IAAI;EAElB,MAAM,KAAK,MAAM,gBAEb,SAAS,OAAO,UAAU;GACxB,QAAQ,OAAO;GACf,KAAK,OAAO;GACZ,MAAM,KAAK,UAAU,iBAAiB,CAAC;GACvC,cAAc;EAChB,CAAC,GACH,QACF;EAEA,cAAc,KAAK;EAEnB,IAAI,IAAI;GACN,cAAc,IAAI;GAClB,YAAY;EACd;CACF;CAEA,SAAS,IAAI,QAA0B;EACrC,IAAI,OAAO,MAAM;GACf,WAAW,MAAM;GAEjB;EACF;EAEA,IAAI,OAAO,cAAc;GACvB,cAAc,MAAM;GAEpB;EACF;EAEA,OAAY,MAAM;CACpB;CAEA,MAAM,QAAQ,cAAe,SAAS,aAAa,SAAU,aAAa;CAE1E,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,QAAD;IAAM,WAAU;cACb,cACG,EAAE,2BAA2B,0BAA0B,EAAE,MAAM,CAAC,IAChE,EAAE,uBAAuB,sBAAsB,EAAE,MAAM,CAAC;GACxD,CAAA;GACL,wBACC,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,SAAS;cAER,EAAE,kCAAkC,iCAAiC,EAAE,MAAM,CAAC;GACzE,CAAA;GAEV,oBAAC,OAAD;IAAK,WAAU;cACZ,QAAQ,KAAK,WACZ,qBAAC,QAAD;KAEE,MAAK;KACL,aAAW,eAAe,eAAe,OAAO,EAAE;KAClD,SAAS,OAAO;KAChB,UAAU,OAAO;KACjB,UAAU;KACV,eAAe,IAAI,MAAM;eAP3B,CASG,cAAc,oBAAC,SAAD,CAAU,CAAA,GACxB,OAAO,KACF;OAVD,OAAO,EAUN,CACT;GACE,CAAA;GAEJ,YAAY,gBACX,oBAAC,eAAD;IACE,OAAO,WAAW,aAAa,SAAS,WAAW;IACnD,aAAa,WAAW,aAAa,eAAe,KAAA;IACpD,cAAc,WAAW,aAAa,gBAAgB,WAAW;IACjE,aAAa,WAAW,aAAa,eAAe,EAAE,iBAAiB,QAAQ;IAC/E,gBAAgB,WAAW;IAC3B,iBAAiB,WAAW;IAChB;IACZ,iBAAiB,KAAK,OAAO,UAAU;IACvC,gBAAgB,cAAc,IAAI;GACnC,CAAA;GAGF,SAAS,QACR,oBAAC,YAAD;IACE,aAAa,QAAQ,cAAc,eAAe,EAAE,iBAAiB,QAAQ;IAC7E,cAAc,QAAQ;IACtB,aAAa,QAAQ,cAAc,eAAe,KAAA;IAClD,UAAU,QAAQ;IAClB,WAAW,iBAAiB;IAC5B,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IAChB,eAAe,WAAW,IAAI;IAC9B,iBAAiB;KACf,WAAW,IAAI;KACf,YAAY;IACd;IACA,WAAW,QAAQ,aAAa;IAChC,aAAa,QAAQ,cAAc,gBAAgB,QAAQ;IAC3D,OAAO,QAAQ,cAAc,SAAS,QAAQ;IAC9C,OAAO,QAAQ,cAAc,KAAA;GAC9B,CAAA;EAEA;;AAET"}
|