@jsekulowicz/ds-components 0.13.2 → 0.14.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/custom-elements.json +392 -4
- package/dist/atoms/segmented-control/define.d.ts +7 -0
- package/dist/atoms/segmented-control/define.d.ts.map +1 -0
- package/dist/atoms/segmented-control/define.js +5 -0
- package/dist/atoms/segmented-control/define.js.map +1 -0
- package/dist/atoms/segmented-control/index.d.ts +2 -0
- package/dist/atoms/segmented-control/index.d.ts.map +1 -0
- package/dist/atoms/segmented-control/index.js +2 -0
- package/dist/atoms/segmented-control/index.js.map +1 -0
- package/dist/atoms/segmented-control/segmented-control.d.ts +30 -0
- package/dist/atoms/segmented-control/segmented-control.d.ts.map +1 -0
- package/dist/atoms/segmented-control/segmented-control.js +81 -0
- package/dist/atoms/segmented-control/segmented-control.js.map +1 -0
- package/dist/atoms/segmented-control/segmented-control.styles.d.ts +2 -0
- package/dist/atoms/segmented-control/segmented-control.styles.d.ts.map +1 -0
- package/dist/atoms/segmented-control/segmented-control.styles.js +64 -0
- package/dist/atoms/segmented-control/segmented-control.styles.js.map +1 -0
- package/dist/atoms/table/table-scroll-body.styles.d.ts.map +1 -1
- package/dist/atoms/table/table-scroll-body.styles.js +11 -24
- package/dist/atoms/table/table-scroll-body.styles.js.map +1 -1
- package/dist/atoms/table/table.d.ts +1 -0
- package/dist/atoms/table/table.d.ts.map +1 -1
- package/dist/atoms/table/table.js +2 -0
- package/dist/atoms/table/table.js.map +1 -1
- package/dist/define.d.ts +1 -0
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +1 -0
- package/dist/define.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/molecules/dialog/dialog.d.ts +1 -0
- package/dist/molecules/dialog/dialog.d.ts.map +1 -1
- package/dist/molecules/dialog/dialog.js +11 -2
- package/dist/molecules/dialog/dialog.js.map +1 -1
- package/dist/molecules/dialog/dialog.styles.d.ts.map +1 -1
- package/dist/molecules/dialog/dialog.styles.js +2 -26
- package/dist/molecules/dialog/dialog.styles.js.map +1 -1
- package/dist/molecules/drawer/drawer.d.ts +1 -0
- package/dist/molecules/drawer/drawer.d.ts.map +1 -1
- package/dist/molecules/drawer/drawer.js +11 -2
- package/dist/molecules/drawer/drawer.js.map +1 -1
- package/dist/molecules/drawer/drawer.styles.d.ts.map +1 -1
- package/dist/molecules/drawer/drawer.styles.js +2 -24
- package/dist/molecules/drawer/drawer.styles.js.map +1 -1
- package/dist/shared/scroll-fade-controller.d.ts +9 -0
- package/dist/shared/scroll-fade-controller.d.ts.map +1 -0
- package/dist/shared/scroll-fade-controller.js +92 -0
- package/dist/shared/scroll-fade-controller.js.map +1 -0
- package/dist/shared/scroll-fade.styles.d.ts +1 -0
- package/dist/shared/scroll-fade.styles.d.ts.map +1 -1
- package/dist/shared/scroll-fade.styles.js +42 -35
- package/dist/shared/scroll-fade.styles.js.map +1 -1
- package/package.json +9 -2
package/custom-elements.json
CHANGED
|
@@ -253,6 +253,22 @@
|
|
|
253
253
|
"module": "./atoms/radio-group/index.js"
|
|
254
254
|
}
|
|
255
255
|
},
|
|
256
|
+
{
|
|
257
|
+
"kind": "js",
|
|
258
|
+
"name": "DsSegmentedControl",
|
|
259
|
+
"declaration": {
|
|
260
|
+
"name": "DsSegmentedControl",
|
|
261
|
+
"module": "./atoms/segmented-control/index.js"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"kind": "js",
|
|
266
|
+
"name": "SegmentedControlOption",
|
|
267
|
+
"declaration": {
|
|
268
|
+
"name": "SegmentedControlOption",
|
|
269
|
+
"module": "./atoms/segmented-control/index.js"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
256
272
|
{
|
|
257
273
|
"kind": "js",
|
|
258
274
|
"name": "DsSelect",
|
|
@@ -845,6 +861,150 @@
|
|
|
845
861
|
}
|
|
846
862
|
]
|
|
847
863
|
},
|
|
864
|
+
{
|
|
865
|
+
"kind": "javascript-module",
|
|
866
|
+
"path": "src/shared/scroll-fade-controller.ts",
|
|
867
|
+
"declarations": [
|
|
868
|
+
{
|
|
869
|
+
"kind": "class",
|
|
870
|
+
"description": "",
|
|
871
|
+
"name": "ScrollFadeController",
|
|
872
|
+
"members": [
|
|
873
|
+
{
|
|
874
|
+
"kind": "field",
|
|
875
|
+
"name": "#getScroller",
|
|
876
|
+
"privacy": "private",
|
|
877
|
+
"type": {
|
|
878
|
+
"text": "() => HTMLElement | null | undefined"
|
|
879
|
+
},
|
|
880
|
+
"default": "getScroller"
|
|
881
|
+
},
|
|
882
|
+
{
|
|
883
|
+
"kind": "field",
|
|
884
|
+
"name": "#scroller",
|
|
885
|
+
"privacy": "private",
|
|
886
|
+
"type": {
|
|
887
|
+
"text": "HTMLElement | null"
|
|
888
|
+
},
|
|
889
|
+
"default": "null"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"kind": "field",
|
|
893
|
+
"name": "#resize",
|
|
894
|
+
"privacy": "private",
|
|
895
|
+
"type": {
|
|
896
|
+
"text": "ResizeObserver | undefined"
|
|
897
|
+
}
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
"kind": "field",
|
|
901
|
+
"name": "#mutation",
|
|
902
|
+
"privacy": "private",
|
|
903
|
+
"type": {
|
|
904
|
+
"text": "MutationObserver | undefined"
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"kind": "field",
|
|
909
|
+
"name": "#frame",
|
|
910
|
+
"privacy": "private",
|
|
911
|
+
"type": {
|
|
912
|
+
"text": "number"
|
|
913
|
+
},
|
|
914
|
+
"default": "0"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"kind": "method",
|
|
918
|
+
"name": "hostConnected",
|
|
919
|
+
"return": {
|
|
920
|
+
"type": {
|
|
921
|
+
"text": "void"
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"kind": "method",
|
|
927
|
+
"name": "hostUpdated",
|
|
928
|
+
"return": {
|
|
929
|
+
"type": {
|
|
930
|
+
"text": "void"
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"kind": "method",
|
|
936
|
+
"name": "hostDisconnected",
|
|
937
|
+
"return": {
|
|
938
|
+
"type": {
|
|
939
|
+
"text": "void"
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"kind": "method",
|
|
945
|
+
"name": "#tryAttach",
|
|
946
|
+
"privacy": "private",
|
|
947
|
+
"return": {
|
|
948
|
+
"type": {
|
|
949
|
+
"text": "void"
|
|
950
|
+
}
|
|
951
|
+
},
|
|
952
|
+
"parameters": [
|
|
953
|
+
{
|
|
954
|
+
"name": "attempt",
|
|
955
|
+
"default": "0"
|
|
956
|
+
}
|
|
957
|
+
]
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
"kind": "method",
|
|
961
|
+
"name": "#detach",
|
|
962
|
+
"privacy": "private",
|
|
963
|
+
"return": {
|
|
964
|
+
"type": {
|
|
965
|
+
"text": "void"
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"kind": "field",
|
|
971
|
+
"name": "#onScroll",
|
|
972
|
+
"privacy": "private"
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"kind": "method",
|
|
976
|
+
"name": "#schedule",
|
|
977
|
+
"privacy": "private",
|
|
978
|
+
"return": {
|
|
979
|
+
"type": {
|
|
980
|
+
"text": "void"
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
"kind": "method",
|
|
986
|
+
"name": "#update",
|
|
987
|
+
"privacy": "private",
|
|
988
|
+
"return": {
|
|
989
|
+
"type": {
|
|
990
|
+
"text": "void"
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
]
|
|
995
|
+
}
|
|
996
|
+
],
|
|
997
|
+
"exports": [
|
|
998
|
+
{
|
|
999
|
+
"kind": "js",
|
|
1000
|
+
"name": "ScrollFadeController",
|
|
1001
|
+
"declaration": {
|
|
1002
|
+
"name": "ScrollFadeController",
|
|
1003
|
+
"module": "src/shared/scroll-fade-controller.ts"
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
]
|
|
1007
|
+
},
|
|
848
1008
|
{
|
|
849
1009
|
"kind": "javascript-module",
|
|
850
1010
|
"path": "src/shared/scroll-fade.styles.ts",
|
|
@@ -852,7 +1012,12 @@
|
|
|
852
1012
|
{
|
|
853
1013
|
"kind": "variable",
|
|
854
1014
|
"name": "scrollFadeStyles",
|
|
855
|
-
"default": "css`
|
|
1015
|
+
"default": "css` ds-card::part(body), .scroll { --ds-scroll-fade-mask: linear-gradient( to bottom, rgb(0 0 0) 0, rgb(0 0 0) var(--ds-scroll-fade-offset, 0px), var(--ds-scroll-fade-top, rgb(0 0 0)) var(--ds-scroll-fade-offset, 0px), rgb(0 0 0) calc(var(--ds-scroll-fade-offset, 0px) + var(--ds-scroll-fade-depth, var(--ds-space-8))), rgb(0 0 0) calc(100% - var(--ds-scroll-fade-depth, var(--ds-space-8))), var(--ds-scroll-fade-bottom, rgb(0 0 0)) 100% ); } `"
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"kind": "variable",
|
|
1019
|
+
"name": "cardBodyScrollFadeStyles",
|
|
1020
|
+
"default": "css` ds-card::part(body) { flex: 1; min-height: 0; overflow-x: clip; overflow-y: auto; overscroll-behavior: contain; /* Inline padding + negative margin lets focus rings on full-width children paint outside the body's clip box. */ padding-inline: var(--ds-space-2); margin-inline: calc(var(--ds-space-2) * -1); scrollbar-width: none; mask-image: var(--ds-scroll-fade-mask); } ds-card::part(body)::-webkit-scrollbar { display: none; } `"
|
|
856
1021
|
}
|
|
857
1022
|
],
|
|
858
1023
|
"exports": [
|
|
@@ -863,6 +1028,14 @@
|
|
|
863
1028
|
"name": "scrollFadeStyles",
|
|
864
1029
|
"module": "src/shared/scroll-fade.styles.ts"
|
|
865
1030
|
}
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"kind": "js",
|
|
1034
|
+
"name": "cardBodyScrollFadeStyles",
|
|
1035
|
+
"declaration": {
|
|
1036
|
+
"name": "cardBodyScrollFadeStyles",
|
|
1037
|
+
"module": "src/shared/scroll-fade.styles.ts"
|
|
1038
|
+
}
|
|
866
1039
|
}
|
|
867
1040
|
]
|
|
868
1041
|
},
|
|
@@ -5250,6 +5423,200 @@
|
|
|
5250
5423
|
}
|
|
5251
5424
|
]
|
|
5252
5425
|
},
|
|
5426
|
+
{
|
|
5427
|
+
"kind": "javascript-module",
|
|
5428
|
+
"path": "src/atoms/segmented-control/define.ts",
|
|
5429
|
+
"declarations": [],
|
|
5430
|
+
"exports": [
|
|
5431
|
+
{
|
|
5432
|
+
"kind": "custom-element-definition",
|
|
5433
|
+
"name": "ds-segmented-control",
|
|
5434
|
+
"declaration": {
|
|
5435
|
+
"name": "DsSegmentedControl",
|
|
5436
|
+
"module": "/src/atoms/segmented-control/segmented-control.js"
|
|
5437
|
+
}
|
|
5438
|
+
}
|
|
5439
|
+
]
|
|
5440
|
+
},
|
|
5441
|
+
{
|
|
5442
|
+
"kind": "javascript-module",
|
|
5443
|
+
"path": "src/atoms/segmented-control/index.ts",
|
|
5444
|
+
"declarations": [],
|
|
5445
|
+
"exports": [
|
|
5446
|
+
{
|
|
5447
|
+
"kind": "js",
|
|
5448
|
+
"name": "DsSegmentedControl",
|
|
5449
|
+
"declaration": {
|
|
5450
|
+
"name": "DsSegmentedControl",
|
|
5451
|
+
"module": "./segmented-control.js"
|
|
5452
|
+
}
|
|
5453
|
+
},
|
|
5454
|
+
{
|
|
5455
|
+
"kind": "js",
|
|
5456
|
+
"name": "SegmentedControlOption",
|
|
5457
|
+
"declaration": {
|
|
5458
|
+
"name": "SegmentedControlOption",
|
|
5459
|
+
"module": "./segmented-control.js"
|
|
5460
|
+
}
|
|
5461
|
+
}
|
|
5462
|
+
]
|
|
5463
|
+
},
|
|
5464
|
+
{
|
|
5465
|
+
"kind": "javascript-module",
|
|
5466
|
+
"path": "src/atoms/segmented-control/segmented-control.styles.ts",
|
|
5467
|
+
"declarations": [
|
|
5468
|
+
{
|
|
5469
|
+
"kind": "variable",
|
|
5470
|
+
"name": "segmentedControlStyles",
|
|
5471
|
+
"default": "css` :host { display: inline-flex; max-width: 100%; } :host([disabled]) { cursor: not-allowed; opacity: 0.6; } .group { display: inline-flex; align-items: stretch; gap: var(--ds-space-1); padding: var(--ds-space-1); background: var(--ds-color-bg-subtle); border: 1px solid var(--ds-color-border-subtle); border-radius: var(--ds-radius-sm); max-width: 100%; } .segment { display: inline-flex; align-items: center; justify-content: center; gap: var(--ds-space-2); min-width: 0; padding: var(--ds-space-2) var(--ds-space-3); border: 0; background: transparent; color: var(--ds-color-fg-muted); font-family: var(--ds-font-body); font-size: var(--ds-font-size-sm); font-weight: var(--ds-font-weight-medium); line-height: 1; white-space: nowrap; border-radius: var(--ds-radius-sm); cursor: pointer; transition: background var(--ds-duration-fast) var(--ds-easing-standard), color var(--ds-duration-fast) var(--ds-easing-standard), box-shadow var(--ds-duration-fast) var(--ds-easing-standard); } .segment:hover:not([disabled]):not([aria-checked='true']) { color: var(--ds-color-fg); } .segment[aria-checked='true'] { background: var(--ds-color-bg); color: var(--ds-color-fg); box-shadow: var(--ds-shadow-sm); } .segment:focus-visible { outline: none; box-shadow: var(--ds-shadow-focus); } .segment[disabled] { cursor: not-allowed; opacity: 0.5; } .label { overflow: hidden; text-overflow: ellipsis; } `"
|
|
5472
|
+
}
|
|
5473
|
+
],
|
|
5474
|
+
"exports": [
|
|
5475
|
+
{
|
|
5476
|
+
"kind": "js",
|
|
5477
|
+
"name": "segmentedControlStyles",
|
|
5478
|
+
"declaration": {
|
|
5479
|
+
"name": "segmentedControlStyles",
|
|
5480
|
+
"module": "src/atoms/segmented-control/segmented-control.styles.ts"
|
|
5481
|
+
}
|
|
5482
|
+
}
|
|
5483
|
+
]
|
|
5484
|
+
},
|
|
5485
|
+
{
|
|
5486
|
+
"kind": "javascript-module",
|
|
5487
|
+
"path": "src/atoms/segmented-control/segmented-control.ts",
|
|
5488
|
+
"declarations": [
|
|
5489
|
+
{
|
|
5490
|
+
"kind": "class",
|
|
5491
|
+
"description": "",
|
|
5492
|
+
"name": "DsSegmentedControl",
|
|
5493
|
+
"cssParts": [
|
|
5494
|
+
{
|
|
5495
|
+
"description": "The container that holds the segments.",
|
|
5496
|
+
"name": "group"
|
|
5497
|
+
},
|
|
5498
|
+
{
|
|
5499
|
+
"description": "Each option button.",
|
|
5500
|
+
"name": "segment"
|
|
5501
|
+
}
|
|
5502
|
+
],
|
|
5503
|
+
"members": [
|
|
5504
|
+
{
|
|
5505
|
+
"kind": "field",
|
|
5506
|
+
"name": "label",
|
|
5507
|
+
"type": {
|
|
5508
|
+
"text": "string"
|
|
5509
|
+
},
|
|
5510
|
+
"default": "''",
|
|
5511
|
+
"attribute": "label"
|
|
5512
|
+
},
|
|
5513
|
+
{
|
|
5514
|
+
"kind": "field",
|
|
5515
|
+
"name": "value",
|
|
5516
|
+
"type": {
|
|
5517
|
+
"text": "string"
|
|
5518
|
+
},
|
|
5519
|
+
"default": "''",
|
|
5520
|
+
"attribute": "value"
|
|
5521
|
+
},
|
|
5522
|
+
{
|
|
5523
|
+
"kind": "field",
|
|
5524
|
+
"name": "options",
|
|
5525
|
+
"type": {
|
|
5526
|
+
"text": "SegmentedControlOption[]"
|
|
5527
|
+
},
|
|
5528
|
+
"default": "[]",
|
|
5529
|
+
"attribute": "options"
|
|
5530
|
+
},
|
|
5531
|
+
{
|
|
5532
|
+
"kind": "field",
|
|
5533
|
+
"name": "disabled",
|
|
5534
|
+
"type": {
|
|
5535
|
+
"text": "boolean"
|
|
5536
|
+
},
|
|
5537
|
+
"default": "false",
|
|
5538
|
+
"attribute": "disabled",
|
|
5539
|
+
"reflects": true
|
|
5540
|
+
},
|
|
5541
|
+
{
|
|
5542
|
+
"kind": "method",
|
|
5543
|
+
"name": "#select",
|
|
5544
|
+
"privacy": "private",
|
|
5545
|
+
"return": {
|
|
5546
|
+
"type": {
|
|
5547
|
+
"text": "void"
|
|
5548
|
+
}
|
|
5549
|
+
},
|
|
5550
|
+
"parameters": [
|
|
5551
|
+
{
|
|
5552
|
+
"name": "option",
|
|
5553
|
+
"type": {
|
|
5554
|
+
"text": "SegmentedControlOption"
|
|
5555
|
+
}
|
|
5556
|
+
}
|
|
5557
|
+
]
|
|
5558
|
+
}
|
|
5559
|
+
],
|
|
5560
|
+
"events": [
|
|
5561
|
+
{
|
|
5562
|
+
"description": "Fires when the selection changes. Detail: `{ value: string }`.",
|
|
5563
|
+
"name": "ds-change"
|
|
5564
|
+
}
|
|
5565
|
+
],
|
|
5566
|
+
"attributes": [
|
|
5567
|
+
{
|
|
5568
|
+
"name": "label",
|
|
5569
|
+
"type": {
|
|
5570
|
+
"text": "string"
|
|
5571
|
+
},
|
|
5572
|
+
"default": "''",
|
|
5573
|
+
"fieldName": "label"
|
|
5574
|
+
},
|
|
5575
|
+
{
|
|
5576
|
+
"name": "value",
|
|
5577
|
+
"type": {
|
|
5578
|
+
"text": "string"
|
|
5579
|
+
},
|
|
5580
|
+
"default": "''",
|
|
5581
|
+
"fieldName": "value"
|
|
5582
|
+
},
|
|
5583
|
+
{
|
|
5584
|
+
"name": "options",
|
|
5585
|
+
"type": {
|
|
5586
|
+
"text": "SegmentedControlOption[]"
|
|
5587
|
+
},
|
|
5588
|
+
"default": "[]",
|
|
5589
|
+
"fieldName": "options"
|
|
5590
|
+
},
|
|
5591
|
+
{
|
|
5592
|
+
"name": "disabled",
|
|
5593
|
+
"type": {
|
|
5594
|
+
"text": "boolean"
|
|
5595
|
+
},
|
|
5596
|
+
"default": "false",
|
|
5597
|
+
"fieldName": "disabled"
|
|
5598
|
+
}
|
|
5599
|
+
],
|
|
5600
|
+
"superclass": {
|
|
5601
|
+
"name": "DsElement",
|
|
5602
|
+
"package": "@jsekulowicz/ds-core"
|
|
5603
|
+
},
|
|
5604
|
+
"tagName": "ds-segmented-control",
|
|
5605
|
+
"customElement": true,
|
|
5606
|
+
"summary": "Single-select segmented control — a connected row of mutually\nexclusive options, each with an optional leading icon. A token-styled,\ninline alternative to a dropdown when there are only a few choices."
|
|
5607
|
+
}
|
|
5608
|
+
],
|
|
5609
|
+
"exports": [
|
|
5610
|
+
{
|
|
5611
|
+
"kind": "js",
|
|
5612
|
+
"name": "DsSegmentedControl",
|
|
5613
|
+
"declaration": {
|
|
5614
|
+
"name": "DsSegmentedControl",
|
|
5615
|
+
"module": "src/atoms/segmented-control/segmented-control.ts"
|
|
5616
|
+
}
|
|
5617
|
+
}
|
|
5618
|
+
]
|
|
5619
|
+
},
|
|
5253
5620
|
{
|
|
5254
5621
|
"kind": "javascript-module",
|
|
5255
5622
|
"path": "src/atoms/select/define.ts",
|
|
@@ -7445,7 +7812,7 @@
|
|
|
7445
7812
|
{
|
|
7446
7813
|
"kind": "variable",
|
|
7447
7814
|
"name": "tableScrollBodyStyles",
|
|
7448
|
-
"default": "css` :host([scroll-body]) { display: flex; flex-direction: column; min-height: 0; } :host([scroll-body]) .scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; /* No overscroll bounce — the rubber-band at the top/bottom looks glitchy against the pinned header and the offset scroll-fade. */ overscroll-behavior: none; scrollbar-width: none;
|
|
7815
|
+
"default": "css` :host([scroll-body]) { display: flex; flex-direction: column; min-height: 0; } :host([scroll-body]) .scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; /* No overscroll bounce — the rubber-band at the top/bottom looks glitchy against the pinned header and the offset scroll-fade. */ overscroll-behavior: none; scrollbar-width: none; /* Shared scroll-fade mask (driven by ScrollFadeController), offset below the sticky header so it dims the body rather than the header. */ --ds-scroll-fade-offset: var(--ds-table-header-height); mask-image: var(--ds-scroll-fade-mask); } :host([scroll-body]) .scroll::-webkit-scrollbar { display: none; } :host([scroll-body]) thead th { position: sticky; top: 0; z-index: 1; box-sizing: border-box; block-size: var(--ds-table-header-height); } /* Stacked (mobile) layout hides the header and renders rows as cards, so the top fade must NOT be offset by the header height — fade from the very top like ds-dialog / ds-drawer. */ @container (max-width: ${mobileBreakpoint}) { :host([scroll-body]:not([responsive='scroll'])) .scroll { --ds-scroll-fade-offset: 0px; } } `"
|
|
7449
7816
|
}
|
|
7450
7817
|
],
|
|
7451
7818
|
"exports": [
|
|
@@ -7863,6 +8230,13 @@
|
|
|
7863
8230
|
"privacy": "private",
|
|
7864
8231
|
"default": "false"
|
|
7865
8232
|
},
|
|
8233
|
+
{
|
|
8234
|
+
"kind": "field",
|
|
8235
|
+
"name": "_scrollFade",
|
|
8236
|
+
"privacy": "private",
|
|
8237
|
+
"readonly": true,
|
|
8238
|
+
"default": "new ScrollFadeController( this, () => this.shadowRoot?.querySelector('.scroll') as HTMLElement | null, )"
|
|
8239
|
+
},
|
|
7866
8240
|
{
|
|
7867
8241
|
"kind": "field",
|
|
7868
8242
|
"name": "#slotObserver",
|
|
@@ -12561,7 +12935,7 @@
|
|
|
12561
12935
|
{
|
|
12562
12936
|
"kind": "variable",
|
|
12563
12937
|
"name": "dialogStyles",
|
|
12564
|
-
"default": "css` :host { display: contents; } dialog { padding: 0; border: 0; background: transparent; color: inherit; width: calc(100% - var(--ds-space-4)); max-height: min(90vh, 720px); border-radius: var(--ds-radius-sm); box-shadow: var(--ds-shadow-md); overflow: visible; } /* Scope to [open] so closed dialogs stay display:none per UA. */ dialog[open] { display: flex; flex-direction: column; } :host([size='sm']) dialog { max-width: 400px; } :host([size='md']) dialog { max-width: 560px; } :host([size='lg']) dialog { max-width: 800px; } dialog::backdrop { background: rgb(15 23 42 / 0.55); } ds-card { flex: 1; min-height: 0; min-width: 0; } ds-card::part(card) { /* Match the dialog's cap explicitly; percentage heights don't resolve reliably through ds-card's display:block host, so body scroll breaks when content overflows. */ max-height: min(90vh, 720px); box-shadow: none; border-color: transparent; gap: var(--ds-space-3); }
|
|
12938
|
+
"default": "css` :host { display: contents; } dialog { padding: 0; border: 0; background: transparent; color: inherit; width: calc(100% - var(--ds-space-4)); max-height: min(90vh, 720px); border-radius: var(--ds-radius-sm); box-shadow: var(--ds-shadow-md); overflow: visible; } /* Scope to [open] so closed dialogs stay display:none per UA. */ dialog[open] { display: flex; flex-direction: column; } :host([size='sm']) dialog { max-width: 400px; } :host([size='md']) dialog { max-width: 560px; } :host([size='lg']) dialog { max-width: 800px; } dialog::backdrop { background: rgb(15 23 42 / 0.55); } ds-card { flex: 1; min-height: 0; min-width: 0; } ds-card::part(card) { /* Match the dialog's cap explicitly; percentage heights don't resolve reliably through ds-card's display:block host, so body scroll breaks when content overflows. */ max-height: min(90vh, 720px); box-shadow: none; border-color: transparent; gap: var(--ds-space-3); } /* The scrolling body (ds-card::part(body)) + its scroll fade come from the shared cardBodyScrollFadeStyles. */ .title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ds-space-3); } .title-text { margin: 0; flex: 1; font-family: var(--ds-font-display); font-size: var(--ds-font-size-xl); font-weight: var(--ds-font-weight-semibold); letter-spacing: var(--ds-letter-spacing-display); } /* Normalise slotted headings (h1-h6) so UA defaults don't compound with .title-text styles. */ .title-text ::slotted(*) { font: inherit; margin: 0; letter-spacing: inherit; } /* Pull the close button toward the card's top-right corner; the card's own padding would otherwise indent it. */ .close-btn { margin-block-start: calc(var(--ds-space-3) * -1); margin-inline-end: calc(var(--ds-space-3) * -1); } .footer { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--ds-space-2); } `"
|
|
12565
12939
|
}
|
|
12566
12940
|
],
|
|
12567
12941
|
"exports": [
|
|
@@ -12663,6 +13037,13 @@
|
|
|
12663
13037
|
},
|
|
12664
13038
|
"privacy": "private"
|
|
12665
13039
|
},
|
|
13040
|
+
{
|
|
13041
|
+
"kind": "field",
|
|
13042
|
+
"name": "_scrollFade",
|
|
13043
|
+
"privacy": "private",
|
|
13044
|
+
"readonly": true,
|
|
13045
|
+
"default": "new ScrollFadeController( this, () => (this.shadowRoot ?.querySelector('ds-card') ?.shadowRoot?.querySelector('[part~=\"body\"]') as HTMLElement | null) ?? null, )"
|
|
13046
|
+
},
|
|
12666
13047
|
{
|
|
12667
13048
|
"kind": "method",
|
|
12668
13049
|
"name": "show",
|
|
@@ -12824,7 +13205,7 @@
|
|
|
12824
13205
|
{
|
|
12825
13206
|
"kind": "variable",
|
|
12826
13207
|
"name": "drawerStyles",
|
|
12827
|
-
"default": "css` :host { display: contents; } dialog { padding: 0; border: 0; background: transparent; color: inherit; box-shadow: var(--ds-shadow-lg); overflow: visible; height: 100vh; height: 100dvh; max-height: 100%; /* allow-discrete lets display/overlay hold their open values for the slide-in / slide-out duration. */ transition: transform var(--ds-duration-slow) var(--ds-easing-standard), display var(--ds-duration-slow) allow-discrete, overlay var(--ds-duration-slow) allow-discrete; } /* Scope to [open] so closed dialogs stay display:none per UA. */ dialog[open] { display: flex; flex-direction: column; } :host([side='start']) dialog { margin: 0; margin-inline-end: auto; transform: translateX(-100%); } :host([side='end']) dialog { margin: 0; margin-inline-start: auto; transform: translateX(100%); } :host([side='start']) dialog[open], :host([side='end']) dialog[open] { transform: translateX(0); } @starting-style { :host([side='start']) dialog[open] { transform: translateX(-100%); } :host([side='end']) dialog[open] { transform: translateX(100%); } } :host([size='sm']) dialog { width: min(20rem, 90vw); } :host([size='md']) dialog { width: min(24rem, 90vw); } :host([size='lg']) dialog { width: min(28rem, 90vw); } dialog::backdrop { background: rgb(15 23 42 / 0.55); } ds-card { flex: 1; min-height: 0; min-width: 0; } ds-card::part(card) { /* Fill the dialog explicitly; percentage heights don't resolve reliably through ds-card's display:block host. */ height: 100vh; height: 100dvh; max-height: 100vh; max-height: 100dvh; box-shadow: none; /* border: 0 not transparent — a 1px transparent border still fills with the card's own background (background-clip: border-box). */ border: 0; border-radius: 0; gap: var(--ds-space-3); padding: var(--ds-drawer-card-padding, var(--ds-space-6)); }
|
|
13208
|
+
"default": "css` :host { display: contents; } dialog { padding: 0; border: 0; background: transparent; color: inherit; box-shadow: var(--ds-shadow-lg); overflow: visible; height: 100vh; height: 100dvh; max-height: 100%; /* allow-discrete lets display/overlay hold their open values for the slide-in / slide-out duration. */ transition: transform var(--ds-duration-slow) var(--ds-easing-standard), display var(--ds-duration-slow) allow-discrete, overlay var(--ds-duration-slow) allow-discrete; } /* Scope to [open] so closed dialogs stay display:none per UA. */ dialog[open] { display: flex; flex-direction: column; } :host([side='start']) dialog { margin: 0; margin-inline-end: auto; transform: translateX(-100%); } :host([side='end']) dialog { margin: 0; margin-inline-start: auto; transform: translateX(100%); } :host([side='start']) dialog[open], :host([side='end']) dialog[open] { transform: translateX(0); } @starting-style { :host([side='start']) dialog[open] { transform: translateX(-100%); } :host([side='end']) dialog[open] { transform: translateX(100%); } } :host([size='sm']) dialog { width: min(20rem, 90vw); } :host([size='md']) dialog { width: min(24rem, 90vw); } :host([size='lg']) dialog { width: min(28rem, 90vw); } dialog::backdrop { background: rgb(15 23 42 / 0.55); } ds-card { flex: 1; min-height: 0; min-width: 0; } ds-card::part(card) { /* Fill the dialog explicitly; percentage heights don't resolve reliably through ds-card's display:block host. */ height: 100vh; height: 100dvh; max-height: 100vh; max-height: 100dvh; box-shadow: none; /* border: 0 not transparent — a 1px transparent border still fills with the card's own background (background-clip: border-box). */ border: 0; border-radius: 0; gap: var(--ds-space-3); padding: var(--ds-drawer-card-padding, var(--ds-space-6)); } /* The scrolling body (ds-card::part(body)) + its scroll fade come from the shared cardBodyScrollFadeStyles. */ .title-row { display: flex; align-items: center; justify-content: space-between; gap: var(--ds-space-3); background: var(--ds-drawer-title-bg, transparent); color: var(--ds-drawer-title-fg, inherit); border-bottom: 1px solid var(--ds-drawer-title-border-color, transparent); padding: var(--ds-drawer-title-padding, 0); min-height: var(--ds-drawer-title-min-height, auto); } .title-text { margin: 0; flex: 1; /* Flex-centre the slotted content; otherwise the h2's line-height inflates the title-row height and content sits at the baseline. */ display: flex; align-items: center; line-height: 1; font-family: var(--ds-font-display); font-size: var(--ds-font-size-xl); font-weight: var(--ds-font-weight-semibold); letter-spacing: var(--ds-letter-spacing-display); } .title-text ::slotted(*) { font: inherit; margin: 0; letter-spacing: inherit; } .close-btn::part(button) { color: var(--ds-drawer-title-fg, inherit); } .footer { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--ds-space-2); } `"
|
|
12828
13209
|
}
|
|
12829
13210
|
],
|
|
12830
13211
|
"exports": [
|
|
@@ -12936,6 +13317,13 @@
|
|
|
12936
13317
|
},
|
|
12937
13318
|
"privacy": "private"
|
|
12938
13319
|
},
|
|
13320
|
+
{
|
|
13321
|
+
"kind": "field",
|
|
13322
|
+
"name": "_scrollFade",
|
|
13323
|
+
"privacy": "private",
|
|
13324
|
+
"readonly": true,
|
|
13325
|
+
"default": "new ScrollFadeController( this, () => (this.shadowRoot ?.querySelector('ds-card') ?.shadowRoot?.querySelector('[part~=\"body\"]') as HTMLElement | null) ?? null, )"
|
|
13326
|
+
},
|
|
12939
13327
|
{
|
|
12940
13328
|
"kind": "method",
|
|
12941
13329
|
"name": "show",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/atoms/segmented-control/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/atoms/segmented-control/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;IAChD,cAAc,CAAC,MAAM,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/segmented-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/atoms/segmented-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA+B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type TemplateResult } from 'lit';
|
|
2
|
+
import { DsElement } from '@jsekulowicz/ds-core';
|
|
3
|
+
import '../icon/define.js';
|
|
4
|
+
export interface SegmentedControlOption {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
/** Optional leading icon glyph name (the glyph must be imported by the host). */
|
|
8
|
+
icon?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @tag ds-segmented-control
|
|
13
|
+
* @summary Single-select segmented control — a connected row of mutually
|
|
14
|
+
* exclusive options, each with an optional leading icon. A token-styled,
|
|
15
|
+
* inline alternative to a dropdown when there are only a few choices.
|
|
16
|
+
* @event ds-change - Fires when the selection changes. Detail: `{ value: string }`.
|
|
17
|
+
* @csspart group - The container that holds the segments.
|
|
18
|
+
* @csspart segment - Each option button.
|
|
19
|
+
*/
|
|
20
|
+
export declare class DsSegmentedControl extends DsElement {
|
|
21
|
+
#private;
|
|
22
|
+
static styles: import("lit").CSSResult[];
|
|
23
|
+
label: string;
|
|
24
|
+
value: string;
|
|
25
|
+
options: SegmentedControlOption[];
|
|
26
|
+
disabled: boolean;
|
|
27
|
+
connectedCallback(): void;
|
|
28
|
+
render(): TemplateResult;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=segmented-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented-control.d.ts","sourceRoot":"","sources":["../../../src/atoms/segmented-control/segmented-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,mBAAmB,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;;IAC/C,OAAgB,MAAM,4BAAiD;IAE3D,KAAK,SAAM;IACX,KAAK,SAAM;IACI,OAAO,EAAE,sBAAsB,EAAE,CAAM;IACtB,QAAQ,UAAS;IAEpD,iBAAiB,IAAI,IAAI;IAiBzB,MAAM,IAAI,cAAc;CAyBlC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { html, nothing } from 'lit';
|
|
8
|
+
import { property } from 'lit/decorators.js';
|
|
9
|
+
import { DsElement } from '@jsekulowicz/ds-core';
|
|
10
|
+
import { segmentedControlStyles } from './segmented-control.styles.js';
|
|
11
|
+
import '../icon/define.js';
|
|
12
|
+
/**
|
|
13
|
+
* @tag ds-segmented-control
|
|
14
|
+
* @summary Single-select segmented control — a connected row of mutually
|
|
15
|
+
* exclusive options, each with an optional leading icon. A token-styled,
|
|
16
|
+
* inline alternative to a dropdown when there are only a few choices.
|
|
17
|
+
* @event ds-change - Fires when the selection changes. Detail: `{ value: string }`.
|
|
18
|
+
* @csspart group - The container that holds the segments.
|
|
19
|
+
* @csspart segment - Each option button.
|
|
20
|
+
*/
|
|
21
|
+
export class DsSegmentedControl extends DsElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
this.label = '';
|
|
25
|
+
this.value = '';
|
|
26
|
+
this.options = [];
|
|
27
|
+
this.disabled = false;
|
|
28
|
+
}
|
|
29
|
+
static { this.styles = [...DsElement.styles, segmentedControlStyles]; }
|
|
30
|
+
connectedCallback() {
|
|
31
|
+
super.connectedCallback();
|
|
32
|
+
if (!this.label) {
|
|
33
|
+
console.warn('<ds-segmented-control>: the `label` property is required for accessibility.');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
#select(option) {
|
|
37
|
+
if (this.disabled || option.disabled || option.value === this.value) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.value = option.value;
|
|
41
|
+
this.emit('ds-change', { detail: { value: option.value } });
|
|
42
|
+
}
|
|
43
|
+
render() {
|
|
44
|
+
return html `
|
|
45
|
+
<div class="group" role="radiogroup" aria-label=${this.label} part="group">
|
|
46
|
+
${this.options.map(option => {
|
|
47
|
+
const selected = option.value === this.value;
|
|
48
|
+
return html `
|
|
49
|
+
<button
|
|
50
|
+
type="button"
|
|
51
|
+
class="segment"
|
|
52
|
+
part="segment"
|
|
53
|
+
role="radio"
|
|
54
|
+
aria-checked=${selected ? 'true' : 'false'}
|
|
55
|
+
?disabled=${this.disabled || option.disabled}
|
|
56
|
+
@click=${() => this.#select(option)}
|
|
57
|
+
>
|
|
58
|
+
${option.icon
|
|
59
|
+
? html `<ds-icon name=${option.icon} size="md" part="icon"></ds-icon>`
|
|
60
|
+
: nothing}
|
|
61
|
+
<span class="label">${option.label}</span>
|
|
62
|
+
</button>
|
|
63
|
+
`;
|
|
64
|
+
})}
|
|
65
|
+
</div>
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
__decorate([
|
|
70
|
+
property()
|
|
71
|
+
], DsSegmentedControl.prototype, "label", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
property()
|
|
74
|
+
], DsSegmentedControl.prototype, "value", void 0);
|
|
75
|
+
__decorate([
|
|
76
|
+
property({ type: Array })
|
|
77
|
+
], DsSegmentedControl.prototype, "options", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
property({ type: Boolean, reflect: true })
|
|
80
|
+
], DsSegmentedControl.prototype, "disabled", void 0);
|
|
81
|
+
//# sourceMappingURL=segmented-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented-control.js","sourceRoot":"","sources":["../../../src/atoms/segmented-control/segmented-control.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,mBAAmB,CAAC;AAU3B;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAAjD;;QAGc,UAAK,GAAG,EAAE,CAAC;QACX,UAAK,GAAG,EAAE,CAAC;QACI,YAAO,GAA6B,EAAE,CAAC;QACtB,aAAQ,GAAG,KAAK,CAAC;IA4C/D,CAAC;aAjDiB,WAAM,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC,AAAhD,CAAiD;IAO9D,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,6EAA6E,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAA8B;QACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA;wDACyC,IAAI,CAAC,KAAK;UACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;YAC7C,OAAO,IAAI,CAAA;;;;;;6BAMQ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;0BAC9B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;uBACnC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;gBAEjC,MAAM,CAAC,IAAI;gBACX,CAAC,CAAC,IAAI,CAAA,iBAAiB,MAAM,CAAC,IAAI,mCAAmC;gBACrE,CAAC,CAAC,OAAO;oCACW,MAAM,CAAC,KAAK;;WAErC,CAAC;QACJ,CAAC,CAAC;;KAEL,CAAC;IACJ,CAAC;;AA9CW;IAAX,QAAQ,EAAE;iDAAY;AACX;IAAX,QAAQ,EAAE;iDAAY;AACI;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;mDAAwC;AACtB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDAAkB"}
|