klun-ui 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +522 -0
- package/README.md +6 -0
- package/dist/{chunk-WONPY7ZX.js → chunk-2S6ZRGPW.js} +1554 -240
- package/dist/chunk-2S6ZRGPW.js.map +1 -0
- package/dist/{chunk-ODVX2AVA.cjs → chunk-DW4IUUWE.cjs} +1557 -235
- package/dist/chunk-DW4IUUWE.cjs.map +1 -0
- package/dist/index.cjs +267 -235
- package/dist/index.d.cts +690 -27
- package/dist/index.d.ts +690 -27
- package/dist/index.js +1 -1
- package/dist/styles.css +1306 -917
- package/dist/templates/index.cjs +943 -943
- package/dist/templates/index.js +1 -1
- package/package.json +10 -3
- package/dist/chunk-ODVX2AVA.cjs.map +0 -1
- package/dist/chunk-WONPY7ZX.js.map +0 -1
|
@@ -199,7 +199,7 @@ var enUS = {
|
|
|
199
199
|
banner: { dismiss: "Dismiss" },
|
|
200
200
|
toast: { dismiss: "Dismiss" },
|
|
201
201
|
fileUpload: { clickToUpload: "Click to upload", orDragAndDrop: "or drag and drop" },
|
|
202
|
-
imageUpload: { label: "Upload image", remove: "Remove" },
|
|
202
|
+
imageUpload: { label: "Upload image", remove: "Remove", hint: "PNG or JPG, up to 5MB" },
|
|
203
203
|
passwordStrength: { weak: "Weak", fair: "Fair", good: "Good", strong: "Strong" },
|
|
204
204
|
commandMenu: {
|
|
205
205
|
placeholder: "Type a command or search\u2026",
|
|
@@ -267,7 +267,14 @@ var enUS = {
|
|
|
267
267
|
perPage: "{size} / page",
|
|
268
268
|
selectRow: "Select row",
|
|
269
269
|
selectAll: "Select all rows"
|
|
270
|
-
}
|
|
270
|
+
},
|
|
271
|
+
wizard: { back: "\u4E0A\u4E00\u6B65", next: "\u4E0B\u4E00\u6B65", finish: "\u5B8C\u6210" },
|
|
272
|
+
a11y: { zoomIn: "Zoom in", zoomOut: "Zoom out", rotate: "Rotate", collapseStart: "Collapse start panel", collapseEnd: "Collapse end panel", bulkActions: "Bulk actions", clearSelection: "Clear selection", back: "Back" },
|
|
273
|
+
richEditor: { placeholder: "Write something\u2026", editorLabel: "Rich text editor" },
|
|
274
|
+
copy: { label: "Copy" },
|
|
275
|
+
emojiPicker: { searchPlaceholder: "Search emoji", emptyText: "No emoji found", addReaction: "Add reaction" },
|
|
276
|
+
sidebar: { searchPlaceholder: "Search", primary: "Primary" },
|
|
277
|
+
imageViewer: { reset: "Reset", download: "Download" }
|
|
271
278
|
};
|
|
272
279
|
var zhCN = {
|
|
273
280
|
locale: "zh-CN",
|
|
@@ -297,7 +304,7 @@ var zhCN = {
|
|
|
297
304
|
banner: { dismiss: "\u5173\u95ED" },
|
|
298
305
|
toast: { dismiss: "\u5173\u95ED" },
|
|
299
306
|
fileUpload: { clickToUpload: "\u70B9\u51FB\u4E0A\u4F20", orDragAndDrop: "\u6216\u62D6\u62FD\u5230\u6B64\u5904" },
|
|
300
|
-
imageUpload: { label: "\u4E0A\u4F20\u56FE\u7247", remove: "\u79FB\u9664" },
|
|
307
|
+
imageUpload: { label: "\u4E0A\u4F20\u56FE\u7247", remove: "\u79FB\u9664", hint: "\u652F\u6301 PNG \u6216 JPG\uFF0C\u6700\u5927 5MB" },
|
|
301
308
|
passwordStrength: { weak: "\u5F31", fair: "\u4E00\u822C", good: "\u826F\u597D", strong: "\u5F3A" },
|
|
302
309
|
commandMenu: {
|
|
303
310
|
placeholder: "\u8F93\u5165\u547D\u4EE4\u6216\u641C\u7D22\u2026",
|
|
@@ -365,7 +372,14 @@ var zhCN = {
|
|
|
365
372
|
perPage: "{size} / \u9875",
|
|
366
373
|
selectRow: "\u9009\u62E9\u672C\u884C",
|
|
367
374
|
selectAll: "\u5168\u9009"
|
|
368
|
-
}
|
|
375
|
+
},
|
|
376
|
+
wizard: { back: "\u4E0A\u4E00\u6B65", next: "\u4E0B\u4E00\u6B65", finish: "\u5B8C\u6210" },
|
|
377
|
+
a11y: { zoomIn: "\u653E\u5927", zoomOut: "\u7F29\u5C0F", rotate: "\u65CB\u8F6C", collapseStart: "\u6536\u8D77\u8D77\u59CB\u9762\u677F", collapseEnd: "\u6536\u8D77\u7ED3\u675F\u9762\u677F", bulkActions: "\u6279\u91CF\u64CD\u4F5C", clearSelection: "\u6E05\u9664\u9009\u62E9", back: "\u8FD4\u56DE" },
|
|
378
|
+
richEditor: { placeholder: "\u8BF7\u8F93\u5165\u5185\u5BB9\u2026", editorLabel: "\u5BCC\u6587\u672C\u7F16\u8F91\u5668" },
|
|
379
|
+
copy: { label: "\u590D\u5236" },
|
|
380
|
+
emojiPicker: { searchPlaceholder: "\u641C\u7D22\u8868\u60C5", emptyText: "\u6CA1\u6709\u627E\u5230\u8868\u60C5", addReaction: "\u6DFB\u52A0\u8868\u60C5" },
|
|
381
|
+
sidebar: { searchPlaceholder: "\u641C\u7D22", primary: "\u4E3B\u5BFC\u822A" },
|
|
382
|
+
imageViewer: { reset: "\u91CD\u7F6E", download: "\u4E0B\u8F7D" }
|
|
369
383
|
};
|
|
370
384
|
var zhTW = {
|
|
371
385
|
locale: "zh-TW",
|
|
@@ -389,13 +403,13 @@ var zhTW = {
|
|
|
389
403
|
},
|
|
390
404
|
timePicker: { am: "\u4E0A\u5348", pm: "\u4E0B\u5348" },
|
|
391
405
|
pagination: { previous: "\u4E0A\u4E00\u9801", next: "\u4E0B\u4E00\u9801" },
|
|
392
|
-
modal: { close: "\u95DC\u9589" },
|
|
406
|
+
modal: { close: "\u95DC\u9589", maximize: "\u6700\u5927\u5316", restore: "\u9084\u539F" },
|
|
393
407
|
drawer: { close: "\u95DC\u9589" },
|
|
394
408
|
alert: { dismiss: "\u95DC\u9589" },
|
|
395
409
|
banner: { dismiss: "\u95DC\u9589" },
|
|
396
410
|
toast: { dismiss: "\u95DC\u9589" },
|
|
397
411
|
fileUpload: { clickToUpload: "\u9EDE\u64CA\u4E0A\u50B3", orDragAndDrop: "\u6216\u62D6\u66F3\u5230\u6B64\u8655" },
|
|
398
|
-
imageUpload: { label: "\u4E0A\u50B3\u5716\u7247", remove: "\u79FB\u9664" },
|
|
412
|
+
imageUpload: { label: "\u4E0A\u50B3\u5716\u7247", remove: "\u79FB\u9664", hint: "\u652F\u63F4 PNG \u6216 JPG\uFF0C\u6700\u5927 5MB" },
|
|
399
413
|
passwordStrength: { weak: "\u5F31", fair: "\u4E00\u822C", good: "\u826F\u597D", strong: "\u5F37" },
|
|
400
414
|
commandMenu: {
|
|
401
415
|
placeholder: "\u8F38\u5165\u547D\u4EE4\u6216\u641C\u5C0B\u2026",
|
|
@@ -463,7 +477,14 @@ var zhTW = {
|
|
|
463
477
|
perPage: "{size} / \u9801",
|
|
464
478
|
selectRow: "\u9078\u64C7\u672C\u884C",
|
|
465
479
|
selectAll: "\u5168\u9078"
|
|
466
|
-
}
|
|
480
|
+
},
|
|
481
|
+
wizard: { back: "\u623B\u308B", next: "\u6B21\u3078", finish: "\u5B8C\u4E86" },
|
|
482
|
+
a11y: { zoomIn: "\u653E\u5927", zoomOut: "\u7E2E\u5C0F", rotate: "\u65CB\u8F49", collapseStart: "\u6536\u5408\u8D77\u59CB\u9762\u677F", collapseEnd: "\u6536\u5408\u7D50\u675F\u9762\u677F", bulkActions: "\u6279\u6B21\u64CD\u4F5C", clearSelection: "\u6E05\u9664\u9078\u53D6", back: "\u8FD4\u56DE" },
|
|
483
|
+
richEditor: { placeholder: "\u8ACB\u8F38\u5165\u5167\u5BB9\u2026", editorLabel: "\u5BCC\u6587\u5B57\u7DE8\u8F2F\u5668" },
|
|
484
|
+
copy: { label: "\u8907\u88FD" },
|
|
485
|
+
emojiPicker: { searchPlaceholder: "\u641C\u5C0B\u8868\u60C5", emptyText: "\u627E\u4E0D\u5230\u8868\u60C5", addReaction: "\u65B0\u589E\u8868\u60C5" },
|
|
486
|
+
sidebar: { searchPlaceholder: "\u641C\u5C0B", primary: "\u4E3B\u5C0E\u89BD" },
|
|
487
|
+
imageViewer: { reset: "\u91CD\u8A2D", download: "\u4E0B\u8F09" }
|
|
467
488
|
};
|
|
468
489
|
var jaJP = {
|
|
469
490
|
locale: "ja-JP",
|
|
@@ -487,13 +508,15 @@ var jaJP = {
|
|
|
487
508
|
},
|
|
488
509
|
timePicker: { am: "\u5348\u524D", pm: "\u5348\u5F8C" },
|
|
489
510
|
pagination: { previous: "\u524D\u3078", next: "\u6B21\u3078" },
|
|
490
|
-
modal: { close: "\u9589\u3058\u308B" },
|
|
511
|
+
modal: { close: "\u9589\u3058\u308B", maximize: "\u6700\u5927\u5316", restore: "\u5143\u306B\u623B\u3059" },
|
|
512
|
+
select: { placeholder: "\u9078\u629E" },
|
|
513
|
+
counterInput: { decrease: "\u6E1B\u3089\u3059", increase: "\u5897\u3084\u3059" },
|
|
491
514
|
drawer: { close: "\u9589\u3058\u308B" },
|
|
492
515
|
alert: { dismiss: "\u9589\u3058\u308B" },
|
|
493
516
|
banner: { dismiss: "\u9589\u3058\u308B" },
|
|
494
517
|
toast: { dismiss: "\u9589\u3058\u308B" },
|
|
495
518
|
fileUpload: { clickToUpload: "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9", orDragAndDrop: "\u307E\u305F\u306F\u30C9\u30E9\u30C3\u30B0\uFF06\u30C9\u30ED\u30C3\u30D7" },
|
|
496
|
-
imageUpload: { label: "\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9", remove: "\u524A\u9664" },
|
|
519
|
+
imageUpload: { label: "\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9", remove: "\u524A\u9664", hint: "PNG \u307E\u305F\u306F JPG\u3001\u6700\u5927 5MB" },
|
|
497
520
|
passwordStrength: { weak: "\u5F31\u3044", fair: "\u666E\u901A", good: "\u826F\u3044", strong: "\u5F37\u3044" },
|
|
498
521
|
commandMenu: {
|
|
499
522
|
placeholder: "\u30B3\u30DE\u30F3\u30C9\u3092\u5165\u529B\u307E\u305F\u306F\u691C\u7D22\u2026",
|
|
@@ -556,8 +579,17 @@ var jaJP = {
|
|
|
556
579
|
previous: "\u524D\u3078",
|
|
557
580
|
next: "\u6B21\u3078",
|
|
558
581
|
pageRange: "{total} \u4EF6\u4E2D {from}\u2013{to}",
|
|
559
|
-
perPage: "{size} \u4EF6 / \u30DA\u30FC\u30B8"
|
|
560
|
-
|
|
582
|
+
perPage: "{size} \u4EF6 / \u30DA\u30FC\u30B8",
|
|
583
|
+
selectRow: "\u884C\u3092\u9078\u629E",
|
|
584
|
+
selectAll: "\u3059\u3079\u3066\u9078\u629E"
|
|
585
|
+
},
|
|
586
|
+
wizard: { back: "\uC774\uC804", next: "\uB2E4\uC74C", finish: "\uC644\uB8CC" },
|
|
587
|
+
a11y: { zoomIn: "\u62E1\u5927", zoomOut: "\u7E2E\u5C0F", rotate: "\u56DE\u8EE2", collapseStart: "\u958B\u59CB\u30D1\u30CD\u30EB\u3092\u6298\u308A\u305F\u305F\u3080", collapseEnd: "\u7D42\u4E86\u30D1\u30CD\u30EB\u3092\u6298\u308A\u305F\u305F\u3080", bulkActions: "\u4E00\u62EC\u64CD\u4F5C", clearSelection: "\u9078\u629E\u3092\u89E3\u9664", back: "\u623B\u308B" },
|
|
588
|
+
richEditor: { placeholder: "\u5185\u5BB9\u3092\u5165\u529B\u2026", editorLabel: "\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u30A8\u30C7\u30A3\u30BF\u30FC" },
|
|
589
|
+
copy: { label: "\u30B3\u30D4\u30FC" },
|
|
590
|
+
emojiPicker: { searchPlaceholder: "\u7D75\u6587\u5B57\u3092\u691C\u7D22", emptyText: "\u7D75\u6587\u5B57\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093", addReaction: "\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0" },
|
|
591
|
+
sidebar: { searchPlaceholder: "\u691C\u7D22", primary: "\u30E1\u30A4\u30F3\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3" },
|
|
592
|
+
imageViewer: { reset: "\u30EA\u30BB\u30C3\u30C8", download: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9" }
|
|
561
593
|
};
|
|
562
594
|
var koKR = {
|
|
563
595
|
locale: "ko-KR",
|
|
@@ -581,13 +613,15 @@ var koKR = {
|
|
|
581
613
|
},
|
|
582
614
|
timePicker: { am: "\uC624\uC804", pm: "\uC624\uD6C4" },
|
|
583
615
|
pagination: { previous: "\uC774\uC804", next: "\uB2E4\uC74C" },
|
|
584
|
-
modal: { close: "\uB2EB\uAE30" },
|
|
616
|
+
modal: { close: "\uB2EB\uAE30", maximize: "\uCD5C\uB300\uD654", restore: "\uBCF5\uC6D0" },
|
|
617
|
+
select: { placeholder: "\uC120\uD0DD" },
|
|
618
|
+
counterInput: { decrease: "\uAC10\uC18C", increase: "\uC99D\uAC00" },
|
|
585
619
|
drawer: { close: "\uB2EB\uAE30" },
|
|
586
620
|
alert: { dismiss: "\uB2EB\uAE30" },
|
|
587
621
|
banner: { dismiss: "\uB2EB\uAE30" },
|
|
588
622
|
toast: { dismiss: "\uB2EB\uAE30" },
|
|
589
623
|
fileUpload: { clickToUpload: "\uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC", orDragAndDrop: "\uB610\uB294 \uB4DC\uB798\uADF8 \uC564 \uB4DC\uB86D" },
|
|
590
|
-
imageUpload: { label: "\uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC", remove: "\uC81C\uAC70" },
|
|
624
|
+
imageUpload: { label: "\uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC", remove: "\uC81C\uAC70", hint: "PNG \uB610\uB294 JPG, \uCD5C\uB300 5MB" },
|
|
591
625
|
passwordStrength: { weak: "\uC57D\uD568", fair: "\uBCF4\uD1B5", good: "\uC591\uD638", strong: "\uAC15\uD568" },
|
|
592
626
|
commandMenu: {
|
|
593
627
|
placeholder: "\uBA85\uB839\uC5B4 \uC785\uB825 \uB610\uB294 \uAC80\uC0C9\u2026",
|
|
@@ -650,8 +684,17 @@ var koKR = {
|
|
|
650
684
|
previous: "\uC774\uC804",
|
|
651
685
|
next: "\uB2E4\uC74C",
|
|
652
686
|
pageRange: "{total}\uAC1C \uC911 {from}\u2013{to}",
|
|
653
|
-
perPage: "{size}\uAC1C / \uD398\uC774\uC9C0"
|
|
654
|
-
|
|
687
|
+
perPage: "{size}\uAC1C / \uD398\uC774\uC9C0",
|
|
688
|
+
selectRow: "\uD589 \uC120\uD0DD",
|
|
689
|
+
selectAll: "\uC804\uCCB4 \uC120\uD0DD"
|
|
690
|
+
},
|
|
691
|
+
wizard: { back: "Retour", next: "Suivant", finish: "Terminer" },
|
|
692
|
+
a11y: { zoomIn: "\uD655\uB300", zoomOut: "\uCD95\uC18C", rotate: "\uD68C\uC804", collapseStart: "\uC2DC\uC791 \uD328\uB110 \uC811\uAE30", collapseEnd: "\uB05D \uD328\uB110 \uC811\uAE30", bulkActions: "\uC77C\uAD04 \uC791\uC5C5", clearSelection: "\uC120\uD0DD \uD574\uC81C", back: "\uB4A4\uB85C" },
|
|
693
|
+
richEditor: { placeholder: "\uB0B4\uC6A9\uC744 \uC785\uB825\u2026", editorLabel: "\uB9AC\uCE58 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30" },
|
|
694
|
+
copy: { label: "\uBCF5\uC0AC" },
|
|
695
|
+
emojiPicker: { searchPlaceholder: "\uC774\uBAA8\uC9C0 \uAC80\uC0C9", emptyText: "\uC774\uBAA8\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C", addReaction: "\uBC18\uC751 \uCD94\uAC00" },
|
|
696
|
+
sidebar: { searchPlaceholder: "\uAC80\uC0C9", primary: "\uAE30\uBCF8 \uD0D0\uC0C9" },
|
|
697
|
+
imageViewer: { reset: "\uC7AC\uC124\uC815", download: "\uB2E4\uC6B4\uB85C\uB4DC" }
|
|
655
698
|
};
|
|
656
699
|
var frFR = {
|
|
657
700
|
locale: "fr-FR",
|
|
@@ -675,13 +718,15 @@ var frFR = {
|
|
|
675
718
|
},
|
|
676
719
|
timePicker: { am: "AM", pm: "PM" },
|
|
677
720
|
pagination: { previous: "Pr\xE9c\xE9dent", next: "Suivant" },
|
|
678
|
-
modal: { close: "Fermer" },
|
|
721
|
+
modal: { close: "Fermer", maximize: "Agrandir", restore: "Restaurer" },
|
|
722
|
+
select: { placeholder: "S\xE9lectionner" },
|
|
723
|
+
counterInput: { decrease: "Diminuer", increase: "Augmenter" },
|
|
679
724
|
drawer: { close: "Fermer" },
|
|
680
725
|
alert: { dismiss: "Fermer" },
|
|
681
726
|
banner: { dismiss: "Fermer" },
|
|
682
727
|
toast: { dismiss: "Fermer" },
|
|
683
728
|
fileUpload: { clickToUpload: "Cliquez pour t\xE9l\xE9verser", orDragAndDrop: "ou glissez-d\xE9posez" },
|
|
684
|
-
imageUpload: { label: "T\xE9l\xE9verser une image", remove: "Supprimer" },
|
|
729
|
+
imageUpload: { label: "T\xE9l\xE9verser une image", remove: "Supprimer", hint: "PNG ou JPG, jusqu'\xE0 5 Mo" },
|
|
685
730
|
passwordStrength: { weak: "Faible", fair: "Moyen", good: "Bon", strong: "Fort" },
|
|
686
731
|
commandMenu: {
|
|
687
732
|
placeholder: "Tapez une commande ou recherchez\u2026",
|
|
@@ -744,8 +789,17 @@ var frFR = {
|
|
|
744
789
|
previous: "Pr\xE9c\xE9dent",
|
|
745
790
|
next: "Suivant",
|
|
746
791
|
pageRange: "{from}\u2013{to} sur {total}",
|
|
747
|
-
perPage: "{size} / page"
|
|
748
|
-
|
|
792
|
+
perPage: "{size} / page",
|
|
793
|
+
selectRow: "S\xE9lectionner la ligne",
|
|
794
|
+
selectAll: "Tout s\xE9lectionner"
|
|
795
|
+
},
|
|
796
|
+
wizard: { back: "Zur\xFCck", next: "Weiter", finish: "Fertig" },
|
|
797
|
+
a11y: { zoomIn: "Zoom avant", zoomOut: "Zoom arri\xE8re", rotate: "Pivoter", collapseStart: "R\xE9duire le panneau de d\xE9but", collapseEnd: "R\xE9duire le panneau de fin", bulkActions: "Actions group\xE9es", clearSelection: "Effacer la s\xE9lection", back: "Retour" },
|
|
798
|
+
richEditor: { placeholder: "\xC9crivez quelque chose\u2026", editorLabel: "\xC9diteur de texte enrichi" },
|
|
799
|
+
copy: { label: "Copier" },
|
|
800
|
+
emojiPicker: { searchPlaceholder: "Rechercher un emoji", emptyText: "Aucun emoji trouv\xE9", addReaction: "Ajouter une r\xE9action" },
|
|
801
|
+
sidebar: { searchPlaceholder: "Rechercher", primary: "Navigation principale" },
|
|
802
|
+
imageViewer: { reset: "R\xE9initialiser", download: "T\xE9l\xE9charger" }
|
|
749
803
|
};
|
|
750
804
|
var deDE = {
|
|
751
805
|
locale: "de-DE",
|
|
@@ -769,13 +823,15 @@ var deDE = {
|
|
|
769
823
|
},
|
|
770
824
|
timePicker: { am: "AM", pm: "PM" },
|
|
771
825
|
pagination: { previous: "Zur\xFCck", next: "Weiter" },
|
|
772
|
-
modal: { close: "Schlie\xDFen" },
|
|
826
|
+
modal: { close: "Schlie\xDFen", maximize: "Maximieren", restore: "Wiederherstellen" },
|
|
827
|
+
select: { placeholder: "Ausw\xE4hlen" },
|
|
828
|
+
counterInput: { decrease: "Verringern", increase: "Erh\xF6hen" },
|
|
773
829
|
drawer: { close: "Schlie\xDFen" },
|
|
774
830
|
alert: { dismiss: "Schlie\xDFen" },
|
|
775
831
|
banner: { dismiss: "Schlie\xDFen" },
|
|
776
832
|
toast: { dismiss: "Schlie\xDFen" },
|
|
777
833
|
fileUpload: { clickToUpload: "Zum Hochladen klicken", orDragAndDrop: "oder per Drag & Drop" },
|
|
778
|
-
imageUpload: { label: "Bild hochladen", remove: "Entfernen" },
|
|
834
|
+
imageUpload: { label: "Bild hochladen", remove: "Entfernen", hint: "PNG oder JPG, bis zu 5 MB" },
|
|
779
835
|
passwordStrength: { weak: "Schwach", fair: "Mittel", good: "Gut", strong: "Stark" },
|
|
780
836
|
commandMenu: {
|
|
781
837
|
placeholder: "Befehl eingeben oder suchen\u2026",
|
|
@@ -838,8 +894,17 @@ var deDE = {
|
|
|
838
894
|
previous: "Zur\xFCck",
|
|
839
895
|
next: "Weiter",
|
|
840
896
|
pageRange: "{from}\u2013{to} von {total}",
|
|
841
|
-
perPage: "{size} / Seite"
|
|
842
|
-
|
|
897
|
+
perPage: "{size} / Seite",
|
|
898
|
+
selectRow: "Zeile ausw\xE4hlen",
|
|
899
|
+
selectAll: "Alle ausw\xE4hlen"
|
|
900
|
+
},
|
|
901
|
+
wizard: { back: "Atr\xE1s", next: "Siguiente", finish: "Finalizar" },
|
|
902
|
+
a11y: { zoomIn: "Vergr\xF6\xDFern", zoomOut: "Verkleinern", rotate: "Drehen", collapseStart: "Startbereich einklappen", collapseEnd: "Endbereich einklappen", bulkActions: "Mehrfachaktionen", clearSelection: "Auswahl aufheben", back: "Zur\xFCck" },
|
|
903
|
+
richEditor: { placeholder: "Etwas eingeben\u2026", editorLabel: "Rich-Text-Editor" },
|
|
904
|
+
copy: { label: "Kopieren" },
|
|
905
|
+
emojiPicker: { searchPlaceholder: "Emoji suchen", emptyText: "Kein Emoji gefunden", addReaction: "Reaktion hinzuf\xFCgen" },
|
|
906
|
+
sidebar: { searchPlaceholder: "Suchen", primary: "Hauptnavigation" },
|
|
907
|
+
imageViewer: { reset: "Zur\xFCcksetzen", download: "Herunterladen" }
|
|
843
908
|
};
|
|
844
909
|
var esES = {
|
|
845
910
|
locale: "es-ES",
|
|
@@ -863,13 +928,15 @@ var esES = {
|
|
|
863
928
|
},
|
|
864
929
|
timePicker: { am: "AM", pm: "PM" },
|
|
865
930
|
pagination: { previous: "Anterior", next: "Siguiente" },
|
|
866
|
-
modal: { close: "Cerrar" },
|
|
931
|
+
modal: { close: "Cerrar", maximize: "Maximizar", restore: "Restaurar" },
|
|
932
|
+
select: { placeholder: "Seleccionar" },
|
|
933
|
+
counterInput: { decrease: "Disminuir", increase: "Aumentar" },
|
|
867
934
|
drawer: { close: "Cerrar" },
|
|
868
935
|
alert: { dismiss: "Cerrar" },
|
|
869
936
|
banner: { dismiss: "Cerrar" },
|
|
870
937
|
toast: { dismiss: "Cerrar" },
|
|
871
938
|
fileUpload: { clickToUpload: "Haz clic para subir", orDragAndDrop: "o arrastra y suelta" },
|
|
872
|
-
imageUpload: { label: "Subir imagen", remove: "Eliminar" },
|
|
939
|
+
imageUpload: { label: "Subir imagen", remove: "Eliminar", hint: "PNG o JPG, hasta 5 MB" },
|
|
873
940
|
passwordStrength: { weak: "D\xE9bil", fair: "Regular", good: "Buena", strong: "Fuerte" },
|
|
874
941
|
commandMenu: {
|
|
875
942
|
placeholder: "Escribe un comando o busca\u2026",
|
|
@@ -932,8 +999,17 @@ var esES = {
|
|
|
932
999
|
previous: "Anterior",
|
|
933
1000
|
next: "Siguiente",
|
|
934
1001
|
pageRange: "{from}\u2013{to} de {total}",
|
|
935
|
-
perPage: "{size} / p\xE1gina"
|
|
936
|
-
|
|
1002
|
+
perPage: "{size} / p\xE1gina",
|
|
1003
|
+
selectRow: "Seleccionar fila",
|
|
1004
|
+
selectAll: "Seleccionar todo"
|
|
1005
|
+
},
|
|
1006
|
+
wizard: { back: "Voltar", next: "Avan\xE7ar", finish: "Concluir" },
|
|
1007
|
+
a11y: { zoomIn: "Acercar", zoomOut: "Alejar", rotate: "Girar", collapseStart: "Contraer panel inicial", collapseEnd: "Contraer panel final", bulkActions: "Acciones masivas", clearSelection: "Borrar selecci\xF3n", back: "Atr\xE1s" },
|
|
1008
|
+
richEditor: { placeholder: "Escribe algo\u2026", editorLabel: "Editor de texto enriquecido" },
|
|
1009
|
+
copy: { label: "Copiar" },
|
|
1010
|
+
emojiPicker: { searchPlaceholder: "Buscar emoji", emptyText: "No se encontraron emojis", addReaction: "A\xF1adir reacci\xF3n" },
|
|
1011
|
+
sidebar: { searchPlaceholder: "Buscar", primary: "Navegaci\xF3n principal" },
|
|
1012
|
+
imageViewer: { reset: "Restablecer", download: "Descargar" }
|
|
937
1013
|
};
|
|
938
1014
|
var ptBR = {
|
|
939
1015
|
locale: "pt-BR",
|
|
@@ -957,13 +1033,15 @@ var ptBR = {
|
|
|
957
1033
|
},
|
|
958
1034
|
timePicker: { am: "AM", pm: "PM" },
|
|
959
1035
|
pagination: { previous: "Anterior", next: "Pr\xF3ximo" },
|
|
960
|
-
modal: { close: "Fechar" },
|
|
1036
|
+
modal: { close: "Fechar", maximize: "Maximizar", restore: "Restaurar" },
|
|
1037
|
+
select: { placeholder: "Selecionar" },
|
|
1038
|
+
counterInput: { decrease: "Diminuir", increase: "Aumentar" },
|
|
961
1039
|
drawer: { close: "Fechar" },
|
|
962
1040
|
alert: { dismiss: "Fechar" },
|
|
963
1041
|
banner: { dismiss: "Fechar" },
|
|
964
1042
|
toast: { dismiss: "Fechar" },
|
|
965
1043
|
fileUpload: { clickToUpload: "Clique para enviar", orDragAndDrop: "ou arraste e solte" },
|
|
966
|
-
imageUpload: { label: "Enviar imagem", remove: "Remover" },
|
|
1044
|
+
imageUpload: { label: "Enviar imagem", remove: "Remover", hint: "PNG ou JPG, at\xE9 5 MB" },
|
|
967
1045
|
passwordStrength: { weak: "Fraca", fair: "Razo\xE1vel", good: "Boa", strong: "Forte" },
|
|
968
1046
|
commandMenu: {
|
|
969
1047
|
placeholder: "Digite um comando ou pesquise\u2026",
|
|
@@ -1026,8 +1104,17 @@ var ptBR = {
|
|
|
1026
1104
|
previous: "Anterior",
|
|
1027
1105
|
next: "Pr\xF3ximo",
|
|
1028
1106
|
pageRange: "{from}\u2013{to} de {total}",
|
|
1029
|
-
perPage: "{size} / p\xE1gina"
|
|
1030
|
-
|
|
1107
|
+
perPage: "{size} / p\xE1gina",
|
|
1108
|
+
selectRow: "Selecionar linha",
|
|
1109
|
+
selectAll: "Selecionar tudo"
|
|
1110
|
+
},
|
|
1111
|
+
wizard: { back: "\u041D\u0430\u0437\u0430\u0434", next: "\u0414\u0430\u043B\u0435\u0435", finish: "\u0413\u043E\u0442\u043E\u0432\u043E" },
|
|
1112
|
+
a11y: { zoomIn: "Ampliar", zoomOut: "Reduzir", rotate: "Girar", collapseStart: "Recolher painel inicial", collapseEnd: "Recolher painel final", bulkActions: "A\xE7\xF5es em massa", clearSelection: "Limpar sele\xE7\xE3o", back: "Voltar" },
|
|
1113
|
+
richEditor: { placeholder: "Escreva algo\u2026", editorLabel: "Editor de texto rico" },
|
|
1114
|
+
copy: { label: "Copiar" },
|
|
1115
|
+
emojiPicker: { searchPlaceholder: "Pesquisar emoji", emptyText: "Nenhum emoji encontrado", addReaction: "Adicionar rea\xE7\xE3o" },
|
|
1116
|
+
sidebar: { searchPlaceholder: "Pesquisar", primary: "Navega\xE7\xE3o principal" },
|
|
1117
|
+
imageViewer: { reset: "Redefinir", download: "Baixar" }
|
|
1031
1118
|
};
|
|
1032
1119
|
var ruRU = {
|
|
1033
1120
|
locale: "ru-RU",
|
|
@@ -1051,13 +1138,15 @@ var ruRU = {
|
|
|
1051
1138
|
},
|
|
1052
1139
|
timePicker: { am: "AM", pm: "PM" },
|
|
1053
1140
|
pagination: { previous: "\u041D\u0430\u0437\u0430\u0434", next: "\u0412\u043F\u0435\u0440\u0451\u0434" },
|
|
1054
|
-
modal: { close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" },
|
|
1141
|
+
modal: { close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", maximize: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C", restore: "\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C" },
|
|
1142
|
+
select: { placeholder: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C" },
|
|
1143
|
+
counterInput: { decrease: "\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C", increase: "\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C" },
|
|
1055
1144
|
drawer: { close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" },
|
|
1056
1145
|
alert: { dismiss: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" },
|
|
1057
1146
|
banner: { dismiss: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" },
|
|
1058
1147
|
toast: { dismiss: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C" },
|
|
1059
1148
|
fileUpload: { clickToUpload: "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438", orDragAndDrop: "\u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435" },
|
|
1060
|
-
imageUpload: { label: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C" },
|
|
1149
|
+
imageUpload: { label: "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", hint: "PNG \u0438\u043B\u0438 JPG, \u0434\u043E 5 \u041C\u0411" },
|
|
1061
1150
|
passwordStrength: { weak: "\u0421\u043B\u0430\u0431\u044B\u0439", fair: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439", good: "\u0425\u043E\u0440\u043E\u0448\u0438\u0439", strong: "\u041D\u0430\u0434\u0451\u0436\u043D\u044B\u0439" },
|
|
1062
1151
|
commandMenu: {
|
|
1063
1152
|
placeholder: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0438\u043B\u0438 \u043F\u043E\u0438\u0441\u043A\u2026",
|
|
@@ -1120,8 +1209,17 @@ var ruRU = {
|
|
|
1120
1209
|
previous: "\u041D\u0430\u0437\u0430\u0434",
|
|
1121
1210
|
next: "\u0412\u043F\u0435\u0440\u0451\u0434",
|
|
1122
1211
|
pageRange: "{from}\u2013{to} \u0438\u0437 {total}",
|
|
1123
|
-
perPage: "{size} / \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430"
|
|
1124
|
-
|
|
1212
|
+
perPage: "{size} / \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430",
|
|
1213
|
+
selectRow: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",
|
|
1214
|
+
selectAll: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435"
|
|
1215
|
+
},
|
|
1216
|
+
wizard: { back: "\u0631\u062C\u0648\u0639", next: "\u0627\u0644\u062A\u0627\u0644\u064A", finish: "\u0625\u0646\u0647\u0627\u0621" },
|
|
1217
|
+
a11y: { zoomIn: "\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C", zoomOut: "\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C", rotate: "\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u044C", collapseStart: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u043F\u0430\u043D\u0435\u043B\u044C", collapseEnd: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043A\u043E\u043D\u0435\u0447\u043D\u0443\u044E \u043F\u0430\u043D\u0435\u043B\u044C", bulkActions: "\u041C\u0430\u0441\u0441\u043E\u0432\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", clearSelection: "\u0421\u043D\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u0435", back: "\u041D\u0430\u0437\u0430\u0434" },
|
|
1218
|
+
richEditor: { placeholder: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442\u2026", editorLabel: "\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430" },
|
|
1219
|
+
copy: { label: "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C" },
|
|
1220
|
+
emojiPicker: { searchPlaceholder: "\u041F\u043E\u0438\u0441\u043A \u044D\u043C\u043E\u0434\u0437\u0438", emptyText: "\u042D\u043C\u043E\u0434\u0437\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B", addReaction: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0435\u0430\u043A\u0446\u0438\u044E" },
|
|
1221
|
+
sidebar: { searchPlaceholder: "\u041F\u043E\u0438\u0441\u043A", primary: "\u041E\u0441\u043D\u043E\u0432\u043D\u0430\u044F \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F" },
|
|
1222
|
+
imageViewer: { reset: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C", download: "\u0421\u043A\u0430\u0447\u0430\u0442\u044C" }
|
|
1125
1223
|
};
|
|
1126
1224
|
var arSA = {
|
|
1127
1225
|
locale: "ar-SA",
|
|
@@ -1145,13 +1243,15 @@ var arSA = {
|
|
|
1145
1243
|
},
|
|
1146
1244
|
timePicker: { am: "\u0635", pm: "\u0645" },
|
|
1147
1245
|
pagination: { previous: "\u0627\u0644\u0633\u0627\u0628\u0642", next: "\u0627\u0644\u062A\u0627\u0644\u064A" },
|
|
1148
|
-
modal: { close: "\u0625\u063A\u0644\u0627\u0642" },
|
|
1246
|
+
modal: { close: "\u0625\u063A\u0644\u0627\u0642", maximize: "\u062A\u0643\u0628\u064A\u0631", restore: "\u0627\u0633\u062A\u0639\u0627\u062F\u0629" },
|
|
1247
|
+
select: { placeholder: "\u062A\u062D\u062F\u064A\u062F" },
|
|
1248
|
+
counterInput: { decrease: "\u062A\u0642\u0644\u064A\u0644", increase: "\u0632\u064A\u0627\u062F\u0629" },
|
|
1149
1249
|
drawer: { close: "\u0625\u063A\u0644\u0627\u0642" },
|
|
1150
1250
|
alert: { dismiss: "\u0625\u063A\u0644\u0627\u0642" },
|
|
1151
1251
|
banner: { dismiss: "\u0625\u063A\u0644\u0627\u0642" },
|
|
1152
1252
|
toast: { dismiss: "\u0625\u063A\u0644\u0627\u0642" },
|
|
1153
1253
|
fileUpload: { clickToUpload: "\u0627\u0646\u0642\u0631 \u0644\u0644\u0631\u0641\u0639", orDragAndDrop: "\u0623\u0648 \u0627\u0633\u062D\u0628 \u0648\u0623\u0641\u0644\u062A" },
|
|
1154
|
-
imageUpload: { label: "\u0631\u0641\u0639 \u0635\u0648\u0631\u0629", remove: "\u0625\u0632\u0627\u0644\u0629" },
|
|
1254
|
+
imageUpload: { label: "\u0631\u0641\u0639 \u0635\u0648\u0631\u0629", remove: "\u0625\u0632\u0627\u0644\u0629", hint: "PNG \u0623\u0648 JPG\u060C \u062D\u062A\u0649 5 \u0645\u064A\u062C\u0627\u0628\u0627\u064A\u062A" },
|
|
1155
1255
|
passwordStrength: { weak: "\u0636\u0639\u064A\u0641", fair: "\u0645\u0642\u0628\u0648\u0644", good: "\u062C\u064A\u062F", strong: "\u0642\u0648\u064A" },
|
|
1156
1256
|
commandMenu: {
|
|
1157
1257
|
placeholder: "\u0627\u0643\u062A\u0628 \u0623\u0645\u0631\u064B\u0627 \u0623\u0648 \u0627\u0628\u062D\u062B\u2026",
|
|
@@ -1214,8 +1314,17 @@ var arSA = {
|
|
|
1214
1314
|
previous: "\u0627\u0644\u0633\u0627\u0628\u0642",
|
|
1215
1315
|
next: "\u0627\u0644\u062A\u0627\u0644\u064A",
|
|
1216
1316
|
pageRange: "{from}\u2013{to} \u0645\u0646 {total}",
|
|
1217
|
-
perPage: "{size} / \u0635\u0641\u062D\u0629"
|
|
1218
|
-
|
|
1317
|
+
perPage: "{size} / \u0635\u0641\u062D\u0629",
|
|
1318
|
+
selectRow: "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0635\u0641",
|
|
1319
|
+
selectAll: "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644"
|
|
1320
|
+
},
|
|
1321
|
+
wizard: { back: "Indietro", next: "Avanti", finish: "Fine" },
|
|
1322
|
+
a11y: { zoomIn: "\u062A\u0643\u0628\u064A\u0631", zoomOut: "\u062A\u0635\u063A\u064A\u0631", rotate: "\u062A\u062F\u0648\u064A\u0631", collapseStart: "\u0637\u064A \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u0623\u0648\u0644\u0649", collapseEnd: "\u0637\u064A \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u0623\u062E\u064A\u0631\u0629", bulkActions: "\u0625\u062C\u0631\u0627\u0621\u0627\u062A \u062C\u0645\u0627\u0639\u064A\u0629", clearSelection: "\u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062A\u062D\u062F\u064A\u062F", back: "\u0631\u062C\u0648\u0639" },
|
|
1323
|
+
richEditor: { placeholder: "\u0627\u0643\u062A\u0628 \u0634\u064A\u0626\u064B\u0627\u2026", editorLabel: "\u0645\u062D\u0631\u0631 \u0646\u0635 \u0645\u0646\u0633\u0642" },
|
|
1324
|
+
copy: { label: "\u0646\u0633\u062E" },
|
|
1325
|
+
emojiPicker: { searchPlaceholder: "\u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0631\u0645\u0632 \u062A\u0639\u0628\u064A\u0631\u064A", emptyText: "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0631\u0645\u0648\u0632", addReaction: "\u0625\u0636\u0627\u0641\u0629 \u062A\u0641\u0627\u0639\u0644" },
|
|
1326
|
+
sidebar: { searchPlaceholder: "\u0628\u062D\u062B", primary: "\u0627\u0644\u062A\u0646\u0642\u0644 \u0627\u0644\u0631\u0626\u064A\u0633\u064A" },
|
|
1327
|
+
imageViewer: { reset: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646", download: "\u062A\u0646\u0632\u064A\u0644" }
|
|
1219
1328
|
};
|
|
1220
1329
|
var itIT = {
|
|
1221
1330
|
locale: "it-IT",
|
|
@@ -1239,13 +1348,15 @@ var itIT = {
|
|
|
1239
1348
|
},
|
|
1240
1349
|
timePicker: { am: "AM", pm: "PM" },
|
|
1241
1350
|
pagination: { previous: "Precedente", next: "Successivo" },
|
|
1242
|
-
modal: { close: "Chiudi" },
|
|
1351
|
+
modal: { close: "Chiudi", maximize: "Ingrandisci", restore: "Ripristina" },
|
|
1352
|
+
select: { placeholder: "Seleziona" },
|
|
1353
|
+
counterInput: { decrease: "Diminuisci", increase: "Aumenta" },
|
|
1243
1354
|
drawer: { close: "Chiudi" },
|
|
1244
1355
|
alert: { dismiss: "Chiudi" },
|
|
1245
1356
|
banner: { dismiss: "Chiudi" },
|
|
1246
1357
|
toast: { dismiss: "Chiudi" },
|
|
1247
1358
|
fileUpload: { clickToUpload: "Clicca per caricare", orDragAndDrop: "o trascina qui" },
|
|
1248
|
-
imageUpload: { label: "Carica immagine", remove: "Rimuovi" },
|
|
1359
|
+
imageUpload: { label: "Carica immagine", remove: "Rimuovi", hint: "PNG o JPG, fino a 5 MB" },
|
|
1249
1360
|
passwordStrength: { weak: "Debole", fair: "Discreta", good: "Buona", strong: "Forte" },
|
|
1250
1361
|
commandMenu: {
|
|
1251
1362
|
placeholder: "Digita un comando o cerca\u2026",
|
|
@@ -1308,8 +1419,17 @@ var itIT = {
|
|
|
1308
1419
|
previous: "Precedente",
|
|
1309
1420
|
next: "Successivo",
|
|
1310
1421
|
pageRange: "{from}\u2013{to} di {total}",
|
|
1311
|
-
perPage: "{size} / pagina"
|
|
1312
|
-
|
|
1422
|
+
perPage: "{size} / pagina",
|
|
1423
|
+
selectRow: "Seleziona riga",
|
|
1424
|
+
selectAll: "Seleziona tutto"
|
|
1425
|
+
},
|
|
1426
|
+
wizard: { back: "Terug", next: "Volgende", finish: "Voltooien" },
|
|
1427
|
+
a11y: { zoomIn: "Ingrandisci", zoomOut: "Riduci", rotate: "Ruota", collapseStart: "Comprimi pannello iniziale", collapseEnd: "Comprimi pannello finale", bulkActions: "Azioni multiple", clearSelection: "Cancella selezione", back: "Indietro" },
|
|
1428
|
+
richEditor: { placeholder: "Scrivi qualcosa\u2026", editorLabel: "Editor di testo formattato" },
|
|
1429
|
+
copy: { label: "Copia" },
|
|
1430
|
+
emojiPicker: { searchPlaceholder: "Cerca emoji", emptyText: "Nessun emoji trovato", addReaction: "Aggiungi reazione" },
|
|
1431
|
+
sidebar: { searchPlaceholder: "Cerca", primary: "Navigazione principale" },
|
|
1432
|
+
imageViewer: { reset: "Reimposta", download: "Scarica" }
|
|
1313
1433
|
};
|
|
1314
1434
|
var nlNL = {
|
|
1315
1435
|
locale: "nl-NL",
|
|
@@ -1333,13 +1453,15 @@ var nlNL = {
|
|
|
1333
1453
|
},
|
|
1334
1454
|
timePicker: { am: "AM", pm: "PM" },
|
|
1335
1455
|
pagination: { previous: "Vorige", next: "Volgende" },
|
|
1336
|
-
modal: { close: "Sluiten" },
|
|
1456
|
+
modal: { close: "Sluiten", maximize: "maximaliseren", restore: "Herstellen" },
|
|
1457
|
+
select: { placeholder: "Selecteren" },
|
|
1458
|
+
counterInput: { decrease: "Verlagen", increase: "Verhogen" },
|
|
1337
1459
|
drawer: { close: "Sluiten" },
|
|
1338
1460
|
alert: { dismiss: "Sluiten" },
|
|
1339
1461
|
banner: { dismiss: "Sluiten" },
|
|
1340
1462
|
toast: { dismiss: "Sluiten" },
|
|
1341
1463
|
fileUpload: { clickToUpload: "Klik om te uploaden", orDragAndDrop: "of sleep hierheen" },
|
|
1342
|
-
imageUpload: { label: "Afbeelding uploaden", remove: "Verwijderen" },
|
|
1464
|
+
imageUpload: { label: "Afbeelding uploaden", remove: "Verwijderen", hint: "PNG of JPG, max. 5 MB" },
|
|
1343
1465
|
passwordStrength: { weak: "Zwak", fair: "Redelijk", good: "Goed", strong: "Sterk" },
|
|
1344
1466
|
commandMenu: {
|
|
1345
1467
|
placeholder: "Typ een opdracht of zoek\u2026",
|
|
@@ -1402,8 +1524,17 @@ var nlNL = {
|
|
|
1402
1524
|
previous: "Vorige",
|
|
1403
1525
|
next: "Volgende",
|
|
1404
1526
|
pageRange: "{from}\u2013{to} van {total}",
|
|
1405
|
-
perPage: "{size} / pagina"
|
|
1406
|
-
|
|
1527
|
+
perPage: "{size} / pagina",
|
|
1528
|
+
selectRow: "Rij selecteren",
|
|
1529
|
+
selectAll: "Alles selecteren"
|
|
1530
|
+
},
|
|
1531
|
+
wizard: { back: "Wstecz", next: "Dalej", finish: "Zako\u0144cz" },
|
|
1532
|
+
a11y: { zoomIn: "Inzoomen", zoomOut: "Uitzoomen", rotate: "Roteren", collapseStart: "Startpaneel samenvouwen", collapseEnd: "Eindpaneel samenvouwen", bulkActions: "Bulkacties", clearSelection: "Selectie wissen", back: "Terug" },
|
|
1533
|
+
richEditor: { placeholder: "Schrijf iets\u2026", editorLabel: "Rich text-editor" },
|
|
1534
|
+
copy: { label: "Kopi\xEBren" },
|
|
1535
|
+
emojiPicker: { searchPlaceholder: "Emoji zoeken", emptyText: "Geen emoji gevonden", addReaction: "Reactie toevoegen" },
|
|
1536
|
+
sidebar: { searchPlaceholder: "Zoeken", primary: "Hoofdnavigatie" },
|
|
1537
|
+
imageViewer: { reset: "Herstellen", download: "Downloaden" }
|
|
1407
1538
|
};
|
|
1408
1539
|
var plPL = {
|
|
1409
1540
|
locale: "pl-PL",
|
|
@@ -1427,13 +1558,15 @@ var plPL = {
|
|
|
1427
1558
|
},
|
|
1428
1559
|
timePicker: { am: "AM", pm: "PM" },
|
|
1429
1560
|
pagination: { previous: "Poprzednia", next: "Nast\u0119pna" },
|
|
1430
|
-
modal: { close: "Zamknij" },
|
|
1561
|
+
modal: { close: "Zamknij", maximize: "Maksymalizuj", restore: "Przywr\xF3\u0107" },
|
|
1562
|
+
select: { placeholder: "Wybierz" },
|
|
1563
|
+
counterInput: { decrease: "Zmniejsz", increase: "Zwi\u0119ksz" },
|
|
1431
1564
|
drawer: { close: "Zamknij" },
|
|
1432
1565
|
alert: { dismiss: "Zamknij" },
|
|
1433
1566
|
banner: { dismiss: "Zamknij" },
|
|
1434
1567
|
toast: { dismiss: "Zamknij" },
|
|
1435
1568
|
fileUpload: { clickToUpload: "Kliknij, aby przes\u0142a\u0107", orDragAndDrop: "lub przeci\u0105gnij i upu\u015B\u0107" },
|
|
1436
|
-
imageUpload: { label: "Prze\u015Blij obraz", remove: "Usu\u0144" },
|
|
1569
|
+
imageUpload: { label: "Prze\u015Blij obraz", remove: "Usu\u0144", hint: "PNG lub JPG, do 5 MB" },
|
|
1437
1570
|
passwordStrength: { weak: "S\u0142abe", fair: "\u015Arednie", good: "Dobre", strong: "Silne" },
|
|
1438
1571
|
commandMenu: {
|
|
1439
1572
|
placeholder: "Wpisz polecenie lub szukaj\u2026",
|
|
@@ -1496,8 +1629,17 @@ var plPL = {
|
|
|
1496
1629
|
previous: "Poprzednia",
|
|
1497
1630
|
next: "Nast\u0119pna",
|
|
1498
1631
|
pageRange: "{from}\u2013{to} z {total}",
|
|
1499
|
-
perPage: "{size} / strona"
|
|
1500
|
-
|
|
1632
|
+
perPage: "{size} / strona",
|
|
1633
|
+
selectRow: "Zaznacz wiersz",
|
|
1634
|
+
selectAll: "Zaznacz wszystko"
|
|
1635
|
+
},
|
|
1636
|
+
wizard: { back: "Geri", next: "\u0130leri", finish: "Bitir" },
|
|
1637
|
+
a11y: { zoomIn: "Powi\u0119ksz", zoomOut: "Pomniejsz", rotate: "Obr\xF3\u0107", collapseStart: "Zwi\u0144 panel pocz\u0105tkowy", collapseEnd: "Zwi\u0144 panel ko\u0144cowy", bulkActions: "Akcje zbiorcze", clearSelection: "Wyczy\u015B\u0107 zaznaczenie", back: "Wstecz" },
|
|
1638
|
+
richEditor: { placeholder: "Wpisz co\u015B\u2026", editorLabel: "Edytor tekstu sformatowanego" },
|
|
1639
|
+
copy: { label: "Kopiuj" },
|
|
1640
|
+
emojiPicker: { searchPlaceholder: "Szukaj emoji", emptyText: "Nie znaleziono emoji", addReaction: "Dodaj reakcj\u0119" },
|
|
1641
|
+
sidebar: { searchPlaceholder: "Szukaj", primary: "Nawigacja g\u0142\xF3wna" },
|
|
1642
|
+
imageViewer: { reset: "Resetuj", download: "Pobierz" }
|
|
1501
1643
|
};
|
|
1502
1644
|
var trTR = {
|
|
1503
1645
|
locale: "tr-TR",
|
|
@@ -1521,13 +1663,15 @@ var trTR = {
|
|
|
1521
1663
|
},
|
|
1522
1664
|
timePicker: { am: "\xD6\xD6", pm: "\xD6S" },
|
|
1523
1665
|
pagination: { previous: "\xD6nceki", next: "Sonraki" },
|
|
1524
|
-
modal: { close: "Kapat" },
|
|
1666
|
+
modal: { close: "Kapat", maximize: "Ekran\u0131 kapla", restore: "Geri y\xFCkle" },
|
|
1667
|
+
select: { placeholder: "Se\xE7" },
|
|
1668
|
+
counterInput: { decrease: "Azalt", increase: "Art\u0131r" },
|
|
1525
1669
|
drawer: { close: "Kapat" },
|
|
1526
1670
|
alert: { dismiss: "Kapat" },
|
|
1527
1671
|
banner: { dismiss: "Kapat" },
|
|
1528
1672
|
toast: { dismiss: "Kapat" },
|
|
1529
1673
|
fileUpload: { clickToUpload: "Y\xFCklemek i\xE7in t\u0131klay\u0131n", orDragAndDrop: "veya s\xFCr\xFCkleyip b\u0131rak\u0131n" },
|
|
1530
|
-
imageUpload: { label: "G\xF6rsel y\xFCkle", remove: "Kald\u0131r" },
|
|
1674
|
+
imageUpload: { label: "G\xF6rsel y\xFCkle", remove: "Kald\u0131r", hint: "PNG veya JPG, en fazla 5 MB" },
|
|
1531
1675
|
passwordStrength: { weak: "Zay\u0131f", fair: "Orta", good: "\u0130yi", strong: "G\xFC\xE7l\xFC" },
|
|
1532
1676
|
commandMenu: {
|
|
1533
1677
|
placeholder: "Bir komut yaz\u0131n veya aray\u0131n\u2026",
|
|
@@ -1590,8 +1734,17 @@ var trTR = {
|
|
|
1590
1734
|
previous: "\xD6nceki",
|
|
1591
1735
|
next: "Sonraki",
|
|
1592
1736
|
pageRange: "{total} \xF6\u011Feden {from}\u2013{to}",
|
|
1593
|
-
perPage: "{size} / sayfa"
|
|
1594
|
-
|
|
1737
|
+
perPage: "{size} / sayfa",
|
|
1738
|
+
selectRow: "Sat\u0131r\u0131 se\xE7",
|
|
1739
|
+
selectAll: "T\xFCm\xFCn\xFC se\xE7"
|
|
1740
|
+
},
|
|
1741
|
+
wizard: { back: "Quay l\u1EA1i", next: "Ti\u1EBFp theo", finish: "Ho\xE0n t\u1EA5t" },
|
|
1742
|
+
a11y: { zoomIn: "Yak\u0131nla\u015Ft\u0131r", zoomOut: "Uzakla\u015Ft\u0131r", rotate: "D\xF6nd\xFCr", collapseStart: "Ba\u015Flang\u0131\xE7 panelini daralt", collapseEnd: "Biti\u015F panelini daralt", bulkActions: "Toplu i\u015Flemler", clearSelection: "Se\xE7imi temizle", back: "Geri" },
|
|
1743
|
+
richEditor: { placeholder: "Bir \u015Feyler yaz\u0131n\u2026", editorLabel: "Zengin metin d\xFCzenleyici" },
|
|
1744
|
+
copy: { label: "Kopyala" },
|
|
1745
|
+
emojiPicker: { searchPlaceholder: "Emoji ara", emptyText: "Emoji bulunamad\u0131", addReaction: "Tepki ekle" },
|
|
1746
|
+
sidebar: { searchPlaceholder: "Ara", primary: "Ana gezinme" },
|
|
1747
|
+
imageViewer: { reset: "S\u0131f\u0131rla", download: "\u0130ndir" }
|
|
1595
1748
|
};
|
|
1596
1749
|
var viVN = {
|
|
1597
1750
|
locale: "vi-VN",
|
|
@@ -1615,13 +1768,15 @@ var viVN = {
|
|
|
1615
1768
|
},
|
|
1616
1769
|
timePicker: { am: "SA", pm: "CH" },
|
|
1617
1770
|
pagination: { previous: "Tr\u01B0\u1EDBc", next: "Sau" },
|
|
1618
|
-
modal: { close: "\u0110\xF3ng" },
|
|
1771
|
+
modal: { close: "\u0110\xF3ng", maximize: "Ph\xF3ng to", restore: "Kh\xF4i ph\u1EE5c" },
|
|
1772
|
+
select: { placeholder: "Ch\u1ECDn" },
|
|
1773
|
+
counterInput: { decrease: "Gi\u1EA3m", increase: "T\u0103ng" },
|
|
1619
1774
|
drawer: { close: "\u0110\xF3ng" },
|
|
1620
1775
|
alert: { dismiss: "\u0110\xF3ng" },
|
|
1621
1776
|
banner: { dismiss: "\u0110\xF3ng" },
|
|
1622
1777
|
toast: { dismiss: "\u0110\xF3ng" },
|
|
1623
1778
|
fileUpload: { clickToUpload: "Nh\u1EA5p \u0111\u1EC3 t\u1EA3i l\xEAn", orDragAndDrop: "ho\u1EB7c k\xE9o v\xE0 th\u1EA3" },
|
|
1624
|
-
imageUpload: { label: "T\u1EA3i \u1EA3nh l\xEAn", remove: "X\xF3a" },
|
|
1779
|
+
imageUpload: { label: "T\u1EA3i \u1EA3nh l\xEAn", remove: "X\xF3a", hint: "PNG ho\u1EB7c JPG, t\u1ED1i \u0111a 5MB" },
|
|
1625
1780
|
passwordStrength: { weak: "Y\u1EBFu", fair: "Trung b\xECnh", good: "T\u1ED1t", strong: "M\u1EA1nh" },
|
|
1626
1781
|
commandMenu: {
|
|
1627
1782
|
placeholder: "Nh\u1EADp l\u1EC7nh ho\u1EB7c t\xECm ki\u1EBFm\u2026",
|
|
@@ -1684,8 +1839,17 @@ var viVN = {
|
|
|
1684
1839
|
previous: "Tr\u01B0\u1EDBc",
|
|
1685
1840
|
next: "Sau",
|
|
1686
1841
|
pageRange: "{from}\u2013{to} trong {total}",
|
|
1687
|
-
perPage: "{size} / trang"
|
|
1688
|
-
|
|
1842
|
+
perPage: "{size} / trang",
|
|
1843
|
+
selectRow: "Ch\u1ECDn h\xE0ng",
|
|
1844
|
+
selectAll: "Ch\u1ECDn t\u1EA5t c\u1EA3"
|
|
1845
|
+
},
|
|
1846
|
+
wizard: { back: "Kembali", next: "Berikutnya", finish: "Selesai" },
|
|
1847
|
+
a11y: { zoomIn: "Ph\xF3ng to", zoomOut: "Thu nh\u1ECF", rotate: "Xoay", collapseStart: "Thu g\u1ECDn b\u1EA3ng \u0111\u1EA7u", collapseEnd: "Thu g\u1ECDn b\u1EA3ng cu\u1ED1i", bulkActions: "Thao t\xE1c h\xE0ng lo\u1EA1t", clearSelection: "B\u1ECF ch\u1ECDn", back: "Quay l\u1EA1i" },
|
|
1848
|
+
richEditor: { placeholder: "Vi\u1EBFt n\u1ED9i dung\u2026", editorLabel: "Tr\xECnh so\u1EA1n th\u1EA3o v\u0103n b\u1EA3n" },
|
|
1849
|
+
copy: { label: "Sao ch\xE9p" },
|
|
1850
|
+
emojiPicker: { searchPlaceholder: "T\xECm emoji", emptyText: "Kh\xF4ng t\xECm th\u1EA5y emoji", addReaction: "Th\xEAm c\u1EA3m x\xFAc" },
|
|
1851
|
+
sidebar: { searchPlaceholder: "T\xECm ki\u1EBFm", primary: "\u0110i\u1EC1u h\u01B0\u1EDBng ch\xEDnh" },
|
|
1852
|
+
imageViewer: { reset: "\u0110\u1EB7t l\u1EA1i", download: "T\u1EA3i xu\u1ED1ng" }
|
|
1689
1853
|
};
|
|
1690
1854
|
var idID = {
|
|
1691
1855
|
locale: "id-ID",
|
|
@@ -1709,13 +1873,15 @@ var idID = {
|
|
|
1709
1873
|
},
|
|
1710
1874
|
timePicker: { am: "AM", pm: "PM" },
|
|
1711
1875
|
pagination: { previous: "Sebelumnya", next: "Berikutnya" },
|
|
1712
|
-
modal: { close: "Tutup" },
|
|
1876
|
+
modal: { close: "Tutup", maximize: "Maksimalkan", restore: "Pulihkan" },
|
|
1877
|
+
select: { placeholder: "Pilih" },
|
|
1878
|
+
counterInput: { decrease: "Kurangi", increase: "Tambah" },
|
|
1713
1879
|
drawer: { close: "Tutup" },
|
|
1714
1880
|
alert: { dismiss: "Tutup" },
|
|
1715
1881
|
banner: { dismiss: "Tutup" },
|
|
1716
1882
|
toast: { dismiss: "Tutup" },
|
|
1717
1883
|
fileUpload: { clickToUpload: "Klik untuk mengunggah", orDragAndDrop: "atau seret dan lepas" },
|
|
1718
|
-
imageUpload: { label: "Unggah gambar", remove: "Hapus" },
|
|
1884
|
+
imageUpload: { label: "Unggah gambar", remove: "Hapus", hint: "PNG atau JPG, maks. 5 MB" },
|
|
1719
1885
|
passwordStrength: { weak: "Lemah", fair: "Cukup", good: "Baik", strong: "Kuat" },
|
|
1720
1886
|
commandMenu: {
|
|
1721
1887
|
placeholder: "Ketik perintah atau cari\u2026",
|
|
@@ -1778,8 +1944,17 @@ var idID = {
|
|
|
1778
1944
|
previous: "Sebelumnya",
|
|
1779
1945
|
next: "Berikutnya",
|
|
1780
1946
|
pageRange: "{from}\u2013{to} dari {total}",
|
|
1781
|
-
perPage: "{size} / halaman"
|
|
1782
|
-
|
|
1947
|
+
perPage: "{size} / halaman",
|
|
1948
|
+
selectRow: "Pilih baris",
|
|
1949
|
+
selectAll: "Pilih semua"
|
|
1950
|
+
},
|
|
1951
|
+
wizard: { back: "Kembali", next: "Berikutnya", finish: "Selesai" },
|
|
1952
|
+
a11y: { zoomIn: "Perbesar", zoomOut: "Perkecil", rotate: "Putar", collapseStart: "Ciutkan panel awal", collapseEnd: "Ciutkan panel akhir", bulkActions: "Tindakan massal", clearSelection: "Hapus pilihan", back: "Kembali" },
|
|
1953
|
+
richEditor: { placeholder: "Tulis sesuatu\u2026", editorLabel: "Editor teks kaya" },
|
|
1954
|
+
copy: { label: "Salin" },
|
|
1955
|
+
emojiPicker: { searchPlaceholder: "Cari emoji", emptyText: "Emoji tidak ditemukan", addReaction: "Tambahkan reaksi" },
|
|
1956
|
+
sidebar: { searchPlaceholder: "Cari", primary: "Navigasi utama" },
|
|
1957
|
+
imageViewer: { reset: "Setel ulang", download: "Unduh" }
|
|
1783
1958
|
};
|
|
1784
1959
|
var locales = {
|
|
1785
1960
|
enUS,
|
|
@@ -1800,6 +1975,275 @@ var locales = {
|
|
|
1800
1975
|
viVN,
|
|
1801
1976
|
idID
|
|
1802
1977
|
};
|
|
1978
|
+
|
|
1979
|
+
// src/components/config/size.ts
|
|
1980
|
+
var SIZE_CONTRACTS = {
|
|
1981
|
+
/* ── 控件族:跟随全局档位,且自有档位 = 规范档位 ── */
|
|
1982
|
+
Button: {
|
|
1983
|
+
scale: ["tiny", "xsmall", "small", "medium", "large"],
|
|
1984
|
+
fallback: "medium",
|
|
1985
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" },
|
|
1986
|
+
tiers: { xsmall: "xsmall", small: "small", medium: "medium", large: "large" },
|
|
1987
|
+
// 同一个文件里还有 fancy / compact / link 三种按钮刻度(KDS §2.4 的显式附属动作)
|
|
1988
|
+
extraScales: [
|
|
1989
|
+
["small", "medium", "large"],
|
|
1990
|
+
["small", "medium"]
|
|
1991
|
+
]
|
|
1992
|
+
},
|
|
1993
|
+
ButtonGroup: {
|
|
1994
|
+
scale: ["small", "medium", "large"],
|
|
1995
|
+
fallback: "medium",
|
|
1996
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
1997
|
+
},
|
|
1998
|
+
Input: {
|
|
1999
|
+
scale: ["xsmall", "small", "medium", "large"],
|
|
2000
|
+
fallback: "medium",
|
|
2001
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" },
|
|
2002
|
+
tiers: { xsmall: "xsmall", small: "small", medium: "medium", large: "large" }
|
|
2003
|
+
},
|
|
2004
|
+
Select: {
|
|
2005
|
+
scale: ["xsmall", "small", "medium", "large"],
|
|
2006
|
+
fallback: "medium",
|
|
2007
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" },
|
|
2008
|
+
tiers: { xsmall: "xsmall", small: "small", medium: "medium", large: "large" }
|
|
2009
|
+
},
|
|
2010
|
+
Textarea: {
|
|
2011
|
+
scale: ["xsmall", "small", "medium", "large"],
|
|
2012
|
+
fallback: "medium",
|
|
2013
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2014
|
+
},
|
|
2015
|
+
AutoComplete: {
|
|
2016
|
+
scale: ["small", "medium", "large"],
|
|
2017
|
+
fallback: "medium",
|
|
2018
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2019
|
+
},
|
|
2020
|
+
Cascader: {
|
|
2021
|
+
scale: ["small", "medium", "large"],
|
|
2022
|
+
fallback: "medium",
|
|
2023
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2024
|
+
},
|
|
2025
|
+
SelectMenu: {
|
|
2026
|
+
scale: ["small", "medium", "large"],
|
|
2027
|
+
fallback: "medium",
|
|
2028
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2029
|
+
},
|
|
2030
|
+
CounterInput: {
|
|
2031
|
+
scale: ["small", "medium", "large"],
|
|
2032
|
+
fallback: "medium",
|
|
2033
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2034
|
+
},
|
|
2035
|
+
DigitInput: {
|
|
2036
|
+
scale: ["small", "medium", "large"],
|
|
2037
|
+
fallback: "medium",
|
|
2038
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2039
|
+
},
|
|
2040
|
+
CronEditor: {
|
|
2041
|
+
scale: ["small", "medium"],
|
|
2042
|
+
fallback: "medium",
|
|
2043
|
+
fromGlobal: { small: "small", medium: "medium", large: "medium" }
|
|
2044
|
+
},
|
|
2045
|
+
Checkbox: {
|
|
2046
|
+
scale: ["small", "medium", "large"],
|
|
2047
|
+
fallback: "medium",
|
|
2048
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2049
|
+
},
|
|
2050
|
+
Radio: {
|
|
2051
|
+
scale: ["small", "medium", "large"],
|
|
2052
|
+
fallback: "medium",
|
|
2053
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2054
|
+
},
|
|
2055
|
+
Switch: {
|
|
2056
|
+
scale: ["small", "medium", "large"],
|
|
2057
|
+
fallback: "medium",
|
|
2058
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2059
|
+
},
|
|
2060
|
+
Slider: {
|
|
2061
|
+
scale: ["small", "medium", "large"],
|
|
2062
|
+
fallback: "medium",
|
|
2063
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2064
|
+
},
|
|
2065
|
+
RangeSlider: {
|
|
2066
|
+
scale: ["sm", "md", "lg"],
|
|
2067
|
+
fallback: "md",
|
|
2068
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" },
|
|
2069
|
+
tiers: { small: "sm", medium: "md", large: "lg" }
|
|
2070
|
+
},
|
|
2071
|
+
ColorSlider: {
|
|
2072
|
+
scale: ["small", "medium", "large"],
|
|
2073
|
+
fallback: "medium",
|
|
2074
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2075
|
+
},
|
|
2076
|
+
HorizontalFilter: {
|
|
2077
|
+
scale: ["small", "medium"],
|
|
2078
|
+
fallback: "medium",
|
|
2079
|
+
fromGlobal: { small: "small", medium: "medium", large: "medium" }
|
|
2080
|
+
},
|
|
2081
|
+
CompactSelect: {
|
|
2082
|
+
scale: ["xsmall", "small", "medium"],
|
|
2083
|
+
fallback: "small",
|
|
2084
|
+
fromGlobal: { small: "small", medium: "medium", large: "medium" }
|
|
2085
|
+
},
|
|
2086
|
+
CompactSelectForInput: {
|
|
2087
|
+
scale: ["small", "medium", "large"],
|
|
2088
|
+
fallback: "small",
|
|
2089
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2090
|
+
},
|
|
2091
|
+
ColorDot: {
|
|
2092
|
+
scale: ["sm", "md", "lg"],
|
|
2093
|
+
fallback: "md",
|
|
2094
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" },
|
|
2095
|
+
tiers: { small: "sm", medium: "md", large: "lg" }
|
|
2096
|
+
},
|
|
2097
|
+
/* ── 信息/展示族:跟随全局档位,但档位刻意比控件少 ── */
|
|
2098
|
+
Badge: {
|
|
2099
|
+
scale: ["small", "medium"],
|
|
2100
|
+
fallback: "medium",
|
|
2101
|
+
fromGlobal: { small: "small", medium: "medium", large: "medium" },
|
|
2102
|
+
tiers: { xsmall: "small", small: "small", medium: "medium", large: "medium" }
|
|
2103
|
+
},
|
|
2104
|
+
StatusBadge: {
|
|
2105
|
+
scale: ["small", "medium"],
|
|
2106
|
+
fallback: "medium",
|
|
2107
|
+
fromGlobal: { small: "small", medium: "medium", large: "medium" }
|
|
2108
|
+
},
|
|
2109
|
+
ChartLegend: {
|
|
2110
|
+
scale: ["sm", "md"],
|
|
2111
|
+
fallback: "md",
|
|
2112
|
+
fromGlobal: { small: "sm", medium: "md", large: "md" }
|
|
2113
|
+
},
|
|
2114
|
+
ContentLabel: {
|
|
2115
|
+
scale: ["sm", "md"],
|
|
2116
|
+
fallback: "md",
|
|
2117
|
+
fromGlobal: { small: "sm", medium: "md", large: "md" }
|
|
2118
|
+
},
|
|
2119
|
+
GaugeBar: {
|
|
2120
|
+
scale: ["sm", "md", "lg"],
|
|
2121
|
+
fallback: "md",
|
|
2122
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" }
|
|
2123
|
+
},
|
|
2124
|
+
KeyIcon: {
|
|
2125
|
+
scale: ["xs", "sm", "md", "lg", "xl"],
|
|
2126
|
+
fallback: "md",
|
|
2127
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" }
|
|
2128
|
+
},
|
|
2129
|
+
Money: {
|
|
2130
|
+
scale: ["sm", "md", "lg", "big"],
|
|
2131
|
+
fallback: "md",
|
|
2132
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" }
|
|
2133
|
+
},
|
|
2134
|
+
StatusDot: {
|
|
2135
|
+
scale: ["xs", "sm", "md", "lg"],
|
|
2136
|
+
fallback: "sm",
|
|
2137
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" }
|
|
2138
|
+
},
|
|
2139
|
+
Item: {
|
|
2140
|
+
scale: ["default", "small", "xsmall"],
|
|
2141
|
+
fallback: "default",
|
|
2142
|
+
fromGlobal: { small: "small", medium: "default", large: "default" }
|
|
2143
|
+
},
|
|
2144
|
+
Toggle: {
|
|
2145
|
+
scale: ["small", "medium", "large"],
|
|
2146
|
+
fallback: "medium",
|
|
2147
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2148
|
+
},
|
|
2149
|
+
CopyButton: {
|
|
2150
|
+
scale: ["sm", "md", "lg"],
|
|
2151
|
+
fallback: "md",
|
|
2152
|
+
fromGlobal: { small: "sm", medium: "md", large: "lg" }
|
|
2153
|
+
},
|
|
2154
|
+
CheckboxGroup: {
|
|
2155
|
+
scale: ["small", "medium", "large"],
|
|
2156
|
+
fallback: "medium",
|
|
2157
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" },
|
|
2158
|
+
inherits: "Checkbox"
|
|
2159
|
+
},
|
|
2160
|
+
Statistic: {
|
|
2161
|
+
scale: ["small", "medium", "large"],
|
|
2162
|
+
fallback: "medium",
|
|
2163
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2164
|
+
},
|
|
2165
|
+
Descriptions: {
|
|
2166
|
+
scale: ["small", "medium", "large"],
|
|
2167
|
+
fallback: "medium",
|
|
2168
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2169
|
+
},
|
|
2170
|
+
List: {
|
|
2171
|
+
scale: ["small", "medium", "large"],
|
|
2172
|
+
fallback: "medium",
|
|
2173
|
+
fromGlobal: { small: "small", medium: "medium", large: "large" }
|
|
2174
|
+
},
|
|
2175
|
+
/* ── 组件自有刻度:不跟随全局档位,理由必须写清 ── */
|
|
2176
|
+
Avatar: {
|
|
2177
|
+
scale: ["20", "24", "32", "40", "48", "56", "64", "72", "80"],
|
|
2178
|
+
fallback: "40",
|
|
2179
|
+
exempt: "\u5C3A\u5BF8\u5373\u50CF\u7D20\u523B\u5EA6\uFF08\u540C MUI/Ant \u7684 Avatar size:number \u53E3\u5F84\uFF09\uFF0C9 \u6863\u8986\u76D6\u5934\u50CF\u5806\u53E0\u7684\u5168\u90E8\u7528\u6CD5\uFF1B\u63A5\u5168\u5C40\u6863\u4F4D\u4F1A\u628A 40px \u5934\u50CF\u5728\u4E24\u6863\u4E4B\u95F4\u8DF3\u53D8\uFF0C\u5C5E\u7834\u574F\u6027\u89C6\u89C9\u53D8\u66F4\uFF0C\u987B\u5355\u72EC\u51B3\u8BAE\u3002"
|
|
2180
|
+
},
|
|
2181
|
+
ActorAvatar: {
|
|
2182
|
+
scale: ["20", "24", "32", "40", "56"],
|
|
2183
|
+
fallback: "24",
|
|
2184
|
+
exempt: "\u540C Avatar\uFF1A\u50CF\u7D20\u523B\u5EA6\uFF0C\u4E0D\u662F\u63A7\u4EF6\u6863\u4F4D\u3002"
|
|
2185
|
+
},
|
|
2186
|
+
AvatarGroup: {
|
|
2187
|
+
scale: ["24", "32", "40", "48"],
|
|
2188
|
+
fallback: "40",
|
|
2189
|
+
exempt: "\u540C Avatar\uFF1A\u50CF\u7D20\u523B\u5EA6\uFF08\u51B3\u5B9A\u53E0\u52A0\u5934\u50CF\u4E0E +N \u5FBD\u6807\u7684\u76F4\u5F84\uFF09\u3002"
|
|
2190
|
+
},
|
|
2191
|
+
Space: {
|
|
2192
|
+
scale: ["none", "xs", "sm", "md", "lg", "xl", "2xl"],
|
|
2193
|
+
fallback: "md",
|
|
2194
|
+
exempt: "\u8FD9\u662F**\u95F4\u8DDD\u523B\u5EA6**\uFF08gap\uFF09\uFF0C\u4E0D\u662F\u63A7\u4EF6\u5C3A\u5BF8\uFF1BKDS \xA71.4 \u7684\u7A7A\u95F4\u9636\u4E0E\u63A7\u4EF6\u6863\u4F4D\u662F\u4E24\u6761\u8F74\u3002"
|
|
2195
|
+
},
|
|
2196
|
+
InputGroup: {
|
|
2197
|
+
scale: ["xsmall", "icon-xsmall", "icon-small"],
|
|
2198
|
+
fallback: "xsmall",
|
|
2199
|
+
exempt: "\u8BE5 size \u63CF\u8FF0\u7684\u662F\u7EC4\u5185\u5D4C\u6309\u94AE\u7684\u53D8\u4F53\uFF08\u542B icon-* \u5F62\u6001\uFF09\uFF0C\u4E0D\u662F\u63A7\u4EF6\u9AD8\u5EA6\u6863\u4F4D\u3002"
|
|
2200
|
+
},
|
|
2201
|
+
Drawer: {
|
|
2202
|
+
scale: ["default", "large"],
|
|
2203
|
+
fallback: "default",
|
|
2204
|
+
exempt: "\u5BBD\u5EA6\u6863\u4F4D\uFF08480/640/800 \u53E3\u5F84\uFF09\uFF0C\u4E0D\u662F\u63A7\u4EF6\u5C3A\u5BF8\uFF1B\u6D6E\u5C42\u5BBD\u5EA6\u7531\u4EFB\u52A1\u51B3\u5B9A\uFF0C\u4E0D\u968F\u5168\u5C40 size \u6F02\u79FB\u3002"
|
|
2205
|
+
},
|
|
2206
|
+
CircularProgress: {
|
|
2207
|
+
scale: ["number"],
|
|
2208
|
+
fallback: "number",
|
|
2209
|
+
exempt: "\u6570\u503C\u76F4\u5F84\uFF08px\uFF09\uFF0C\u7531\u8C03\u7528\u65B9\u6309\u5BB9\u5668\u7ED9\u5B9A\u3002"
|
|
2210
|
+
},
|
|
2211
|
+
ImageUpload: {
|
|
2212
|
+
scale: ["number"],
|
|
2213
|
+
fallback: "number",
|
|
2214
|
+
exempt: "\u6570\u503C\u8FB9\u957F\uFF08px\uFF09\uFF0C\u7531\u8C03\u7528\u65B9\u6309\u5BB9\u5668\u7ED9\u5B9A\u3002"
|
|
2215
|
+
},
|
|
2216
|
+
Rating: {
|
|
2217
|
+
scale: ["number"],
|
|
2218
|
+
fallback: "number",
|
|
2219
|
+
exempt: "\u6570\u503C\u661F\u6807\u5B57\u53F7\uFF08px\uFF09\u3002"
|
|
2220
|
+
},
|
|
2221
|
+
Spinner: {
|
|
2222
|
+
scale: ["number"],
|
|
2223
|
+
fallback: "number",
|
|
2224
|
+
exempt: "\u6570\u503C\u76F4\u5F84\uFF08px\uFF09\uFF1B\u547D\u540D\u6863\u4F4D\u89C1 SpinnerSize\uFF0C\u7531\u8C03\u7528\u65B9\u6309\u5BB9\u5668\u9009\u5B9A\u3002"
|
|
2225
|
+
},
|
|
2226
|
+
Splitter: {
|
|
2227
|
+
scale: ["number"],
|
|
2228
|
+
fallback: "number",
|
|
2229
|
+
exempt: "\u5206\u5272\u6761\u539A\u5EA6/\u5C3A\u5BF8\uFF0C\u63A5\u53D7\u6570\u503C\u6216 CSS \u957F\u5EA6\uFF0C\u5C5E\u5E03\u5C40\u91CF\u800C\u975E\u63A7\u4EF6\u6863\u4F4D\u3002"
|
|
2230
|
+
}
|
|
2231
|
+
};
|
|
2232
|
+
function resolveSize(name, explicit, global) {
|
|
2233
|
+
const contract = SIZE_CONTRACTS[name];
|
|
2234
|
+
if (explicit !== void 0) return explicit;
|
|
2235
|
+
if (global && contract.fromGlobal) {
|
|
2236
|
+
const mapped = contract.fromGlobal[global];
|
|
2237
|
+
if (mapped !== void 0) return mapped;
|
|
2238
|
+
}
|
|
2239
|
+
return contract.fallback;
|
|
2240
|
+
}
|
|
2241
|
+
function tierOf(name, tier) {
|
|
2242
|
+
const contract = SIZE_CONTRACTS[name];
|
|
2243
|
+
if (contract.tiers?.[tier]) return contract.tiers[tier];
|
|
2244
|
+
const entry = Object.entries(contract.fromGlobal ?? {}).find(([g]) => g === tier);
|
|
2245
|
+
return entry ? entry[1] : void 0;
|
|
2246
|
+
}
|
|
1803
2247
|
var DEFAULT_CONFIG = {
|
|
1804
2248
|
locale: enUS,
|
|
1805
2249
|
size: void 0,
|
|
@@ -1875,6 +2319,7 @@ function ConfigProvider({
|
|
|
1875
2319
|
{
|
|
1876
2320
|
className: "klun-config",
|
|
1877
2321
|
dir: value.dir,
|
|
2322
|
+
lang: (value.locale ?? enUS).locale,
|
|
1878
2323
|
"data-theme": value.theme,
|
|
1879
2324
|
"data-mode": value.accent,
|
|
1880
2325
|
"data-radius": value.radius && value.radius !== "default" ? value.radius : void 0,
|
|
@@ -1901,6 +2346,41 @@ function useMappedSize(explicit, map, fallback) {
|
|
|
1901
2346
|
if (size !== void 0) return map[size];
|
|
1902
2347
|
return fallback;
|
|
1903
2348
|
}
|
|
2349
|
+
function useScaleSize(name, explicit) {
|
|
2350
|
+
const { size } = react.useContext(ConfigContext);
|
|
2351
|
+
return resolveSize(name, explicit, size);
|
|
2352
|
+
}
|
|
2353
|
+
function domDensity() {
|
|
2354
|
+
if (typeof document === "undefined") return void 0;
|
|
2355
|
+
const v = document.documentElement.dataset.density;
|
|
2356
|
+
return v === "compact" || v === "default" || v === "kk" ? v : void 0;
|
|
2357
|
+
}
|
|
2358
|
+
var densityObserver = null;
|
|
2359
|
+
var densityListeners = /* @__PURE__ */ new Set();
|
|
2360
|
+
function subscribeDensity(cb) {
|
|
2361
|
+
densityListeners.add(cb);
|
|
2362
|
+
if (!densityObserver && typeof MutationObserver !== "undefined" && typeof document !== "undefined") {
|
|
2363
|
+
densityObserver = new MutationObserver(() => {
|
|
2364
|
+
for (const l of densityListeners) l();
|
|
2365
|
+
});
|
|
2366
|
+
densityObserver.observe(document.documentElement, {
|
|
2367
|
+
attributes: true,
|
|
2368
|
+
attributeFilter: ["data-density"]
|
|
2369
|
+
});
|
|
2370
|
+
}
|
|
2371
|
+
return () => {
|
|
2372
|
+
densityListeners.delete(cb);
|
|
2373
|
+
if (!densityListeners.size && densityObserver) {
|
|
2374
|
+
densityObserver.disconnect();
|
|
2375
|
+
densityObserver = null;
|
|
2376
|
+
}
|
|
2377
|
+
};
|
|
2378
|
+
}
|
|
2379
|
+
function useDensity() {
|
|
2380
|
+
const { density } = react.useContext(ConfigContext);
|
|
2381
|
+
const dom = react.useSyncExternalStore(subscribeDensity, domDensity, () => void 0);
|
|
2382
|
+
return density ?? dom ?? "default";
|
|
2383
|
+
}
|
|
1904
2384
|
var COMPACT_SIZE_MAP = { small: "small", medium: "medium", large: "medium" };
|
|
1905
2385
|
function Spinner({ className, size }) {
|
|
1906
2386
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1955,15 +2435,14 @@ var Button = react.forwardRef(function Button2(props, ref) {
|
|
|
1955
2435
|
size: _s2,
|
|
1956
2436
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1957
2437
|
loading: _l2,
|
|
1958
|
-
|
|
1959
|
-
type: _t,
|
|
2438
|
+
type: type2 = "button",
|
|
1960
2439
|
...rest2
|
|
1961
2440
|
} = props;
|
|
1962
2441
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1963
2442
|
"button",
|
|
1964
2443
|
{
|
|
1965
2444
|
ref,
|
|
1966
|
-
type:
|
|
2445
|
+
type: type2,
|
|
1967
2446
|
disabled: disabled2 || loading,
|
|
1968
2447
|
"aria-busy": loading || void 0,
|
|
1969
2448
|
className: chunkTPGAXYFU_cjs.cx(
|
|
@@ -2020,7 +2499,7 @@ var Button = react.forwardRef(function Button2(props, ref) {
|
|
|
2020
2499
|
...rest2,
|
|
2021
2500
|
children: [
|
|
2022
2501
|
loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-compact-button__icon", children: /* @__PURE__ */ jsxRuntime.jsx(Spinner, { className: "klun-compact-button__spinner" }) }) : icon2 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-compact-button__icon", children: icon2 }) : null,
|
|
2023
|
-
loading ? null : children2
|
|
2502
|
+
loading ? children2 != null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-compact-button__label-sr", children: children2 }) : null : children2
|
|
2024
2503
|
]
|
|
2025
2504
|
}
|
|
2026
2505
|
);
|
|
@@ -2198,15 +2677,18 @@ var CopyButton = react.forwardRef(
|
|
|
2198
2677
|
value,
|
|
2199
2678
|
children,
|
|
2200
2679
|
onCopied,
|
|
2201
|
-
size
|
|
2680
|
+
size: sizeProp,
|
|
2202
2681
|
variant = "ghost",
|
|
2203
2682
|
copyIcon = "ri-file-copy-line",
|
|
2204
2683
|
doneIcon = "ri-check-line",
|
|
2205
|
-
title
|
|
2684
|
+
title: titleProp,
|
|
2206
2685
|
onClick,
|
|
2207
2686
|
className,
|
|
2208
2687
|
...props
|
|
2209
2688
|
}, ref) {
|
|
2689
|
+
const size = useScaleSize("CopyButton", sizeProp);
|
|
2690
|
+
const { copy: localeCopy } = useLocale();
|
|
2691
|
+
const title = titleProp ?? localeCopy.label;
|
|
2210
2692
|
const [done, setDone] = react.useState(false);
|
|
2211
2693
|
const timer = react.useRef(null);
|
|
2212
2694
|
react.useEffect(() => () => clearTimeout(timer.current ?? void 0), []);
|
|
@@ -2247,7 +2729,7 @@ var CopyButton = react.forwardRef(
|
|
|
2247
2729
|
CopyButton.displayName = "CopyButton";
|
|
2248
2730
|
var Toggle = react.forwardRef(function Toggle2({
|
|
2249
2731
|
variant = "default",
|
|
2250
|
-
size
|
|
2732
|
+
size: sizeProp,
|
|
2251
2733
|
pressed,
|
|
2252
2734
|
defaultPressed = false,
|
|
2253
2735
|
onPressedChange,
|
|
@@ -2256,6 +2738,7 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
2256
2738
|
disabled,
|
|
2257
2739
|
...props
|
|
2258
2740
|
}, ref) {
|
|
2741
|
+
const size = useScaleSize("Toggle", sizeProp);
|
|
2259
2742
|
const [internal, setInternal] = react.useState(defaultPressed);
|
|
2260
2743
|
const controlled = pressed !== void 0;
|
|
2261
2744
|
const isPressed = controlled ? pressed : internal;
|
|
@@ -2549,7 +3032,8 @@ var AvatarGroup = react.forwardRef(function AvatarGroup2({ avatars = [], size =
|
|
|
2549
3032
|
);
|
|
2550
3033
|
});
|
|
2551
3034
|
AvatarGroup.displayName = "AvatarGroup";
|
|
2552
|
-
var Badge = react.forwardRef(function Badge2({ color = "gray", variant = "lighter", size
|
|
3035
|
+
var Badge = react.forwardRef(function Badge2({ color = "gray", variant = "lighter", size: sizeProp, leadingIcon, dot = false, className, children, ...props }, ref) {
|
|
3036
|
+
const size = useScaleSize("Badge", sizeProp);
|
|
2553
3037
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2554
3038
|
"span",
|
|
2555
3039
|
{
|
|
@@ -2583,6 +3067,7 @@ var BulkActionBar = react.forwardRef(
|
|
|
2583
3067
|
className,
|
|
2584
3068
|
...props
|
|
2585
3069
|
}, ref) {
|
|
3070
|
+
const { a11y } = useLocale();
|
|
2586
3071
|
const visible = open != null ? open : count > 0;
|
|
2587
3072
|
const [mounted, setMounted] = react.useState(visible);
|
|
2588
3073
|
const [show, setShow] = react.useState(visible);
|
|
@@ -2603,7 +3088,7 @@ var BulkActionBar = react.forwardRef(
|
|
|
2603
3088
|
{
|
|
2604
3089
|
ref,
|
|
2605
3090
|
role: "toolbar",
|
|
2606
|
-
"aria-label":
|
|
3091
|
+
"aria-label": a11y.bulkActions,
|
|
2607
3092
|
"data-show": show ? "" : void 0,
|
|
2608
3093
|
className: chunkTPGAXYFU_cjs.cx(
|
|
2609
3094
|
"klun-bulk-action-bar",
|
|
@@ -2624,8 +3109,8 @@ var BulkActionBar = react.forwardRef(
|
|
|
2624
3109
|
{
|
|
2625
3110
|
type: "button",
|
|
2626
3111
|
onClick: onClear,
|
|
2627
|
-
"aria-label":
|
|
2628
|
-
title:
|
|
3112
|
+
"aria-label": a11y.clearSelection,
|
|
3113
|
+
title: a11y.clearSelection,
|
|
2629
3114
|
className: "klun-bulk-action-bar__clear",
|
|
2630
3115
|
children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-close-line", "aria-hidden": true })
|
|
2631
3116
|
}
|
|
@@ -2669,6 +3154,16 @@ var Carousel = react.forwardRef(function Carousel2({
|
|
|
2669
3154
|
const { carousel } = useLocale();
|
|
2670
3155
|
const slides = react.Children.toArray(children);
|
|
2671
3156
|
const count = slides.length;
|
|
3157
|
+
const rootRef = react.useRef(null);
|
|
3158
|
+
const hadFocusInside = react.useRef(false);
|
|
3159
|
+
const attachRootRef = react.useCallback(
|
|
3160
|
+
(el) => {
|
|
3161
|
+
rootRef.current = el;
|
|
3162
|
+
if (typeof ref === "function") ref(el);
|
|
3163
|
+
else if (ref) ref.current = el;
|
|
3164
|
+
},
|
|
3165
|
+
[ref]
|
|
3166
|
+
);
|
|
2672
3167
|
const [inner, setInner] = react.useState(defaultIndex);
|
|
2673
3168
|
const cur = index !== void 0 ? index : inner;
|
|
2674
3169
|
const [hover, setHover] = react.useState(false);
|
|
@@ -2687,6 +3182,12 @@ var Carousel = react.forwardRef(function Carousel2({
|
|
|
2687
3182
|
const id = setInterval(() => go(cur + 1), interval);
|
|
2688
3183
|
return () => clearInterval(id);
|
|
2689
3184
|
}, [autoplay, hover, cur, interval, count, go]);
|
|
3185
|
+
react.useEffect(() => {
|
|
3186
|
+
const root = rootRef.current;
|
|
3187
|
+
if (!root || !hadFocusInside.current) return;
|
|
3188
|
+
const active = document.activeElement;
|
|
3189
|
+
if (active && !root.contains(active)) root.focus();
|
|
3190
|
+
}, [cur]);
|
|
2690
3191
|
const arrowBtn = (dir) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2691
3192
|
"button",
|
|
2692
3193
|
{
|
|
@@ -2700,11 +3201,20 @@ var Carousel = react.forwardRef(function Carousel2({
|
|
|
2700
3201
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2701
3202
|
"div",
|
|
2702
3203
|
{
|
|
2703
|
-
ref,
|
|
3204
|
+
ref: attachRootRef,
|
|
2704
3205
|
onMouseEnter: () => setHover(true),
|
|
2705
3206
|
onMouseLeave: () => setHover(false),
|
|
3207
|
+
onFocus: () => {
|
|
3208
|
+
hadFocusInside.current = true;
|
|
3209
|
+
},
|
|
3210
|
+
onBlur: (e) => {
|
|
3211
|
+
if (e.relatedTarget) {
|
|
3212
|
+
hadFocusInside.current = rootRef.current?.contains(e.relatedTarget) ?? false;
|
|
3213
|
+
}
|
|
3214
|
+
},
|
|
2706
3215
|
className: chunkTPGAXYFU_cjs.cx("klun-carousel", className),
|
|
2707
3216
|
style: { height, ...style },
|
|
3217
|
+
tabIndex: -1,
|
|
2708
3218
|
...props,
|
|
2709
3219
|
children: [
|
|
2710
3220
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2712,7 +3222,20 @@ var Carousel = react.forwardRef(function Carousel2({
|
|
|
2712
3222
|
{
|
|
2713
3223
|
className: "klun-carousel__track",
|
|
2714
3224
|
style: { transform: `translateX(-${cur * 100}%)` },
|
|
2715
|
-
children: slides.map((s, i) =>
|
|
3225
|
+
children: slides.map((s, i) => {
|
|
3226
|
+
const active = i === cur;
|
|
3227
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3228
|
+
"div",
|
|
3229
|
+
{
|
|
3230
|
+
className: "klun-carousel__slide",
|
|
3231
|
+
"data-active": active || void 0,
|
|
3232
|
+
...!active ? { inert: "" } : {},
|
|
3233
|
+
"aria-hidden": !active || void 0,
|
|
3234
|
+
children: s
|
|
3235
|
+
},
|
|
3236
|
+
i
|
|
3237
|
+
);
|
|
3238
|
+
})
|
|
2716
3239
|
}
|
|
2717
3240
|
),
|
|
2718
3241
|
arrows && count > 1 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -2735,7 +3258,8 @@ var Carousel = react.forwardRef(function Carousel2({
|
|
|
2735
3258
|
);
|
|
2736
3259
|
});
|
|
2737
3260
|
Carousel.displayName = "Carousel";
|
|
2738
|
-
var ChartLegend = react.forwardRef(function ChartLegend2({ items: items2 = [], direction = "row", dot = "round", size
|
|
3261
|
+
var ChartLegend = react.forwardRef(function ChartLegend2({ items: items2 = [], direction = "row", dot = "round", size: sizeProp, className, ...props }, ref) {
|
|
3262
|
+
const size = useScaleSize("ChartLegend", sizeProp);
|
|
2739
3263
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2740
3264
|
"div",
|
|
2741
3265
|
{
|
|
@@ -2948,7 +3472,8 @@ var LogViewer = react.forwardRef(function LogViewer2({
|
|
|
2948
3472
|
);
|
|
2949
3473
|
});
|
|
2950
3474
|
LogViewer.displayName = "LogViewer";
|
|
2951
|
-
var ContentLabel = react.forwardRef(function ContentLabel2({ children, icon, color = "gray", size
|
|
3475
|
+
var ContentLabel = react.forwardRef(function ContentLabel2({ children, icon, color = "gray", size: sizeProp, className, ...props }, ref) {
|
|
3476
|
+
const size = useScaleSize("ContentLabel", sizeProp);
|
|
2952
3477
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2953
3478
|
"span",
|
|
2954
3479
|
{
|
|
@@ -3071,11 +3596,12 @@ function StatusBadge({
|
|
|
3071
3596
|
map,
|
|
3072
3597
|
dot = true,
|
|
3073
3598
|
variant = "light",
|
|
3074
|
-
size
|
|
3599
|
+
size: sizeProp,
|
|
3075
3600
|
pulse = false,
|
|
3076
3601
|
className,
|
|
3077
3602
|
...props
|
|
3078
3603
|
}) {
|
|
3604
|
+
const size = useScaleSize("StatusBadge", sizeProp);
|
|
3079
3605
|
const k2 = keyOf(status);
|
|
3080
3606
|
const resolvedTone = tone || map && map[k2] || STATUS_TONE[k2] || "neutral";
|
|
3081
3607
|
const color = TONE_COLOR[resolvedTone] || "gray";
|
|
@@ -3111,7 +3637,9 @@ function useTick(ms) {
|
|
|
3111
3637
|
return () => clearInterval(id);
|
|
3112
3638
|
}, [ms]);
|
|
3113
3639
|
}
|
|
3114
|
-
var RelativeTime = react.forwardRef(function RelativeTime2({ date, locale, live = true, every = 6e4, absolute, className, ...props }, ref) {
|
|
3640
|
+
var RelativeTime = react.forwardRef(function RelativeTime2({ date, locale: localeProp, live = true, every = 6e4, absolute, className, ...props }, ref) {
|
|
3641
|
+
const { locale: ctxLocaleName } = useLocale();
|
|
3642
|
+
const locale = localeProp ?? ctxLocaleName;
|
|
3115
3643
|
useTick(live ? every : 0);
|
|
3116
3644
|
const rel = Format.relTime(date, { locale });
|
|
3117
3645
|
const title = Format.absTime(date, { locale });
|
|
@@ -3642,7 +4170,8 @@ var ItemGroup = react.forwardRef(
|
|
|
3642
4170
|
}
|
|
3643
4171
|
);
|
|
3644
4172
|
ItemGroup.displayName = "ItemGroup";
|
|
3645
|
-
var Item = react.forwardRef(function Item2({ variant = "default", size
|
|
4173
|
+
var Item = react.forwardRef(function Item2({ variant = "default", size: sizeProp, className, ...props }, ref) {
|
|
4174
|
+
const size = useScaleSize("Item", sizeProp);
|
|
3646
4175
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3647
4176
|
"div",
|
|
3648
4177
|
{
|
|
@@ -3908,7 +4437,8 @@ var Kbd = react.forwardRef(function Kbd2({ className, children, ...props }, ref)
|
|
|
3908
4437
|
return /* @__PURE__ */ jsxRuntime.jsx("kbd", { ref, className: chunkTPGAXYFU_cjs.cx("klun-kbd", className), ...props, children });
|
|
3909
4438
|
});
|
|
3910
4439
|
Kbd.displayName = "Kbd";
|
|
3911
|
-
var KeyIcon = react.forwardRef(function KeyIcon2({ icon, color = "blue", appearance = "light", size
|
|
4440
|
+
var KeyIcon = react.forwardRef(function KeyIcon2({ icon, color = "blue", appearance = "light", size: sizeProp, css, className, style, ...props }, ref) {
|
|
4441
|
+
const size = useScaleSize("KeyIcon", sizeProp);
|
|
3912
4442
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3913
4443
|
"span",
|
|
3914
4444
|
{
|
|
@@ -4325,20 +4855,23 @@ var Money = react.forwardRef(function Money2({
|
|
|
4325
4855
|
value,
|
|
4326
4856
|
cents = false,
|
|
4327
4857
|
currency = "USD",
|
|
4328
|
-
locale,
|
|
4858
|
+
locale: localeProp,
|
|
4329
4859
|
period,
|
|
4330
4860
|
periodLabels,
|
|
4331
4861
|
minimumFractionDigits,
|
|
4332
4862
|
maximumFractionDigits,
|
|
4333
4863
|
signDisplay,
|
|
4334
4864
|
tone = "default",
|
|
4335
|
-
size
|
|
4865
|
+
size: sizeProp,
|
|
4336
4866
|
strikethrough = false,
|
|
4337
4867
|
prefix,
|
|
4338
4868
|
suffix,
|
|
4339
4869
|
className,
|
|
4340
4870
|
...props
|
|
4341
4871
|
}, ref) {
|
|
4872
|
+
const size = useScaleSize("Money", sizeProp);
|
|
4873
|
+
const { locale: ctxLocaleName } = useLocale();
|
|
4874
|
+
const locale = localeProp ?? ctxLocaleName;
|
|
4342
4875
|
const { text, period: periodSuffix } = Format.money(value, {
|
|
4343
4876
|
currency,
|
|
4344
4877
|
cents,
|
|
@@ -4386,7 +4919,9 @@ function Digit({ value }) {
|
|
|
4386
4919
|
) });
|
|
4387
4920
|
}
|
|
4388
4921
|
var NumberFlow = react.forwardRef(
|
|
4389
|
-
function NumberFlow2({ value, locales:
|
|
4922
|
+
function NumberFlow2({ value, locales: localesProp, format, prefix, suffix, label, className, ...props }, ref) {
|
|
4923
|
+
const { locale: ctxLocaleName } = useLocale();
|
|
4924
|
+
const locales2 = localesProp ?? ctxLocaleName;
|
|
4390
4925
|
const text = new Intl.NumberFormat(locales2, {
|
|
4391
4926
|
minimumFractionDigits: format?.minimumFractionDigits,
|
|
4392
4927
|
maximumFractionDigits: format?.maximumFractionDigits,
|
|
@@ -4521,14 +5056,66 @@ var Rating = react.forwardRef(function Rating2({ value = 0, max = 5, onChange, r
|
|
|
4521
5056
|
)) });
|
|
4522
5057
|
});
|
|
4523
5058
|
Rating.displayName = "Rating";
|
|
4524
|
-
var
|
|
4525
|
-
|
|
5059
|
+
var FOCUSABLE = [
|
|
5060
|
+
"a[href]",
|
|
5061
|
+
"button:not([disabled])",
|
|
5062
|
+
"input:not([disabled]):not([type='hidden'])",
|
|
5063
|
+
"select:not([disabled])",
|
|
5064
|
+
"textarea:not([disabled])",
|
|
5065
|
+
"[tabindex]:not([tabindex='-1'])"
|
|
5066
|
+
].join(",");
|
|
5067
|
+
var ACTIVATABLE = [
|
|
5068
|
+
"button",
|
|
5069
|
+
"a[href]",
|
|
5070
|
+
"input[type='button']",
|
|
5071
|
+
"input[type='submit']",
|
|
5072
|
+
"input[type='reset']",
|
|
5073
|
+
"input[type='checkbox']",
|
|
5074
|
+
"input[type='radio']",
|
|
5075
|
+
"summary",
|
|
5076
|
+
"[role='button']",
|
|
5077
|
+
"[role='link']"
|
|
5078
|
+
].join(",");
|
|
5079
|
+
var Popover = react.forwardRef(function Popover2({
|
|
5080
|
+
trigger,
|
|
5081
|
+
children,
|
|
5082
|
+
align = "start",
|
|
5083
|
+
width = 280,
|
|
5084
|
+
className,
|
|
5085
|
+
open,
|
|
5086
|
+
defaultOpen = false,
|
|
5087
|
+
onOpenChange,
|
|
5088
|
+
panelId,
|
|
5089
|
+
...props
|
|
5090
|
+
}, ref) {
|
|
5091
|
+
const [internalOpen, setInternalOpen] = react.useState(defaultOpen);
|
|
5092
|
+
const controlled = open !== void 0;
|
|
5093
|
+
const isOpen = controlled ? Boolean(open) : internalOpen;
|
|
5094
|
+
const onOpenChangeRef = react.useRef(onOpenChange);
|
|
5095
|
+
onOpenChangeRef.current = onOpenChange;
|
|
5096
|
+
const setOpen = react.useCallback(
|
|
5097
|
+
(next) => {
|
|
5098
|
+
if (!controlled) setInternalOpen(next);
|
|
5099
|
+
onOpenChangeRef.current?.(next);
|
|
5100
|
+
},
|
|
5101
|
+
[controlled]
|
|
5102
|
+
);
|
|
4526
5103
|
const wrapRef = react.useRef(null);
|
|
5104
|
+
const triggerRef = react.useRef(null);
|
|
4527
5105
|
const panelRef = react.useRef(null);
|
|
4528
5106
|
const portal = typeof document !== "undefined";
|
|
4529
5107
|
const [pos, setPos] = react.useState(null);
|
|
5108
|
+
const generatedId = react.useId();
|
|
5109
|
+
const resolvedPanelId = panelId ?? `klun-popover-${generatedId}`;
|
|
5110
|
+
const [hasFocusableChild, setHasFocusableChild] = react.useState(false);
|
|
4530
5111
|
react.useEffect(() => {
|
|
4531
|
-
|
|
5112
|
+
const root = triggerRef.current;
|
|
5113
|
+
if (!root) return;
|
|
5114
|
+
setHasFocusableChild(root.querySelector(FOCUSABLE) != null);
|
|
5115
|
+
}, [trigger]);
|
|
5116
|
+
const openedByKeyboard = react.useRef(false);
|
|
5117
|
+
react.useEffect(() => {
|
|
5118
|
+
if (!isOpen) return;
|
|
4532
5119
|
const h = (e) => {
|
|
4533
5120
|
const t = e.target;
|
|
4534
5121
|
if (wrapRef.current?.contains(t)) return;
|
|
@@ -4537,9 +5124,9 @@ var Popover = react.forwardRef(function Popover2({ trigger, children, align = "l
|
|
|
4537
5124
|
};
|
|
4538
5125
|
document.addEventListener("mousedown", h);
|
|
4539
5126
|
return () => document.removeEventListener("mousedown", h);
|
|
4540
|
-
}, [
|
|
5127
|
+
}, [isOpen, setOpen]);
|
|
4541
5128
|
react.useLayoutEffect(() => {
|
|
4542
|
-
if (!
|
|
5129
|
+
if (!isOpen || !portal) return;
|
|
4543
5130
|
const anchor = wrapRef.current;
|
|
4544
5131
|
const panel2 = panelRef.current;
|
|
4545
5132
|
if (!anchor || !panel2) return;
|
|
@@ -4552,7 +5139,9 @@ var Popover = react.forwardRef(function Popover2({ trigger, children, align = "l
|
|
|
4552
5139
|
const below = window.innerHeight - a.bottom;
|
|
4553
5140
|
const openUp = below < ph + gap && a.top > below;
|
|
4554
5141
|
const top = openUp ? Math.max(margin, a.top - gap - ph) : Math.min(a.bottom + gap, window.innerHeight - margin - ph);
|
|
4555
|
-
|
|
5142
|
+
const rtl = getComputedStyle(anchor).direction === "rtl";
|
|
5143
|
+
const side = align === "start" ? rtl ? "right" : "left" : align === "end" ? rtl ? "left" : "right" : align;
|
|
5144
|
+
let left = side === "right" ? a.right - pw : a.left;
|
|
4556
5145
|
if (left + pw > window.innerWidth - margin) left = window.innerWidth - margin - pw;
|
|
4557
5146
|
if (left < margin) left = margin;
|
|
4558
5147
|
setPos({ left, top });
|
|
@@ -4564,10 +5153,58 @@ var Popover = react.forwardRef(function Popover2({ trigger, children, align = "l
|
|
|
4564
5153
|
window.removeEventListener("scroll", place2, true);
|
|
4565
5154
|
window.removeEventListener("resize", place2);
|
|
4566
5155
|
};
|
|
4567
|
-
}, [
|
|
5156
|
+
}, [isOpen, portal, align, width]);
|
|
4568
5157
|
react.useEffect(() => {
|
|
4569
|
-
if (!
|
|
4570
|
-
}, [
|
|
5158
|
+
if (!isOpen) setPos(null);
|
|
5159
|
+
}, [isOpen]);
|
|
5160
|
+
react.useLayoutEffect(() => {
|
|
5161
|
+
if (!isOpen || !openedByKeyboard.current) return;
|
|
5162
|
+
if (!pos) return;
|
|
5163
|
+
openedByKeyboard.current = false;
|
|
5164
|
+
const panel2 = panelRef.current;
|
|
5165
|
+
if (!panel2) return;
|
|
5166
|
+
const first = panel2.querySelector(FOCUSABLE);
|
|
5167
|
+
(first ?? panel2).focus?.();
|
|
5168
|
+
}, [isOpen, pos]);
|
|
5169
|
+
const focusTrigger = react.useCallback(() => {
|
|
5170
|
+
const root = triggerRef.current;
|
|
5171
|
+
if (!root) return;
|
|
5172
|
+
const inner = root.querySelector(FOCUSABLE);
|
|
5173
|
+
(inner ?? root).focus?.();
|
|
5174
|
+
}, []);
|
|
5175
|
+
const onPanelKeyDown = (e) => {
|
|
5176
|
+
if (e.key !== "Escape") return;
|
|
5177
|
+
e.stopPropagation();
|
|
5178
|
+
setOpen(false);
|
|
5179
|
+
focusTrigger();
|
|
5180
|
+
};
|
|
5181
|
+
const onTriggerKeyDown = (e) => {
|
|
5182
|
+
if (e.key === "Escape") {
|
|
5183
|
+
if (!isOpen) return;
|
|
5184
|
+
e.stopPropagation();
|
|
5185
|
+
setOpen(false);
|
|
5186
|
+
focusTrigger();
|
|
5187
|
+
return;
|
|
5188
|
+
}
|
|
5189
|
+
if (e.key === "ArrowDown") {
|
|
5190
|
+
e.preventDefault();
|
|
5191
|
+
if (!isOpen) {
|
|
5192
|
+
openedByKeyboard.current = true;
|
|
5193
|
+
setOpen(true);
|
|
5194
|
+
}
|
|
5195
|
+
return;
|
|
5196
|
+
}
|
|
5197
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
5198
|
+
const target = e.target;
|
|
5199
|
+
const nativeActivation = target != null && target !== triggerRef.current && target.closest?.(ACTIVATABLE) != null;
|
|
5200
|
+
if (nativeActivation) return;
|
|
5201
|
+
if (!isOpen) {
|
|
5202
|
+
e.preventDefault();
|
|
5203
|
+
openedByKeyboard.current = true;
|
|
5204
|
+
setOpen(true);
|
|
5205
|
+
}
|
|
5206
|
+
}
|
|
5207
|
+
};
|
|
4571
5208
|
const setRefs = (node) => {
|
|
4572
5209
|
wrapRef.current = node;
|
|
4573
5210
|
if (typeof ref === "function") ref(node);
|
|
@@ -4583,11 +5220,14 @@ var Popover = react.forwardRef(function Popover2({ trigger, children, align = "l
|
|
|
4583
5220
|
// keep hidden until measured to avoid a flash at the top-left corner
|
|
4584
5221
|
visibility: pos ? "visible" : "hidden"
|
|
4585
5222
|
};
|
|
4586
|
-
const panel =
|
|
5223
|
+
const panel = isOpen ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4587
5224
|
"div",
|
|
4588
5225
|
{
|
|
4589
5226
|
ref: panelRef,
|
|
5227
|
+
id: resolvedPanelId,
|
|
4590
5228
|
role: "dialog",
|
|
5229
|
+
tabIndex: -1,
|
|
5230
|
+
onKeyDown: onPanelKeyDown,
|
|
4591
5231
|
className: chunkTPGAXYFU_cjs.cx(
|
|
4592
5232
|
"klun-popover__panel",
|
|
4593
5233
|
// in-flow fallback keeps the legacy left/right anchoring classes
|
|
@@ -4597,8 +5237,25 @@ var Popover = react.forwardRef(function Popover2({ trigger, children, align = "l
|
|
|
4597
5237
|
children: content
|
|
4598
5238
|
}
|
|
4599
5239
|
) : null;
|
|
5240
|
+
const triggerAria = {
|
|
5241
|
+
"aria-haspopup": "dialog",
|
|
5242
|
+
"aria-expanded": isOpen,
|
|
5243
|
+
...isOpen ? { "aria-controls": resolvedPanelId } : null
|
|
5244
|
+
};
|
|
5245
|
+
const triggerNode = react.isValidElement(trigger) ? react.cloneElement(trigger, triggerAria) : trigger;
|
|
5246
|
+
const wrapperIsTrigger = !hasFocusableChild;
|
|
4600
5247
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { ref: setRefs, className: chunkTPGAXYFU_cjs.cx("klun-popover", className), ...props, children: [
|
|
4601
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5248
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5249
|
+
"span",
|
|
5250
|
+
{
|
|
5251
|
+
ref: triggerRef,
|
|
5252
|
+
className: "klun-popover__trigger",
|
|
5253
|
+
onClick: () => setOpen(!isOpen),
|
|
5254
|
+
onKeyDown: onTriggerKeyDown,
|
|
5255
|
+
...wrapperIsTrigger ? { role: "button", tabIndex: 0, ...triggerAria } : !react.isValidElement(trigger) ? triggerAria : null,
|
|
5256
|
+
children: triggerNode
|
|
5257
|
+
}
|
|
5258
|
+
),
|
|
4602
5259
|
portal ? panel && reactDom.createPortal(panel, document.body) : panel
|
|
4603
5260
|
] });
|
|
4604
5261
|
});
|
|
@@ -4961,11 +5618,14 @@ var EmojiPicker = react.forwardRef(
|
|
|
4961
5618
|
groups = EMOJI_GROUPS,
|
|
4962
5619
|
columns = 8,
|
|
4963
5620
|
searchable = true,
|
|
4964
|
-
searchPlaceholder
|
|
4965
|
-
emptyText
|
|
5621
|
+
searchPlaceholder: searchPlaceholderProp,
|
|
5622
|
+
emptyText: emptyTextProp,
|
|
4966
5623
|
className,
|
|
4967
5624
|
...props
|
|
4968
5625
|
}, ref) {
|
|
5626
|
+
const { emojiPicker } = useLocale();
|
|
5627
|
+
const searchPlaceholder = searchPlaceholderProp ?? emojiPicker.searchPlaceholder;
|
|
5628
|
+
const emptyText = emptyTextProp ?? emojiPicker.emptyText;
|
|
4969
5629
|
const [query, setQuery] = react.useState("");
|
|
4970
5630
|
const q = query.trim().toLowerCase();
|
|
4971
5631
|
const results = react.useMemo(() => {
|
|
@@ -5010,7 +5670,9 @@ var EmojiPicker = react.forwardRef(
|
|
|
5010
5670
|
EmojiPicker.displayName = "EmojiPicker";
|
|
5011
5671
|
var QUICK_EMOJIS = ["\u{1F44D}", "\u{1F44C}", "\u2764\uFE0F", "\u2705", "\u{1F389}", "\u{1F615}", "\u{1F680}", "\u{1F440}"];
|
|
5012
5672
|
var QuickEmojiPicker = react.forwardRef(
|
|
5013
|
-
function QuickEmojiPicker2({ onSelect, emojis = QUICK_EMOJIS, align = "left", label
|
|
5673
|
+
function QuickEmojiPicker2({ onSelect, emojis = QUICK_EMOJIS, align = "left", label: labelProp, className }, ref) {
|
|
5674
|
+
const { emojiPicker } = useLocale();
|
|
5675
|
+
const label = labelProp ?? emojiPicker.addReaction;
|
|
5014
5676
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5015
5677
|
Popover,
|
|
5016
5678
|
{
|
|
@@ -5155,6 +5817,16 @@ var Tooltip = react.forwardRef(function Tooltip2({ content, side = "top", delay
|
|
|
5155
5817
|
transform: "none",
|
|
5156
5818
|
visibility: pos ? "visible" : "hidden"
|
|
5157
5819
|
};
|
|
5820
|
+
const tooltipId = `${react.useId()}tooltip`;
|
|
5821
|
+
const describedBy = open && content && !disabled ? tooltipId : void 0;
|
|
5822
|
+
const childProps = react.isValidElement(children) ? children.props : null;
|
|
5823
|
+
const triggerNode = childProps != null ? react.cloneElement(
|
|
5824
|
+
children,
|
|
5825
|
+
// 合并而非覆盖调用方已有的 aria-describedby
|
|
5826
|
+
{
|
|
5827
|
+
"aria-describedby": [childProps["aria-describedby"], describedBy].filter(Boolean).join(" ") || void 0
|
|
5828
|
+
}
|
|
5829
|
+
) : children;
|
|
5158
5830
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5159
5831
|
"span",
|
|
5160
5832
|
{
|
|
@@ -5164,13 +5836,15 @@ var Tooltip = react.forwardRef(function Tooltip2({ content, side = "top", delay
|
|
|
5164
5836
|
onMouseLeave: hide,
|
|
5165
5837
|
onFocus: show,
|
|
5166
5838
|
onBlur: hide,
|
|
5839
|
+
...childProps == null ? { "aria-describedby": describedBy } : null,
|
|
5167
5840
|
children: [
|
|
5168
|
-
|
|
5841
|
+
triggerNode,
|
|
5169
5842
|
open && content && typeof document !== "undefined" ? reactDom.createPortal(
|
|
5170
5843
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5171
5844
|
"span",
|
|
5172
5845
|
{
|
|
5173
5846
|
ref: bubbleRef,
|
|
5847
|
+
id: tooltipId,
|
|
5174
5848
|
role: "tooltip",
|
|
5175
5849
|
className: chunkTPGAXYFU_cjs.cx("klun-tooltip__bubble", `klun-tooltip__bubble--${side}`),
|
|
5176
5850
|
style: bubbleStyle,
|
|
@@ -5299,7 +5973,8 @@ var Statistic = react.forwardRef(function Statistic2({ label, value, prefix, suf
|
|
|
5299
5973
|
});
|
|
5300
5974
|
Statistic.displayName = "Statistic";
|
|
5301
5975
|
var SIZES2 = { xs: 6, sm: 8, md: 10, lg: 12 };
|
|
5302
|
-
var StatusDot = react.forwardRef(function StatusDot2({ tone = "neutral", size
|
|
5976
|
+
var StatusDot = react.forwardRef(function StatusDot2({ tone = "neutral", size: sizeProp, pulse = false, label, className, style, ...props }, ref) {
|
|
5977
|
+
const size = useScaleSize("StatusDot", sizeProp);
|
|
5303
5978
|
const sizeStyle = { ["--klun-status-dot-size"]: `${SIZES2[size] ?? SIZES2.sm}px` };
|
|
5304
5979
|
const dot = /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkTPGAXYFU_cjs.cx("klun-status-dot__dot", pulse && "klun-status-dot--pulse"), style: sizeStyle });
|
|
5305
5980
|
if (label == null) {
|
|
@@ -5650,7 +6325,7 @@ function TableToolbar({
|
|
|
5650
6325
|
selectedRows,
|
|
5651
6326
|
clearSelection
|
|
5652
6327
|
}) {
|
|
5653
|
-
const { table } = useLocale();
|
|
6328
|
+
const { table, a11y } = useLocale();
|
|
5654
6329
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
5655
6330
|
showToolbar ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-table__toolbar", children: [
|
|
5656
6331
|
title != null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-table__title", children: title }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-table__title-spacer" }),
|
|
@@ -5673,7 +6348,7 @@ function TableToolbar({
|
|
|
5673
6348
|
{
|
|
5674
6349
|
type: "button",
|
|
5675
6350
|
onClick: clearSelection,
|
|
5676
|
-
"aria-label":
|
|
6351
|
+
"aria-label": a11y.clearSelection,
|
|
5677
6352
|
className: "klun-table__selbar-clear",
|
|
5678
6353
|
children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-close-line" })
|
|
5679
6354
|
}
|
|
@@ -5851,9 +6526,44 @@ function TableHead({
|
|
|
5851
6526
|
setSort,
|
|
5852
6527
|
activeFilters,
|
|
5853
6528
|
setFilter,
|
|
5854
|
-
startResize
|
|
6529
|
+
startResize,
|
|
6530
|
+
setColumnWidth
|
|
5855
6531
|
}) {
|
|
5856
6532
|
const { table } = useLocale();
|
|
6533
|
+
const [resizerW, setResizerW] = react.useState({});
|
|
6534
|
+
const widthForA11y = (c) => {
|
|
6535
|
+
const w = widthOf(c);
|
|
6536
|
+
if (typeof w === "number") return w;
|
|
6537
|
+
if (typeof c.width === "number") return c.width;
|
|
6538
|
+
return resizerW[c.key] ?? (c.minWidth || 64);
|
|
6539
|
+
};
|
|
6540
|
+
const onResizerKeyDown = (e, c) => {
|
|
6541
|
+
const min = c.minWidth || 64;
|
|
6542
|
+
const step = e.shiftKey ? 32 : 8;
|
|
6543
|
+
const current = resizerW[c.key] ?? widthForA11y(c);
|
|
6544
|
+
let next = null;
|
|
6545
|
+
switch (e.key) {
|
|
6546
|
+
case "ArrowLeft":
|
|
6547
|
+
next = current - step;
|
|
6548
|
+
break;
|
|
6549
|
+
case "ArrowRight":
|
|
6550
|
+
next = current + step;
|
|
6551
|
+
break;
|
|
6552
|
+
case "Home":
|
|
6553
|
+
next = min;
|
|
6554
|
+
break;
|
|
6555
|
+
// 这里没有真正的"最大值"(列宽不受限),因此用 Enter 代表"恢复声明宽度"
|
|
6556
|
+
case "Enter":
|
|
6557
|
+
next = typeof c.width === "number" ? c.width : current;
|
|
6558
|
+
break;
|
|
6559
|
+
default:
|
|
6560
|
+
return;
|
|
6561
|
+
}
|
|
6562
|
+
e.preventDefault();
|
|
6563
|
+
e.stopPropagation();
|
|
6564
|
+
const applied = setColumnWidth(c, next);
|
|
6565
|
+
setResizerW((m) => ({ ...m, [c.key]: applied }));
|
|
6566
|
+
};
|
|
5857
6567
|
return /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
5858
6568
|
dragCol ? /* @__PURE__ */ jsxRuntime.jsx("th", { className: "klun-table__th klun-table__th--util" }) : null,
|
|
5859
6569
|
expandCol ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5916,8 +6626,21 @@ function TableHead({
|
|
|
5916
6626
|
justifyContent: c.align === "right" ? "flex-end" : c.align === "center" ? "center" : "flex-start"
|
|
5917
6627
|
},
|
|
5918
6628
|
children: [
|
|
5919
|
-
/* @__PURE__ */ jsxRuntime.
|
|
5920
|
-
|
|
6629
|
+
isSort ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6630
|
+
"button",
|
|
6631
|
+
{
|
|
6632
|
+
type: "button",
|
|
6633
|
+
className: "klun-table__sort",
|
|
6634
|
+
onClick: (e) => {
|
|
6635
|
+
e.stopPropagation();
|
|
6636
|
+
setSort(c.key);
|
|
6637
|
+
},
|
|
6638
|
+
children: [
|
|
6639
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: c.ellipsis ? "klun-table__ellipsis" : void 0, children: c.headerRender ? c.headerRender() : c.header }),
|
|
6640
|
+
/* @__PURE__ */ jsxRuntime.jsx(SortIcon, { dir })
|
|
6641
|
+
]
|
|
6642
|
+
}
|
|
6643
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: c.ellipsis ? "klun-table__ellipsis" : void 0, children: c.headerRender ? c.headerRender() : c.header }) }),
|
|
5921
6644
|
hasFilter ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
5922
6645
|
FilterMenu,
|
|
5923
6646
|
{
|
|
@@ -5935,7 +6658,19 @@ function TableHead({
|
|
|
5935
6658
|
{
|
|
5936
6659
|
role: "separator",
|
|
5937
6660
|
"aria-orientation": "vertical",
|
|
6661
|
+
tabIndex: 0,
|
|
6662
|
+
"aria-label": `${table.dragToResize}: ${typeof c.header === "string" ? c.header : c.key}`,
|
|
6663
|
+
"aria-valuemin": c.minWidth || 64,
|
|
6664
|
+
"aria-valuenow": widthForA11y(c),
|
|
6665
|
+
"aria-valuetext": `${widthForA11y(c)}px`,
|
|
5938
6666
|
title: table.dragToResize,
|
|
6667
|
+
onFocus: (e) => {
|
|
6668
|
+
const th = e.currentTarget.closest("th");
|
|
6669
|
+
if (!th) return;
|
|
6670
|
+
const measured = Math.round(th.getBoundingClientRect().width);
|
|
6671
|
+
if (measured > 0) setResizerW((m) => ({ ...m, [c.key]: measured }));
|
|
6672
|
+
},
|
|
6673
|
+
onKeyDown: (e) => onResizerKeyDown(e, c),
|
|
5939
6674
|
onMouseDown: (e) => startResize(e, c),
|
|
5940
6675
|
onClick: (e) => e.stopPropagation(),
|
|
5941
6676
|
className: "klun-table__resizer",
|
|
@@ -5949,6 +6684,14 @@ function TableHead({
|
|
|
5949
6684
|
})
|
|
5950
6685
|
] }) });
|
|
5951
6686
|
}
|
|
6687
|
+
function isCoarsePointer() {
|
|
6688
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
|
|
6689
|
+
try {
|
|
6690
|
+
return window.matchMedia("(pointer: coarse)").matches;
|
|
6691
|
+
} catch {
|
|
6692
|
+
return false;
|
|
6693
|
+
}
|
|
6694
|
+
}
|
|
5952
6695
|
function TableRow(props) {
|
|
5953
6696
|
if (!props.dragCol) return /* @__PURE__ */ jsxRuntime.jsx(RowBase, { ...props });
|
|
5954
6697
|
return /* @__PURE__ */ jsxRuntime.jsx(SortableRow, { ...props });
|
|
@@ -6052,7 +6795,15 @@ function RowBase({
|
|
|
6052
6795
|
clickable && "klun-table__row--clickable",
|
|
6053
6796
|
sortable?.isDragging && "klun-table__row--dragging"
|
|
6054
6797
|
),
|
|
6055
|
-
onClick: clickable ? () =>
|
|
6798
|
+
onClick: clickable ? (e) => {
|
|
6799
|
+
if (rowHref) {
|
|
6800
|
+
const target = e.target;
|
|
6801
|
+
if (target?.closest?.("a[href]")) return;
|
|
6802
|
+
window.location.href = rowHref(row);
|
|
6803
|
+
return;
|
|
6804
|
+
}
|
|
6805
|
+
onRowClick?.(row);
|
|
6806
|
+
} : void 0,
|
|
6056
6807
|
onContextMenu: contextMenu || copyable ? (e) => {
|
|
6057
6808
|
const custom = contextMenu ? contextMenu(row, { copyRow, copyText }) : null;
|
|
6058
6809
|
const items2 = custom && custom.length ? custom : [
|
|
@@ -6227,6 +6978,8 @@ function RowBase({
|
|
|
6227
6978
|
style: { textAlign: c.align || "left" }
|
|
6228
6979
|
}
|
|
6229
6980
|
) : null;
|
|
6981
|
+
const linkHref = rowHref && ci === 0 && !c.render && !c.editable ? rowHref(row) : null;
|
|
6982
|
+
const body = linkHref ? /* @__PURE__ */ jsxRuntime.jsx("a", { className: "klun-table__rowlink", href: linkHref, children: inner }) : inner;
|
|
6230
6983
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6231
6984
|
"td",
|
|
6232
6985
|
{
|
|
@@ -6234,6 +6987,18 @@ function RowBase({
|
|
|
6234
6987
|
e.stopPropagation();
|
|
6235
6988
|
startEdit(id, c, row);
|
|
6236
6989
|
} : void 0,
|
|
6990
|
+
onClick: c.editable && !isEditing && isCoarsePointer() ? (e) => {
|
|
6991
|
+
e.stopPropagation();
|
|
6992
|
+
startEdit(id, c, row);
|
|
6993
|
+
} : void 0,
|
|
6994
|
+
tabIndex: c.editable && !isEditing ? 0 : void 0,
|
|
6995
|
+
onKeyDown: c.editable && !isEditing ? (e) => {
|
|
6996
|
+
if (e.key === "Enter" || e.key === "F2") {
|
|
6997
|
+
e.preventDefault();
|
|
6998
|
+
e.stopPropagation();
|
|
6999
|
+
startEdit(id, c, row);
|
|
7000
|
+
}
|
|
7001
|
+
} : void 0,
|
|
6237
7002
|
className: chunkTPGAXYFU_cjs.cx(
|
|
6238
7003
|
"klun-table__td",
|
|
6239
7004
|
tdBorder,
|
|
@@ -6281,8 +7046,8 @@ function RowBase({
|
|
|
6281
7046
|
)
|
|
6282
7047
|
}
|
|
6283
7048
|
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-table__tree-spacer" }),
|
|
6284
|
-
|
|
6285
|
-
] }) :
|
|
7049
|
+
body
|
|
7050
|
+
] }) : body
|
|
6286
7051
|
},
|
|
6287
7052
|
c.key
|
|
6288
7053
|
);
|
|
@@ -6376,6 +7141,11 @@ function useColumnResize(columns) {
|
|
|
6376
7141
|
const [colW, setColW] = react.useState({});
|
|
6377
7142
|
const resizeRef = react.useRef(null);
|
|
6378
7143
|
const widthOf = (c) => colW[c.key] ?? (typeof c.width === "number" ? c.width : void 0);
|
|
7144
|
+
const setColumnWidth = (c, next) => {
|
|
7145
|
+
const w = Math.max(c.minWidth || 64, Math.round(next));
|
|
7146
|
+
setColW((m) => ({ ...m, [c.key]: w }));
|
|
7147
|
+
return w;
|
|
7148
|
+
};
|
|
6379
7149
|
const startResize = (e, c) => {
|
|
6380
7150
|
e.preventDefault();
|
|
6381
7151
|
e.stopPropagation();
|
|
@@ -6387,7 +7157,7 @@ function useColumnResize(columns) {
|
|
|
6387
7157
|
const r = resizeRef.current;
|
|
6388
7158
|
if (!r) return;
|
|
6389
7159
|
const w = Math.max(c.minWidth || 64, r.startW + (ev.clientX - r.startX));
|
|
6390
|
-
setColW((m) => ({ ...m, [r.key]: w }));
|
|
7160
|
+
setColW((m) => ({ ...m, [r.key]: Math.round(w) }));
|
|
6391
7161
|
};
|
|
6392
7162
|
const up = () => {
|
|
6393
7163
|
resizeRef.current = null;
|
|
@@ -6401,7 +7171,7 @@ function useColumnResize(columns) {
|
|
|
6401
7171
|
document.body.style.cursor = "col-resize";
|
|
6402
7172
|
document.body.style.userSelect = "none";
|
|
6403
7173
|
};
|
|
6404
|
-
return { colW, widthOf, startResize };
|
|
7174
|
+
return { colW, widthOf, startResize, setColumnWidth };
|
|
6405
7175
|
}
|
|
6406
7176
|
function useColumnVisibility(columns) {
|
|
6407
7177
|
const [hiddenCols, setHiddenCols] = react.useState(
|
|
@@ -6605,7 +7375,7 @@ function Table({
|
|
|
6605
7375
|
onFiltersChange,
|
|
6606
7376
|
pagination = false,
|
|
6607
7377
|
expandable,
|
|
6608
|
-
density
|
|
7378
|
+
density: densityProp,
|
|
6609
7379
|
zebra = false,
|
|
6610
7380
|
stickyHeader = false,
|
|
6611
7381
|
hover = true,
|
|
@@ -6640,9 +7410,11 @@ function Table({
|
|
|
6640
7410
|
style,
|
|
6641
7411
|
...props
|
|
6642
7412
|
}) {
|
|
7413
|
+
const providerDensity = useDensity();
|
|
7414
|
+
const density = densityProp ?? (providerDensity === "compact" ? "compact" : "comfortable");
|
|
6643
7415
|
const densityClass = DENSITY[density] || DENSITY.comfortable;
|
|
6644
7416
|
const { menu, setMenu } = useTableContextMenu();
|
|
6645
|
-
const { colW, widthOf, startResize } = useColumnResize();
|
|
7417
|
+
const { colW, widthOf, startResize, setColumnWidth } = useColumnResize();
|
|
6646
7418
|
const { hiddenCols, visibleColumns, toggleColumn } = useColumnVisibility(columns);
|
|
6647
7419
|
const dragCol = rowDraggable && !tree;
|
|
6648
7420
|
const rowToText = (row) => columns.map((c) => {
|
|
@@ -6834,7 +7606,8 @@ function Table({
|
|
|
6834
7606
|
setSort,
|
|
6835
7607
|
activeFilters,
|
|
6836
7608
|
setFilter,
|
|
6837
|
-
startResize
|
|
7609
|
+
startResize,
|
|
7610
|
+
setColumnWidth
|
|
6838
7611
|
}
|
|
6839
7612
|
),
|
|
6840
7613
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7017,6 +7790,7 @@ var Tree = react.forwardRef(function Tree2({
|
|
|
7017
7790
|
showLine = false,
|
|
7018
7791
|
blockNode = true,
|
|
7019
7792
|
className,
|
|
7793
|
+
onKeyDown: onKeyDownProp,
|
|
7020
7794
|
...props
|
|
7021
7795
|
}, ref) {
|
|
7022
7796
|
const [innerExpanded, setInnerExpanded] = react.useState(defaultExpandedKeys);
|
|
@@ -7044,14 +7818,105 @@ var Tree = react.forwardRef(function Tree2({
|
|
|
7044
7818
|
else next = Array.from(/* @__PURE__ */ new Set([...checkedKeys, ...all]));
|
|
7045
7819
|
onCheck(next);
|
|
7046
7820
|
};
|
|
7821
|
+
const visible = rows.filter((r) => !r.hidden);
|
|
7822
|
+
const rootRef = react.useRef(null);
|
|
7823
|
+
const setRoots = (node) => {
|
|
7824
|
+
rootRef.current = node;
|
|
7825
|
+
if (typeof ref === "function") ref(node);
|
|
7826
|
+
else if (ref && "current" in ref) ref.current = node;
|
|
7827
|
+
};
|
|
7828
|
+
const firstEnabledKey = () => {
|
|
7829
|
+
const hit = visible.find((r) => !r.node.disabled) ?? visible[0];
|
|
7830
|
+
return hit?.node.key ?? null;
|
|
7831
|
+
};
|
|
7832
|
+
const [focusedKey, setFocusedKey] = react.useState(null);
|
|
7833
|
+
const rovingKey = (() => {
|
|
7834
|
+
if (focusedKey && visible.some((r) => r.node.key === focusedKey)) return focusedKey;
|
|
7835
|
+
if (selectedKey && visible.some((r) => r.node.key === selectedKey)) return selectedKey;
|
|
7836
|
+
return firstEnabledKey();
|
|
7837
|
+
})();
|
|
7838
|
+
const focusKey = react.useCallback((key) => {
|
|
7839
|
+
if (!key) return;
|
|
7840
|
+
setFocusedKey(key);
|
|
7841
|
+
const el = rootRef.current?.querySelector(`[data-tree-key="${CSS.escape(key)}"]`);
|
|
7842
|
+
el?.focus?.();
|
|
7843
|
+
}, []);
|
|
7844
|
+
const onKeyDown = (e) => {
|
|
7845
|
+
if (visible.length === 0) return;
|
|
7846
|
+
const activeKey = rootRef.current?.ownerDocument?.activeElement?.getAttribute?.(
|
|
7847
|
+
"data-tree-key"
|
|
7848
|
+
) ?? null;
|
|
7849
|
+
const currentKey = activeKey ?? rovingKey;
|
|
7850
|
+
const idx = Math.max(0, visible.findIndex((r) => r.node.key === currentKey));
|
|
7851
|
+
const cur = visible[idx];
|
|
7852
|
+
if (!cur) return;
|
|
7853
|
+
const hasChildren2 = !!(cur.node.children && cur.node.children.length);
|
|
7854
|
+
const isExpanded = exp.includes(cur.node.key);
|
|
7855
|
+
const parentKey = (() => {
|
|
7856
|
+
for (let i = idx - 1; i >= 0; i--) {
|
|
7857
|
+
if (visible[i].level < cur.level) return visible[i].node.key;
|
|
7858
|
+
}
|
|
7859
|
+
return null;
|
|
7860
|
+
})();
|
|
7861
|
+
switch (e.key) {
|
|
7862
|
+
case "ArrowDown":
|
|
7863
|
+
e.preventDefault();
|
|
7864
|
+
focusKey(visible[Math.min(idx + 1, visible.length - 1)]?.node.key ?? null);
|
|
7865
|
+
return;
|
|
7866
|
+
case "ArrowUp":
|
|
7867
|
+
e.preventDefault();
|
|
7868
|
+
focusKey(visible[Math.max(idx - 1, 0)]?.node.key ?? null);
|
|
7869
|
+
return;
|
|
7870
|
+
case "Home":
|
|
7871
|
+
e.preventDefault();
|
|
7872
|
+
focusKey(visible[0]?.node.key ?? null);
|
|
7873
|
+
return;
|
|
7874
|
+
case "End":
|
|
7875
|
+
e.preventDefault();
|
|
7876
|
+
focusKey(visible[visible.length - 1]?.node.key ?? null);
|
|
7877
|
+
return;
|
|
7878
|
+
case "ArrowRight":
|
|
7879
|
+
e.preventDefault();
|
|
7880
|
+
if (cur.node.disabled) return;
|
|
7881
|
+
if (hasChildren2 && !isExpanded) toggle(cur.node.key);
|
|
7882
|
+
else if (hasChildren2 && isExpanded) focusKey(visible[idx + 1]?.node.key ?? null);
|
|
7883
|
+
return;
|
|
7884
|
+
case "ArrowLeft":
|
|
7885
|
+
e.preventDefault();
|
|
7886
|
+
if (hasChildren2 && isExpanded) toggle(cur.node.key);
|
|
7887
|
+
else if (parentKey) focusKey(parentKey);
|
|
7888
|
+
return;
|
|
7889
|
+
case "Enter":
|
|
7890
|
+
e.preventDefault();
|
|
7891
|
+
if (cur.node.disabled) return;
|
|
7892
|
+
if (checkable) onCheckNode(cur.node);
|
|
7893
|
+
else onSelect?.(cur.node.key, cur.node);
|
|
7894
|
+
return;
|
|
7895
|
+
case " ":
|
|
7896
|
+
e.preventDefault();
|
|
7897
|
+
if (cur.node.disabled) return;
|
|
7898
|
+
if (checkable) onCheckNode(cur.node);
|
|
7899
|
+
else onSelect?.(cur.node.key, cur.node);
|
|
7900
|
+
return;
|
|
7901
|
+
default:
|
|
7902
|
+
return;
|
|
7903
|
+
}
|
|
7904
|
+
};
|
|
7905
|
+
const onKeyDownComposed = (e) => {
|
|
7906
|
+
onKeyDownProp?.(e);
|
|
7907
|
+
if (e.defaultPrevented) return;
|
|
7908
|
+
onKeyDown(e);
|
|
7909
|
+
};
|
|
7047
7910
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7048
7911
|
"div",
|
|
7049
7912
|
{
|
|
7050
|
-
ref,
|
|
7913
|
+
ref: setRoots,
|
|
7051
7914
|
role: "tree",
|
|
7915
|
+
"aria-multiselectable": checkable || void 0,
|
|
7052
7916
|
className: chunkTPGAXYFU_cjs.cx("klun-tree", showLine && "klun-tree--line", className),
|
|
7917
|
+
onKeyDown: onKeyDownComposed,
|
|
7053
7918
|
...props,
|
|
7054
|
-
children:
|
|
7919
|
+
children: visible.map(({ node, level }) => {
|
|
7055
7920
|
const hasChildren2 = !!(node.children && node.children.length);
|
|
7056
7921
|
const isExpanded = exp.includes(node.key);
|
|
7057
7922
|
const selected = selectedKey === node.key;
|
|
@@ -7060,17 +7925,24 @@ var Tree = react.forwardRef(function Tree2({
|
|
|
7060
7925
|
"div",
|
|
7061
7926
|
{
|
|
7062
7927
|
role: "treeitem",
|
|
7928
|
+
"data-tree-key": node.key,
|
|
7929
|
+
tabIndex: rovingKey === node.key ? 0 : -1,
|
|
7930
|
+
"aria-level": level + 1,
|
|
7063
7931
|
"aria-expanded": hasChildren2 ? isExpanded : void 0,
|
|
7064
7932
|
"aria-selected": selected,
|
|
7933
|
+
"aria-disabled": node.disabled || void 0,
|
|
7934
|
+
"aria-checked": checkable ? cs === "all" ? true : cs === "some" ? "mixed" : false : void 0,
|
|
7065
7935
|
className: chunkTPGAXYFU_cjs.cx(
|
|
7066
7936
|
"klun-tree__item",
|
|
7067
7937
|
selected && "klun-tree__item--selected",
|
|
7068
7938
|
node.disabled && "klun-tree__item--disabled",
|
|
7069
|
-
blockNode && "klun-tree__item--block"
|
|
7939
|
+
blockNode && "klun-tree__item--block",
|
|
7940
|
+
rovingKey === node.key && "klun-tree__item--focused"
|
|
7070
7941
|
),
|
|
7071
7942
|
style: { ["--klun-tree-indent"]: `${6 + level * 20}px` },
|
|
7072
7943
|
onClick: () => {
|
|
7073
7944
|
if (node.disabled) return;
|
|
7945
|
+
setFocusedKey(node.key);
|
|
7074
7946
|
if (!checkable) onSelect && onSelect(node.key, node);
|
|
7075
7947
|
},
|
|
7076
7948
|
children: [
|
|
@@ -7082,6 +7954,7 @@ var Tree = react.forwardRef(function Tree2({
|
|
|
7082
7954
|
hasChildren2 && isExpanded && "klun-tree__caret--expanded"
|
|
7083
7955
|
),
|
|
7084
7956
|
"data-leaf": hasChildren2 ? void 0 : "",
|
|
7957
|
+
"aria-hidden": "true",
|
|
7085
7958
|
onClick: (e) => {
|
|
7086
7959
|
e.stopPropagation();
|
|
7087
7960
|
if (hasChildren2) toggle(node.key);
|
|
@@ -7093,6 +7966,7 @@ var Tree = react.forwardRef(function Tree2({
|
|
|
7093
7966
|
"span",
|
|
7094
7967
|
{
|
|
7095
7968
|
className: chunkTPGAXYFU_cjs.cx("klun-tree__checkbox", `klun-tree__checkbox--${cs}`),
|
|
7969
|
+
"aria-hidden": "true",
|
|
7096
7970
|
onClick: (e) => {
|
|
7097
7971
|
e.stopPropagation();
|
|
7098
7972
|
if (!node.disabled) onCheckNode(node);
|
|
@@ -7698,12 +8572,13 @@ var GaugeBar = react.forwardRef(function GaugeBar2({
|
|
|
7698
8572
|
label,
|
|
7699
8573
|
caption,
|
|
7700
8574
|
color = "blue",
|
|
7701
|
-
size
|
|
8575
|
+
size: sizeProp,
|
|
7702
8576
|
showValue = true,
|
|
7703
8577
|
className,
|
|
7704
8578
|
style,
|
|
7705
8579
|
...props
|
|
7706
8580
|
}, ref) {
|
|
8581
|
+
const size = useScaleSize("GaugeBar", sizeProp);
|
|
7707
8582
|
const pct2 = Math.max(0, Math.min(100, max ? value / max * 100 : 0));
|
|
7708
8583
|
const showHeader = label || showValue && caption !== false;
|
|
7709
8584
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -8335,7 +9210,14 @@ var AutoComplete = react.forwardRef(
|
|
|
8335
9210
|
leadingIcon,
|
|
8336
9211
|
emptyText: emptyTextProp,
|
|
8337
9212
|
maxVisible = 6,
|
|
9213
|
+
error = false,
|
|
8338
9214
|
className,
|
|
9215
|
+
inputProps,
|
|
9216
|
+
// 下面这些属性属于**真实输入框**,不能落在 wrapper 上:
|
|
9217
|
+
// 落在 wrapper 上时 `<label for={id}>` 指不到控件、`aria-label` 对输入框无效。
|
|
9218
|
+
// 其余属性仍然透传给根节点,保持既有行为。
|
|
9219
|
+
id,
|
|
9220
|
+
inputMode,
|
|
8339
9221
|
...props
|
|
8340
9222
|
}, ref) {
|
|
8341
9223
|
const size = useSize(sizeProp);
|
|
@@ -8344,6 +9226,17 @@ var AutoComplete = react.forwardRef(
|
|
|
8344
9226
|
const [open, setOpen] = react.useState(false);
|
|
8345
9227
|
const [hi, setHi] = react.useState(-1);
|
|
8346
9228
|
const rootRef = react.useRef(null);
|
|
9229
|
+
const generatedId = react.useId();
|
|
9230
|
+
const listboxId = `${generatedId}listbox`;
|
|
9231
|
+
const optionId = (index) => `${listboxId}-option-${index}`;
|
|
9232
|
+
const {
|
|
9233
|
+
"aria-label": ariaLabel,
|
|
9234
|
+
"aria-labelledby": ariaLabelledBy,
|
|
9235
|
+
"aria-describedby": ariaDescribedBy,
|
|
9236
|
+
"aria-invalid": ariaInvalid,
|
|
9237
|
+
"aria-required": ariaRequired,
|
|
9238
|
+
...rootProps
|
|
9239
|
+
} = props;
|
|
8347
9240
|
const norm2 = options.map(
|
|
8348
9241
|
(o) => typeof o === "string" ? { value: o, label: o } : o
|
|
8349
9242
|
);
|
|
@@ -8388,13 +9281,14 @@ var AutoComplete = react.forwardRef(
|
|
|
8388
9281
|
{
|
|
8389
9282
|
ref: rootRef,
|
|
8390
9283
|
className: chunkTPGAXYFU_cjs.cx("klun-autocomplete", `klun-autocomplete--${size}`, className),
|
|
8391
|
-
...
|
|
9284
|
+
...rootProps,
|
|
8392
9285
|
children: [
|
|
8393
9286
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8394
9287
|
"div",
|
|
8395
9288
|
{
|
|
8396
9289
|
className: chunkTPGAXYFU_cjs.cx(
|
|
8397
9290
|
"klun-autocomplete__field",
|
|
9291
|
+
error && "klun-autocomplete__field--error",
|
|
8398
9292
|
disabled && "klun-autocomplete__field--disabled"
|
|
8399
9293
|
),
|
|
8400
9294
|
"data-open": open ? "" : void 0,
|
|
@@ -8403,11 +9297,25 @@ var AutoComplete = react.forwardRef(
|
|
|
8403
9297
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8404
9298
|
"input",
|
|
8405
9299
|
{
|
|
9300
|
+
...inputProps,
|
|
8406
9301
|
ref,
|
|
8407
|
-
|
|
9302
|
+
id: id ?? inputProps?.id,
|
|
9303
|
+
autoComplete: inputProps?.autoComplete,
|
|
9304
|
+
inputMode: inputMode ?? inputProps?.inputMode,
|
|
9305
|
+
className: chunkTPGAXYFU_cjs.cx("klun-autocomplete__input", inputProps?.className),
|
|
8408
9306
|
value,
|
|
8409
9307
|
disabled,
|
|
8410
9308
|
placeholder,
|
|
9309
|
+
role: "combobox",
|
|
9310
|
+
"aria-expanded": open,
|
|
9311
|
+
"aria-controls": open ? listboxId : void 0,
|
|
9312
|
+
"aria-activedescendant": open && hi >= 0 ? optionId(hi) : void 0,
|
|
9313
|
+
"aria-autocomplete": "list",
|
|
9314
|
+
"aria-label": ariaLabel,
|
|
9315
|
+
"aria-labelledby": ariaLabelledBy,
|
|
9316
|
+
"aria-describedby": ariaDescribedBy,
|
|
9317
|
+
"aria-invalid": ariaInvalid,
|
|
9318
|
+
"aria-required": ariaRequired,
|
|
8411
9319
|
onChange: (e) => {
|
|
8412
9320
|
onChange?.(e.target.value);
|
|
8413
9321
|
setOpen(true);
|
|
@@ -8420,9 +9328,10 @@ var AutoComplete = react.forwardRef(
|
|
|
8420
9328
|
]
|
|
8421
9329
|
}
|
|
8422
9330
|
),
|
|
8423
|
-
open ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-autocomplete__list", role: "listbox", children: shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-autocomplete__empty", children: emptyText }) : shown.map((o, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9331
|
+
open ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-autocomplete__list", id: listboxId, role: "listbox", children: shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-autocomplete__empty", children: emptyText }) : shown.map((o, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8424
9332
|
"button",
|
|
8425
9333
|
{
|
|
9334
|
+
id: optionId(i),
|
|
8426
9335
|
type: "button",
|
|
8427
9336
|
role: "option",
|
|
8428
9337
|
"aria-selected": i === hi,
|
|
@@ -8472,6 +9381,8 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8472
9381
|
const [open, setOpen] = react.useState(false);
|
|
8473
9382
|
const [active, setActive] = react.useState(current);
|
|
8474
9383
|
const rootRef = react.useRef(null);
|
|
9384
|
+
const triggerRef = react.useRef(null);
|
|
9385
|
+
const panelRef = react.useRef(null);
|
|
8475
9386
|
react.useEffect(() => {
|
|
8476
9387
|
setActive(current);
|
|
8477
9388
|
}, [open]);
|
|
@@ -8481,7 +9392,11 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8481
9392
|
if (rootRef.current && !rootRef.current.contains(e.target)) setOpen(false);
|
|
8482
9393
|
};
|
|
8483
9394
|
const k2 = (e) => {
|
|
8484
|
-
if (e.key
|
|
9395
|
+
if (e.key !== "Escape") return;
|
|
9396
|
+
setOpen(false);
|
|
9397
|
+
if (rootRef.current && rootRef.current.contains(document.activeElement)) {
|
|
9398
|
+
triggerRef.current?.focus();
|
|
9399
|
+
}
|
|
8485
9400
|
};
|
|
8486
9401
|
document.addEventListener("mousedown", h);
|
|
8487
9402
|
document.addEventListener("keydown", k2);
|
|
@@ -8490,6 +9405,15 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8490
9405
|
document.removeEventListener("keydown", k2);
|
|
8491
9406
|
};
|
|
8492
9407
|
}, [open]);
|
|
9408
|
+
react.useEffect(() => {
|
|
9409
|
+
if (!open) return;
|
|
9410
|
+
const id = requestAnimationFrame(() => {
|
|
9411
|
+
const cols = panelRef.current?.querySelectorAll(".klun-cascader__column");
|
|
9412
|
+
const last = cols && cols.length ? cols[cols.length - 1] : null;
|
|
9413
|
+
last?.querySelector(".klun-cascader__option:not([disabled])")?.focus();
|
|
9414
|
+
});
|
|
9415
|
+
return () => cancelAnimationFrame(id);
|
|
9416
|
+
}, [open]);
|
|
8493
9417
|
const columns = [];
|
|
8494
9418
|
let level = options;
|
|
8495
9419
|
columns.push(level);
|
|
@@ -8519,6 +9443,62 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8519
9443
|
if (leaf) setOpen(false);
|
|
8520
9444
|
}
|
|
8521
9445
|
};
|
|
9446
|
+
const onPanelKeyDown = (e) => {
|
|
9447
|
+
const target = e.target;
|
|
9448
|
+
const option = target.closest(".klun-cascader__option");
|
|
9449
|
+
if (!option) return;
|
|
9450
|
+
const column = option.closest(".klun-cascader__column");
|
|
9451
|
+
if (!column) return;
|
|
9452
|
+
const all = Array.from(column.querySelectorAll(".klun-cascader__option"));
|
|
9453
|
+
const enabled = all.filter((el) => !el.disabled);
|
|
9454
|
+
const i = enabled.indexOf(option);
|
|
9455
|
+
const colIdx = Array.from(
|
|
9456
|
+
panelRef.current?.querySelectorAll(".klun-cascader__column") ?? []
|
|
9457
|
+
).indexOf(column);
|
|
9458
|
+
const focusIntoColumn = (n) => {
|
|
9459
|
+
const cols = panelRef.current?.querySelectorAll(".klun-cascader__column");
|
|
9460
|
+
cols?.[n]?.querySelector(".klun-cascader__option:not([disabled])")?.focus();
|
|
9461
|
+
};
|
|
9462
|
+
switch (e.key) {
|
|
9463
|
+
case "ArrowDown":
|
|
9464
|
+
e.preventDefault();
|
|
9465
|
+
enabled[(i + 1) % enabled.length]?.focus();
|
|
9466
|
+
break;
|
|
9467
|
+
case "ArrowUp":
|
|
9468
|
+
e.preventDefault();
|
|
9469
|
+
enabled[(i - 1 + enabled.length) % enabled.length]?.focus();
|
|
9470
|
+
break;
|
|
9471
|
+
case "Home":
|
|
9472
|
+
e.preventDefault();
|
|
9473
|
+
enabled[0]?.focus();
|
|
9474
|
+
break;
|
|
9475
|
+
case "End":
|
|
9476
|
+
e.preventDefault();
|
|
9477
|
+
enabled[enabled.length - 1]?.focus();
|
|
9478
|
+
break;
|
|
9479
|
+
case "ArrowRight": {
|
|
9480
|
+
e.preventDefault();
|
|
9481
|
+
const opt = columns[colIdx]?.[all.indexOf(option)];
|
|
9482
|
+
if (opt && opt.children && opt.children.length) {
|
|
9483
|
+
pick(colIdx, opt);
|
|
9484
|
+
requestAnimationFrame(() => focusIntoColumn(colIdx + 1));
|
|
9485
|
+
}
|
|
9486
|
+
break;
|
|
9487
|
+
}
|
|
9488
|
+
case "ArrowLeft":
|
|
9489
|
+
e.preventDefault();
|
|
9490
|
+
if (colIdx > 0) focusIntoColumn(colIdx - 1);
|
|
9491
|
+
break;
|
|
9492
|
+
case "Escape":
|
|
9493
|
+
e.preventDefault();
|
|
9494
|
+
setOpen(false);
|
|
9495
|
+
triggerRef.current?.focus();
|
|
9496
|
+
break;
|
|
9497
|
+
case "Tab":
|
|
9498
|
+
setOpen(false);
|
|
9499
|
+
break;
|
|
9500
|
+
}
|
|
9501
|
+
};
|
|
8522
9502
|
const clear = () => {
|
|
8523
9503
|
if (value === void 0) setInner([]);
|
|
8524
9504
|
setActive([]);
|
|
@@ -8541,11 +9521,12 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8541
9521
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8542
9522
|
"button",
|
|
8543
9523
|
{
|
|
9524
|
+
ref: triggerRef,
|
|
8544
9525
|
type: "button",
|
|
8545
9526
|
className: "klun-cascader__trigger",
|
|
8546
9527
|
disabled,
|
|
8547
9528
|
onClick: () => setOpen((o) => !o),
|
|
8548
|
-
"aria-haspopup": "
|
|
9529
|
+
"aria-haspopup": "menu",
|
|
8549
9530
|
"aria-expanded": open,
|
|
8550
9531
|
"data-empty": labelPath.length ? void 0 : "",
|
|
8551
9532
|
children: [
|
|
@@ -8591,9 +9572,11 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8591
9572
|
]
|
|
8592
9573
|
}
|
|
8593
9574
|
),
|
|
8594
|
-
open ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-cascader__panel", role: "menu", children: columns.map((col, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9575
|
+
open ? /* @__PURE__ */ jsxRuntime.jsx("div", { ref: panelRef, className: "klun-cascader__panel", role: "menu", onKeyDown: onPanelKeyDown, children: columns.map((col, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
8595
9576
|
"div",
|
|
8596
9577
|
{
|
|
9578
|
+
role: "group",
|
|
9579
|
+
"aria-label": ci === 0 ? cascader.placeholder : String(active[ci - 1] ?? ""),
|
|
8597
9580
|
className: chunkTPGAXYFU_cjs.cx(
|
|
8598
9581
|
"klun-cascader__column",
|
|
8599
9582
|
ci < columns.length - 1 && "klun-cascader__column--divided"
|
|
@@ -8605,11 +9588,11 @@ var Cascader = react.forwardRef(function Cascader2({
|
|
|
8605
9588
|
"button",
|
|
8606
9589
|
{
|
|
8607
9590
|
type: "button",
|
|
8608
|
-
role: "
|
|
9591
|
+
role: "menuitemradio",
|
|
8609
9592
|
className: "klun-cascader__option",
|
|
8610
9593
|
disabled: opt.disabled,
|
|
8611
9594
|
onClick: () => pick(ci, opt),
|
|
8612
|
-
"aria-
|
|
9595
|
+
"aria-checked": selected,
|
|
8613
9596
|
"data-selected": selected || void 0,
|
|
8614
9597
|
children: [
|
|
8615
9598
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-cascader__option-label", children: renderOption ? renderOption(opt, ci) : opt.label }),
|
|
@@ -9114,7 +10097,9 @@ function SelectListbox({
|
|
|
9114
10097
|
onActivate,
|
|
9115
10098
|
onPick,
|
|
9116
10099
|
className,
|
|
9117
|
-
anchorRef
|
|
10100
|
+
anchorRef,
|
|
10101
|
+
id,
|
|
10102
|
+
optionId
|
|
9118
10103
|
}) {
|
|
9119
10104
|
const portal = !!anchorRef && typeof document !== "undefined";
|
|
9120
10105
|
const panelRef = react.useRef(null);
|
|
@@ -9162,12 +10147,14 @@ function SelectListbox({
|
|
|
9162
10147
|
"div",
|
|
9163
10148
|
{
|
|
9164
10149
|
ref: panelRef,
|
|
10150
|
+
id,
|
|
9165
10151
|
role: "listbox",
|
|
9166
10152
|
className: className ? `klun-select-listbox ${className}` : "klun-select-listbox",
|
|
9167
10153
|
style: portalStyle,
|
|
9168
10154
|
children: options.map((o, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9169
10155
|
"button",
|
|
9170
10156
|
{
|
|
10157
|
+
id: optionId?.(i),
|
|
9171
10158
|
type: "button",
|
|
9172
10159
|
role: "option",
|
|
9173
10160
|
"aria-selected": o.value === current,
|
|
@@ -9715,7 +10702,7 @@ var DEFAULT_FORMAT = {
|
|
|
9715
10702
|
day: "numeric"
|
|
9716
10703
|
};
|
|
9717
10704
|
var Calendar = react.forwardRef(function Calendar2({ value, onPick, className, style }, ref) {
|
|
9718
|
-
const { datePicker } = useLocale();
|
|
10705
|
+
const { datePicker, pagination, locale } = useLocale();
|
|
9719
10706
|
const initial = value ? new Date(value) : /* @__PURE__ */ new Date();
|
|
9720
10707
|
const [view, setView] = react.useState(new Date(initial.getFullYear(), initial.getMonth(), 1));
|
|
9721
10708
|
const sel = value ? new Date(value) : null;
|
|
@@ -9728,34 +10715,69 @@ var Calendar = react.forwardRef(function Calendar2({ value, onPick, className, s
|
|
|
9728
10715
|
const cells = [];
|
|
9729
10716
|
for (let i = 0; i < firstDay; i++) cells.push(null);
|
|
9730
10717
|
for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(y, m, d));
|
|
9731
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9732
|
-
|
|
9733
|
-
|
|
9734
|
-
|
|
9735
|
-
|
|
9736
|
-
|
|
9737
|
-
|
|
9738
|
-
datePicker.
|
|
9739
|
-
|
|
9740
|
-
|
|
9741
|
-
|
|
9742
|
-
|
|
9743
|
-
|
|
9744
|
-
|
|
9745
|
-
|
|
9746
|
-
|
|
9747
|
-
|
|
9748
|
-
|
|
9749
|
-
|
|
9750
|
-
|
|
9751
|
-
|
|
9752
|
-
|
|
9753
|
-
|
|
9754
|
-
|
|
9755
|
-
|
|
10718
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10719
|
+
"div",
|
|
10720
|
+
{
|
|
10721
|
+
ref,
|
|
10722
|
+
className: chunkTPGAXYFU_cjs.cx("klun-date-picker", className),
|
|
10723
|
+
style,
|
|
10724
|
+
role: "group",
|
|
10725
|
+
"aria-label": fmt(datePicker.title, { month: datePicker.months[m], year: y }),
|
|
10726
|
+
children: [
|
|
10727
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-date-picker__header", children: [
|
|
10728
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10729
|
+
"button",
|
|
10730
|
+
{
|
|
10731
|
+
type: "button",
|
|
10732
|
+
className: "klun-date-picker__nav",
|
|
10733
|
+
"aria-label": pagination.previous,
|
|
10734
|
+
onClick: () => setView(new Date(y, m - 1, 1)),
|
|
10735
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6l-4 4 4 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
10736
|
+
}
|
|
10737
|
+
),
|
|
10738
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-date-picker__title", children: fmt(datePicker.title, { month: datePicker.months[m], year: y }) }),
|
|
10739
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10740
|
+
"button",
|
|
10741
|
+
{
|
|
10742
|
+
type: "button",
|
|
10743
|
+
className: "klun-date-picker__nav",
|
|
10744
|
+
"aria-label": pagination.next,
|
|
10745
|
+
onClick: () => setView(new Date(y, m + 1, 1)),
|
|
10746
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 6l4 4-4 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
10747
|
+
}
|
|
10748
|
+
)
|
|
10749
|
+
] }),
|
|
10750
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-date-picker__grid", children: [
|
|
10751
|
+
datePicker.weekdaysShort.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-date-picker__weekday", children: d }, i)),
|
|
10752
|
+
cells.map((date, i) => {
|
|
10753
|
+
if (!date) return /* @__PURE__ */ jsxRuntime.jsx("span", {}, i);
|
|
10754
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10755
|
+
"button",
|
|
10756
|
+
{
|
|
10757
|
+
type: "button",
|
|
10758
|
+
className: "klun-date-picker__day",
|
|
10759
|
+
"data-selected": same(date, sel) || void 0,
|
|
10760
|
+
"data-today": same(date, today) || void 0,
|
|
10761
|
+
"aria-label": date.toLocaleDateString(locale, {
|
|
10762
|
+
weekday: "long",
|
|
10763
|
+
year: "numeric",
|
|
10764
|
+
month: "long",
|
|
10765
|
+
day: "numeric"
|
|
10766
|
+
}),
|
|
10767
|
+
"aria-current": same(date, today) ? "date" : void 0,
|
|
10768
|
+
onClick: () => onPick(date),
|
|
10769
|
+
children: date.getDate()
|
|
10770
|
+
},
|
|
10771
|
+
i
|
|
10772
|
+
);
|
|
10773
|
+
})
|
|
10774
|
+
] })
|
|
10775
|
+
]
|
|
10776
|
+
}
|
|
10777
|
+
);
|
|
9756
10778
|
});
|
|
9757
10779
|
var DatePicker = react.forwardRef(
|
|
9758
|
-
function DatePicker2({ value, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT, align = "
|
|
10780
|
+
function DatePicker2({ value, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT, align = "start", disabled, className, style, ...props }, ref) {
|
|
9759
10781
|
if (inline2) {
|
|
9760
10782
|
return /* @__PURE__ */ jsxRuntime.jsx(Calendar, { ref, value, onPick: (d) => onChange?.(d), className, style });
|
|
9761
10783
|
}
|
|
@@ -9769,6 +10791,7 @@ var DatePicker = react.forwardRef(
|
|
|
9769
10791
|
Input,
|
|
9770
10792
|
{
|
|
9771
10793
|
readOnly: true,
|
|
10794
|
+
className: "klun-input--trigger",
|
|
9772
10795
|
disabled,
|
|
9773
10796
|
value: label,
|
|
9774
10797
|
placeholder: placeholder ?? "Select date",
|
|
@@ -9853,7 +10876,7 @@ var RangeCalendar = react.forwardRef(function RangeCalendar2({ start, end, onPic
|
|
|
9853
10876
|
] });
|
|
9854
10877
|
});
|
|
9855
10878
|
var DateRangePicker = react.forwardRef(
|
|
9856
|
-
function DateRangePicker2({ start, end, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT2, align = "
|
|
10879
|
+
function DateRangePicker2({ start, end, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT2, align = "start", disabled, className, style, ...props }, ref) {
|
|
9857
10880
|
if (inline2) {
|
|
9858
10881
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9859
10882
|
RangeCalendar,
|
|
@@ -9878,6 +10901,7 @@ var DateRangePicker = react.forwardRef(
|
|
|
9878
10901
|
Input,
|
|
9879
10902
|
{
|
|
9880
10903
|
readOnly: true,
|
|
10904
|
+
className: "klun-input--trigger",
|
|
9881
10905
|
disabled,
|
|
9882
10906
|
value: label,
|
|
9883
10907
|
placeholder: placeholder ?? "Select range",
|
|
@@ -10131,7 +11155,7 @@ function DateTimePanel({ value, onChange }) {
|
|
|
10131
11155
|
] });
|
|
10132
11156
|
}
|
|
10133
11157
|
var DateTimePicker = react.forwardRef(
|
|
10134
|
-
function DateTimePicker2({ value, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT3, align = "
|
|
11158
|
+
function DateTimePicker2({ value, onChange, inline: inline2, placeholder, format = DEFAULT_FORMAT3, align = "start", disabled, className, style, ...props }, ref) {
|
|
10135
11159
|
const date = value ? new Date(value) : null;
|
|
10136
11160
|
if (inline2) {
|
|
10137
11161
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: chunkTPGAXYFU_cjs.cx("klun-date-time-picker", className), style, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(DateTimePanel, { value: date, onChange: (d) => onChange?.(d) }) });
|
|
@@ -10146,6 +11170,7 @@ var DateTimePicker = react.forwardRef(
|
|
|
10146
11170
|
Input,
|
|
10147
11171
|
{
|
|
10148
11172
|
readOnly: true,
|
|
11173
|
+
className: "klun-input--trigger",
|
|
10149
11174
|
disabled,
|
|
10150
11175
|
value: label,
|
|
10151
11176
|
placeholder: placeholder ?? "Select date & time",
|
|
@@ -10262,13 +11287,24 @@ var FileUpload = react.forwardRef(function FileUpload2({ onFiles, hint = "SVG, P
|
|
|
10262
11287
|
const { fileUpload } = useLocale();
|
|
10263
11288
|
const [over, setOver] = react.useState(false);
|
|
10264
11289
|
const inputRef = react.useRef(null);
|
|
11290
|
+
const openPicker = () => inputRef.current?.click();
|
|
11291
|
+
const dropzoneLabel = `${fileUpload.clickToUpload} ${fileUpload.orDragAndDrop}`;
|
|
10265
11292
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10266
11293
|
"div",
|
|
10267
11294
|
{
|
|
10268
11295
|
ref,
|
|
10269
11296
|
className: chunkTPGAXYFU_cjs.cx("klun-file-upload", className),
|
|
11297
|
+
role: "button",
|
|
11298
|
+
tabIndex: 0,
|
|
11299
|
+
"aria-label": dropzoneLabel,
|
|
10270
11300
|
"data-dragover": over || void 0,
|
|
10271
|
-
onClick:
|
|
11301
|
+
onClick: openPicker,
|
|
11302
|
+
onKeyDown: (e) => {
|
|
11303
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
11304
|
+
e.preventDefault();
|
|
11305
|
+
openPicker();
|
|
11306
|
+
}
|
|
11307
|
+
},
|
|
10272
11308
|
onDragOver: (e) => {
|
|
10273
11309
|
e.preventDefault();
|
|
10274
11310
|
setOver(true);
|
|
@@ -10288,6 +11324,7 @@ var FileUpload = react.forwardRef(function FileUpload2({ onFiles, hint = "SVG, P
|
|
|
10288
11324
|
type: "file",
|
|
10289
11325
|
multiple: true,
|
|
10290
11326
|
hidden: true,
|
|
11327
|
+
tabIndex: -1,
|
|
10291
11328
|
onChange: (e) => onFiles?.([...e.target.files ?? []])
|
|
10292
11329
|
}
|
|
10293
11330
|
),
|
|
@@ -10385,9 +11422,6 @@ function useForm(opts = {}) {
|
|
|
10385
11422
|
const unregisterField = react.useCallback((key) => {
|
|
10386
11423
|
delete fields.current[key];
|
|
10387
11424
|
}, []);
|
|
10388
|
-
const registerRules = react.useCallback((name, rules) => {
|
|
10389
|
-
fields.current[pathKey(name)] = { name, rules: rules || [] };
|
|
10390
|
-
}, []);
|
|
10391
11425
|
const getFieldValue = react.useCallback((name) => getIn(valuesRef.current, name), []);
|
|
10392
11426
|
const getFieldsValue = react.useCallback(() => valuesRef.current, []);
|
|
10393
11427
|
const validateField = react.useCallback(async (name) => {
|
|
@@ -10506,7 +11540,6 @@ function useForm(opts = {}) {
|
|
|
10506
11540
|
setValues,
|
|
10507
11541
|
getFieldValue,
|
|
10508
11542
|
getFieldsValue,
|
|
10509
|
-
registerRules,
|
|
10510
11543
|
registerField,
|
|
10511
11544
|
unregisterField,
|
|
10512
11545
|
validate,
|
|
@@ -10579,22 +11612,35 @@ function FormItem({
|
|
|
10579
11612
|
const error = form && key ? form.touched[key] && form.errors[key] : null;
|
|
10580
11613
|
const ruleArr = typeof rules === "function" ? [] : rules || [];
|
|
10581
11614
|
const isRequired = required || ruleArr.some((r) => r.required);
|
|
11615
|
+
const autoId = react.useId();
|
|
11616
|
+
const childIsElement = react.isValidElement(children);
|
|
11617
|
+
const childProps = childIsElement ? children.props : {};
|
|
11618
|
+
const controlId = childIsElement ? childProps.id ?? `${autoId}control` : void 0;
|
|
11619
|
+
const errorId = controlId ? `${controlId}-error` : void 0;
|
|
11620
|
+
const helpId = controlId ? `${controlId}-help` : void 0;
|
|
11621
|
+
const hasError = Boolean(error);
|
|
11622
|
+
const descriptionId = hasError ? errorId : help ? helpId : void 0;
|
|
10582
11623
|
let control = children;
|
|
10583
|
-
if (
|
|
10584
|
-
const
|
|
10585
|
-
|
|
10586
|
-
value
|
|
10587
|
-
error:
|
|
10588
|
-
onChange
|
|
11624
|
+
if (childIsElement) {
|
|
11625
|
+
const merged = { id: controlId };
|
|
11626
|
+
if (form && fullName != null) {
|
|
11627
|
+
merged.value = form._getIn(form.values, fullName) ?? childProps.value ?? "";
|
|
11628
|
+
merged.error = hasError ? true : void 0;
|
|
11629
|
+
merged.onChange = (e) => {
|
|
10589
11630
|
const v = e && e.target ? childProps.type === "checkbox" ? e.target.checked : e.target.value : e;
|
|
10590
11631
|
form.setFieldValue(fullName, v);
|
|
10591
11632
|
childProps.onChange?.(e);
|
|
10592
|
-
}
|
|
10593
|
-
onBlur
|
|
11633
|
+
};
|
|
11634
|
+
merged.onBlur = (e) => {
|
|
10594
11635
|
form.setFieldTouched(fullName);
|
|
10595
11636
|
childProps.onBlur?.(e);
|
|
10596
|
-
}
|
|
10597
|
-
}
|
|
11637
|
+
};
|
|
11638
|
+
}
|
|
11639
|
+
if (hasError) merged["aria-invalid"] = true;
|
|
11640
|
+
if (isRequired) merged["aria-required"] = true;
|
|
11641
|
+
const describedBy = [childProps["aria-describedby"], descriptionId].filter(Boolean).join(" ");
|
|
11642
|
+
if (describedBy) merged["aria-describedby"] = describedBy;
|
|
11643
|
+
control = react.cloneElement(children, merged);
|
|
10598
11644
|
}
|
|
10599
11645
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10600
11646
|
"div",
|
|
@@ -10603,13 +11649,13 @@ function FormItem({
|
|
|
10603
11649
|
className: chunkTPGAXYFU_cjs.cx("klun-form-item", horizontal && "klun-form-item--horizontal", className),
|
|
10604
11650
|
...props,
|
|
10605
11651
|
children: [
|
|
10606
|
-
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "klun-form-item__label", children: [
|
|
11652
|
+
label ? /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "klun-form-item__label", htmlFor: controlId, children: [
|
|
10607
11653
|
label,
|
|
10608
|
-
isRequired ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-form-item__required", children: "*" }) : null
|
|
11654
|
+
isRequired ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "klun-form-item__required", "aria-hidden": "true", children: "*" }) : null
|
|
10609
11655
|
] }) : null,
|
|
10610
11656
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-form-item__control", children: [
|
|
10611
11657
|
control,
|
|
10612
|
-
|
|
11658
|
+
hasError ? /* @__PURE__ */ jsxRuntime.jsx("span", { id: errorId, className: "klun-form-item__error", children: error }) : help ? /* @__PURE__ */ jsxRuntime.jsx("span", { id: helpId, className: "klun-form-item__help", children: help }) : null
|
|
10613
11659
|
] })
|
|
10614
11660
|
]
|
|
10615
11661
|
}
|
|
@@ -10670,6 +11716,241 @@ var Hint = react.forwardRef(function Hint2({ children, error = false, icon, clas
|
|
|
10670
11716
|
);
|
|
10671
11717
|
});
|
|
10672
11718
|
Hint.displayName = "Hint";
|
|
11719
|
+
|
|
11720
|
+
// src/components/overlays/overlayStack.ts
|
|
11721
|
+
var OVERLAY_LAYER = {
|
|
11722
|
+
pagePopup: 100,
|
|
11723
|
+
modalRoot: 1e3,
|
|
11724
|
+
modalStep: 100,
|
|
11725
|
+
popupOffset: 20,
|
|
11726
|
+
tooltipOffset: 30
|
|
11727
|
+
};
|
|
11728
|
+
var stack = [];
|
|
11729
|
+
var scopeRoots = /* @__PURE__ */ new Map();
|
|
11730
|
+
var scrollLockCount = 0;
|
|
11731
|
+
var savedOverflow = null;
|
|
11732
|
+
var canUseDOM = () => typeof document !== "undefined";
|
|
11733
|
+
function pushOverlay() {
|
|
11734
|
+
const id = /* @__PURE__ */ Symbol("klun-overlay");
|
|
11735
|
+
stack.push(id);
|
|
11736
|
+
scopeRoots.set(id, /* @__PURE__ */ new Set());
|
|
11737
|
+
lockScroll();
|
|
11738
|
+
return id;
|
|
11739
|
+
}
|
|
11740
|
+
function popOverlay(id) {
|
|
11741
|
+
const i = stack.indexOf(id);
|
|
11742
|
+
if (i === -1) return;
|
|
11743
|
+
stack.splice(i, 1);
|
|
11744
|
+
scopeRoots.delete(id);
|
|
11745
|
+
unlockScroll();
|
|
11746
|
+
}
|
|
11747
|
+
function isTopOverlay(id) {
|
|
11748
|
+
return stack.length > 0 && stack[stack.length - 1] === id;
|
|
11749
|
+
}
|
|
11750
|
+
function overlayDepth(id) {
|
|
11751
|
+
return stack.indexOf(id);
|
|
11752
|
+
}
|
|
11753
|
+
function layerBaseFor(id) {
|
|
11754
|
+
const depth = Math.max(0, overlayDepth(id));
|
|
11755
|
+
return OVERLAY_LAYER.modalRoot + depth * OVERLAY_LAYER.modalStep;
|
|
11756
|
+
}
|
|
11757
|
+
function registerScopeRoot(id, el) {
|
|
11758
|
+
const set = scopeRoots.get(id);
|
|
11759
|
+
if (!set || !el) return;
|
|
11760
|
+
set.add(el);
|
|
11761
|
+
}
|
|
11762
|
+
function unregisterScopeRoot(id, el) {
|
|
11763
|
+
if (!el) return;
|
|
11764
|
+
scopeRoots.get(id)?.delete(el);
|
|
11765
|
+
}
|
|
11766
|
+
function getScopeRoots(id) {
|
|
11767
|
+
const set = scopeRoots.get(id);
|
|
11768
|
+
if (!set) return [];
|
|
11769
|
+
return [...set].filter((el) => el.isConnected);
|
|
11770
|
+
}
|
|
11771
|
+
function lockScroll() {
|
|
11772
|
+
if (!canUseDOM()) return;
|
|
11773
|
+
if (scrollLockCount === 0) {
|
|
11774
|
+
savedOverflow = document.body.style.overflow;
|
|
11775
|
+
document.body.style.overflow = "hidden";
|
|
11776
|
+
}
|
|
11777
|
+
scrollLockCount += 1;
|
|
11778
|
+
}
|
|
11779
|
+
function unlockScroll() {
|
|
11780
|
+
if (!canUseDOM()) return;
|
|
11781
|
+
scrollLockCount = Math.max(0, scrollLockCount - 1);
|
|
11782
|
+
if (scrollLockCount === 0) {
|
|
11783
|
+
document.body.style.overflow = savedOverflow ?? "";
|
|
11784
|
+
savedOverflow = null;
|
|
11785
|
+
}
|
|
11786
|
+
}
|
|
11787
|
+
var inertedByUs = /* @__PURE__ */ new WeakMap();
|
|
11788
|
+
function applyBackgroundInert(roots) {
|
|
11789
|
+
if (!canUseDOM() || roots.length === 0) return;
|
|
11790
|
+
for (const root of roots) {
|
|
11791
|
+
let node = root;
|
|
11792
|
+
while (node && node.parentElement) {
|
|
11793
|
+
const parent = node.parentElement;
|
|
11794
|
+
for (const sibling of Array.from(parent.children)) {
|
|
11795
|
+
if (sibling === node) continue;
|
|
11796
|
+
if (!(sibling instanceof HTMLElement)) continue;
|
|
11797
|
+
if (roots.some((r) => sibling.contains(r))) continue;
|
|
11798
|
+
if (!sibling.hasAttribute("inert") && !inertedByUs.has(sibling)) {
|
|
11799
|
+
sibling.setAttribute("inert", "");
|
|
11800
|
+
inertedByUs.set(sibling, true);
|
|
11801
|
+
}
|
|
11802
|
+
}
|
|
11803
|
+
node = parent;
|
|
11804
|
+
if (node === document.body) break;
|
|
11805
|
+
}
|
|
11806
|
+
}
|
|
11807
|
+
}
|
|
11808
|
+
function releaseBackgroundInert() {
|
|
11809
|
+
if (!canUseDOM()) return;
|
|
11810
|
+
for (const el of document.querySelectorAll("[inert]")) {
|
|
11811
|
+
if (inertedByUs.get(el)) {
|
|
11812
|
+
el.removeAttribute("inert");
|
|
11813
|
+
inertedByUs.delete(el);
|
|
11814
|
+
}
|
|
11815
|
+
}
|
|
11816
|
+
}
|
|
11817
|
+
function isFocusable(el) {
|
|
11818
|
+
if (el.hasAttribute("disabled")) return false;
|
|
11819
|
+
if (el.getAttribute("aria-hidden") === "true") return false;
|
|
11820
|
+
if (el.hasAttribute("hidden")) return false;
|
|
11821
|
+
if (typeof getComputedStyle === "function") {
|
|
11822
|
+
const cs = getComputedStyle(el);
|
|
11823
|
+
if (cs.display === "none" || cs.visibility === "hidden") return false;
|
|
11824
|
+
}
|
|
11825
|
+
if (el.getAttribute("tabindex") === "-1") return false;
|
|
11826
|
+
return true;
|
|
11827
|
+
}
|
|
11828
|
+
var FOCUSABLE_SELECTOR = [
|
|
11829
|
+
"a[href]",
|
|
11830
|
+
"button",
|
|
11831
|
+
"input:not([type='hidden'])",
|
|
11832
|
+
"select",
|
|
11833
|
+
"textarea",
|
|
11834
|
+
"[tabindex]",
|
|
11835
|
+
"audio[controls]",
|
|
11836
|
+
"video[controls]",
|
|
11837
|
+
"[contenteditable]:not([contenteditable='false'])"
|
|
11838
|
+
].join(",");
|
|
11839
|
+
function focusablesIn(roots) {
|
|
11840
|
+
const out = [];
|
|
11841
|
+
for (const root of roots) {
|
|
11842
|
+
for (const el of Array.from(root.querySelectorAll(FOCUSABLE_SELECTOR))) {
|
|
11843
|
+
if (isFocusable(el)) out.push(el);
|
|
11844
|
+
}
|
|
11845
|
+
}
|
|
11846
|
+
return out;
|
|
11847
|
+
}
|
|
11848
|
+
function useOverlayScope({
|
|
11849
|
+
active,
|
|
11850
|
+
onEscape,
|
|
11851
|
+
escapeEnabled = true,
|
|
11852
|
+
autoFocus = true,
|
|
11853
|
+
restoreFocus = true,
|
|
11854
|
+
inertBackground = true
|
|
11855
|
+
}) {
|
|
11856
|
+
const [scopeId, setScopeId] = react.useState(null);
|
|
11857
|
+
const nodeRef = react.useRef(null);
|
|
11858
|
+
const restoreTo = react.useRef(null);
|
|
11859
|
+
const onEscapeRef = react.useRef(onEscape);
|
|
11860
|
+
onEscapeRef.current = onEscape;
|
|
11861
|
+
react.useEffect(() => {
|
|
11862
|
+
if (!active) {
|
|
11863
|
+
setScopeId(null);
|
|
11864
|
+
return;
|
|
11865
|
+
}
|
|
11866
|
+
const id = pushOverlay();
|
|
11867
|
+
setScopeId(id);
|
|
11868
|
+
return () => {
|
|
11869
|
+
popOverlay(id);
|
|
11870
|
+
};
|
|
11871
|
+
}, [active]);
|
|
11872
|
+
react.useEffect(() => {
|
|
11873
|
+
if (!active || !scopeId) return;
|
|
11874
|
+
const container = nodeRef.current;
|
|
11875
|
+
registerScopeRoot(scopeId, container);
|
|
11876
|
+
if (restoreFocus) {
|
|
11877
|
+
restoreTo.current = document.activeElement ?? null;
|
|
11878
|
+
}
|
|
11879
|
+
if (autoFocus) {
|
|
11880
|
+
const items2 = focusablesIn(getScopeRoots(scopeId));
|
|
11881
|
+
const target = items2[0] ?? container;
|
|
11882
|
+
target?.focus?.();
|
|
11883
|
+
}
|
|
11884
|
+
if (inertBackground) applyBackgroundInert(getScopeRoots(scopeId));
|
|
11885
|
+
return () => {
|
|
11886
|
+
unregisterScopeRoot(scopeId, container);
|
|
11887
|
+
if (inertBackground) releaseBackgroundInert();
|
|
11888
|
+
if (restoreFocus) {
|
|
11889
|
+
const to = restoreTo.current;
|
|
11890
|
+
restoreTo.current = null;
|
|
11891
|
+
if (to && to.isConnected) to.focus?.();
|
|
11892
|
+
}
|
|
11893
|
+
};
|
|
11894
|
+
}, [active, scopeId]);
|
|
11895
|
+
react.useEffect(() => {
|
|
11896
|
+
if (!active || !scopeId) return;
|
|
11897
|
+
const onKeyDown = (e) => {
|
|
11898
|
+
if (e.key === "Escape") {
|
|
11899
|
+
if (!escapeEnabled) return;
|
|
11900
|
+
if (!isTopOverlay(scopeId)) {
|
|
11901
|
+
e.stopPropagation();
|
|
11902
|
+
return;
|
|
11903
|
+
}
|
|
11904
|
+
onEscapeRef.current?.();
|
|
11905
|
+
return;
|
|
11906
|
+
}
|
|
11907
|
+
if (e.key !== "Tab") return;
|
|
11908
|
+
if (!isTopOverlay(scopeId)) {
|
|
11909
|
+
e.preventDefault();
|
|
11910
|
+
return;
|
|
11911
|
+
}
|
|
11912
|
+
const items2 = focusablesIn(getScopeRoots(scopeId));
|
|
11913
|
+
if (items2.length === 0) {
|
|
11914
|
+
e.preventDefault();
|
|
11915
|
+
nodeRef.current?.focus?.();
|
|
11916
|
+
return;
|
|
11917
|
+
}
|
|
11918
|
+
const first = items2[0];
|
|
11919
|
+
const last = items2[items2.length - 1];
|
|
11920
|
+
const current = document.activeElement;
|
|
11921
|
+
const inside = current ? items2.includes(current) : false;
|
|
11922
|
+
if (e.shiftKey) {
|
|
11923
|
+
if (!inside || current === first) {
|
|
11924
|
+
e.preventDefault();
|
|
11925
|
+
last.focus();
|
|
11926
|
+
}
|
|
11927
|
+
} else if (!inside || current === last) {
|
|
11928
|
+
e.preventDefault();
|
|
11929
|
+
first.focus();
|
|
11930
|
+
}
|
|
11931
|
+
};
|
|
11932
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
11933
|
+
return () => document.removeEventListener("keydown", onKeyDown, true);
|
|
11934
|
+
}, [active, scopeId, escapeEnabled]);
|
|
11935
|
+
const setNode = react.useCallback((el) => {
|
|
11936
|
+
nodeRef.current = el;
|
|
11937
|
+
}, []);
|
|
11938
|
+
return {
|
|
11939
|
+
ref: setNode,
|
|
11940
|
+
scopeId,
|
|
11941
|
+
layerBase: scopeId ? layerBaseFor(scopeId) : OVERLAY_LAYER.modalRoot
|
|
11942
|
+
};
|
|
11943
|
+
}
|
|
11944
|
+
var OverlayLayerContext = react.createContext(null);
|
|
11945
|
+
function OverlayLayerProvider({ layerBase, children }) {
|
|
11946
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OverlayLayerContext.Provider, { value: { layerBase }, children });
|
|
11947
|
+
}
|
|
11948
|
+
function useOverlayLayer(kind = "popup") {
|
|
11949
|
+
const ctx = react.useContext(OverlayLayerContext);
|
|
11950
|
+
const offset = kind === "tooltip" ? OVERLAY_LAYER.tooltipOffset : OVERLAY_LAYER.popupOffset;
|
|
11951
|
+
if (ctx) return ctx.layerBase + offset;
|
|
11952
|
+
return kind === "tooltip" ? OVERLAY_LAYER.modalRoot + OVERLAY_LAYER.tooltipOffset : OVERLAY_LAYER.pagePopup;
|
|
11953
|
+
}
|
|
10673
11954
|
var Modal = react.forwardRef(function Modal2({
|
|
10674
11955
|
open,
|
|
10675
11956
|
onClose,
|
|
@@ -10710,19 +11991,21 @@ var Modal = react.forwardRef(function Modal2({
|
|
|
10710
11991
|
const [maximized, setMaximized] = react.useState(defaultMaximized);
|
|
10711
11992
|
const drag = react.useRef(null);
|
|
10712
11993
|
const prevOpen = react.useRef(open);
|
|
10713
|
-
|
|
10714
|
-
|
|
10715
|
-
|
|
10716
|
-
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
|
|
10720
|
-
|
|
10721
|
-
|
|
10722
|
-
|
|
10723
|
-
|
|
10724
|
-
|
|
10725
|
-
|
|
11994
|
+
const scope = useOverlayScope({
|
|
11995
|
+
active: open,
|
|
11996
|
+
escapeEnabled: keyboard && closable,
|
|
11997
|
+
onEscape: cancel
|
|
11998
|
+
});
|
|
11999
|
+
const scopeRef = scope.ref;
|
|
12000
|
+
const titleId = `${react.useId()}title`;
|
|
12001
|
+
const attachDialogRef = react.useCallback(
|
|
12002
|
+
(el) => {
|
|
12003
|
+
scopeRef(el);
|
|
12004
|
+
if (typeof ref === "function") ref(el);
|
|
12005
|
+
else if (ref) ref.current = el;
|
|
12006
|
+
},
|
|
12007
|
+
[ref, scopeRef]
|
|
12008
|
+
);
|
|
10726
12009
|
react.useEffect(() => {
|
|
10727
12010
|
if (open) {
|
|
10728
12011
|
setPos({ x: 0, y: 0 });
|
|
@@ -10773,9 +12056,11 @@ var Modal = react.forwardRef(function Modal2({
|
|
|
10773
12056
|
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10774
12057
|
"div",
|
|
10775
12058
|
{
|
|
10776
|
-
ref,
|
|
12059
|
+
ref: attachDialogRef,
|
|
10777
12060
|
role: "dialog",
|
|
10778
12061
|
"aria-modal": "true",
|
|
12062
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
12063
|
+
tabIndex: -1,
|
|
10779
12064
|
onClick: (e) => e.stopPropagation(),
|
|
10780
12065
|
className: chunkTPGAXYFU_cjs.cx("klun-modal__dialog", maximized && "klun-modal__dialog--maximized", className),
|
|
10781
12066
|
style: dialogStyle,
|
|
@@ -10789,7 +12074,7 @@ var Modal = react.forwardRef(function Modal2({
|
|
|
10789
12074
|
children: [
|
|
10790
12075
|
icon ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-modal__icon", children: icon }) : null,
|
|
10791
12076
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-modal__heading", children: [
|
|
10792
|
-
title ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-modal__title", children: title }) : null,
|
|
12077
|
+
title ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-modal__title", id: titleId, children: title }) : null,
|
|
10793
12078
|
description ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-modal__description", children: description }) : null
|
|
10794
12079
|
] }),
|
|
10795
12080
|
maximizable || closable ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-modal__actions", children: [
|
|
@@ -11057,7 +12342,7 @@ var ImageUpload = react.forwardRef(function ImageUpload2({
|
|
|
11057
12342
|
shape = "circle",
|
|
11058
12343
|
size = 96,
|
|
11059
12344
|
label,
|
|
11060
|
-
hint
|
|
12345
|
+
hint: hintProp,
|
|
11061
12346
|
onPick,
|
|
11062
12347
|
onRemove,
|
|
11063
12348
|
disabled = false,
|
|
@@ -11066,6 +12351,7 @@ var ImageUpload = react.forwardRef(function ImageUpload2({
|
|
|
11066
12351
|
...props
|
|
11067
12352
|
}, ref) {
|
|
11068
12353
|
const { imageUpload } = useLocale();
|
|
12354
|
+
const hint = hintProp ?? imageUpload.hint;
|
|
11069
12355
|
const [over, setOver] = react.useState(false);
|
|
11070
12356
|
const inputRef = react.useRef(null);
|
|
11071
12357
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: chunkTPGAXYFU_cjs.cx("klun-image-upload", className), style, ...props, children: [
|
|
@@ -11673,17 +12959,20 @@ var RichEditor = react.forwardRef(function RichEditor2({
|
|
|
11673
12959
|
value,
|
|
11674
12960
|
defaultValue = "",
|
|
11675
12961
|
onChange,
|
|
11676
|
-
placeholder
|
|
12962
|
+
placeholder: placeholderProp,
|
|
11677
12963
|
disabled = false,
|
|
11678
12964
|
hideToolbar = false,
|
|
11679
12965
|
minHeight = 160,
|
|
11680
12966
|
maxHeight,
|
|
11681
12967
|
allowSource = true,
|
|
11682
|
-
editorLabel
|
|
12968
|
+
editorLabel: editorLabelProp,
|
|
11683
12969
|
className,
|
|
11684
12970
|
style,
|
|
11685
12971
|
...props
|
|
11686
12972
|
}, ref) {
|
|
12973
|
+
const { richEditor: localeRich } = useLocale();
|
|
12974
|
+
const placeholder = placeholderProp ?? localeRich.placeholder;
|
|
12975
|
+
const editorLabel = editorLabelProp ?? localeRich.editorLabel;
|
|
11687
12976
|
const editorRef = react.useRef(null);
|
|
11688
12977
|
const [active, setActive] = react.useState([]);
|
|
11689
12978
|
const [source, setSource] = react.useState(false);
|
|
@@ -11804,7 +13093,10 @@ var Select = react.forwardRef(function Select2({
|
|
|
11804
13093
|
const rootRef = react.useRef(null);
|
|
11805
13094
|
const s = useSelect({ children, value, defaultValue, disabled: disabled || loading, rootRef });
|
|
11806
13095
|
const { select: selectLocale } = useLocale();
|
|
11807
|
-
const
|
|
13096
|
+
const generatedId = react.useId();
|
|
13097
|
+
const listboxId = `${generatedId}listbox`;
|
|
13098
|
+
const optionId = (index) => `${listboxId}-option-${index}`;
|
|
13099
|
+
const fallbackLabel = !ariaLabel && !ariaLabelledBy ? placeholder || selectLocale?.placeholder || "Select" : void 0;
|
|
11808
13100
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: rootRef, className: chunkTPGAXYFU_cjs.cx("klun-select", `klun-select--${size}`, className), style, children: [
|
|
11809
13101
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
11810
13102
|
"button",
|
|
@@ -11814,8 +13106,11 @@ var Select = react.forwardRef(function Select2({
|
|
|
11814
13106
|
disabled,
|
|
11815
13107
|
onClick: s.toggle,
|
|
11816
13108
|
onKeyDown: s.triggerKeyDown,
|
|
13109
|
+
role: "combobox",
|
|
11817
13110
|
"aria-haspopup": "listbox",
|
|
11818
13111
|
"aria-expanded": s.open,
|
|
13112
|
+
"aria-controls": s.open ? listboxId : void 0,
|
|
13113
|
+
"aria-activedescendant": s.open && s.active >= 0 ? optionId(s.active) : void 0,
|
|
11819
13114
|
"aria-label": ariaLabel ?? fallbackLabel,
|
|
11820
13115
|
"aria-labelledby": ariaLabelledBy,
|
|
11821
13116
|
"data-open": s.open || void 0,
|
|
@@ -11855,6 +13150,8 @@ var Select = react.forwardRef(function Select2({
|
|
|
11855
13150
|
s.open ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
11856
13151
|
SelectListbox,
|
|
11857
13152
|
{
|
|
13153
|
+
id: listboxId,
|
|
13154
|
+
optionId,
|
|
11858
13155
|
anchorRef: s.triggerRef,
|
|
11859
13156
|
options: s.options,
|
|
11860
13157
|
current: s.current,
|
|
@@ -11876,7 +13173,7 @@ var SelectMenu = react.forwardRef(
|
|
|
11876
13173
|
leadingIcon,
|
|
11877
13174
|
error = false,
|
|
11878
13175
|
disabled = false,
|
|
11879
|
-
align = "
|
|
13176
|
+
align = "start",
|
|
11880
13177
|
className,
|
|
11881
13178
|
style,
|
|
11882
13179
|
...props
|
|
@@ -12556,6 +13853,7 @@ function computeSizes(panels, containerPx) {
|
|
|
12556
13853
|
return sizes;
|
|
12557
13854
|
}
|
|
12558
13855
|
var SplitterRoot = react.forwardRef(function Splitter({ layout = "horizontal", onResize, onResizeEnd, className, children, ...props }, forwardedRef) {
|
|
13856
|
+
const { a11y } = useLocale();
|
|
12559
13857
|
const containerRef = react.useRef(null);
|
|
12560
13858
|
const setRefs = react.useCallback(
|
|
12561
13859
|
(node) => {
|
|
@@ -12774,7 +14072,7 @@ var SplitterRoot = react.forwardRef(function Splitter({ layout = "horizontal", o
|
|
|
12774
14072
|
{
|
|
12775
14073
|
type: "button",
|
|
12776
14074
|
className: "klun-splitter__collapse klun-splitter__collapse--start",
|
|
12777
|
-
"aria-label":
|
|
14075
|
+
"aria-label": a11y.collapseStart,
|
|
12778
14076
|
tabIndex: -1,
|
|
12779
14077
|
onPointerDown: (e) => e.stopPropagation(),
|
|
12780
14078
|
onClick: () => collapseToggle(i, i),
|
|
@@ -12786,7 +14084,7 @@ var SplitterRoot = react.forwardRef(function Splitter({ layout = "horizontal", o
|
|
|
12786
14084
|
{
|
|
12787
14085
|
type: "button",
|
|
12788
14086
|
className: "klun-splitter__collapse klun-splitter__collapse--end",
|
|
12789
|
-
"aria-label":
|
|
14087
|
+
"aria-label": a11y.collapseEnd,
|
|
12790
14088
|
tabIndex: -1,
|
|
12791
14089
|
onPointerDown: (e) => e.stopPropagation(),
|
|
12792
14090
|
onClick: () => collapseToggle(i, i + 1),
|
|
@@ -13018,6 +14316,7 @@ var PageHeader = react.forwardRef(function PageHeader2({
|
|
|
13018
14316
|
children,
|
|
13019
14317
|
...props
|
|
13020
14318
|
}, ref) {
|
|
14319
|
+
const { a11y } = useLocale();
|
|
13021
14320
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13022
14321
|
"header",
|
|
13023
14322
|
{
|
|
@@ -13039,7 +14338,7 @@ var PageHeader = react.forwardRef(function PageHeader2({
|
|
|
13039
14338
|
appearance: "ghost",
|
|
13040
14339
|
variant: "neutral",
|
|
13041
14340
|
size: "small",
|
|
13042
|
-
"aria-label":
|
|
14341
|
+
"aria-label": a11y.back,
|
|
13043
14342
|
className: "klun-page-header__back",
|
|
13044
14343
|
icon: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-arrow-left-line", "aria-hidden": true }),
|
|
13045
14344
|
onClick: onBack
|
|
@@ -13231,7 +14530,7 @@ var Sidebar = react.forwardRef(function Sidebar2({
|
|
|
13231
14530
|
onSelect,
|
|
13232
14531
|
defaultExpandedKeys = [],
|
|
13233
14532
|
searchable = false,
|
|
13234
|
-
searchPlaceholder
|
|
14533
|
+
searchPlaceholder: searchPlaceholderProp,
|
|
13235
14534
|
onSearch,
|
|
13236
14535
|
collapsed: collapsedProp,
|
|
13237
14536
|
defaultCollapsed = false,
|
|
@@ -13239,6 +14538,8 @@ var Sidebar = react.forwardRef(function Sidebar2({
|
|
|
13239
14538
|
className,
|
|
13240
14539
|
...props
|
|
13241
14540
|
}, ref) {
|
|
14541
|
+
const { sidebar: localeSidebar } = useLocale();
|
|
14542
|
+
const searchPlaceholder = searchPlaceholderProp ?? localeSidebar.searchPlaceholder;
|
|
13242
14543
|
const [internalNav, setInternalNav] = react.useState(defaultNavKey);
|
|
13243
14544
|
const [internalCollapsed, setInternalCollapsed] = react.useState(defaultCollapsed);
|
|
13244
14545
|
const [expandedKeys, setExpandedKeys] = react.useState(
|
|
@@ -13274,7 +14575,7 @@ var Sidebar = react.forwardRef(function Sidebar2({
|
|
|
13274
14575
|
"data-collapsed": collapsed ? "" : void 0,
|
|
13275
14576
|
...props,
|
|
13276
14577
|
children: [
|
|
13277
|
-
/* @__PURE__ */ jsxRuntime.jsxs("nav", { className: "klun-sidebar__rail", "aria-label":
|
|
14578
|
+
/* @__PURE__ */ jsxRuntime.jsxs("nav", { className: "klun-sidebar__rail", "aria-label": localeSidebar.primary, children: [
|
|
13278
14579
|
brand != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-sidebar__brand", children: brand }),
|
|
13279
14580
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-sidebar__nav", children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
13280
14581
|
RailButton,
|
|
@@ -13321,6 +14622,7 @@ var Sidebar = react.forwardRef(function Sidebar2({
|
|
|
13321
14622
|
type: "text",
|
|
13322
14623
|
className: "klun-sidebar__search-input",
|
|
13323
14624
|
placeholder: searchPlaceholder,
|
|
14625
|
+
"aria-label": searchPlaceholder,
|
|
13324
14626
|
value: query,
|
|
13325
14627
|
tabIndex: collapsed ? -1 : 0,
|
|
13326
14628
|
onChange: (e) => {
|
|
@@ -13690,6 +14992,7 @@ var Wizard = react.forwardRef(function Wizard2({
|
|
|
13690
14992
|
className,
|
|
13691
14993
|
...props
|
|
13692
14994
|
}, ref) {
|
|
14995
|
+
const { wizard } = useLocale();
|
|
13693
14996
|
const isControlled = current !== void 0;
|
|
13694
14997
|
const [internal, setInternal] = react.useState(defaultCurrent);
|
|
13695
14998
|
const idx = isControlled ? current : internal;
|
|
@@ -13734,7 +15037,7 @@ var Wizard = react.forwardRef(function Wizard2({
|
|
|
13734
15037
|
className: "klun-wizard__nav",
|
|
13735
15038
|
onClick: () => go(idx - 1),
|
|
13736
15039
|
disabled: idx === 0,
|
|
13737
|
-
children:
|
|
15040
|
+
children: wizard.back
|
|
13738
15041
|
}
|
|
13739
15042
|
),
|
|
13740
15043
|
!isLast ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -13743,7 +15046,7 @@ var Wizard = react.forwardRef(function Wizard2({
|
|
|
13743
15046
|
type: "button",
|
|
13744
15047
|
className: "klun-wizard__nav klun-wizard__nav--primary",
|
|
13745
15048
|
onClick: () => go(idx + 1),
|
|
13746
|
-
children:
|
|
15049
|
+
children: wizard.next
|
|
13747
15050
|
}
|
|
13748
15051
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
13749
15052
|
"button",
|
|
@@ -13751,7 +15054,7 @@ var Wizard = react.forwardRef(function Wizard2({
|
|
|
13751
15054
|
type: "button",
|
|
13752
15055
|
className: "klun-wizard__nav klun-wizard__nav--primary",
|
|
13753
15056
|
onClick: () => onFinish?.(),
|
|
13754
|
-
children:
|
|
15057
|
+
children: wizard.finish
|
|
13755
15058
|
}
|
|
13756
15059
|
)
|
|
13757
15060
|
] })
|
|
@@ -13838,13 +15141,14 @@ var INTENT_ICON = {
|
|
|
13838
15141
|
warning: "ri-alert-line"
|
|
13839
15142
|
};
|
|
13840
15143
|
function ConfirmDialog({ opts, onClose }) {
|
|
15144
|
+
const { popconfirm } = useLocale();
|
|
13841
15145
|
const {
|
|
13842
|
-
title =
|
|
15146
|
+
title = popconfirm.title,
|
|
13843
15147
|
description,
|
|
13844
15148
|
icon,
|
|
13845
15149
|
intent = "primary",
|
|
13846
|
-
confirmText =
|
|
13847
|
-
cancelText =
|
|
15150
|
+
confirmText = popconfirm.confirm,
|
|
15151
|
+
cancelText = popconfirm.cancel,
|
|
13848
15152
|
requireInput,
|
|
13849
15153
|
onConfirm
|
|
13850
15154
|
} = opts;
|
|
@@ -13984,7 +15288,11 @@ function place(w, h, opts) {
|
|
|
13984
15288
|
let top;
|
|
13985
15289
|
if (opts.rect) {
|
|
13986
15290
|
const r = opts.rect;
|
|
13987
|
-
|
|
15291
|
+
if (opts.rtl) {
|
|
15292
|
+
left = r.left - w + 4 < GAP3 ? r.right - 4 : r.left - w + 4;
|
|
15293
|
+
} else {
|
|
15294
|
+
left = r.right - 4 + w > vw - GAP3 ? r.left - w + 4 : r.right - 4;
|
|
15295
|
+
}
|
|
13988
15296
|
top = r.top - 4;
|
|
13989
15297
|
} else {
|
|
13990
15298
|
const p = opts.point ?? { x: 0, y: 0 };
|
|
@@ -14006,7 +15314,9 @@ function MenuPanel({ items: items2, width, className, point, anchorEl, autoActiv
|
|
|
14006
15314
|
const el = ref.current;
|
|
14007
15315
|
const w = el?.offsetWidth ?? width;
|
|
14008
15316
|
const h = el?.offsetHeight ?? 0;
|
|
14009
|
-
|
|
15317
|
+
const dirHost = anchorEl ?? ref.current ?? document.body;
|
|
15318
|
+
const rtl = getComputedStyle(dirHost).direction === "rtl";
|
|
15319
|
+
setPos(place(w, h, anchorEl ? { rect: anchorEl.getBoundingClientRect(), rtl } : { point }));
|
|
14010
15320
|
}, [width, point?.x, point?.y, anchorEl, items2]);
|
|
14011
15321
|
const move = react.useCallback(
|
|
14012
15322
|
(dir) => {
|
|
@@ -14176,7 +15486,6 @@ var Drawer = react.forwardRef(function Drawer2({
|
|
|
14176
15486
|
onClose,
|
|
14177
15487
|
title,
|
|
14178
15488
|
placement,
|
|
14179
|
-
side,
|
|
14180
15489
|
width = "50%",
|
|
14181
15490
|
height = "50%",
|
|
14182
15491
|
size = "default",
|
|
@@ -14194,22 +15503,24 @@ var Drawer = react.forwardRef(function Drawer2({
|
|
|
14194
15503
|
...props
|
|
14195
15504
|
}, ref) {
|
|
14196
15505
|
const { drawer } = useLocale();
|
|
14197
|
-
const place2 = placement ??
|
|
15506
|
+
const place2 = placement ?? "right";
|
|
14198
15507
|
const horizontal = place2 === "left" || place2 === "right";
|
|
14199
15508
|
const prevOpen = react.useRef(open);
|
|
14200
|
-
|
|
14201
|
-
|
|
14202
|
-
|
|
14203
|
-
|
|
14204
|
-
|
|
14205
|
-
|
|
14206
|
-
|
|
14207
|
-
|
|
14208
|
-
|
|
14209
|
-
|
|
14210
|
-
|
|
14211
|
-
|
|
14212
|
-
|
|
15509
|
+
const scope = useOverlayScope({
|
|
15510
|
+
active: open,
|
|
15511
|
+
escapeEnabled: keyboard && closable,
|
|
15512
|
+
onEscape: onClose
|
|
15513
|
+
});
|
|
15514
|
+
const scopeRef = scope.ref;
|
|
15515
|
+
const titleId = `${react.useId()}title`;
|
|
15516
|
+
const attachPanelRef = react.useCallback(
|
|
15517
|
+
(el) => {
|
|
15518
|
+
scopeRef(el);
|
|
15519
|
+
if (typeof ref === "function") ref(el);
|
|
15520
|
+
else if (ref) ref.current = el;
|
|
15521
|
+
},
|
|
15522
|
+
[ref, scopeRef]
|
|
15523
|
+
);
|
|
14213
15524
|
react.useEffect(() => {
|
|
14214
15525
|
if (prevOpen.current !== open) {
|
|
14215
15526
|
afterOpenChange?.(open);
|
|
@@ -14228,16 +15539,18 @@ var Drawer = react.forwardRef(function Drawer2({
|
|
|
14228
15539
|
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
14229
15540
|
"div",
|
|
14230
15541
|
{
|
|
14231
|
-
ref,
|
|
15542
|
+
ref: attachPanelRef,
|
|
14232
15543
|
role: "dialog",
|
|
14233
15544
|
"aria-modal": "true",
|
|
15545
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
15546
|
+
tabIndex: -1,
|
|
14234
15547
|
onClick: (e) => e.stopPropagation(),
|
|
14235
15548
|
className: chunkTPGAXYFU_cjs.cx("klun-drawer__panel", className),
|
|
14236
15549
|
style: panelStyle,
|
|
14237
15550
|
...props,
|
|
14238
15551
|
children: [
|
|
14239
15552
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-drawer__header", children: [
|
|
14240
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-drawer__title", children: title }),
|
|
15553
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-drawer__title", id: title ? titleId : void 0, children: title }),
|
|
14241
15554
|
extra ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-drawer__extra", children: extra }) : null,
|
|
14242
15555
|
closable ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onClose, "aria-label": drawer.close, className: "klun-drawer__close", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 5l10 10M15 5L5 15", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }) : null
|
|
14243
15556
|
] }),
|
|
@@ -14250,7 +15563,7 @@ var Drawer = react.forwardRef(function Drawer2({
|
|
|
14250
15563
|
);
|
|
14251
15564
|
});
|
|
14252
15565
|
Drawer.displayName = "Drawer";
|
|
14253
|
-
var Dropdown = react.forwardRef(function Dropdown2({ trigger, items: items2 = [], align = "
|
|
15566
|
+
var Dropdown = react.forwardRef(function Dropdown2({ trigger, items: items2 = [], align = "start", width = 220, className, ...props }, ref) {
|
|
14254
15567
|
const [open, setOpen] = react.useState(false);
|
|
14255
15568
|
const innerRef = react.useRef(null);
|
|
14256
15569
|
react.useEffect(() => {
|
|
@@ -14525,6 +15838,7 @@ function ImageViewer({
|
|
|
14525
15838
|
closeOnBackdrop = true,
|
|
14526
15839
|
className
|
|
14527
15840
|
}) {
|
|
15841
|
+
const { a11y, imageViewer, modal, pagination } = useLocale();
|
|
14528
15842
|
const gallery = items2 && items2.length > 0 ? items2 : src != null ? [{ src, alt }] : [];
|
|
14529
15843
|
const [innerIndex, setInnerIndex] = react.useState(0);
|
|
14530
15844
|
const idx = index ?? innerIndex;
|
|
@@ -14613,20 +15927,20 @@ function ImageViewer({
|
|
|
14613
15927
|
] }),
|
|
14614
15928
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "klun-image-viewer__tools", children: [
|
|
14615
15929
|
zoomable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
14616
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
15930
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": a11y.zoomOut, onClick: () => setScale((s) => clampScale(s - 0.25)), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-zoom-out-line" }) }),
|
|
14617
15931
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "klun-image-viewer__zoom", children: [
|
|
14618
15932
|
Math.round(scale * 100),
|
|
14619
15933
|
"%"
|
|
14620
15934
|
] }),
|
|
14621
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
15935
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": a11y.zoomIn, onClick: () => setScale((s) => clampScale(s + 0.25)), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-zoom-in-line" }) })
|
|
14622
15936
|
] }) : null,
|
|
14623
|
-
rotatable ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
14624
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
14625
|
-
onDownload ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
14626
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label":
|
|
15937
|
+
rotatable ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": a11y.rotate, onClick: () => setRot((r) => (r + 90) % 360), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-anticlockwise-line" }) }) : null,
|
|
15938
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": imageViewer.reset, onClick: reset, children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-aspect-ratio-line" }) }),
|
|
15939
|
+
onDownload ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": imageViewer.download, onClick: () => onDownload(current, safeIdx), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-download-2-line" }) }) : null,
|
|
15940
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__btn", "aria-label": modal.close, onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-close-line" }) })
|
|
14627
15941
|
] })
|
|
14628
15942
|
] }),
|
|
14629
|
-
gallery.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__nav klun-image-viewer__nav--prev", "aria-label":
|
|
15943
|
+
gallery.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__nav klun-image-viewer__nav--prev", "aria-label": pagination.previous, onMouseDown: (e) => e.stopPropagation(), onClick: () => goTo(safeIdx - 1), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-arrow-left-s-line" }) }) : null,
|
|
14630
15944
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "klun-image-viewer__stage", onMouseDown: (e) => e.stopPropagation(), onWheel, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14631
15945
|
"img",
|
|
14632
15946
|
{
|
|
@@ -14639,7 +15953,7 @@ function ImageViewer({
|
|
|
14639
15953
|
style: { transform: `translate(${pan.x}px, ${pan.y}px) scale(${scale}) rotate(${rot}deg)` }
|
|
14640
15954
|
}
|
|
14641
15955
|
) }),
|
|
14642
|
-
gallery.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__nav klun-image-viewer__nav--next", "aria-label":
|
|
15956
|
+
gallery.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "klun-image-viewer__nav klun-image-viewer__nav--next", "aria-label": pagination.next, onMouseDown: (e) => e.stopPropagation(), onClick: () => goTo(safeIdx + 1), children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-arrow-right-s-line" }) }) : null
|
|
14643
15957
|
]
|
|
14644
15958
|
}
|
|
14645
15959
|
),
|
|
@@ -14953,6 +16267,7 @@ exports.Money = Money;
|
|
|
14953
16267
|
exports.NavigationProgress = NavigationProgress;
|
|
14954
16268
|
exports.Notification = Notification;
|
|
14955
16269
|
exports.NumberFlow = NumberFlow;
|
|
16270
|
+
exports.OverlayLayerProvider = OverlayLayerProvider;
|
|
14956
16271
|
exports.PageHeader = PageHeader;
|
|
14957
16272
|
exports.Pagination = Pagination;
|
|
14958
16273
|
exports.PasswordStrength = PasswordStrength;
|
|
@@ -14971,6 +16286,7 @@ exports.Result = Result;
|
|
|
14971
16286
|
exports.RichEditor = RichEditor;
|
|
14972
16287
|
exports.RichEditorToolbar = RichEditorToolbar;
|
|
14973
16288
|
exports.Row = Row;
|
|
16289
|
+
exports.SIZE_CONTRACTS = SIZE_CONTRACTS;
|
|
14974
16290
|
exports.SegmentedControl = SegmentedControl;
|
|
14975
16291
|
exports.SegmentedProgress = SegmentedProgress;
|
|
14976
16292
|
exports.Select = Select;
|
|
@@ -15038,23 +16354,29 @@ exports.ptBR = ptBR;
|
|
|
15038
16354
|
exports.renderMarkdown = renderMarkdown;
|
|
15039
16355
|
exports.reorderRows = reorderRows;
|
|
15040
16356
|
exports.resolveMove = resolveMove;
|
|
16357
|
+
exports.resolveSize = resolveSize;
|
|
15041
16358
|
exports.ruRU = ruRU;
|
|
15042
16359
|
exports.summarizeHeatmap = summarizeHeatmap;
|
|
16360
|
+
exports.tierOf = tierOf;
|
|
15043
16361
|
exports.toast = toast;
|
|
15044
16362
|
exports.trTR = trTR;
|
|
15045
16363
|
exports.useBreakpoint = useBreakpoint;
|
|
15046
16364
|
exports.useConfig = useConfig;
|
|
15047
16365
|
exports.useContextMenu = useContextMenu;
|
|
16366
|
+
exports.useDensity = useDensity;
|
|
15048
16367
|
exports.useForm = useForm;
|
|
15049
16368
|
exports.useLocale = useLocale;
|
|
15050
16369
|
exports.useMappedSize = useMappedSize;
|
|
15051
16370
|
exports.useMessage = useMessage;
|
|
15052
16371
|
exports.useNotification = useNotification;
|
|
16372
|
+
exports.useOverlayLayer = useOverlayLayer;
|
|
16373
|
+
exports.useOverlayScope = useOverlayScope;
|
|
16374
|
+
exports.useScaleSize = useScaleSize;
|
|
15053
16375
|
exports.useSize = useSize;
|
|
15054
16376
|
exports.useStepItem = useStepItem;
|
|
15055
16377
|
exports.useStepper = useStepper;
|
|
15056
16378
|
exports.viVN = viVN;
|
|
15057
16379
|
exports.zhCN = zhCN;
|
|
15058
16380
|
exports.zhTW = zhTW;
|
|
15059
|
-
//# sourceMappingURL=chunk-
|
|
15060
|
-
//# sourceMappingURL=chunk-
|
|
16381
|
+
//# sourceMappingURL=chunk-DW4IUUWE.cjs.map
|
|
16382
|
+
//# sourceMappingURL=chunk-DW4IUUWE.cjs.map
|