@servicetitan/anvil2 1.49.7 → 1.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/{Combobox-hxGMMb8x.js → Combobox-DGAa9vgU.js} +7 -19
- package/dist/Combobox-DGAa9vgU.js.map +1 -0
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-CUFa7cQK.js → DataTable-DQ9FFuV8.js} +111 -57
- package/dist/DataTable-DQ9FFuV8.js.map +1 -0
- package/dist/DataTable.css +68 -26
- package/dist/{Dialog-UzG6-s9H.js → Dialog-BwabBKoZ.js} +19 -13
- package/dist/Dialog-BwabBKoZ.js.map +1 -0
- package/dist/Dialog.css +31 -28
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-BHK18NYm.js → Drawer-GXeoK-r9.js} +20 -12
- package/dist/Drawer-GXeoK-r9.js.map +1 -0
- package/dist/Drawer.css +33 -27
- package/dist/Drawer.js +1 -1
- package/dist/{Page-ClI3IOc7.js → Page-DEbpjQw0.js} +2 -2
- package/dist/{Page-ClI3IOc7.js.map → Page-DEbpjQw0.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-CnF6yBr5.js → Pagination-BR8MiRaA.js} +17 -25
- package/dist/Pagination-BR8MiRaA.js.map +1 -0
- package/dist/Pagination.js +1 -1
- package/dist/{SearchField-D6bICv4b.js → SearchField-CJAo8dE0.js} +10 -7
- package/dist/{SearchField-D6bICv4b.js.map → SearchField-CJAo8dE0.js.map} +1 -1
- package/dist/SearchField.css +14 -8
- package/dist/SearchField.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BOzavAtv.js → SelectFieldSync-D4VdOXoY.js} +93 -81
- package/dist/SelectFieldSync-D4VdOXoY.js.map +1 -0
- package/dist/SelectFieldSync.css +6 -5
- package/dist/{SelectTrigger-DfVnPiNf.js → SelectTrigger-D4AjiMKp.js} +2 -2
- package/dist/{SelectTrigger-DfVnPiNf.js.map → SelectTrigger-D4AjiMKp.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-D8scKtBr.js → SelectTriggerBase-D9GuxPxR.js} +3 -15
- package/dist/SelectTriggerBase-D9GuxPxR.js.map +1 -0
- package/dist/Table.js +1 -1
- package/dist/{Toolbar-BxYOXLmv.js → Toolbar-Vw9V1RHr.js} +208 -139
- package/dist/Toolbar-Vw9V1RHr.js.map +1 -0
- package/dist/Toolbar.css +62 -30
- package/dist/Toolbar.js +1 -1
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +1 -0
- package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +9 -1
- package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
- package/dist/beta/components/Table/internal/ResizeHandle.d.ts +5 -2
- package/dist/beta/components/Table/internal/getCommonPinningStyles.d.ts +2 -1
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +28 -0
- package/dist/beta.js +3 -3
- package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyUtils.d.ts +0 -36
- package/dist/components/Combobox/internal/ComboboxUtils.d.ts +0 -57
- package/dist/components/Dialog/Dialog.d.ts +3 -3
- package/dist/components/Drawer/Drawer.d.ts +2 -2
- package/dist/components/Pagination/internal/Pagination.d.ts +3 -4
- package/dist/components/Pagination/internal/PaginationList.d.ts +1 -0
- package/dist/components/Pagination/internal/PaginationTotalCount.d.ts +2 -4
- package/dist/index.js +7 -7
- package/dist/internal/hooks/index.d.ts +1 -0
- package/dist/internal/hooks/useDownshiftEnvironment/index.d.ts +1 -0
- package/dist/internal/hooks/useDownshiftEnvironment/useDownshiftEnvironment.d.ts +36 -0
- package/dist/{match-sorter.esm-CtBw0MrM.js → match-sorter.esm-NrKOPPde.js} +16 -3
- package/dist/match-sorter.esm-NrKOPPde.js.map +1 -0
- package/package.json +7 -7
- package/dist/Combobox-hxGMMb8x.js.map +0 -1
- package/dist/DataTable-CUFa7cQK.js.map +0 -1
- package/dist/Dialog-UzG6-s9H.js.map +0 -1
- package/dist/Drawer-BHK18NYm.js.map +0 -1
- package/dist/Pagination-CnF6yBr5.js.map +0 -1
- package/dist/SelectFieldSync-BOzavAtv.js.map +0 -1
- package/dist/SelectTriggerBase-D8scKtBr.js.map +0 -1
- package/dist/Toolbar-BxYOXLmv.js.map +0 -1
- package/dist/match-sorter.esm-CtBw0MrM.js.map +0 -1
package/dist/DataTable.css
CHANGED
|
@@ -138,7 +138,7 @@ table[data-anv=simple-table-base] thead th._table-header-cell_1ffr7_2 {
|
|
|
138
138
|
}
|
|
139
139
|
}@layer starter, reset, base, state, application;
|
|
140
140
|
@layer reset {
|
|
141
|
-
._table-
|
|
141
|
+
._table-base_11xh7_2 {
|
|
142
142
|
all: unset;
|
|
143
143
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
144
144
|
font-size: 100%;
|
|
@@ -151,24 +151,41 @@ table[data-anv=simple-table-base] thead th._table-header-cell_1ffr7_2 {
|
|
|
151
151
|
box-sizing: border-box;
|
|
152
152
|
display: table;
|
|
153
153
|
}
|
|
154
|
+
._data-table-base_11xh7_15 {
|
|
155
|
+
all: unset;
|
|
156
|
+
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
157
|
+
font-size: 100%;
|
|
158
|
+
color: var(--foreground-color, #141414);
|
|
159
|
+
margin: 0;
|
|
160
|
+
padding: 0;
|
|
161
|
+
border-style: none;
|
|
162
|
+
border-width: 0;
|
|
163
|
+
border-color: transparent;
|
|
164
|
+
box-sizing: border-box;
|
|
165
|
+
display: grid;
|
|
166
|
+
}
|
|
154
167
|
}
|
|
155
168
|
@layer base {
|
|
156
|
-
._table-
|
|
169
|
+
._table-base_11xh7_2 {
|
|
157
170
|
border-collapse: separate;
|
|
158
171
|
border-spacing: 0;
|
|
159
172
|
border-style: hidden;
|
|
160
173
|
border-width: 0;
|
|
161
174
|
}
|
|
175
|
+
._data-table-base_11xh7_15 {
|
|
176
|
+
width: var(--a2-table-width, 100%);
|
|
177
|
+
grid-template-columns: var(--a2-grid-template-columns);
|
|
178
|
+
}
|
|
162
179
|
}
|
|
163
180
|
@layer state {}
|
|
164
|
-
table._table-
|
|
181
|
+
table._table-base_11xh7_2 {
|
|
165
182
|
background-color: revert-layer;
|
|
166
183
|
max-width: revert-layer;
|
|
167
184
|
border-collapse: revert-layer;
|
|
168
185
|
border-spacing: revert-layer;
|
|
169
186
|
}@layer starter, reset, base, state, application;
|
|
170
187
|
@layer reset {
|
|
171
|
-
._table-
|
|
188
|
+
._table-body_zx1bt_2 {
|
|
172
189
|
all: unset;
|
|
173
190
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
174
191
|
font-size: 100%;
|
|
@@ -182,9 +199,15 @@ table._table-base_wtnhx_2 {
|
|
|
182
199
|
display: revert-layer;
|
|
183
200
|
}
|
|
184
201
|
}
|
|
185
|
-
@layer base {
|
|
202
|
+
@layer base {
|
|
203
|
+
div._table-body_zx1bt_2 {
|
|
204
|
+
display: grid;
|
|
205
|
+
grid-column: 1/-1;
|
|
206
|
+
grid-template-columns: subgrid;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
186
209
|
@layer state {}
|
|
187
|
-
table[data-anv=simple-table-base] ._table-
|
|
210
|
+
table[data-anv=simple-table-base] ._table-body_zx1bt_2 {
|
|
188
211
|
background-color: revert-layer;
|
|
189
212
|
}@layer starter, reset, base, state, application;
|
|
190
213
|
@layer reset {
|
|
@@ -366,7 +389,7 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
366
389
|
}
|
|
367
390
|
}@layer starter, reset, base, state, application;
|
|
368
391
|
@layer reset {
|
|
369
|
-
._data-table-body-
|
|
392
|
+
._data-table-body-row_3jgem_2 {
|
|
370
393
|
all: unset;
|
|
371
394
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
372
395
|
font-size: 100%;
|
|
@@ -381,21 +404,27 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
381
404
|
}
|
|
382
405
|
}
|
|
383
406
|
@layer base {
|
|
384
|
-
._data-table-body-
|
|
385
|
-
display:
|
|
407
|
+
._data-table-body-row_3jgem_2 {
|
|
408
|
+
display: grid;
|
|
409
|
+
grid-column: 1/-1;
|
|
410
|
+
grid-template-columns: subgrid;
|
|
411
|
+
}
|
|
412
|
+
._data-table-body-sub-component-row_3jgem_22 {
|
|
413
|
+
display: block;
|
|
414
|
+
grid-column: 1/-1;
|
|
386
415
|
}
|
|
387
|
-
._data-table-body-
|
|
416
|
+
._data-table-body-sub-component-container_3jgem_26 {
|
|
388
417
|
--a2-table-body-sub-component-padding: var(--size-6);
|
|
389
418
|
background-color: var(--a2-table-body-background-color);
|
|
390
419
|
width: 100%;
|
|
391
420
|
}
|
|
392
|
-
._data-table-body-
|
|
421
|
+
._data-table-body-sub-component-container_3jgem_26 ._data-table-body-sub-component-content_3jgem_31 {
|
|
393
422
|
padding: var(--a2-table-body-sub-component-padding);
|
|
394
423
|
border-block-end: 1px solid var(--a2-table-cell-border-color);
|
|
395
424
|
}
|
|
396
425
|
}
|
|
397
426
|
@layer state {
|
|
398
|
-
._data-table-body-cell-
|
|
427
|
+
._data-table-body-cell-group_3jgem_37:not(:last-of-type):after {
|
|
399
428
|
content: "";
|
|
400
429
|
position: absolute;
|
|
401
430
|
inset-block: 0;
|
|
@@ -406,7 +435,7 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
406
435
|
}
|
|
407
436
|
}@layer starter, reset, base, state, application;
|
|
408
437
|
@layer reset {
|
|
409
|
-
._table-
|
|
438
|
+
._table-footer_9bv2z_2 {
|
|
410
439
|
all: unset;
|
|
411
440
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
412
441
|
font-size: 100%;
|
|
@@ -421,24 +450,29 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
421
450
|
}
|
|
422
451
|
}
|
|
423
452
|
@layer base {
|
|
424
|
-
._table-
|
|
453
|
+
._table-footer_9bv2z_2 {
|
|
425
454
|
--a2-table-footer-bottom-offset: 0;
|
|
426
455
|
position: sticky;
|
|
427
456
|
bottom: var(--a2-table-footer-bottom-offset);
|
|
428
457
|
z-index: 2;
|
|
429
458
|
background-color: var(--a2-table-background-color);
|
|
430
459
|
}
|
|
431
|
-
._table-
|
|
460
|
+
._table-footer_9bv2z_2 ._table-footer-row_9bv2z_24:last-of-type ._table-footer-cell_9bv2z_24:first-child {
|
|
432
461
|
border-end-start-radius: var(--a2-table-border-radius);
|
|
433
462
|
box-shadow: calc(-1 * var(--a2-table-footer-spacing)) 0 var(--a2-table-background-color);
|
|
434
463
|
}
|
|
435
|
-
._table-
|
|
464
|
+
._table-footer_9bv2z_2 ._table-footer-row_9bv2z_24:last-of-type ._table-footer-cell_9bv2z_24:last-child {
|
|
436
465
|
border-end-end-radius: var(--a2-table-border-radius);
|
|
437
466
|
box-shadow: var(--a2-table-footer-spacing) 0 var(--a2-table-background-color);
|
|
438
467
|
}
|
|
468
|
+
div._table-footer_9bv2z_2 {
|
|
469
|
+
display: grid;
|
|
470
|
+
grid-column: 1/-1;
|
|
471
|
+
grid-template-columns: subgrid;
|
|
472
|
+
}
|
|
439
473
|
}@layer starter, reset, base, state, application;
|
|
440
474
|
@layer reset {
|
|
441
|
-
._data-table-footer-
|
|
475
|
+
._data-table-footer-row_13en8_2 {
|
|
442
476
|
all: unset;
|
|
443
477
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
444
478
|
font-size: 100%;
|
|
@@ -453,18 +487,19 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
453
487
|
}
|
|
454
488
|
}
|
|
455
489
|
@layer base {
|
|
456
|
-
._data-table-
|
|
490
|
+
._data-table-footer_13en8_2 {
|
|
457
491
|
padding-block-start: var(--a2-table-footer-spacing);
|
|
458
492
|
}
|
|
459
|
-
._data-table-footer-
|
|
460
|
-
display:
|
|
461
|
-
|
|
493
|
+
._data-table-footer-row_13en8_2 {
|
|
494
|
+
display: grid;
|
|
495
|
+
grid-column: 1/-1;
|
|
496
|
+
grid-template-columns: subgrid;
|
|
462
497
|
position: relative;
|
|
463
498
|
}
|
|
464
499
|
}
|
|
465
500
|
@layer state {}@layer starter, reset, base, state, application;
|
|
466
501
|
@layer reset {
|
|
467
|
-
._table-
|
|
502
|
+
._table-header_y7cb1_2 {
|
|
468
503
|
all: unset;
|
|
469
504
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
470
505
|
font-size: 100%;
|
|
@@ -479,12 +514,17 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
479
514
|
}
|
|
480
515
|
}
|
|
481
516
|
@layer base {
|
|
482
|
-
._table-
|
|
517
|
+
._table-header_y7cb1_2 {
|
|
483
518
|
position: sticky;
|
|
484
519
|
top: 0;
|
|
485
520
|
z-index: 2;
|
|
486
521
|
background-color: var(--a2-table-header-background-color);
|
|
487
522
|
}
|
|
523
|
+
div._table-header_y7cb1_2 {
|
|
524
|
+
display: grid;
|
|
525
|
+
grid-column: 1/-1;
|
|
526
|
+
grid-template-columns: subgrid;
|
|
527
|
+
}
|
|
488
528
|
}
|
|
489
529
|
@layer state {}@layer starter, reset, base, state, application;
|
|
490
530
|
@layer reset {
|
|
@@ -529,7 +569,7 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
529
569
|
}
|
|
530
570
|
}@layer starter, reset, base, state, application;
|
|
531
571
|
@layer reset {
|
|
532
|
-
._table-
|
|
572
|
+
._table-header_6qs0u_2 {
|
|
533
573
|
all: unset;
|
|
534
574
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
535
575
|
font-size: 100%;
|
|
@@ -544,8 +584,10 @@ table[data-anv=simple-table-base] ._table-body_zs2gj_2 {
|
|
|
544
584
|
}
|
|
545
585
|
}
|
|
546
586
|
@layer base {
|
|
547
|
-
._data-table-header-
|
|
548
|
-
display:
|
|
587
|
+
._data-table-header-row_6qs0u_17 {
|
|
588
|
+
display: grid;
|
|
589
|
+
grid-column: 1/-1;
|
|
590
|
+
grid-template-columns: subgrid;
|
|
549
591
|
}
|
|
550
592
|
}
|
|
551
593
|
@layer state {}@layer starter, reset, base, state, application;
|
|
@@ -13,27 +13,33 @@ import { u as useDialogTransitionStates, a as useKeyboardFocusables, b as useIni
|
|
|
13
13
|
import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
|
|
14
14
|
import { r as registerLayer, a as unregisterLayer, b as useOnClickOutside } from './useOnClickOutside-BDzuUjmY.js';
|
|
15
15
|
|
|
16
|
-
import './Dialog.css';const dialog = "
|
|
17
|
-
const container = "
|
|
18
|
-
const content = "
|
|
19
|
-
const header = "
|
|
20
|
-
const footer = "
|
|
21
|
-
const closing = "
|
|
22
|
-
const large = "
|
|
23
|
-
const fullscreen = "
|
|
24
|
-
const
|
|
16
|
+
import './Dialog.css';const dialog = "_dialog_n31av_2";
|
|
17
|
+
const container = "_container_n31av_20";
|
|
18
|
+
const content = "_content_n31av_33";
|
|
19
|
+
const header = "_header_n31av_40";
|
|
20
|
+
const footer = "_footer_n31av_60";
|
|
21
|
+
const closing = "_closing_n31av_76";
|
|
22
|
+
const large = "_large_n31av_82";
|
|
23
|
+
const fullscreen = "_fullscreen_n31av_82";
|
|
24
|
+
const xlarge = "_xlarge_n31av_85";
|
|
25
|
+
const sticky = "_sticky_n31av_105";
|
|
25
26
|
const styles = {
|
|
26
27
|
dialog: dialog,
|
|
27
28
|
container: container,
|
|
28
29
|
content: content,
|
|
29
30
|
header: header,
|
|
30
|
-
"close-container": "_close-
|
|
31
|
+
"close-container": "_close-container_n31av_53",
|
|
31
32
|
footer: footer,
|
|
33
|
+
"open-dialog": "_open-dialog_n31av_1",
|
|
34
|
+
"open-backdrop": "_open-backdrop_n31av_1",
|
|
32
35
|
closing: closing,
|
|
36
|
+
"close-dialog": "_close-dialog_n31av_1",
|
|
37
|
+
"close-backdrop": "_close-backdrop_n31av_1",
|
|
33
38
|
large: large,
|
|
34
39
|
fullscreen: fullscreen,
|
|
40
|
+
xlarge: xlarge,
|
|
35
41
|
sticky: sticky,
|
|
36
|
-
"close-button": "_close-
|
|
42
|
+
"close-button": "_close-button_n31av_117"
|
|
37
43
|
};
|
|
38
44
|
|
|
39
45
|
const DialogHeader = forwardRef(
|
|
@@ -186,7 +192,7 @@ const DialogElement = forwardRef(
|
|
|
186
192
|
const classNames = cx([styles["dialog"]], className, {
|
|
187
193
|
[styles["closing"]]: state === "closing",
|
|
188
194
|
[styles["fullscreen"]]: fullScreen,
|
|
189
|
-
[styles[
|
|
195
|
+
...size && { [styles[size]]: true }
|
|
190
196
|
});
|
|
191
197
|
const { focusables } = useKeyboardFocusables(contentRef, {
|
|
192
198
|
observeChange: true
|
|
@@ -361,4 +367,4 @@ const Dialog = Object.assign(DialogElement, {
|
|
|
361
367
|
});
|
|
362
368
|
|
|
363
369
|
export { Dialog as D, DialogContent as a, DialogFooter as b, DialogHeader as c };
|
|
364
|
-
//# sourceMappingURL=Dialog-
|
|
370
|
+
//# sourceMappingURL=Dialog-BwabBKoZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog-BwabBKoZ.js","sources":["../src/components/Dialog/DialogHeader.tsx","../src/components/Dialog/DialogFooter.tsx","../src/components/Dialog/DialogContent.tsx","../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport cx from \"classnames\";\n\nimport { Text } from \"../Text\";\nimport { DialogCancelButton } from \"./DialogCancelButton\";\n\nimport styles from \"./Dialog.module.scss\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { useDialogContext } from \"./internal/useDialogContext\";\n\n/**\n * Props for the DialogHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type DialogHeaderProps = ComponentPropsWithoutRef<\"header\"> &\n DataTrackingId;\n\n/**\n * DialogHeader component for the header section of a Dialog.\n *\n * Features:\n * - Displays dialog title with headline typography\n * - Includes close button with proper accessibility\n * - Sticky positioning for long content\n * - Consistent spacing and styling\n * - Automatic focus management\n *\n * @example\n * <Dialog.Header>Confirm Delete</Dialog.Header>\n */\nexport const DialogHeader = forwardRef<HTMLDivElement, DialogHeaderProps>(\n (props: DialogHeaderProps, ref) => {\n const { children, className, ...rest } = props;\n const { headerRef } = useDialogContext();\n const data = {\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"Dialog\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const headerClassNames = cx(className, styles[\"header\"]);\n\n return (\n <header\n className={headerClassNames}\n data-anv=\"dialog-header\"\n data-tracking-id={trackingId}\n ref={useMergeRefs([ref, headerRef])}\n {...rest}\n >\n <Text variant=\"headline\" el=\"h1\">\n {children}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </span>\n </header>\n );\n },\n);\n\nDialogHeader.displayName = \"DialogHeader\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport styles from \"./Dialog.module.scss\";\n\n/**\n * Props for the DialogFooter component\n * @extends ComponentPropsWithoutRef<\"footer\">\n */\nexport type DialogFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /**\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * DialogFooter component for the footer section of a Dialog.\n *\n * Features:\n * - Container for dialog action buttons\n * - Optional sticky positioning for long content\n * - Consistent spacing and alignment\n * - Right-aligned button layout by default\n * - Flexible content area for custom layouts\n *\n * @example\n * <Dialog.Footer sticky>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Save</Button>\n * </Dialog.Footer>\n */\nexport const DialogFooter = forwardRef<HTMLElement, DialogFooterProps>(\n (props, ref) => {\n const { children, className, sticky = false, ...rest } = props;\n\n const footerClassNames = cx(styles[\"footer\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={footerClassNames}\n data-anv=\"dialog-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nDialogFooter.displayName = \"DialogFooter\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport styles from \"./Dialog.module.scss\";\nimport { useDialogContext } from \"./internal/useDialogContext\";\n\n/**\n * Props for the DialogContent component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type DialogContentProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * When true, the content will stick below the header during scroll.\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * DialogContent component for the main content area of a Dialog.\n *\n * Features:\n * - Main content container for dialog body\n * - Flexible height with overflow handling\n * - Optional sticky positioning below header\n * - Consistent padding and spacing\n * - Responsive design\n * - Proper content scrolling for long content\n *\n * @example\n * // Basic content\n * <Dialog.Content>\n * <p>This is the main content of the dialog.</p>\n * </Dialog.Content>\n *\n * @example\n * // Sticky content (e.g., search field that remains visible while scrolling)\n * <Dialog.Content sticky>\n * <TextField placeholder=\"Filter results...\" />\n * </Dialog.Content>\n */\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n (props, ref) => {\n const { children, className, sticky = false, ...rest } = props;\n const { headerRef } = useDialogContext();\n const [headerHeight, setHeaderHeight] = useState(0);\n\n useEffect(() => {\n const headerElement = headerRef?.current;\n if (!sticky || !headerElement) return;\n\n const updateHeight = () => {\n setHeaderHeight(headerElement.offsetHeight || 0);\n };\n\n updateHeight();\n const resizeObserver = new ResizeObserver(updateHeight);\n resizeObserver.observe(headerElement);\n\n return () => resizeObserver.disconnect();\n }, [sticky, headerRef]);\n\n const contentClassNames = cx(styles[\"content\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n const stickyStyle = sticky ? { top: `${headerHeight}px` } : undefined;\n\n return (\n <div\n className={contentClassNames}\n data-anv=\"dialog-content\"\n ref={ref}\n style={{ ...stickyStyle, ...rest.style }}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDialogContent.displayName = \"DialogContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n KeyboardEvent,\n} from \"react\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogFooter } from \"./DialogFooter\";\nimport { DialogContent } from \"./DialogContent\";\nimport { DialogCancelButton } from \"./DialogCancelButton\";\nimport {\n OpenCloseTransitionStateEffects,\n useDialogScrollLock,\n useDialogTransitionStates,\n useKeyboardFocusables,\n useOnClickOutside,\n} from \"../../internal/hooks\";\nimport {\n FocusableElement,\n DisableCloseOnEscapeOrClickProps,\n Size,\n} from \"../../types\";\nimport { registerLayer, unregisterLayer } from \"../../internal/utils\";\nimport { DialogContext, DialogContextProps } from \"./internal/DialogContext\";\nimport styles from \"./Dialog.module.scss\";\nimport { useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\n\nimport { ToastProvider } from \"../Toast/internal/ToastProvider\";\nimport { ToasterPopover } from \"../Toast/internal/ToasterPopover\";\nimport { ToasterContent } from \"../Toast/internal/Toaster\";\nimport { useInitialFocus } from \"./internal/useInitialFocus\";\n\n/**\n * Props for the Dialog component\n * @extends ComponentPropsWithoutRef<\"dialog\">\n * @extends DialogTransitionStateEffects\n * @extends DisableCloseOnEscapeOrClickProps\n */\nexport type DialogProps = ComponentPropsWithoutRef<\"dialog\"> &\n OpenCloseTransitionStateEffects &\n DisableCloseOnEscapeOrClickProps & {\n /**\n * @default false\n */\n fullScreen?: boolean;\n /**\n * @default \"medium\"\n */\n size?: Extract<Size, \"medium\" | \"large\" | \"xlarge\">;\n\n /**\n * @default false\n */\n open?: boolean;\n onClose?: () => void;\n /**\n * @deprecated - use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpen?: () => void;\n /**\n * @deprecated - use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Callback when clicking outside the dialog\n */\n onClickOutside?: (e: globalThis.MouseEvent) => void;\n /**\n * Enables scroll chaining\n * @link https://developer.mozilla.org/en-US/docs/Glossary/Scroll_chaining\n */\n enableScrollChaining?: boolean;\n /**\n * Given an array of focusable elements, return the initial focus target.\n * @param focusables - The focusable elements to pick from\n * @returns The initial focus target\n */\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n };\n\nexport const DialogElement = forwardRef<HTMLDialogElement, DialogProps>(\n (props, ref) => {\n const {\n className,\n open = false,\n children,\n onOpen,\n onOpenChange,\n onClose,\n onKeyDown,\n fullScreen = false,\n disableCloseOnEscape = false,\n onClickOutside,\n disableCloseOnClickOutside = false,\n size,\n enableScrollChaining,\n onOpenAnimationStart,\n onOpenAnimationComplete,\n onCloseAnimationStart,\n onCloseAnimationComplete,\n initialFocusResolver,\n ...rest\n } = props;\n\n const elRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const toasterRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<HTMLElement>(null);\n\n const [hasOpenPopover, setHasOpenPopover] =\n useState<DialogContextProps[\"hasOpenPopover\"]>(false);\n const id = useId();\n\n const { state, isOpenOrOpening } = useDialogTransitionStates(elRef, open, {\n onOpenAnimationStart: useCallback(() => {\n onOpenAnimationStart?.();\n }, [onOpenAnimationStart]),\n onOpenAnimationComplete: useCallback(() => {\n onOpenAnimationComplete?.();\n onOpen?.(); // DEPRECATED\n }, [onOpen, onOpenAnimationComplete]),\n onCloseAnimationStart: useCallback(() => {\n onCloseAnimationStart?.();\n }, [onCloseAnimationStart]),\n onCloseAnimationComplete: useCallback(() => {\n onCloseAnimationComplete?.();\n }, [onCloseAnimationComplete]),\n });\n\n // DEPRECATED\n const initial = useRef(true);\n useEffect(() => {\n if (initial.current) {\n initial.current = false;\n } else {\n onOpenChange?.(isOpenOrOpening);\n }\n }, [id, onOpenChange, isOpenOrOpening]);\n\n const classNames = cx([styles[\"dialog\"]], className, {\n [styles[\"closing\"]]: state === \"closing\",\n [styles[\"fullscreen\"]]: fullScreen,\n ...(size && { [styles[size]]: true }),\n });\n\n const { focusables } = useKeyboardFocusables(contentRef, {\n observeChange: true,\n });\n\n useDialogScrollLock({\n open: isOpenOrOpening,\n id,\n enableScrollChaining,\n elementRef: elRef,\n });\n\n // Register/unregister with layer manager for proper stacking\n useEffect(() => {\n if (open) {\n registerLayer(id);\n } else {\n unregisterLayer(id);\n }\n\n // Cleanup when component unmounts\n return () => {\n unregisterLayer(id);\n };\n }, [open, id]);\n\n useOnClickOutside({\n onOutsidePress: (e) => {\n if (!open) return;\n onClickOutside?.(e);\n },\n targets: [\n contentRef.current as HTMLElement,\n toasterRef.current as HTMLElement,\n ],\n onClose: () => {\n if (disableCloseOnClickOutside || !open) return;\n onClose?.();\n },\n layerId: id,\n });\n\n const computeFocus = useCallback((focusables: FocusableElement[]) => {\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"dialog-cancel-button\",\n ) || focusables[0]\n );\n }, []);\n\n useInitialFocus(elRef, {\n computeFocus: initialFocusResolver || computeFocus,\n });\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(e);\n if (e.code === \"Escape\") {\n e.preventDefault();\n if (disableCloseOnEscape) return;\n if (hasOpenPopover) return;\n onClose?.();\n return;\n }\n\n if (e.code === \"Tab\") {\n if (e.shiftKey && e.target === focusables?.[0]) {\n e.preventDefault();\n (focusables[focusables.length - 1] as HTMLElement)?.focus();\n return;\n }\n if (e.target === focusables?.[focusables.length - 1] && !e.shiftKey) {\n e.preventDefault();\n focusables[0].focus();\n return;\n }\n }\n };\n\n return (\n // dialog element does seem to be interactive on MDN guideline\n <dialog\n className={classNames}\n data-anv=\"dialog\"\n data-anv-scroll-chaining={enableScrollChaining}\n data-anv-transition-state={state}\n ref={useMergeRefs([ref, elRef])}\n onKeyDown={onKeyDownHandler}\n {...rest}\n >\n <ToastProvider isDialogToaster={open}>\n <ToasterPopover>\n <ToasterContent id=\"dialog-toaster\" ref={toasterRef} />\n </ToasterPopover>\n </ToastProvider>\n <DialogContext.Provider\n value={{\n close: () => onClose?.(),\n ref: elRef,\n hasOpenPopover,\n setHasOpenPopover,\n headerRef,\n }}\n >\n <section\n ref={contentRef}\n className={styles[\"container\"]}\n data-open={open}\n >\n {children}\n </section>\n </DialogContext.Provider>\n </dialog>\n );\n },\n);\n\nDialogElement.displayName = \"Dialog\";\n\n/**\n * Dialog component for creating modal dialogs and overlays.\n *\n * Features:\n * - Modal dialog with backdrop overlay\n * - Controlled and uncontrolled open state\n * - Smooth open/close animations\n * - Keyboard navigation and focus management\n * - Escape key and click outside to close\n * - Multiple size variants (medium, large, fullscreen)\n * - Scroll chaining support\n * - Toast integration for notifications\n * - Compound component pattern with Header, Footer, Content, and CancelButton sub-components\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog open={isOpen} onClose={() => setIsOpen(false)}>\n * <Dialog.Header>Confirm Action</Dialog.Header>\n * <Dialog.Content>Are you sure you want to proceed?</Dialog.Content>\n * <Dialog.Footer>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Confirm</Button>\n * </Dialog.Footer>\n * </Dialog>\n */\nexport const Dialog = Object.assign(DialogElement, {\n /**\n * DialogHeader component for the header section of a Dialog.\n *\n * Features:\n * - Displays dialog title with headline typography\n * - Includes close button with proper accessibility\n * - Sticky positioning for long content\n * - Consistent spacing and styling\n * - Automatic focus management\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog.Header>Confirm Delete</Dialog.Header>\n */\n Header: DialogHeader,\n /**\n * DialogFooter component for the footer section of a Dialog.\n *\n * Features:\n * - Container for dialog action buttons\n * - Optional sticky positioning for long content\n * - Consistent spacing and alignment\n * - Right-aligned button layout by default\n * - Flexible content area for custom layouts\n *\n * @example\n * <Dialog.Footer sticky>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Save</Button>\n * </Dialog.Footer>\n */\n Footer: DialogFooter,\n /**\n * DialogContent component for the main content area of a Dialog.\n *\n * Features:\n * - Main content container for dialog body\n * - Flexible height with overflow handling\n * - Consistent padding and spacing\n * - Responsive design\n * - Proper content scrolling for long content\n *\n * @example\n * <Dialog.Content>\n * <p>This is the main content of the dialog.</p>\n * </Dialog.Content>\n */\n Content: DialogContent,\n /**\n * DialogCancelButton component for cancel/close actions in a Dialog.\n *\n * Features:\n * - Button that automatically closes the dialog when clicked\n * - Extends all Button component props and functionality\n * - Proper accessibility with close dialog semantics\n * - Automatic focus management\n * - Consistent styling with other dialog elements\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog.CancelButton appearance=\"ghost\">Cancel</Dialog.CancelButton>\n */\n CancelButton: DialogCancelButton,\n});\n"],"names":["Close","focusables"],"mappings":"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"}
|
package/dist/Dialog.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer starter, reset, base, state, application;
|
|
2
2
|
@layer base {
|
|
3
|
-
.
|
|
3
|
+
._dialog_n31av_2 {
|
|
4
4
|
border: none;
|
|
5
5
|
background: transparent;
|
|
6
6
|
padding-block: 0;
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
--ypos: 1.5rem;
|
|
16
16
|
--dialog-padding: 1.5rem;
|
|
17
17
|
}
|
|
18
|
-
.
|
|
18
|
+
._dialog_n31av_2::backdrop {
|
|
19
19
|
background: #040404;
|
|
20
20
|
}
|
|
21
|
-
.
|
|
21
|
+
._dialog_n31av_2 ._container_n31av_20 {
|
|
22
22
|
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
23
23
|
font-size: 100%;
|
|
24
24
|
color: var(--foreground-color, #141414);
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
overflow: auto;
|
|
32
32
|
overscroll-behavior: contain;
|
|
33
33
|
}
|
|
34
|
-
.
|
|
34
|
+
._dialog_n31av_2 ._container_n31av_20 ._content_n31av_33 {
|
|
35
35
|
display: flex;
|
|
36
36
|
flex-grow: 1;
|
|
37
37
|
padding-block-start: 0.25rem;
|
|
38
38
|
padding-block-end: 0.25rem;
|
|
39
39
|
padding-inline: var(--dialog-padding);
|
|
40
40
|
}
|
|
41
|
-
.
|
|
41
|
+
._dialog_n31av_2 ._header_n31av_40 {
|
|
42
42
|
position: sticky;
|
|
43
43
|
top: 0;
|
|
44
44
|
display: flex;
|
|
@@ -48,17 +48,17 @@
|
|
|
48
48
|
background-color: var(--background-color, #ffffff);
|
|
49
49
|
z-index: 3;
|
|
50
50
|
}
|
|
51
|
-
.
|
|
51
|
+
._dialog_n31av_2 ._header_n31av_40 h1 {
|
|
52
52
|
margin: 0;
|
|
53
53
|
}
|
|
54
|
-
.
|
|
54
|
+
._dialog_n31av_2 ._header_n31av_40 ._close-container_n31av_53 {
|
|
55
55
|
display: flex;
|
|
56
56
|
justify-content: center;
|
|
57
57
|
align-items: center;
|
|
58
58
|
width: 1.5625rem;
|
|
59
59
|
height: 1.5625rem;
|
|
60
60
|
}
|
|
61
|
-
.
|
|
61
|
+
._dialog_n31av_2 ._footer_n31av_60 {
|
|
62
62
|
display: flex;
|
|
63
63
|
gap: 0.5rem;
|
|
64
64
|
justify-content: flex-end;
|
|
@@ -68,22 +68,25 @@
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
@layer state {
|
|
71
|
-
.
|
|
72
|
-
animation: _open-
|
|
71
|
+
._dialog_n31av_2[open] {
|
|
72
|
+
animation: _open-dialog_n31av_1 300ms forwards;
|
|
73
73
|
}
|
|
74
|
-
.
|
|
75
|
-
animation: _open-
|
|
74
|
+
._dialog_n31av_2[open]::backdrop {
|
|
75
|
+
animation: _open-backdrop_n31av_1 200ms forwards;
|
|
76
76
|
}
|
|
77
|
-
.
|
|
78
|
-
animation: _close-
|
|
77
|
+
._dialog_n31av_2._closing_n31av_76[open] {
|
|
78
|
+
animation: _close-dialog_n31av_1 300ms forwards;
|
|
79
79
|
}
|
|
80
|
-
.
|
|
81
|
-
animation: _close-
|
|
80
|
+
._dialog_n31av_2._closing_n31av_76[open]::backdrop {
|
|
81
|
+
animation: _close-backdrop_n31av_1 200ms forwards;
|
|
82
82
|
}
|
|
83
|
-
.
|
|
83
|
+
._dialog_n31av_2._large_n31av_82:not(._fullscreen_n31av_82) {
|
|
84
84
|
max-width: 35rem;
|
|
85
85
|
}
|
|
86
|
-
.
|
|
86
|
+
._dialog_n31av_2._xlarge_n31av_85:not(._fullscreen_n31av_82) {
|
|
87
|
+
max-width: 70rem;
|
|
88
|
+
}
|
|
89
|
+
._dialog_n31av_2._fullscreen_n31av_82 {
|
|
87
90
|
margin: 0;
|
|
88
91
|
width: 100%;
|
|
89
92
|
height: 100%;
|
|
@@ -93,37 +96,37 @@
|
|
|
93
96
|
border-radius: 0;
|
|
94
97
|
--ypos: 2.5rem;
|
|
95
98
|
}
|
|
96
|
-
.
|
|
99
|
+
._dialog_n31av_2._fullscreen_n31av_82 > ._container_n31av_20 {
|
|
97
100
|
min-height: -webkit-fill-available;
|
|
98
101
|
min-height: -moz-available;
|
|
99
102
|
min-height: stretch;
|
|
100
103
|
border-radius: 0;
|
|
101
104
|
}
|
|
102
|
-
.
|
|
105
|
+
._dialog_n31av_2._fullscreen_n31av_82::backdrop {
|
|
103
106
|
background-color: #ffffff;
|
|
104
107
|
}
|
|
105
|
-
.
|
|
108
|
+
._dialog_n31av_2 ._content_n31av_33._sticky_n31av_105 {
|
|
106
109
|
position: sticky;
|
|
107
110
|
flex-grow: 0;
|
|
108
111
|
z-index: 3;
|
|
109
112
|
background-color: var(--background-color, #ffffff);
|
|
110
113
|
}
|
|
111
|
-
.
|
|
114
|
+
._dialog_n31av_2 ._footer_n31av_60._sticky_n31av_105 {
|
|
112
115
|
position: sticky;
|
|
113
116
|
inset-block-end: 0;
|
|
114
117
|
}
|
|
115
118
|
}
|
|
116
119
|
@layer application {
|
|
117
|
-
.
|
|
120
|
+
._dialog_n31av_2 ._header_n31av_40 ._close-button_n31av_117 {
|
|
118
121
|
color: var(--foreground-color, #141414);
|
|
119
122
|
}
|
|
120
123
|
@media (prefers-reduced-motion: reduce) {
|
|
121
|
-
.
|
|
124
|
+
._dialog_n31av_2 {
|
|
122
125
|
--ypos: 0;
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
|
-
@keyframes _open-
|
|
129
|
+
@keyframes _open-dialog_n31av_1 {
|
|
127
130
|
from {
|
|
128
131
|
opacity: 0;
|
|
129
132
|
transform: translateY(var(--ypos));
|
|
@@ -133,7 +136,7 @@
|
|
|
133
136
|
transform: translateY(0%);
|
|
134
137
|
}
|
|
135
138
|
}
|
|
136
|
-
@keyframes _close-
|
|
139
|
+
@keyframes _close-dialog_n31av_1 {
|
|
137
140
|
from {
|
|
138
141
|
opacity: 1;
|
|
139
142
|
transform: translateY(0%);
|
|
@@ -143,7 +146,7 @@
|
|
|
143
146
|
transform: translateY(var(--ypos));
|
|
144
147
|
}
|
|
145
148
|
}
|
|
146
|
-
@keyframes _open-
|
|
149
|
+
@keyframes _open-backdrop_n31av_1 {
|
|
147
150
|
from {
|
|
148
151
|
opacity: 0;
|
|
149
152
|
}
|
|
@@ -151,7 +154,7 @@
|
|
|
151
154
|
opacity: 0.6;
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
|
-
@keyframes _close-
|
|
157
|
+
@keyframes _close-backdrop_n31av_1 {
|
|
155
158
|
from {
|
|
156
159
|
opacity: 0.6;
|
|
157
160
|
}
|
package/dist/Dialog.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { D as Dialog, a as DialogContent, b as DialogFooter, c as DialogHeader, D as default } from './Dialog-
|
|
1
|
+
export { D as Dialog, a as DialogContent, b as DialogFooter, c as DialogHeader, D as default } from './Dialog-BwabBKoZ.js';
|
|
2
2
|
export { D as DialogCancelButton } from './DialogCancelButton-sTEfx5kf.js';
|
|
3
3
|
//# sourceMappingURL=Dialog.js.map
|
|
@@ -13,25 +13,33 @@ import { u as useDialogTransitionStates, a as useKeyboardFocusables, b as useIni
|
|
|
13
13
|
import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
|
|
14
14
|
import { r as registerLayer, a as unregisterLayer, b as useOnClickOutside } from './useOnClickOutside-BDzuUjmY.js';
|
|
15
15
|
|
|
16
|
-
import './Drawer.css';const drawer = "
|
|
17
|
-
const container = "
|
|
18
|
-
const content = "
|
|
19
|
-
const header = "
|
|
20
|
-
const footer = "
|
|
21
|
-
const remove = "
|
|
22
|
-
const
|
|
23
|
-
const
|
|
16
|
+
import './Drawer.css';const drawer = "_drawer_ce1vf_2";
|
|
17
|
+
const container = "_container_ce1vf_29";
|
|
18
|
+
const content = "_content_ce1vf_41";
|
|
19
|
+
const header = "_header_ce1vf_47";
|
|
20
|
+
const footer = "_footer_ce1vf_70";
|
|
21
|
+
const remove = "_remove_ce1vf_87";
|
|
22
|
+
const small = "_small_ce1vf_96";
|
|
23
|
+
const large = "_large_ce1vf_99";
|
|
24
|
+
const xlarge = "_xlarge_ce1vf_102";
|
|
25
|
+
const sticky = "_sticky_ce1vf_105";
|
|
24
26
|
const styles = {
|
|
25
27
|
drawer: drawer,
|
|
28
|
+
"close-drawer": "_close-drawer_ce1vf_1",
|
|
29
|
+
"open-drawer": "_open-drawer_ce1vf_1",
|
|
30
|
+
"open-backdrop": "_open-backdrop_ce1vf_1",
|
|
26
31
|
container: container,
|
|
27
32
|
content: content,
|
|
28
33
|
header: header,
|
|
29
|
-
"close-container": "_close-
|
|
34
|
+
"close-container": "_close-container_ce1vf_63",
|
|
30
35
|
footer: footer,
|
|
31
36
|
remove: remove,
|
|
37
|
+
"close-backdrop": "_close-backdrop_ce1vf_1",
|
|
38
|
+
small: small,
|
|
32
39
|
large: large,
|
|
40
|
+
xlarge: xlarge,
|
|
33
41
|
sticky: sticky,
|
|
34
|
-
"close-button": "_close-
|
|
42
|
+
"close-button": "_close-button_ce1vf_121"
|
|
35
43
|
};
|
|
36
44
|
|
|
37
45
|
function useDrawerContext() {
|
|
@@ -217,7 +225,7 @@ const DrawerElement = forwardRef(
|
|
|
217
225
|
});
|
|
218
226
|
const classNames = cx([styles.drawer], className, {
|
|
219
227
|
[styles.remove]: state === "closing",
|
|
220
|
-
[styles
|
|
228
|
+
[styles[size]]: true
|
|
221
229
|
});
|
|
222
230
|
const { focusables } = useKeyboardFocusables(contentRef, {
|
|
223
231
|
observeChange: false
|
|
@@ -396,4 +404,4 @@ const Drawer = Object.assign(DrawerElement, {
|
|
|
396
404
|
});
|
|
397
405
|
|
|
398
406
|
export { Drawer as D, DrawerCancelButton as a, DrawerFooter as b, DrawerHeader as c, DrawerContent as d };
|
|
399
|
-
//# sourceMappingURL=Drawer-
|
|
407
|
+
//# sourceMappingURL=Drawer-GXeoK-r9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer-GXeoK-r9.js","sources":["../src/components/Drawer/internal/useDrawerContext.ts","../src/components/Drawer/DrawerCancelButton.tsx","../src/components/Drawer/DrawerHeader.tsx","../src/components/Drawer/DrawerFooter.tsx","../src/components/Drawer/DrawerContent.tsx","../src/components/Drawer/Drawer.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\n/**\n * Hook to access the drawer context.\n *\n * @returns The drawer context containing close function and ref\n * @throws Error if used outside of a DrawerContextProvider\n */\nexport function useDrawerContext() {\n const context = useContext(DrawerContext);\n if (!context) {\n throw new Error(\n \"useDrawerContext must be used within a DrawerContextProvider\",\n );\n }\n return context;\n}\n","import { MouseEvent, forwardRef } from \"react\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { useDrawerContext } from \"./internal/useDrawerContext\";\n\n/**\n * Props for the DrawerCancelButton component\n * @extends ButtonProps\n */\nexport type DrawerCancelButtonProps = ButtonProps & DataTrackingId;\n\n/**\n * A button component that automatically closes the drawer when clicked.\n *\n * Features:\n * - Automatically closes the drawer when clicked\n * - Extends Button component functionality\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard button props\n * - Proper focus management\n * - Can be used anywhere within the drawer context\n *\n * @example\n * <DrawerCancelButton appearance=\"ghost\" size=\"small\">\n * Cancel\n * </DrawerCancelButton>\n */\nexport const DrawerCancelButton = forwardRef<\n HTMLButtonElement,\n DrawerCancelButtonProps\n>((props, ref) => {\n const { onClick, ...rest } = props;\n const { close } = useDrawerContext();\n const data = {\n children: childrenToString(props.children),\n appearance: props.appearance,\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"DrawerCancelButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n close();\n };\n return (\n <Button\n aria-label=\"Close drawer\"\n data-anv=\"drawer-cancel-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n ref={ref}\n {...rest}\n />\n );\n});\n\nDrawerCancelButton.displayName = \"DrawerCancelButton\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport styles from \"./Drawer.module.scss\";\nimport { Text } from \"../Text\";\nimport { DrawerCancelButton } from \"./DrawerCancelButton\";\nimport cx from \"classnames\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { useDrawerContext } from \"./internal/useDrawerContext\";\n\n/**\n * Props for the DrawerHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type DrawerHeaderProps = ComponentPropsWithoutRef<\"header\"> &\n DataTrackingId;\n\n/**\n * Header component for the drawer that displays a title and close button.\n *\n * Features:\n * - Displays the drawer title as a headline\n * - Includes an accessible close button\n * - Sticky positioning at the top of the drawer\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Automatic close functionality\n *\n * @example\n * <Drawer.Header>Settings</Drawer.Header>\n */\nexport const DrawerHeader = forwardRef<HTMLHeadElement, DrawerHeaderProps>(\n (props, ref) => {\n const { className, children } = props;\n const { headerRef } = useDrawerContext();\n const data = {\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"DrawerHeader\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const drawerHeaderClasses = cx(styles.header, className);\n\n return (\n <header\n className={drawerHeaderClasses}\n data-anv=\"drawer-header\"\n data-tracking-id={trackingId}\n ref={useMergeRefs([ref, headerRef])}\n >\n <Text variant=\"headline\" el=\"h1\">\n {children}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DrawerCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close drawer\"\n data-anv=\"drawer-header-close-button\"\n icon={Close}\n />\n </span>\n </header>\n );\n },\n);\n\nDrawerHeader.displayName = \"DrawerHeader\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport styles from \"./Drawer.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the DrawerFooter component\n * @extends ComponentPropsWithoutRef<\"footer\">\n */\nexport type DrawerFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /**\n * When true, the footer will stick to the bottom of the drawer.\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * Footer component for the drawer that displays action buttons and controls.\n *\n * Features:\n * - Flexible layout for action buttons and controls\n * - Optional sticky positioning at the bottom\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard footer element props\n * - Responsive design that adapts to content\n *\n * @example\n * <Drawer.Footer sticky>\n * <Button onClick={handleSave}>Save</Button>\n * <Button onClick={handleCancel}>Cancel</Button>\n * </Drawer.Footer>\n */\nexport const DrawerFooter = forwardRef<HTMLElement, DrawerFooterProps>(\n (props, ref) => {\n const { className, children, sticky = false, ...rest } = props;\n const drawerFooterClasses = cx(styles.footer, className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={drawerFooterClasses}\n data-anv=\"drawer-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nDrawerFooter.displayName = \"DrawerFooter\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useState,\n} from \"react\";\nimport styles from \"./Drawer.module.scss\";\nimport cx from \"classnames\";\nimport { useDrawerContext } from \"./internal/useDrawerContext\";\n\n/**\n * Props for the DrawerContent component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type DrawerContentProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * When true, the content will stick below the header during scroll.\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * Content container for the drawer that holds the main content area.\n *\n * Features:\n * - Flexible content area with proper spacing\n * - Scrollable content when needed\n * - Optional sticky positioning below header\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard div element props\n * - Responsive design that adapts to content\n * - Proper focus management\n *\n * @example\n * // Basic content\n * <Drawer.Content>\n * <p>This is the main content of the drawer.</p>\n * </Drawer.Content>\n *\n * @example\n * // Sticky content (e.g., search field that remains visible while scrolling)\n * <Drawer.Content sticky>\n * <TextField placeholder=\"Filter results...\" />\n * </Drawer.Content>\n */\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n (props, ref) => {\n const { children, className, sticky = false, ...rest } = props;\n const { headerRef } = useDrawerContext();\n const [headerHeight, setHeaderHeight] = useState(0);\n\n useEffect(() => {\n const headerElement = headerRef?.current;\n if (!sticky || !headerElement) return;\n\n const updateHeight = () => {\n setHeaderHeight(headerElement.offsetHeight || 0);\n };\n\n updateHeight();\n const resizeObserver = new ResizeObserver(updateHeight);\n resizeObserver.observe(headerElement);\n\n return () => resizeObserver.disconnect();\n }, [sticky, headerRef]);\n\n const contentClassNames = cx(styles[\"content\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n const stickyStyle = sticky ? { top: `${headerHeight}px` } : undefined;\n\n return (\n <div\n className={contentClassNames}\n data-anv=\"drawer-content\"\n ref={ref}\n style={{ ...stickyStyle, ...rest.style }}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDrawerContent.displayName = \"DrawerContent\";\n","import styles from \"./Drawer.module.scss\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useRef,\n useId,\n useCallback,\n useEffect,\n SyntheticEvent,\n KeyboardEvent,\n useMemo,\n} from \"react\";\nimport { DrawerHeader } from \"./DrawerHeader\";\nimport { DrawerFooter } from \"./DrawerFooter\";\nimport { DrawerContent } from \"./DrawerContent\";\nimport { DrawerCancelButton } from \"./DrawerCancelButton\";\nimport {\n OpenCloseTransitionStateEffects,\n useDialogScrollLock,\n useDialogTransitionStates,\n useKeyboardFocusables,\n useOnClickOutside,\n} from \"../../internal/hooks\";\nimport {\n FocusableElement,\n DisableCloseOnEscapeOrClickProps,\n Size,\n} from \"../../types\";\nimport { registerLayer, unregisterLayer } from \"../../internal/utils\";\nimport { useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\nimport { ToastProvider } from \"../Toast/internal/ToastProvider\";\nimport { ToasterPopover } from \"../Toast/internal/ToasterPopover\";\nimport { ToasterContent } from \"../Toast/internal/Toaster\";\nimport { DrawerContext } from \"./internal/DrawerContext\";\nimport { useInitialFocus } from \"../Dialog/internal/useInitialFocus\";\n\n/**\n * Props for the Drawer component\n * @extends ComponentPropsWithoutRef<\"dialog\">\n * @extends DialogTransitionStateEffects\n * @extends DisableCloseOnEscapeOrClickProps\n */\nexport type DrawerProps = ComponentPropsWithoutRef<\"dialog\"> &\n OpenCloseTransitionStateEffects &\n DisableCloseOnEscapeOrClickProps & {\n /**\n * The size of the drawer.\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\" | \"large\" | \"xlarge\">;\n /**\n * Controls whether the drawer is open or closed.\n * @default false\n */\n open?: boolean;\n /**\n * Callback function called after the drawer is animated closed.\n */\n onClose?: () => void;\n /**\n * Callback function called when the drawer opens.\n * @deprecated Use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpen?: () => void;\n /**\n * Callback when clicking outside the drawer\n */\n onClickOutside?: (e: globalThis.MouseEvent) => void;\n /**\n * Enables scroll chaining behavior.\n * @link https://developer.mozilla.org/en-US/docs/Glossary/Scroll_chaining\n */\n enableScrollChaining?: boolean;\n /**\n * Given an array of focusable elements, return the initial focus target.\n * @param focusables - The focusable elements to pick from\n * @returns The initial focus target\n */\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n };\n\nconst DrawerElement = forwardRef<HTMLDialogElement, DrawerProps>(\n (props, ref) => {\n const {\n className,\n open = false,\n children,\n onOpen,\n onClose,\n // onCancel is destructured so that it is not passed to the dialog in ...rest\n onCancel,\n onKeyDown,\n disableCloseOnEscape = false,\n onClickOutside,\n disableCloseOnClickOutside = false,\n size = \"medium\",\n enableScrollChaining,\n onOpenAnimationStart,\n onOpenAnimationComplete,\n onCloseAnimationStart,\n onCloseAnimationComplete,\n initialFocusResolver,\n ...rest\n } = props;\n\n const elRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const toasterRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<HTMLElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n const id = useId();\n\n const { state, isOpenOrOpening } = useDialogTransitionStates(elRef, open, {\n onOpenAnimationStart: useCallback(() => {\n onOpenAnimationStart?.();\n }, [onOpenAnimationStart]),\n onOpenAnimationComplete: useCallback(() => {\n onOpenAnimationComplete?.();\n onOpen?.(); // DEPRECATED\n }, [onOpen, onOpenAnimationComplete]),\n onCloseAnimationStart: useCallback(() => {\n onCloseAnimationStart?.();\n }, [onCloseAnimationStart]),\n onCloseAnimationComplete: useCallback(() => {\n onCloseAnimationComplete?.();\n }, [onCloseAnimationComplete]),\n });\n\n const classNames = cx([styles.drawer], className, {\n [styles.remove]: state === \"closing\",\n [styles[size]]: true,\n });\n\n const { focusables } = useKeyboardFocusables(contentRef, {\n observeChange: false,\n });\n const firstFocusable = focusables?.[0];\n const lastFocusable = focusables?.[focusables.length - 1];\n\n useDialogScrollLock({\n open: isOpenOrOpening,\n id,\n enableScrollChaining,\n elementRef: elRef,\n });\n\n // Register/unregister with layer manager for proper stacking\n useEffect(() => {\n if (open) {\n registerLayer(id);\n } else {\n unregisterLayer(id);\n }\n\n // Cleanup when component unmounts\n return () => {\n unregisterLayer(id);\n };\n }, [open, id]);\n\n const computeFocus = useCallback((focusables: FocusableElement[]) => {\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"drawer-header-close-button\",\n ) || focusables[0]\n );\n }, []);\n\n useInitialFocus(elRef, {\n computeFocus: initialFocusResolver || computeFocus,\n });\n\n const onCancelHandler = (e: SyntheticEvent<HTMLDialogElement>) => {\n e.preventDefault();\n\n if (disableCloseOnEscape) return;\n onClose?.();\n };\n\n useOnClickOutside({\n onOutsidePress: (e) => {\n if (!open) return;\n onClickOutside?.(e);\n },\n targets: [\n contentRef.current as HTMLElement,\n toasterRef.current as HTMLElement,\n ],\n onClose: () => {\n if (disableCloseOnClickOutside || !open) return;\n onClose?.();\n },\n layerId: id,\n });\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(e);\n if (e.code === \"Tab\") {\n if (e.shiftKey && e.target === firstFocusable) {\n e.preventDefault();\n (lastFocusable as HTMLElement)?.focus();\n return;\n }\n if (e.target === lastFocusable && !e.shiftKey) {\n e.preventDefault();\n (firstFocusable as HTMLElement)?.focus();\n return;\n }\n }\n };\n\n const contextValue = useMemo(() => {\n return { close: () => onClose?.(), headerRef };\n }, [onClose]);\n\n return (\n // dialog element does seem to be interactive on MDN guideline\n <dialog\n className={classNames}\n data-anv=\"drawer\"\n data-anv-scroll-chaining={enableScrollChaining}\n data-anv-transition-state={state}\n ref={combinedRef}\n onCancel={onCancelHandler}\n onKeyDown={onKeyDownHandler}\n {...rest}\n >\n <ToastProvider isDialogToaster={isOpenOrOpening}>\n <ToasterPopover>\n <ToasterContent id=\"drawer-toaster\" ref={toasterRef} />\n </ToasterPopover>\n </ToastProvider>\n <DrawerContext.Provider value={contextValue}>\n <section\n ref={contentRef}\n className={styles.container}\n data-open={isOpenOrOpening}\n >\n {children}\n </section>\n </DrawerContext.Provider>\n </dialog>\n );\n },\n);\nDrawerElement.displayName = \"Drawer\";\n\n/**\n * A slide-out drawer component that provides a modal-like experience from the side of the screen.\n *\n * Features:\n * - Slide-in animation from the side of the screen\n * - Keyboard navigation with focus trapping\n * - Escape key and click outside to close\n * - Configurable size variants (medium, large)\n * - Built-in toast support for notifications\n * - Automatic scroll locking when open\n * - Accessible with proper ARIA attributes\n * - Compound component structure with Header, Footer, Content, and CancelButton\n * - Transition state callbacks for animation control\n * - Optional scroll chaining support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer open={isOpen} onClose={handleClose} size=\"medium\">\n * <Drawer.Header>Settings</Drawer.Header>\n * <Drawer.Content>Drawer content goes here</Drawer.Content>\n * <Drawer.Footer>\n * <Button onClick={handleSave}>Save</Button>\n * <Drawer.CancelButton>Cancel</Drawer.CancelButton>\n * </Drawer.Footer>\n * </Drawer>\n */\nexport const Drawer = Object.assign(DrawerElement, {\n /**\n * Header component for the drawer that displays a title and close button.\n *\n * Features:\n * - Displays the drawer title as a headline\n * - Includes an accessible close button\n * - Sticky positioning at the top of the drawer\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Automatic close functionality\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer.Header>Settings</Drawer.Header>\n */\n Header: DrawerHeader,\n /**\n * Footer component for the drawer that displays action buttons and controls.\n *\n * Features:\n * - Flexible layout for action buttons and controls\n * - Optional sticky positioning at the bottom\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard footer element props\n * - Responsive design that adapts to content\n *\n * @example\n * <Drawer.Footer sticky>\n * <Button onClick={handleSave}>Save</Button>\n * <Drawer.CancelButton>Cancel</Drawer.CancelButton>\n * </Drawer.Footer>\n */\n Footer: DrawerFooter,\n /**\n * Content container for the drawer that holds the main content area.\n *\n * Features:\n * - Flexible content area with proper spacing\n * - Scrollable content when needed\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard div element props\n * - Responsive design that adapts to content\n * - Proper focus management\n *\n * @example\n * <Drawer.Content>\n * <p>This is the main content of the drawer.</p>\n * <p>It can contain any type of content.</p>\n * </Drawer.Content>\n */\n Content: DrawerContent,\n /**\n * A button component that automatically closes the drawer when clicked.\n *\n * Features:\n * - Automatically closes the drawer when clicked\n * - Extends Button component functionality\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard button props\n * - Proper focus management\n * - Can be used anywhere within the drawer context\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer.CancelButton appearance=\"ghost\" size=\"small\">\n * Cancel\n * </Drawer.CancelButton>\n */\n CancelButton: DrawerCancelButton,\n});\n"],"names":["Close","focusables"],"mappings":"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"}
|