@dsh-workbench/core 0.1.1 → 0.1.3
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/README.md +2 -2
- package/client.js +2236 -701
- package/dist/client/client.body.js +2235 -700
- package/dist/client/index.js +2228 -693
- package/dist/host/index.js +728 -2047
- package/dist/types/app/client.d.ts +774 -69
- package/dist/types/app/layouts/market/AddModuleDialog.d.ts +8 -0
- package/dist/types/app/layouts/market/AddModuleForm.d.ts +6 -0
- package/dist/types/app/layouts/market/AddModuleRegistry.d.ts +6 -0
- package/dist/types/app/layouts/market/AddModuleStages.d.ts +14 -0
- package/dist/types/app/layouts/market/SafetyNote.d.ts +4 -0
- package/dist/types/app/layouts/market/__tests__/add-module-mock.test.d.ts +1 -0
- package/dist/types/app/layouts/market/__tests__/add-module-text.test.d.ts +1 -0
- package/dist/types/app/layouts/market/add-module-mock.d.ts +15 -0
- package/dist/types/app/layouts/market/add-module-text.d.ts +31 -0
- package/dist/types/app/layouts/market/panel.d.ts +2 -2
- package/dist/types/app/layouts/market/use-add-module.d.ts +49 -0
- package/dist/types/app/layouts/rightbar/MarketView.d.ts +6 -1
- package/dist/types/app/layouts/rightbar/__tests__/market-installed.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/market-mock.d.ts +11 -4
- package/dist/types/app/layouts/rightbar/market-rows.d.ts +19 -5
- package/dist/types/app/units/__tests__/fixture-unit-mock.test.d.ts +1 -0
- package/dist/types/app/units/fixture-unit-mock.d.ts +5 -0
- package/dist/types/app/units/registry.d.ts +2 -1
- package/dist/types/modules/panels/__tests__/market-bundle.test.d.ts +1 -0
- package/dist/types/modules/panels/__tests__/market-dispatch.test.d.ts +1 -0
- package/dist/types/modules/panels/model/handoff.d.ts +1 -1
- package/dist/types/modules/panels/model/market-dependency.d.ts +1 -1
- package/dist/types/modules/panels/model/market-dispatch.d.ts +19 -1
- package/dist/types/modules/panels/model/market.d.ts +39 -0
- package/dist/types/shared/api/bundle-install.d.ts +97 -0
- package/dist/types/shared/api/dsh-plugins.d.ts +11 -0
- package/dist/types/shared/api/dsh-plugins.test.d.ts +1 -0
- package/dist/types/shared/api/host/bundle-manager.d.ts +10 -0
- package/dist/types/shared/api/host/bundle-manager.test.d.ts +1 -0
- package/dist/types/shared/api/host/bundle-routes.d.ts +5 -0
- package/dist/types/shared/api/host/bundle-routes.test.d.ts +1 -0
- package/dist/types/shared/api/host/context-inject.d.ts +1 -1
- package/dist/types/shared/api/host/dsh-plugins.d.ts +5 -0
- package/dist/types/shared/api/host/dsh-plugins.test.d.ts +1 -0
- package/dist/types/shared/api/host/installed-module.d.ts +22 -0
- package/dist/types/shared/api/host/installed-module.test.d.ts +1 -0
- package/dist/types/shared/api/host/mount-units.d.ts +1 -1
- package/dist/types/shared/api/host/probe-libs.d.ts +1 -1
- package/dist/types/shared/components/PanelFoot.d.ts +7 -0
- package/dist/types/shared/hooks/bundle-queries.d.ts +5 -0
- package/docs/OPERATIONS.md +10 -2
- package/package.json +4 -3
|
@@ -11,6 +11,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
11
11
|
return target;
|
|
12
12
|
};
|
|
13
13
|
//#endregion
|
|
14
|
+
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
14
15
|
//#region ../shared/dist/lib/ui.js
|
|
15
16
|
function cx(...parts) {
|
|
16
17
|
return parts.filter(Boolean).join(" ");
|
|
@@ -518,235 +519,43 @@ function ApprovalDetail(props) {
|
|
|
518
519
|
input,
|
|
519
520
|
t
|
|
520
521
|
});
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
height: size,
|
|
529
|
-
viewBox,
|
|
530
|
-
fill: "none",
|
|
531
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
532
|
-
"aria-hidden": "true",
|
|
533
|
-
strokeWidth,
|
|
534
|
-
style: { display: "block" }
|
|
535
|
-
}, children);
|
|
536
|
-
}
|
|
537
|
-
function IconPanelLeft({ size = 16 }) {
|
|
538
|
-
return h(Shell, { size }, h("path", {
|
|
539
|
-
d: "M13.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V13.5C1.5 14.0523 1.94772 14.5 2.5 14.5H13.5C14.0523 14.5 14.5 14.0523 14.5 13.5V2.5C14.5 1.94772 14.0523 1.5 13.5 1.5Z",
|
|
540
|
-
stroke: "currentColor"
|
|
541
|
-
}), h("path", {
|
|
542
|
-
d: "M5.5 1.5V14.5",
|
|
543
|
-
stroke: "currentColor"
|
|
544
|
-
}));
|
|
545
|
-
}
|
|
546
|
-
function IconFolder({ size = 16 }) {
|
|
547
|
-
return h(Shell, { size }, h("path", {
|
|
548
|
-
d: "M1.50439 3.11059C1.50439 2.55831 1.95211 2.1106 2.50439 2.1106H5.43389C5.67773 2.1106 5.91318 2.19969 6.09593 2.36113L7.71649 3.79265C7.89924 3.95409 8.1347 4.04319 8.3785 4.04319H13.4958C14.0481 4.04319 14.4958 4.4909 14.4958 5.04319V12.8894C14.4958 13.4417 14.0481 13.8894 13.4958 13.8894H2.50439C1.95211 13.8894 1.50439 13.4417 1.50439 12.8894V4.04319V3.11059Z",
|
|
549
|
-
stroke: "currentColor"
|
|
550
|
-
}), h("path", {
|
|
551
|
-
d: "M3.63501 7.66614H12.3647",
|
|
552
|
-
stroke: "currentColor"
|
|
553
|
-
}));
|
|
554
|
-
}
|
|
555
|
-
function IconFolderOpen({ size = 16 }) {
|
|
556
|
-
return h(Shell, { size }, h("path", {
|
|
557
|
-
d: "M2.55912 7.93683C2.67584 7.49906 3.0723 7.19446 3.52536 7.19446H13.6491C14.3061 7.19446 14.7846 7.81725 14.6153 8.45209L13.4411 12.856C13.3244 13.2938 12.9279 13.5984 12.4748 13.5984H2.35113C1.69411 13.5984 1.21562 12.9756 1.38489 12.3407L2.55912 7.93683Z",
|
|
558
|
-
fill: "currentColor",
|
|
559
|
-
opacity: .16
|
|
560
|
-
}), h("path", {
|
|
561
|
-
d: "M13.6491 6.69446C14.6346 6.69453 15.3522 7.62895 15.0983 8.58118L13.9245 12.9845C13.7494 13.6412 13.1539 14.0988 12.4743 14.0988H2.35126C1.36574 14.0988 0.648153 13.1643 0.902044 12.212L2.07587 7.80774C2.25102 7.15128 2.84567 6.69455 3.52509 6.69446H13.6491ZM3.52509 7.69446C3.29865 7.69455 3.10004 7.84674 3.04169 8.06555L1.86786 12.4698C1.78345 12.7872 2.02285 13.0988 2.35126 13.0988H12.4743C12.7007 13.0988 12.8992 12.9463 12.9577 12.7277L14.1325 8.32336C14.2171 8.00598 13.9776 7.69453 13.6491 7.69446H3.52509Z",
|
|
562
|
-
fill: "currentColor"
|
|
563
|
-
}), h("path", {
|
|
564
|
-
d: "M4.7666 1.90137C5.13227 1.90144 5.48571 2.03525 5.75977 2.27734L7.27246 3.61328C7.36379 3.69382 7.48174 3.73828 7.60352 3.73828H12.3994C13.2276 3.73841 13.8993 4.41005 13.8994 5.23828V6.7168C13.8183 6.70327 13.735 6.69436 13.6494 6.69434H12.8994V5.23828C12.8993 4.96233 12.6754 4.73841 12.3994 4.73828H7.60352C7.23781 4.73828 6.88446 4.60438 6.61035 4.3623L5.09766 3.02637C5.00636 2.94576 4.88838 2.90144 4.7666 2.90137H2.0498C1.77366 2.90137 1.5498 3.12523 1.5498 3.40137V9.78223L0.902344 12.2119C0.648452 13.1642 1.36604 14.0986 2.35156 14.0986H2.0498C1.2214 14.0986 0.549838 13.427 0.549805 12.5986V3.40137C0.549805 2.57294 1.22138 1.90137 2.0498 1.90137H4.7666Z",
|
|
565
|
-
fill: "currentColor"
|
|
566
|
-
}));
|
|
567
|
-
}
|
|
568
|
-
function IconChevronDown({ size = 14 }) {
|
|
569
|
-
return h(Shell, { size }, h("path", {
|
|
570
|
-
d: "M4 6L7.29289 9.29289C7.68342 9.68342 8.31658 9.68342 8.70711 9.29289L12 6",
|
|
571
|
-
stroke: "currentColor"
|
|
572
|
-
}));
|
|
573
|
-
}
|
|
574
|
-
function IconPlus({ size = 16 }) {
|
|
575
|
-
return h(Shell, { size }, h("path", {
|
|
576
|
-
d: "M8 2V14",
|
|
577
|
-
stroke: "currentColor"
|
|
578
|
-
}), h("path", {
|
|
579
|
-
d: "M2 8H14",
|
|
580
|
-
stroke: "currentColor"
|
|
581
|
-
}));
|
|
582
|
-
}
|
|
583
|
-
function IconEllipsis({ size = 16 }) {
|
|
584
|
-
return h(Shell, { size }, h("path", {
|
|
585
|
-
d: "M3 9C3.55228 9 4 8.55228 4 8C4 7.44772 3.55228 7 3 7C2.44772 7 2 7.44772 2 8C2 8.55228 2.44772 9 3 9Z",
|
|
586
|
-
fill: "currentColor"
|
|
587
|
-
}), h("path", {
|
|
588
|
-
d: "M8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9Z",
|
|
589
|
-
fill: "currentColor"
|
|
590
|
-
}), h("path", {
|
|
591
|
-
d: "M13 9C13.5523 9 14 8.55228 14 8C14 7.44772 13.5523 7 13 7C12.4477 7 12 7.44772 12 8C12 8.55228 12.4477 9 13 9Z",
|
|
592
|
-
fill: "currentColor"
|
|
593
|
-
}));
|
|
594
|
-
}
|
|
595
|
-
function IconSettings({ size = 16 }) {
|
|
596
|
-
return h(Shell, { size }, h("path", {
|
|
597
|
-
d: "M8 9.75012C8.9665 9.75012 9.75 8.96662 9.75 8.00012C9.75 7.03362 8.9665 6.25012 8 6.25012C7.0335 6.25012 6.25 7.03362 6.25 8.00012C6.25 8.96662 7.0335 9.75012 8 9.75012Z",
|
|
598
|
-
stroke: "currentColor"
|
|
599
|
-
}), h("path", {
|
|
600
|
-
d: "M13.0107 7.79377C12.9505 7.89401 12.9205 7.94413 12.9205 7.99951C12.9205 8.0549 12.9505 8.10502 13.0106 8.20528L13.9849 9.83006C14.045 9.93029 14.0751 9.9804 14.0751 10.0358C14.0751 10.0911 14.045 10.1413 13.9849 10.2415L13.0037 11.8777C12.9468 11.9726 12.9184 12.0201 12.8725 12.0461C12.8267 12.072 12.7713 12.072 12.6607 12.072H10.6704C10.5598 12.072 10.5045 12.072 10.4586 12.098C10.4128 12.1239 10.3843 12.1714 10.3274 12.2662L9.33825 13.9142C9.28133 14.009 9.25287 14.0564 9.20703 14.0823C9.16118 14.1083 9.10588 14.1083 8.99529 14.1083H7.00486C6.89426 14.1083 6.83896 14.1083 6.79312 14.0823C6.74727 14.0564 6.71881 14.009 6.6619 13.9142L5.67273 12.2662C5.61581 12.1714 5.58735 12.1239 5.54151 12.098C5.49566 12.072 5.44036 12.072 5.32977 12.072H3.33945C3.2288 12.072 3.17347 12.072 3.12761 12.0461C3.08176 12.0201 3.0533 11.9726 2.9964 11.8777L2.0152 10.2415C1.9551 10.1413 1.92505 10.0911 1.92505 10.0358C1.92505 9.9804 1.9551 9.93029 2.0152 9.83006L2.98951 8.20528C3.04963 8.10502 3.07969 8.0549 3.07969 7.99951C3.07968 7.94413 3.04961 7.89401 2.98946 7.79377L2.01529 6.17011C1.95514 6.06987 1.92507 6.01975 1.92507 5.96437C1.92506 5.90899 1.95512 5.85886 2.01524 5.7586L2.9964 4.1224C3.0533 4.0275 3.08176 3.98005 3.12761 3.95408C3.17347 3.92811 3.2288 3.92811 3.33945 3.92811H5.32977C5.44036 3.92811 5.49566 3.92811 5.54151 3.90216C5.58735 3.87621 5.61581 3.82879 5.67273 3.73397L6.6619 2.08599C6.71881 1.99116 6.74727 1.94375 6.79312 1.9178C6.83896 1.89185 6.89426 1.89185 7.00486 1.89185H8.99529C9.10588 1.89185 9.16118 1.89185 9.20703 1.9178C9.25287 1.94375 9.28133 1.99116 9.33825 2.08599L10.3274 3.73397C10.3843 3.82879 10.4128 3.87621 10.4586 3.90216C10.5045 3.92811 10.5598 3.92811 10.6704 3.92811H12.6607C12.7713 3.92811 12.8267 3.92811 12.8725 3.95408C12.9184 3.98005 12.9468 4.0275 13.0037 4.1224L13.9849 5.7586C14.045 5.85886 14.0751 5.90899 14.0751 5.96437C14.0751 6.01975 14.045 6.06987 13.9849 6.17011L13.0107 7.79377Z",
|
|
601
|
-
stroke: "currentColor",
|
|
602
|
-
strokeMiterlimit: 10
|
|
603
|
-
}));
|
|
604
|
-
}
|
|
605
|
-
function IconPin({ size = 16 }) {
|
|
606
|
-
return h(Shell, { size }, h("path", {
|
|
607
|
-
d: "M9.96976 1.70572L13.1554 3.93629L10.9019 8.12317L11.5158 11.605L10.7192 12.7427L2.52767 7.00693L3.3243 5.86922L6.80612 5.25528L9.96976 1.70572Z",
|
|
608
|
-
fill: "currentColor",
|
|
609
|
-
stroke: "currentColor",
|
|
610
|
-
strokeLinejoin: "round"
|
|
611
|
-
}), h("path", {
|
|
612
|
-
d: "M6.05285 9.47511C6.27284 9.16094 6.70586 9.08458 7.02003 9.30457C7.3342 9.52455 7.41055 9.95757 7.19057 10.2717L3.98587 14.4708L3.21223 13.9291L6.05285 9.47511Z",
|
|
613
|
-
fill: "currentColor"
|
|
614
|
-
}));
|
|
615
|
-
}
|
|
616
|
-
function IconCheck({ size = 16 }) {
|
|
617
|
-
return h(Shell, { size }, h("path", {
|
|
618
|
-
d: "M2.25 8.5L5.49732 11.7473C5.90519 12.1552 6.57263 12.1344 6.95426 11.7018L13.75 4",
|
|
619
|
-
stroke: "currentColor"
|
|
620
|
-
}));
|
|
621
|
-
}
|
|
622
|
-
function IconNewChat({ size = 14 }) {
|
|
623
|
-
return h(Shell, {
|
|
624
|
-
size,
|
|
625
|
-
strokeWidth: 1.3
|
|
626
|
-
}, h("path", {
|
|
627
|
-
d: "M2.37091 11.2501C1.58745 9.89288 1.32067 8.29835 1.61969 6.76006C1.91872 5.22177 2.76342 3.8433 3.99826 2.87846C5.2331 1.91362 6.77494 1.42737 8.33988 1.50925C9.90482 1.59113 11.3875 2.23562 12.5149 3.32406C13.6425 4.41269 14.3387 5.87206 14.4754 7.4334C14.612 8.99474 14.18 10.5529 13.2587 11.8209C12.3375 13.0888 10.9891 13.9813 9.46194 14.3337C8.18691 14.628 6.85895 14.5294 5.64989 14.0605C5.1712 13.8748 4.76962 13.4932 4.26534 13.3967C3.67413 13.2835 2.95257 13.5598 2.03794 14.3337",
|
|
628
|
-
stroke: "currentColor"
|
|
629
|
-
}), h("path", {
|
|
630
|
-
d: "M8 5V11",
|
|
631
|
-
stroke: "currentColor"
|
|
632
|
-
}), h("path", {
|
|
633
|
-
d: "M5 8H11",
|
|
634
|
-
stroke: "currentColor"
|
|
635
|
-
}));
|
|
636
|
-
}
|
|
637
|
-
function IconRefresh({ size = 16 }) {
|
|
638
|
-
return h(Shell, { size }, h("path", {
|
|
639
|
-
d: "M14.5001 8C14.5 9.28552 14.1188 10.5422 13.4045 11.611C12.6903 12.6799 11.6752 13.5129 10.4875 14.0049C9.29982 14.4968 7.99295 14.6255 6.73212 14.3747C5.4713 14.124 4.31314 13.505 3.4041 12.596C2.49514 11.687 1.87614 10.5288 1.62537 9.26798C1.37459 8.00716 1.50331 6.70028 1.99525 5.51261C2.48719 4.32494 3.32025 3.30981 4.3891 2.59557C5.45795 1.88134 6.71458 1.50008 8.0001 1.5C9.9001 1.5 11.7001 2.3 13.0001 3.6L14.5001 5.1",
|
|
640
|
-
stroke: "currentColor"
|
|
641
|
-
}), h("path", {
|
|
642
|
-
d: "M14.4999 1.5V5.1H10.8999",
|
|
643
|
-
stroke: "currentColor"
|
|
644
|
-
}));
|
|
645
|
-
}
|
|
646
|
-
function IconRightUp({ size = 14 }) {
|
|
647
|
-
return h(Shell, { size }, h("path", {
|
|
648
|
-
d: "M11.7256 2.77441C12.5538 2.77469 13.2256 3.44616 13.2256 4.27441V10.1416H12.2256V4.27441C12.2256 3.99844 12.0015 3.77469 11.7256 3.77441H5.7207V2.77441H11.7256Z",
|
|
649
|
-
fill: "currentColor"
|
|
650
|
-
}), h("path", {
|
|
651
|
-
d: "M2.77441 13.2255L12.3756 3.62427",
|
|
652
|
-
stroke: "currentColor"
|
|
653
|
-
}));
|
|
654
|
-
}
|
|
655
|
-
function IconConversation({ size = 16 }) {
|
|
656
|
-
return h(Shell, {
|
|
657
|
-
size,
|
|
658
|
-
strokeWidth: 1.3
|
|
659
|
-
}, h("path", {
|
|
660
|
-
d: "M2.5 7.2c0-2.3 2.1-4.2 4.8-4.2h1.4c2.7 0 4.8 1.9 4.8 4.2s-2.1 4.2-4.8 4.2H7.5l-3.2 2v-2.3c-1.1-.8-1.8-2-1.8-3.9Z",
|
|
661
|
-
stroke: "currentColor",
|
|
662
|
-
strokeLinejoin: "round"
|
|
663
|
-
}));
|
|
664
|
-
}
|
|
665
|
-
function IconBrandMark({ size = 24 }) {
|
|
666
|
-
return h(Shell, {
|
|
667
|
-
size,
|
|
668
|
-
strokeWidth: 1.6,
|
|
669
|
-
viewBox: "0 0 24 24"
|
|
670
|
-
}, h("rect", {
|
|
671
|
-
x: 3,
|
|
672
|
-
y: 3,
|
|
673
|
-
width: 18,
|
|
674
|
-
height: 18,
|
|
675
|
-
rx: 5,
|
|
676
|
-
stroke: "currentColor"
|
|
677
|
-
}), h("path", {
|
|
678
|
-
d: "M8 9.5h8M8 12.5h8M8 15.5h5",
|
|
679
|
-
stroke: "currentColor",
|
|
680
|
-
strokeLinecap: "round"
|
|
681
|
-
}));
|
|
682
|
-
}
|
|
683
|
-
function IconModules({ size = 16 }) {
|
|
684
|
-
return h("svg", {
|
|
685
|
-
width: size,
|
|
686
|
-
height: size,
|
|
687
|
-
viewBox: "0 0 16 16",
|
|
688
|
-
fill: "none",
|
|
689
|
-
"aria-hidden": "true"
|
|
690
|
-
}, h("rect", {
|
|
691
|
-
x: "2.5",
|
|
692
|
-
y: "2.5",
|
|
693
|
-
width: "4.6",
|
|
694
|
-
height: "4.6",
|
|
695
|
-
rx: "1.2",
|
|
696
|
-
stroke: "currentColor",
|
|
697
|
-
strokeWidth: "1.2"
|
|
698
|
-
}), h("rect", {
|
|
699
|
-
x: "8.9",
|
|
700
|
-
y: "2.5",
|
|
701
|
-
width: "4.6",
|
|
702
|
-
height: "4.6",
|
|
703
|
-
rx: "1.2",
|
|
704
|
-
stroke: "currentColor",
|
|
705
|
-
strokeWidth: "1.2"
|
|
706
|
-
}), h("rect", {
|
|
707
|
-
x: "2.5",
|
|
708
|
-
y: "8.9",
|
|
709
|
-
width: "4.6",
|
|
710
|
-
height: "4.6",
|
|
711
|
-
rx: "1.2",
|
|
712
|
-
stroke: "currentColor",
|
|
713
|
-
strokeWidth: "1.2"
|
|
714
|
-
}), h("rect", {
|
|
715
|
-
x: "8.9",
|
|
716
|
-
y: "8.9",
|
|
717
|
-
width: "4.6",
|
|
718
|
-
height: "4.6",
|
|
719
|
-
rx: "1.2",
|
|
720
|
-
stroke: "currentColor",
|
|
721
|
-
strokeWidth: "1.2"
|
|
722
|
-
}));
|
|
522
|
+
if (command === "") return null;
|
|
523
|
+
return h(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
524
|
+
code: command,
|
|
525
|
+
className: "wb-approvalCommand",
|
|
526
|
+
copyLabel: t("blocker.copy"),
|
|
527
|
+
copiedLabel: t("env.copied")
|
|
528
|
+
});
|
|
723
529
|
}
|
|
724
530
|
//#endregion
|
|
725
531
|
//#region ../shared/dist/components/CardHead.js
|
|
726
532
|
function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
|
|
727
533
|
const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
|
|
728
|
-
return h("header", { className: "wb-cardHead" }, h("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 || platform === void 0 ? null : h("a", {
|
|
534
|
+
return h("header", { className: "wb-cardHead" }, h("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 || platform === void 0 ? null : h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: platformTitle ?? platform }, h("a", {
|
|
729
535
|
className: "wb-iconButton wb-cardOpen",
|
|
730
536
|
href: platformHref,
|
|
731
537
|
target: "_blank",
|
|
732
538
|
rel: "noreferrer noopener",
|
|
733
|
-
title: platformTitle ?? platform,
|
|
734
539
|
"aria-label": platform
|
|
735
|
-
}, h(
|
|
540
|
+
}, h(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: refreshLabel }, h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
736
541
|
type: "button",
|
|
737
|
-
|
|
542
|
+
size: "sm",
|
|
543
|
+
variant: "ghost",
|
|
544
|
+
className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
|
|
738
545
|
"aria-label": refreshLabel,
|
|
739
|
-
title: refreshLabel,
|
|
740
546
|
disabled: refreshing,
|
|
547
|
+
icon: h(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
|
|
741
548
|
onClick: onRefresh
|
|
742
|
-
}
|
|
549
|
+
})), gear === void 0 || onToggleGear === void 0 ? null : h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: gear }, h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
743
550
|
type: "button",
|
|
744
|
-
|
|
551
|
+
size: "sm",
|
|
552
|
+
variant: "ghost",
|
|
553
|
+
className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
|
|
745
554
|
"aria-label": gear,
|
|
746
555
|
"aria-expanded": gearOpen === true,
|
|
747
|
-
|
|
556
|
+
icon: h(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
|
|
748
557
|
onClick: onToggleGear
|
|
749
|
-
}
|
|
558
|
+
})));
|
|
750
559
|
}
|
|
751
560
|
//#endregion
|
|
752
561
|
//#region ../shared/dist/components/ChoiceGroup.js
|
|
@@ -765,59 +574,60 @@ function ChoiceGroup({ label, name, value, options, disabled, onChange }) {
|
|
|
765
574
|
}), h("span", { className: "wb-choiceLabel" }, option.label)))));
|
|
766
575
|
}
|
|
767
576
|
//#endregion
|
|
768
|
-
//#region ../shared/dist/components/StateDot.js
|
|
769
|
-
function StateDot({ state, size }) {
|
|
770
|
-
if (state === "ongoing") return h("svg", {
|
|
771
|
-
className: "wb-loading",
|
|
772
|
-
viewBox: "0 0 24 24",
|
|
773
|
-
width: size,
|
|
774
|
-
height: size,
|
|
775
|
-
"aria-hidden": "true",
|
|
776
|
-
style: { display: "block" }
|
|
777
|
-
}, h("g", { className: "wb-loadingMotion" }, h("circle", {
|
|
778
|
-
className: "wb-loadingTrack",
|
|
779
|
-
cx: 12,
|
|
780
|
-
cy: 12,
|
|
781
|
-
r: 9.5
|
|
782
|
-
}), h("circle", {
|
|
783
|
-
className: "wb-loadingArc",
|
|
784
|
-
cx: 12,
|
|
785
|
-
cy: 12,
|
|
786
|
-
r: 9.5
|
|
787
|
-
})));
|
|
788
|
-
return h("span", {
|
|
789
|
-
className: "wb-stateDot",
|
|
790
|
-
"data-state": state,
|
|
791
|
-
style: {
|
|
792
|
-
width: size,
|
|
793
|
-
height: size
|
|
794
|
-
},
|
|
795
|
-
"aria-hidden": "true"
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
|
-
//#endregion
|
|
799
577
|
//#region ../shared/dist/components/LongTaskRow.js
|
|
800
578
|
function RowLink({ href, text }) {
|
|
801
579
|
return h("a", {
|
|
802
|
-
className: "wb-
|
|
580
|
+
className: "wb-longTaskLink",
|
|
803
581
|
href,
|
|
804
582
|
target: "_blank",
|
|
805
583
|
rel: "noreferrer noopener"
|
|
806
|
-
}, text, h(
|
|
584
|
+
}, text, h(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }));
|
|
807
585
|
}
|
|
808
586
|
function LongTaskRow(props) {
|
|
587
|
+
const [stepsOpen, setStepsOpen] = useState(false);
|
|
588
|
+
const [rawOpen, setRawOpen] = useState(false);
|
|
809
589
|
const failed = props.status === "failed";
|
|
810
590
|
const problem = props.problem ?? "";
|
|
811
591
|
const raw = (props.raw ?? "").trim();
|
|
812
592
|
const steps = props.steps ?? [];
|
|
813
|
-
return h("div", { className: "wb-longTask" }, h("p", { className: "wb-longTaskHead" }, h(StateDot, {
|
|
593
|
+
return h("div", { className: "wb-longTask" }, h("p", { className: "wb-longTaskHead" }, h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
814
594
|
state: longTaskDot(props.status),
|
|
815
595
|
size: 10
|
|
816
596
|
}), h("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h(RowLink, {
|
|
817
597
|
href: link.href,
|
|
818
598
|
key: `${link.text}@${link.href}`,
|
|
819
599
|
text: link.text
|
|
820
|
-
}))), problem === "" ? null : h("p", { className: "wb-longTaskProblem" }, problem), !failed ? null : h(Fragment, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h(
|
|
600
|
+
}))), problem === "" ? null : h("p", { className: "wb-longTaskProblem" }, problem), !failed ? null : h(Fragment, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
|
|
601
|
+
className: "wb-longTaskDump",
|
|
602
|
+
icon: h(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
|
|
603
|
+
title: props.stepsTitle,
|
|
604
|
+
open: stepsOpen,
|
|
605
|
+
expandable: true,
|
|
606
|
+
expandOnRowClick: true,
|
|
607
|
+
previewChevron: true,
|
|
608
|
+
onToggle: () => setStepsOpen(!stepsOpen)
|
|
609
|
+
}, h(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
610
|
+
code: steps.join("\n"),
|
|
611
|
+
className: "wb-longTaskDump",
|
|
612
|
+
showHeader: props.copyLabel !== void 0,
|
|
613
|
+
copyLabel: props.copyLabel ?? "",
|
|
614
|
+
copiedLabel: props.copiedLabel ?? ""
|
|
615
|
+
})), raw === "" || props.rawTitle === void 0 ? null : h(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
|
|
616
|
+
className: "wb-longTaskDump",
|
|
617
|
+
icon: h(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
|
|
618
|
+
title: props.rawTitle,
|
|
619
|
+
open: rawOpen,
|
|
620
|
+
expandable: true,
|
|
621
|
+
expandOnRowClick: true,
|
|
622
|
+
previewChevron: true,
|
|
623
|
+
onToggle: () => setRawOpen(!rawOpen)
|
|
624
|
+
}, h(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
625
|
+
code: raw,
|
|
626
|
+
className: "wb-longTaskDump",
|
|
627
|
+
showHeader: props.copyLabel !== void 0,
|
|
628
|
+
copyLabel: props.copyLabel ?? "",
|
|
629
|
+
copiedLabel: props.copiedLabel ?? ""
|
|
630
|
+
}))));
|
|
821
631
|
}
|
|
822
632
|
//#endregion
|
|
823
633
|
//#region ../shared/dist/components/MockStrip.js
|
|
@@ -863,19 +673,113 @@ function EmptyState({ text, icon = null, compact = false }) {
|
|
|
863
673
|
//#endregion
|
|
864
674
|
//#region ../shared/dist/components/SaveBar.js
|
|
865
675
|
function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
|
|
866
|
-
return h("div", { className: "wb-formActions" }, h(
|
|
676
|
+
return h("div", { className: "wb-formActions" }, h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
867
677
|
type: "button",
|
|
868
|
-
|
|
678
|
+
size: "sm",
|
|
679
|
+
variant: "ghost",
|
|
869
680
|
onClick: onCancel,
|
|
870
681
|
disabled: busy
|
|
871
|
-
}, labels.cancel), h(
|
|
682
|
+
}, labels.cancel), h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
872
683
|
type: "button",
|
|
873
|
-
|
|
684
|
+
size: "sm",
|
|
685
|
+
variant: "primary",
|
|
874
686
|
onClick: onSave,
|
|
875
687
|
disabled: busy || disabled === true
|
|
876
688
|
}, busy ? labels.saving : labels.save));
|
|
877
689
|
}
|
|
878
690
|
//#endregion
|
|
691
|
+
//#region ../shared/dist/components/TextField.js
|
|
692
|
+
function TextField({ invalid = false, className, ...rest }) {
|
|
693
|
+
return h("input", {
|
|
694
|
+
...rest,
|
|
695
|
+
className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
|
|
696
|
+
"aria-invalid": invalid || void 0
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
//#endregion
|
|
700
|
+
//#region ../shared/dist/components/icons.js
|
|
701
|
+
function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
|
|
702
|
+
return h("svg", {
|
|
703
|
+
width: size,
|
|
704
|
+
height: size,
|
|
705
|
+
viewBox,
|
|
706
|
+
fill: "none",
|
|
707
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
708
|
+
"aria-hidden": "true",
|
|
709
|
+
strokeWidth,
|
|
710
|
+
style: { display: "block" }
|
|
711
|
+
}, children);
|
|
712
|
+
}
|
|
713
|
+
function IconConversation({ size = 16 }) {
|
|
714
|
+
return h(Shell, {
|
|
715
|
+
size,
|
|
716
|
+
strokeWidth: 1.3
|
|
717
|
+
}, h("path", {
|
|
718
|
+
d: "M2.5 7.2c0-2.3 2.1-4.2 4.8-4.2h1.4c2.7 0 4.8 1.9 4.8 4.2s-2.1 4.2-4.8 4.2H7.5l-3.2 2v-2.3c-1.1-.8-1.8-2-1.8-3.9Z",
|
|
719
|
+
stroke: "currentColor",
|
|
720
|
+
strokeLinejoin: "round"
|
|
721
|
+
}));
|
|
722
|
+
}
|
|
723
|
+
function IconBrandMark({ size = 24 }) {
|
|
724
|
+
return h(Shell, {
|
|
725
|
+
size,
|
|
726
|
+
strokeWidth: 1.6,
|
|
727
|
+
viewBox: "0 0 24 24"
|
|
728
|
+
}, h("rect", {
|
|
729
|
+
x: 3,
|
|
730
|
+
y: 3,
|
|
731
|
+
width: 18,
|
|
732
|
+
height: 18,
|
|
733
|
+
rx: 5,
|
|
734
|
+
stroke: "currentColor"
|
|
735
|
+
}), h("path", {
|
|
736
|
+
d: "M8 9.5h8M8 12.5h8M8 15.5h5",
|
|
737
|
+
stroke: "currentColor",
|
|
738
|
+
strokeLinecap: "round"
|
|
739
|
+
}));
|
|
740
|
+
}
|
|
741
|
+
function IconModules({ size = 16 }) {
|
|
742
|
+
return h("svg", {
|
|
743
|
+
width: size,
|
|
744
|
+
height: size,
|
|
745
|
+
viewBox: "0 0 16 16",
|
|
746
|
+
fill: "none",
|
|
747
|
+
"aria-hidden": "true"
|
|
748
|
+
}, h("rect", {
|
|
749
|
+
x: "2.5",
|
|
750
|
+
y: "2.5",
|
|
751
|
+
width: "4.6",
|
|
752
|
+
height: "4.6",
|
|
753
|
+
rx: "1.2",
|
|
754
|
+
stroke: "currentColor",
|
|
755
|
+
strokeWidth: "1.2"
|
|
756
|
+
}), h("rect", {
|
|
757
|
+
x: "8.9",
|
|
758
|
+
y: "2.5",
|
|
759
|
+
width: "4.6",
|
|
760
|
+
height: "4.6",
|
|
761
|
+
rx: "1.2",
|
|
762
|
+
stroke: "currentColor",
|
|
763
|
+
strokeWidth: "1.2"
|
|
764
|
+
}), h("rect", {
|
|
765
|
+
x: "2.5",
|
|
766
|
+
y: "8.9",
|
|
767
|
+
width: "4.6",
|
|
768
|
+
height: "4.6",
|
|
769
|
+
rx: "1.2",
|
|
770
|
+
stroke: "currentColor",
|
|
771
|
+
strokeWidth: "1.2"
|
|
772
|
+
}), h("rect", {
|
|
773
|
+
x: "8.9",
|
|
774
|
+
y: "8.9",
|
|
775
|
+
width: "4.6",
|
|
776
|
+
height: "4.6",
|
|
777
|
+
rx: "1.2",
|
|
778
|
+
stroke: "currentColor",
|
|
779
|
+
strokeWidth: "1.2"
|
|
780
|
+
}));
|
|
781
|
+
}
|
|
782
|
+
//#endregion
|
|
879
783
|
//#region ../shared/dist/config/storage.js
|
|
880
784
|
function readText(key) {
|
|
881
785
|
try {
|
|
@@ -965,11 +869,13 @@ var en = {
|
|
|
965
869
|
"panels.market.install": "Install",
|
|
966
870
|
"panels.market.update": "Update",
|
|
967
871
|
"panels.market.uninstall": "Uninstall",
|
|
872
|
+
"panels.market.uninstallLabel": "Uninstall {name}",
|
|
968
873
|
"panels.market.installing": "Installing…",
|
|
969
874
|
"panels.market.updating": "Updating…",
|
|
970
875
|
"panels.market.uninstalling": "Uninstalling…",
|
|
971
|
-
"panels.market.
|
|
876
|
+
"panels.market.confirmUninstallTitle": "Uninstall \"{name}\"?",
|
|
972
877
|
"panels.market.confirmUninstallDetail": "It will be gone from this machine, and removed from every project panel (bindings and settings are kept).",
|
|
878
|
+
"panels.market.confirmUninstallAck": "I understand: using it again means reinstalling it.",
|
|
973
879
|
"panels.market.confirmYes": "Uninstall",
|
|
974
880
|
"panels.market.confirmNo": "Cancel",
|
|
975
881
|
"panels.market.failed": "Failed: {reason}",
|
|
@@ -977,6 +883,9 @@ var en = {
|
|
|
977
883
|
"panels.market.noSource": "This module declares no install method — install it yourself",
|
|
978
884
|
"panels.market.badSource": "The install method is incomplete — install it yourself",
|
|
979
885
|
"panels.market.empty": "No modules available",
|
|
886
|
+
"panels.market.installedSection": "Installed",
|
|
887
|
+
"panels.market.moduleUpdate": "Version {version} is out: it may need a restart after installing.",
|
|
888
|
+
"panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
|
|
980
889
|
"panels.market.foot": "After installing, enable it in the panel page of that project.",
|
|
981
890
|
"panels.market.recheck": "Check for updates",
|
|
982
891
|
"panels.market.checkUpdates": "Check for updates",
|
|
@@ -984,6 +893,126 @@ var en = {
|
|
|
984
893
|
"panels.market.justNow": "just now",
|
|
985
894
|
"panels.market.minutesAgo": "{n} min ago",
|
|
986
895
|
"panels.market.hoursAgo": "{n} h ago",
|
|
896
|
+
"panels.market.add.description": "Enter a package name, a Git URL, or a path to a local directory.",
|
|
897
|
+
"panels.market.add.specPlaceholder": "e.g. @dsh-workbench/module-hello",
|
|
898
|
+
"panels.market.add.guideToggle": "Install guide and examples",
|
|
899
|
+
"panels.market.add.guideHide": "Hide guide",
|
|
900
|
+
"panels.market.add.guideIdTitle": "Package name",
|
|
901
|
+
"panels.market.add.guideIdExample": "@dsh-workbench/module-hello",
|
|
902
|
+
"panels.market.add.guideIdHint": "The module package name is its npm name (like dsh-workbench-module-xxx or @author/module) — whatever follows dsh plugin add or pnpm add in the README of a community module.",
|
|
903
|
+
"panels.market.add.guideGitTitle": "Git URL",
|
|
904
|
+
"panels.market.add.guideGitExample": "https://github.com/author/dsh-workbench-module-x",
|
|
905
|
+
"panels.market.add.guideGitHint": "The public repository of the module on GitHub; other Git hosts work too.",
|
|
906
|
+
"panels.market.add.guidePathTitle": "Local module directory",
|
|
907
|
+
"panels.market.add.guidePathExample": "/Users/name/my-workbench-module",
|
|
908
|
+
"panels.market.add.guidePathHint": "Absolute path to the module directory on this machine, for modules you develop or have already downloaded.",
|
|
909
|
+
"panels.market.add.guideExampleLabel": "Example:",
|
|
910
|
+
"panels.market.add.guideFill": "Fill in",
|
|
911
|
+
"panels.market.add.guideSafety": "Make sure you trust the source. Modules run on this machine with your permissions; an unknown module can damage the workbench or read and leak your data.",
|
|
912
|
+
"panels.market.add.registryLegend": "Which npm registry to download from",
|
|
913
|
+
"panels.market.add.registryOfficial": "npm registry",
|
|
914
|
+
"panels.market.add.registryMirror": "China mirror",
|
|
915
|
+
"panels.market.add.registryWithHost": "{name} ({host})",
|
|
916
|
+
"panels.market.add.registryToggle": "Source",
|
|
917
|
+
"panels.market.add.installVersion": "Version {version}",
|
|
918
|
+
"panels.market.add.registryDefault": "Default source",
|
|
919
|
+
"panels.market.add.registryCustom": "Custom address",
|
|
920
|
+
"panels.market.add.registryCustomPlaceholder": "https://npm.example.com/",
|
|
921
|
+
"panels.market.add.registryCustomHint": "A corporate or private npm registry; for one that needs auth, put the credentials in ~/.npmrc on this machine",
|
|
922
|
+
"panels.market.add.registryCustomInvalid": "Enter an address starting with http:// or https://",
|
|
923
|
+
"panels.market.add.run": "Install",
|
|
924
|
+
"panels.market.add.edit": "Edit",
|
|
925
|
+
"panels.market.add.changeRegistry": "Change source",
|
|
926
|
+
"panels.market.add.installingTitle": "Installing the module…",
|
|
927
|
+
"panels.market.add.installedTitle": "Installed",
|
|
928
|
+
"panels.market.add.failedTitle": "Module install failed",
|
|
929
|
+
"panels.market.add.cancelledTitle": "Cancelled",
|
|
930
|
+
"panels.market.add.failureNetworkHost": "Cannot reach {host}. Git URLs and .tgz links bypass the registry, so this machine needs direct access or a proxy; if the module is also on npm, use its package name instead.",
|
|
931
|
+
"panels.market.add.problemInvalid": "Cannot read this package name or address: {reason}",
|
|
932
|
+
"panels.market.add.problemInstalled": "This module is already installed",
|
|
933
|
+
"panels.market.add.problemNotFound": "No such module found",
|
|
934
|
+
"panels.market.add.problemNotPackage": "That path does not exist or is not a valid module package",
|
|
935
|
+
"panels.market.add.problemNotBundle": "This package declares no bundle, so it cannot be installed as a module: {reason}",
|
|
936
|
+
"panels.market.add.problemNetwork": "Cannot reach the module source; check the network and retry",
|
|
937
|
+
"panels.market.add.problemUnknown": "Cannot fetch module information: {reason}",
|
|
938
|
+
"panels.market.add.failureNetwork": "The network connection failed",
|
|
939
|
+
"panels.market.add.failureNotFound": "No such module found",
|
|
940
|
+
"panels.market.add.failureNoMatchingVersion": "No matching version",
|
|
941
|
+
"panels.market.add.failureDiskFull": "Out of disk space, install stopped",
|
|
942
|
+
"panels.market.add.failurePermission": "No write permission, cannot install",
|
|
943
|
+
"panels.market.add.failureBuildBlocked": "A dependency wants to run install scripts; you have to allow it first",
|
|
944
|
+
"panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
|
|
945
|
+
"panels.market.add.failureTimeout": "The install timed out",
|
|
946
|
+
"panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
|
|
947
|
+
"panels.market.add.failureGeneric": "Something went wrong during install — see the install details",
|
|
948
|
+
"panels.market.add.approveTitle": "Your approval is needed for install scripts",
|
|
949
|
+
"panels.market.add.approveCaution": "Only allow packages you trust: install scripts run on this machine with your permissions.",
|
|
950
|
+
"panels.market.add.approveRun": "Allow and continue installing",
|
|
951
|
+
"panels.market.add.restart": "Installed — restart once to pick it up.",
|
|
952
|
+
"panels.market.add.tookEffect": "Live.",
|
|
953
|
+
"panels.market.add.details": "Install details",
|
|
954
|
+
"panels.market.add.open": "Add module",
|
|
955
|
+
"panels.market.add.title": "Add module",
|
|
956
|
+
"panels.market.add.intro": "Install a workbench module by package name. It goes on this machine, shared by every project.",
|
|
957
|
+
"panels.market.add.specLabel": "Package",
|
|
958
|
+
"panels.market.add.specHint": "The same thing you would put after `dsh plugin add`: a package name (optional @version), a git URL, a tarball, or an absolute local path.",
|
|
959
|
+
"panels.market.add.exampleTitle": "Examples",
|
|
960
|
+
"panels.market.add.exampleFill": "Fill in an example",
|
|
961
|
+
"panels.market.add.registryLabel": "Source",
|
|
962
|
+
"panels.market.add.registryProfile": "This profile's registry",
|
|
963
|
+
"panels.market.add.registryPnpm": "pnpm's own registry",
|
|
964
|
+
"panels.market.add.check": "Check",
|
|
965
|
+
"panels.market.add.checking": "Checking…",
|
|
966
|
+
"panels.market.add.change": "Edit",
|
|
967
|
+
"panels.market.add.previewTitle": "About to install",
|
|
968
|
+
"panels.market.add.fieldName": "Package",
|
|
969
|
+
"panels.market.add.fieldVersion": "Version",
|
|
970
|
+
"panels.market.add.fieldDescription": "Description",
|
|
971
|
+
"panels.market.add.fieldSource": "Source",
|
|
972
|
+
"panels.market.add.install": "Install",
|
|
973
|
+
"panels.market.add.installing": "Installing…",
|
|
974
|
+
"panels.market.add.cancel": "Cancel install",
|
|
975
|
+
"panels.market.add.close": "Close",
|
|
976
|
+
"panels.market.add.retry": "Retry",
|
|
977
|
+
"panels.market.add.changeSource": "Change source",
|
|
978
|
+
"panels.market.add.approveBuilds": "Allow these scripts and retry",
|
|
979
|
+
"panels.market.add.approveHint": "These packages want to run install scripts: {packages}",
|
|
980
|
+
"panels.market.add.doneApplied": "Installed and live.",
|
|
981
|
+
"panels.market.add.doneRestart": "Installed — restart once to pick it up.",
|
|
982
|
+
"panels.market.add.cancelled": "Cancelled.",
|
|
983
|
+
"panels.market.add.failed": "Didn't work: {reason}",
|
|
984
|
+
"panels.market.add.supplyInstalled": "The plugins it needs are installed too.",
|
|
985
|
+
"panels.market.add.supplyPending": "Its plugins install after you restart.",
|
|
986
|
+
"panels.market.add.supplyFailed": "Its plugins didn't install: {reason}",
|
|
987
|
+
"panels.market.add.notModule": "This is not a workbench module (no dsh.workbench declaration), so it will not show up on the board.",
|
|
988
|
+
"panels.market.add.removed": "Removed.",
|
|
989
|
+
"panels.market.add.removedRestart": "Removed — restart once to finish.",
|
|
990
|
+
"panels.market.add.remove": "Remove it",
|
|
991
|
+
"panels.market.add.problem.invalidSpec": "That is not a spec we accept: it cannot be empty or start with a dash.",
|
|
992
|
+
"panels.market.add.problem.alreadyInstalled": "That package is already in the profile (add @version to switch versions).",
|
|
993
|
+
"panels.market.add.problem.notFound": "No such package on that source.",
|
|
994
|
+
"panels.market.add.problem.notAPackage": "There is no package at that location.",
|
|
995
|
+
"panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (no bundle patch).",
|
|
996
|
+
"panels.market.add.problem.network": "The source is unreachable.",
|
|
997
|
+
"panels.market.add.problem.unknown": "The check did not pass (reason unknown).",
|
|
998
|
+
"panels.market.add.reason.invalidSpec": "the spec is not accepted",
|
|
999
|
+
"panels.market.add.reason.incompatible": "it wants a different dsh version than this machine runs",
|
|
1000
|
+
"panels.market.add.reason.notBundle": "it is not a dsh plugin package",
|
|
1001
|
+
"panels.market.add.reason.notRemovable": "it ships with the installation and cannot be removed",
|
|
1002
|
+
"panels.market.add.reason.bundleInUse": "something is still using it",
|
|
1003
|
+
"panels.market.add.reason.stopProfile": "this profile has no hot reload, so stop the process first",
|
|
1004
|
+
"panels.market.add.reason.staleApproval": "the scripts to allow changed — start over",
|
|
1005
|
+
"panels.market.add.reason.operationError": "pnpm failed (see the install output)",
|
|
1006
|
+
"panels.market.add.reason.buildBlocked": "pnpm blocked install scripts",
|
|
1007
|
+
"panels.market.add.reason.pnpmMissing": "pnpm is not on this machine",
|
|
1008
|
+
"panels.market.add.reason.noMatchingVersion": "no version matching that range on the source",
|
|
1009
|
+
"panels.market.add.reason.diskFull": "the disk is full",
|
|
1010
|
+
"panels.market.add.reason.permission": "no permission to write",
|
|
1011
|
+
"panels.market.add.reason.integrity": "the download failed its integrity check",
|
|
1012
|
+
"panels.market.add.reason.timeout": "no output for too long, so it was stopped",
|
|
1013
|
+
"panels.market.add.reason.network": "the network is unreachable",
|
|
1014
|
+
"panels.market.add.reason.notFound": "no such package on the source",
|
|
1015
|
+
"panels.market.add.reason.unknown": "It failed without saying why (see the install output)",
|
|
987
1016
|
"blocker.fix.install": "Install for me",
|
|
988
1017
|
"blocker.fix.update": "Upgrade for me",
|
|
989
1018
|
"blocker.fix.running": "Running…",
|
|
@@ -1129,18 +1158,23 @@ var zh = {
|
|
|
1129
1158
|
"panels.market.install": "安装",
|
|
1130
1159
|
"panels.market.update": "更新",
|
|
1131
1160
|
"panels.market.uninstall": "卸载",
|
|
1161
|
+
"panels.market.uninstallLabel": "卸载 {name}",
|
|
1132
1162
|
"panels.market.installing": "正在安装…",
|
|
1133
1163
|
"panels.market.updating": "正在更新…",
|
|
1134
1164
|
"panels.market.uninstalling": "正在卸载…",
|
|
1135
|
-
"panels.market.
|
|
1136
|
-
"panels.market.confirmUninstallDetail": "
|
|
1137
|
-
"panels.market.
|
|
1165
|
+
"panels.market.confirmUninstallTitle": "卸载「{name}」?",
|
|
1166
|
+
"panels.market.confirmUninstallDetail": "卸载后它提供的功能会消失。",
|
|
1167
|
+
"panels.market.confirmUninstallAck": "我明白:卸载后想再用,得重新装一遍。",
|
|
1168
|
+
"panels.market.confirmYes": "卸载",
|
|
1138
1169
|
"panels.market.confirmNo": "取消",
|
|
1139
1170
|
"panels.market.failed": "没成功:{reason}",
|
|
1140
1171
|
"panels.market.needEnv": "先在启动工作台的终端里设 {env}",
|
|
1141
1172
|
"panels.market.noSource": "这个模块没声明怎么装,只能自己动手",
|
|
1142
1173
|
"panels.market.badSource": "安装方式没写全,只能自己动手",
|
|
1143
1174
|
"panels.market.empty": "暂无可用模块",
|
|
1175
|
+
"panels.market.installedSection": "已装",
|
|
1176
|
+
"panels.market.moduleUpdate": "有新版 {version}:安装完成后可能需要重启才生效。",
|
|
1177
|
+
"panels.market.restartNeeded": "新版装好了,重启一次才生效。",
|
|
1144
1178
|
"panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
|
|
1145
1179
|
"panels.market.recheck": "重新检查更新",
|
|
1146
1180
|
"panels.market.checkUpdates": "检查更新",
|
|
@@ -1148,6 +1182,126 @@ var zh = {
|
|
|
1148
1182
|
"panels.market.justNow": "刚刚",
|
|
1149
1183
|
"panels.market.minutesAgo": "{n} 分钟前",
|
|
1150
1184
|
"panels.market.hoursAgo": "{n} 小时前",
|
|
1185
|
+
"panels.market.add.description": "输入模块的包名、Git 仓库地址或本地目录路径。",
|
|
1186
|
+
"panels.market.add.specPlaceholder": "例如 @dsh-workbench/module-hello",
|
|
1187
|
+
"panels.market.add.guideToggle": "模块安装引导和示例",
|
|
1188
|
+
"panels.market.add.guideHide": "收起引导",
|
|
1189
|
+
"panels.market.add.guideIdTitle": "包名",
|
|
1190
|
+
"panels.market.add.guideIdExample": "@dsh-workbench/module-hello",
|
|
1191
|
+
"panels.market.add.guideIdHint": "模块包名即 npm 包名(如 dsh-workbench-module-xxx 或 @作者/模块名),社区模块的 README 安装命令中 dsh plugin add 或 pnpm add 之后的部分。",
|
|
1192
|
+
"panels.market.add.guideGitTitle": "Git 仓库地址",
|
|
1193
|
+
"panels.market.add.guideGitExample": "https://github.com/author/dsh-workbench-module-x",
|
|
1194
|
+
"panels.market.add.guideGitHint": "模块在 GitHub 上的开源仓库地址,也支持其他 Git 仓库。",
|
|
1195
|
+
"panels.market.add.guidePathTitle": "本地模块目录",
|
|
1196
|
+
"panels.market.add.guidePathExample": "/Users/name/my-workbench-module",
|
|
1197
|
+
"panels.market.add.guidePathHint": "本机上模块目录的绝对路径,适用于自行开发或已下载的模块。",
|
|
1198
|
+
"panels.market.add.guideExampleLabel": "示例:",
|
|
1199
|
+
"panels.market.add.guideFill": "填入示例",
|
|
1200
|
+
"panels.market.add.guideSafety": "请确认模块来源可信。模块在本机以你的权限运行,来源不明的模块可能损坏工作台,或读取和泄露你的数据。",
|
|
1201
|
+
"panels.market.add.registryLegend": "从哪个 npm 源下载模块",
|
|
1202
|
+
"panels.market.add.registryOfficial": "npm 官方源",
|
|
1203
|
+
"panels.market.add.registryMirror": "中国大陆镜像源",
|
|
1204
|
+
"panels.market.add.registryWithHost": "{name}({host})",
|
|
1205
|
+
"panels.market.add.registryToggle": "安装源",
|
|
1206
|
+
"panels.market.add.installVersion": "版本 {version}",
|
|
1207
|
+
"panels.market.add.registryDefault": "默认安装源",
|
|
1208
|
+
"panels.market.add.registryCustom": "自定义地址",
|
|
1209
|
+
"panels.market.add.registryCustomPlaceholder": "https://npm.example.com/",
|
|
1210
|
+
"panels.market.add.registryCustomHint": "公司内网或私有 npm 源;需要登录的源,把凭据放在本机的 ~/.npmrc 里",
|
|
1211
|
+
"panels.market.add.registryCustomInvalid": "请输入以 http:// 或 https:// 开头的地址",
|
|
1212
|
+
"panels.market.add.run": "安装",
|
|
1213
|
+
"panels.market.add.edit": "编辑",
|
|
1214
|
+
"panels.market.add.changeRegistry": "更换安装源",
|
|
1215
|
+
"panels.market.add.installingTitle": "模块安装中…",
|
|
1216
|
+
"panels.market.add.installedTitle": "已安装",
|
|
1217
|
+
"panels.market.add.failedTitle": "模块安装失败",
|
|
1218
|
+
"panels.market.add.cancelledTitle": "已取消",
|
|
1219
|
+
"panels.market.add.failureNetworkHost": "无法连接 {host}。Git 地址和 .tgz 直链不经过安装源,需要本机能直接访问它或配置代理;如果这个模块也发布到了 npm,请改填包名。",
|
|
1220
|
+
"panels.market.add.problemInvalid": "无法识别这个包名或地址:{reason}",
|
|
1221
|
+
"panels.market.add.problemInstalled": "该模块已安装",
|
|
1222
|
+
"panels.market.add.problemNotFound": "未找到相关模块",
|
|
1223
|
+
"panels.market.add.problemNotPackage": "该路径不存在或不是有效的模块包",
|
|
1224
|
+
"panels.market.add.problemNotBundle": "这个包没有声明组合包,无法作为模块安装:{reason}",
|
|
1225
|
+
"panels.market.add.problemNetwork": "无法连接模块源,请检查网络后重试",
|
|
1226
|
+
"panels.market.add.problemUnknown": "无法获取模块信息:{reason}",
|
|
1227
|
+
"panels.market.add.failureNetwork": "网络连接失败",
|
|
1228
|
+
"panels.market.add.failureNotFound": "未找到相关模块",
|
|
1229
|
+
"panels.market.add.failureNoMatchingVersion": "没有匹配的版本",
|
|
1230
|
+
"panels.market.add.failureDiskFull": "磁盘空间不足,安装已停止",
|
|
1231
|
+
"panels.market.add.failurePermission": "没有写入权限,无法安装",
|
|
1232
|
+
"panels.market.add.failureBuildBlocked": "有依赖的安装脚本需要你允许后才能继续",
|
|
1233
|
+
"panels.market.add.failureIntegrity": "下载的安装包校验失败",
|
|
1234
|
+
"panels.market.add.failureTimeout": "安装超时",
|
|
1235
|
+
"panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
|
|
1236
|
+
"panels.market.add.failureGeneric": "安装过程中出错,原因见安装详情",
|
|
1237
|
+
"panels.market.add.approveTitle": "需要你允许安装脚本",
|
|
1238
|
+
"panels.market.add.approveCaution": "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。",
|
|
1239
|
+
"panels.market.add.approveRun": "允许并继续安装",
|
|
1240
|
+
"panels.market.add.restart": "装好了,重启一次才生效。",
|
|
1241
|
+
"panels.market.add.tookEffect": "已生效。",
|
|
1242
|
+
"panels.market.add.details": "安装详情",
|
|
1243
|
+
"panels.market.add.open": "添加模块",
|
|
1244
|
+
"panels.market.add.title": "添加模块",
|
|
1245
|
+
"panels.market.add.intro": "按包名装工作台模块。装在这台机器上,所有项目共用。",
|
|
1246
|
+
"panels.market.add.specLabel": "包名",
|
|
1247
|
+
"panels.market.add.specHint": "就是命令里 `dsh plugin add` 后面那一段:包名(可带 @版本)、git 地址、压缩包或本地绝对路径。",
|
|
1248
|
+
"panels.market.add.exampleTitle": "示例",
|
|
1249
|
+
"panels.market.add.exampleFill": "填入示例",
|
|
1250
|
+
"panels.market.add.registryLabel": "安装源",
|
|
1251
|
+
"panels.market.add.registryProfile": "这个 profile 配的源",
|
|
1252
|
+
"panels.market.add.registryPnpm": "pnpm 自己配的源",
|
|
1253
|
+
"panels.market.add.check": "预检",
|
|
1254
|
+
"panels.market.add.checking": "正在预检…",
|
|
1255
|
+
"panels.market.add.change": "改一下",
|
|
1256
|
+
"panels.market.add.previewTitle": "将要安装",
|
|
1257
|
+
"panels.market.add.fieldName": "包名",
|
|
1258
|
+
"panels.market.add.fieldVersion": "版本",
|
|
1259
|
+
"panels.market.add.fieldDescription": "简介",
|
|
1260
|
+
"panels.market.add.fieldSource": "来源",
|
|
1261
|
+
"panels.market.add.install": "安装",
|
|
1262
|
+
"panels.market.add.installing": "正在安装…",
|
|
1263
|
+
"panels.market.add.cancel": "取消安装",
|
|
1264
|
+
"panels.market.add.close": "关闭",
|
|
1265
|
+
"panels.market.add.retry": "重试",
|
|
1266
|
+
"panels.market.add.changeSource": "换源",
|
|
1267
|
+
"panels.market.add.approveBuilds": "允许这些脚本并重试",
|
|
1268
|
+
"panels.market.add.approveHint": "这几个包要跑安装脚本:{packages}",
|
|
1269
|
+
"panels.market.add.doneApplied": "装好了,已经生效。",
|
|
1270
|
+
"panels.market.add.doneRestart": "装好了,重启一次才生效。",
|
|
1271
|
+
"panels.market.add.cancelled": "已取消。",
|
|
1272
|
+
"panels.market.add.failed": "没成功:{reason}",
|
|
1273
|
+
"panels.market.add.supplyInstalled": "它要的插件也装上了。",
|
|
1274
|
+
"panels.market.add.supplyPending": "它要的插件重启后再装。",
|
|
1275
|
+
"panels.market.add.supplyFailed": "它要的插件没装上:{reason}",
|
|
1276
|
+
"panels.market.add.notModule": "这不是工作台模块(没有 dsh.workbench 声明),不会出现在面板上。",
|
|
1277
|
+
"panels.market.add.removed": "已经移除了。",
|
|
1278
|
+
"panels.market.add.removedRestart": "卸掉了,重启一次才彻底生效。",
|
|
1279
|
+
"panels.market.add.remove": "移除它",
|
|
1280
|
+
"panels.market.add.problem.invalidSpec": "这个写法不认:不能是空的,也不能以横杠开头。",
|
|
1281
|
+
"panels.market.add.problem.alreadyInstalled": "这个包已经在 profile 里了(要换版本请带上 @版本)。",
|
|
1282
|
+
"panels.market.add.problem.notFound": "源上没有这个包。",
|
|
1283
|
+
"panels.market.add.problem.notAPackage": "这个位置没有包。",
|
|
1284
|
+
"panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(没有 bundle patch)。",
|
|
1285
|
+
"panels.market.add.problem.network": "源连不上。",
|
|
1286
|
+
"panels.market.add.problem.unknown": "预检没通过(原因未知)。",
|
|
1287
|
+
"panels.market.add.reason.invalidSpec": "写法不认",
|
|
1288
|
+
"panels.market.add.reason.incompatible": "它要的 dsh 版本和这台机器上的不一致",
|
|
1289
|
+
"panels.market.add.reason.notBundle": "它不是一个 dsh 插件包",
|
|
1290
|
+
"panels.market.add.reason.notRemovable": "它是安装自带的组合包,不能卸",
|
|
1291
|
+
"panels.market.add.reason.bundleInUse": "还有东西在用它,卸不掉",
|
|
1292
|
+
"panels.market.add.reason.stopProfile": "这个 profile 没开热更新,得先停掉进程",
|
|
1293
|
+
"panels.market.add.reason.staleApproval": "要允许的安装脚本已经变了,重新来一次",
|
|
1294
|
+
"panels.market.add.reason.operationError": "pnpm 执行出错(详情见安装输出)",
|
|
1295
|
+
"panels.market.add.reason.buildBlocked": "pnpm 拦下了安装脚本",
|
|
1296
|
+
"panels.market.add.reason.pnpmMissing": "这台机器上没有 pnpm",
|
|
1297
|
+
"panels.market.add.reason.noMatchingVersion": "源上没有符合这个版本范围的版本",
|
|
1298
|
+
"panels.market.add.reason.diskFull": "磁盘满了",
|
|
1299
|
+
"panels.market.add.reason.permission": "没有写权限",
|
|
1300
|
+
"panels.market.add.reason.integrity": "下载内容校验不过",
|
|
1301
|
+
"panels.market.add.reason.timeout": "太久没有输出,被中断了",
|
|
1302
|
+
"panels.market.add.reason.network": "网络不通",
|
|
1303
|
+
"panels.market.add.reason.notFound": "源上没有这个包",
|
|
1304
|
+
"panels.market.add.reason.unknown": "没成功,但它没说是为什么(详情见安装输出的那一行)",
|
|
1151
1305
|
"blocker.fix.install": "帮我安装",
|
|
1152
1306
|
"blocker.fix.update": "帮我升级",
|
|
1153
1307
|
"blocker.fix.running": "正在执行…",
|
|
@@ -1344,20 +1498,8 @@ var dist_exports = /* @__PURE__ */ __exportAll({
|
|
|
1344
1498
|
HANDOFF_TTL_MS: () => HANDOFF_TTL_MS,
|
|
1345
1499
|
INSTALL_TIMEOUT_MS: () => INSTALL_TIMEOUT_MS,
|
|
1346
1500
|
IconBrandMark: () => IconBrandMark,
|
|
1347
|
-
IconCheck: () => IconCheck,
|
|
1348
|
-
IconChevronDown: () => IconChevronDown,
|
|
1349
1501
|
IconConversation: () => IconConversation,
|
|
1350
|
-
IconEllipsis: () => IconEllipsis,
|
|
1351
|
-
IconFolder: () => IconFolder,
|
|
1352
|
-
IconFolderOpen: () => IconFolderOpen,
|
|
1353
1502
|
IconModules: () => IconModules,
|
|
1354
|
-
IconNewChat: () => IconNewChat,
|
|
1355
|
-
IconPanelLeft: () => IconPanelLeft,
|
|
1356
|
-
IconPin: () => IconPin,
|
|
1357
|
-
IconPlus: () => IconPlus,
|
|
1358
|
-
IconRefresh: () => IconRefresh,
|
|
1359
|
-
IconRightUp: () => IconRightUp,
|
|
1360
|
-
IconSettings: () => IconSettings,
|
|
1361
1503
|
LINK_BUTTON_STYLE: () => LINK_BUTTON_STYLE,
|
|
1362
1504
|
LOCALES: () => LOCALES,
|
|
1363
1505
|
LOCALE_NS: () => LOCALE_NS,
|
|
@@ -1380,7 +1522,7 @@ var dist_exports = /* @__PURE__ */ __exportAll({
|
|
|
1380
1522
|
STORAGE_KEY_RIGHTBAR: () => STORAGE_KEY_RIGHTBAR,
|
|
1381
1523
|
SaveBar: () => SaveBar,
|
|
1382
1524
|
SkeletonRows: () => SkeletonRows,
|
|
1383
|
-
|
|
1525
|
+
TextField: () => TextField,
|
|
1384
1526
|
UNITS_SERVICE: () => UNITS_SERVICE,
|
|
1385
1527
|
VERSION_CHECK_TIMEOUT_MS: () => VERSION_CHECK_TIMEOUT_MS,
|
|
1386
1528
|
VERSION_CHECK_TTL_MS: () => VERSION_CHECK_TTL_MS,
|
|
@@ -1868,6 +2010,27 @@ function buildMarketMocks(roster) {
|
|
|
1868
2010
|
actions: ["update", "uninstall"]
|
|
1869
2011
|
}
|
|
1870
2012
|
},
|
|
2013
|
+
{
|
|
2014
|
+
id: "module-update",
|
|
2015
|
+
label: "模块包有新版(行上给「更新」,装了要重启)",
|
|
2016
|
+
manifests: [mine],
|
|
2017
|
+
capabilities: probe$1(id, "ok", { plugins: [{
|
|
2018
|
+
name: "fixture",
|
|
2019
|
+
status: "ok",
|
|
2020
|
+
missing: []
|
|
2021
|
+
}] }),
|
|
2022
|
+
updates: { [id]: {
|
|
2023
|
+
installed: "0.1.2",
|
|
2024
|
+
latest: "0.2.0"
|
|
2025
|
+
} },
|
|
2026
|
+
expect: {
|
|
2027
|
+
rows: 1,
|
|
2028
|
+
state: "installed",
|
|
2029
|
+
actions: ["update-bundle", "uninstall"],
|
|
2030
|
+
shared: 1,
|
|
2031
|
+
sharedActions: []
|
|
2032
|
+
}
|
|
2033
|
+
},
|
|
1871
2034
|
{
|
|
1872
2035
|
id: "outdated-release",
|
|
1873
2036
|
label: "源上有新版(模块行不变,共用依赖行给「更新」)",
|
|
@@ -2090,6 +2253,65 @@ function buildMarketMocks(roster) {
|
|
|
2090
2253
|
actions: ["uninstall"]
|
|
2091
2254
|
}
|
|
2092
2255
|
},
|
|
2256
|
+
{
|
|
2257
|
+
id: "installed-half",
|
|
2258
|
+
label: "本机装了模块,但它没有环境依赖(供给那半没有它)",
|
|
2259
|
+
manifests: [found],
|
|
2260
|
+
capabilities: {},
|
|
2261
|
+
installed: [{
|
|
2262
|
+
unit: id,
|
|
2263
|
+
pkg: "@dsh-workbench/module-one",
|
|
2264
|
+
installed: "0.1.2"
|
|
2265
|
+
}],
|
|
2266
|
+
expect: {
|
|
2267
|
+
rows: 0,
|
|
2268
|
+
installed: 1,
|
|
2269
|
+
installedActions: ["remove-bundle"]
|
|
2270
|
+
}
|
|
2271
|
+
},
|
|
2272
|
+
{
|
|
2273
|
+
id: "installed-half-update",
|
|
2274
|
+
label: "本机装了模块 + 源上有新版(给「更新」,装完要重启)",
|
|
2275
|
+
manifests: [found],
|
|
2276
|
+
capabilities: {},
|
|
2277
|
+
installed: [{
|
|
2278
|
+
unit: id,
|
|
2279
|
+
pkg: "@dsh-workbench/module-one",
|
|
2280
|
+
installed: "0.1.0",
|
|
2281
|
+
latest: "0.1.2"
|
|
2282
|
+
}],
|
|
2283
|
+
expect: {
|
|
2284
|
+
rows: 0,
|
|
2285
|
+
installed: 1,
|
|
2286
|
+
installedActions: ["update-bundle", "remove-bundle"]
|
|
2287
|
+
}
|
|
2288
|
+
},
|
|
2289
|
+
{
|
|
2290
|
+
id: "installed-confirm",
|
|
2291
|
+
label: "卸载本机模块(Modal 确认,标题带模块名)",
|
|
2292
|
+
manifests: [found],
|
|
2293
|
+
capabilities: {},
|
|
2294
|
+
installed: [{
|
|
2295
|
+
unit: id,
|
|
2296
|
+
pkg: "@dsh-workbench/module-one",
|
|
2297
|
+
installed: "0.1.2"
|
|
2298
|
+
}],
|
|
2299
|
+
confirming: id,
|
|
2300
|
+
expect: {
|
|
2301
|
+
rows: 0,
|
|
2302
|
+
installed: 1,
|
|
2303
|
+
installedActions: ["remove-bundle"]
|
|
2304
|
+
}
|
|
2305
|
+
},
|
|
2306
|
+
{
|
|
2307
|
+
id: "first-paint",
|
|
2308
|
+
label: "刚进页面(检测中:能力与本机清单都还没结论)",
|
|
2309
|
+
manifests: [found],
|
|
2310
|
+
capabilities: null,
|
|
2311
|
+
installedRead: false,
|
|
2312
|
+
loaded: false,
|
|
2313
|
+
expect: { rows: 0 }
|
|
2314
|
+
},
|
|
2093
2315
|
{
|
|
2094
2316
|
id: "shared-many",
|
|
2095
2317
|
label: "三个模块(同一份安装)",
|
|
@@ -2125,6 +2347,178 @@ function buildMarketMocks(roster) {
|
|
|
2125
2347
|
];
|
|
2126
2348
|
}
|
|
2127
2349
|
//#endregion
|
|
2350
|
+
//#region src/app/layouts/rightbar/registry.ts
|
|
2351
|
+
function createBoardRegistry() {
|
|
2352
|
+
const modules = [];
|
|
2353
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
2354
|
+
let revision = 0;
|
|
2355
|
+
let sorted = [];
|
|
2356
|
+
let index = /* @__PURE__ */ new Map();
|
|
2357
|
+
let steps = /* @__PURE__ */ new Map();
|
|
2358
|
+
function rebuild() {
|
|
2359
|
+
sorted = [...modules].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id));
|
|
2360
|
+
index = new Map(sorted.map((module) => [module.id, module]));
|
|
2361
|
+
const table = /* @__PURE__ */ new Map();
|
|
2362
|
+
for (const module of sorted) for (const kind of Object.keys(module.steps ?? {})) {
|
|
2363
|
+
const owner = table.get(kind);
|
|
2364
|
+
if (owner !== void 0) throw new Error(`看板层名重复:${kind}(${owner.id} 与 ${module.id} 都声明了它)`);
|
|
2365
|
+
table.set(kind, module);
|
|
2366
|
+
}
|
|
2367
|
+
steps = table;
|
|
2368
|
+
}
|
|
2369
|
+
function notify() {
|
|
2370
|
+
revision += 1;
|
|
2371
|
+
for (const listener of listeners) listener();
|
|
2372
|
+
}
|
|
2373
|
+
return {
|
|
2374
|
+
register(module) {
|
|
2375
|
+
if (modules.some((item) => item.id === module.id)) throw new Error(`看板模块 id 重复:${module.id}(id 会进持久化配置,不能撞)`);
|
|
2376
|
+
modules.push(module);
|
|
2377
|
+
try {
|
|
2378
|
+
rebuild();
|
|
2379
|
+
} catch (error) {
|
|
2380
|
+
modules.pop();
|
|
2381
|
+
rebuild();
|
|
2382
|
+
throw error;
|
|
2383
|
+
}
|
|
2384
|
+
notify();
|
|
2385
|
+
return () => {
|
|
2386
|
+
const at = modules.indexOf(module);
|
|
2387
|
+
if (at < 0) return;
|
|
2388
|
+
modules.splice(at, 1);
|
|
2389
|
+
rebuild();
|
|
2390
|
+
notify();
|
|
2391
|
+
};
|
|
2392
|
+
},
|
|
2393
|
+
all: () => sorted,
|
|
2394
|
+
visible: () => sorted.filter((module) => module.enabledByDefault),
|
|
2395
|
+
byId: (id) => index.get(id),
|
|
2396
|
+
stepOwner: (kind) => steps.get(kind),
|
|
2397
|
+
subscribe(listener) {
|
|
2398
|
+
listeners.add(listener);
|
|
2399
|
+
return () => listeners.delete(listener);
|
|
2400
|
+
},
|
|
2401
|
+
version: () => revision
|
|
2402
|
+
};
|
|
2403
|
+
}
|
|
2404
|
+
//#endregion
|
|
2405
|
+
//#region src/app/units/registry.ts
|
|
2406
|
+
function toBoardModule(face) {
|
|
2407
|
+
return {
|
|
2408
|
+
id: face.manifest.id,
|
|
2409
|
+
titleKey: face.manifest.card?.titleKey ?? face.manifest.id,
|
|
2410
|
+
order: face.manifest.card?.order ?? 100,
|
|
2411
|
+
enabledByDefault: face.manifest.card?.enabledByDefault ?? false,
|
|
2412
|
+
View: face.card,
|
|
2413
|
+
...face.steps === void 0 ? {} : { steps: face.steps }
|
|
2414
|
+
};
|
|
2415
|
+
}
|
|
2416
|
+
function createClientUnitRegistry() {
|
|
2417
|
+
const faces = [];
|
|
2418
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
2419
|
+
const board = createBoardRegistry();
|
|
2420
|
+
let revision = 0;
|
|
2421
|
+
let manifestsCache;
|
|
2422
|
+
function notify() {
|
|
2423
|
+
revision += 1;
|
|
2424
|
+
for (const listener of listeners) listener();
|
|
2425
|
+
}
|
|
2426
|
+
return {
|
|
2427
|
+
register(face) {
|
|
2428
|
+
const id = face.manifest.id;
|
|
2429
|
+
if (faces.some((item) => item.manifest.id === id)) throw new Error(`套件 id 重复:${id}(id 会进持久化配置,不能撞)`);
|
|
2430
|
+
const unregisterBoard = board.register(toBoardModule(face));
|
|
2431
|
+
faces.push(face);
|
|
2432
|
+
manifestsCache = void 0;
|
|
2433
|
+
notify();
|
|
2434
|
+
return () => {
|
|
2435
|
+
const at = faces.findIndex((item) => item.manifest.id === id);
|
|
2436
|
+
if (at < 0) return;
|
|
2437
|
+
faces.splice(at, 1);
|
|
2438
|
+
manifestsCache = void 0;
|
|
2439
|
+
unregisterBoard();
|
|
2440
|
+
notify();
|
|
2441
|
+
};
|
|
2442
|
+
},
|
|
2443
|
+
all: () => faces,
|
|
2444
|
+
manifests: () => {
|
|
2445
|
+
manifestsCache ??= faces.map((face) => face.manifest);
|
|
2446
|
+
return manifestsCache;
|
|
2447
|
+
},
|
|
2448
|
+
board,
|
|
2449
|
+
subscribe(listener) {
|
|
2450
|
+
listeners.add(listener);
|
|
2451
|
+
return () => listeners.delete(listener);
|
|
2452
|
+
},
|
|
2453
|
+
version: () => revision
|
|
2454
|
+
};
|
|
2455
|
+
}
|
|
2456
|
+
//#endregion
|
|
2457
|
+
//#region src/app/units/fixture-unit-mock.tsx
|
|
2458
|
+
var FIXTURE_UNIT_ID = "wb-fixture";
|
|
2459
|
+
var KEY = {
|
|
2460
|
+
cardTitle: `${FIXTURE_UNIT_ID}.cardTitle`,
|
|
2461
|
+
cardMeta: `${FIXTURE_UNIT_ID}.cardMeta`,
|
|
2462
|
+
rowKey: `${FIXTURE_UNIT_ID}.rowKey`,
|
|
2463
|
+
rowValue: `${FIXTURE_UNIT_ID}.rowValue`
|
|
2464
|
+
};
|
|
2465
|
+
var messages = {
|
|
2466
|
+
zh: {
|
|
2467
|
+
[KEY.cardTitle]: "示例模块",
|
|
2468
|
+
[KEY.cardMeta]: "夹具",
|
|
2469
|
+
[KEY.rowKey]: "示例",
|
|
2470
|
+
[KEY.rowValue]: "第 {n} 行"
|
|
2471
|
+
},
|
|
2472
|
+
en: {
|
|
2473
|
+
[KEY.cardTitle]: "Sample module",
|
|
2474
|
+
[KEY.cardMeta]: "Fixture",
|
|
2475
|
+
[KEY.rowKey]: "Sample",
|
|
2476
|
+
[KEY.rowValue]: "Row {n}"
|
|
2477
|
+
}
|
|
2478
|
+
};
|
|
2479
|
+
var manifest = {
|
|
2480
|
+
id: FIXTURE_UNIT_ID,
|
|
2481
|
+
kind: "board",
|
|
2482
|
+
card: {
|
|
2483
|
+
titleKey: KEY.cardTitle,
|
|
2484
|
+
order: 900,
|
|
2485
|
+
enabledByDefault: true
|
|
2486
|
+
},
|
|
2487
|
+
tools: [],
|
|
2488
|
+
host: { inject: [] }
|
|
2489
|
+
};
|
|
2490
|
+
function FixtureCard({ t, onRefresh }) {
|
|
2491
|
+
return /* @__PURE__ */ h("section", { className: "wb-card" }, /* @__PURE__ */ h(CardHead, {
|
|
2492
|
+
t,
|
|
2493
|
+
title: t(KEY.cardTitle),
|
|
2494
|
+
meta: t(KEY.cardMeta),
|
|
2495
|
+
refreshing: false,
|
|
2496
|
+
onRefresh
|
|
2497
|
+
}), /* @__PURE__ */ h("div", { className: "wb-cardBody" }, /* @__PURE__ */ h("div", { className: "wb-rows" }, [
|
|
2498
|
+
1,
|
|
2499
|
+
2,
|
|
2500
|
+
3
|
|
2501
|
+
].map((n) => /* @__PURE__ */ h("div", {
|
|
2502
|
+
className: "wb-row",
|
|
2503
|
+
key: String(n)
|
|
2504
|
+
}, /* @__PURE__ */ h("span", { className: "wb-rowKey" }, t(KEY.rowKey)), /* @__PURE__ */ h("span", { className: "wb-rowValue" }, t(KEY.rowValue, { n: String(n) })))))));
|
|
2505
|
+
}
|
|
2506
|
+
var FIXTURE_FACE = {
|
|
2507
|
+
manifest,
|
|
2508
|
+
messages,
|
|
2509
|
+
card: FixtureCard
|
|
2510
|
+
};
|
|
2511
|
+
var SAMPLE_ROSTER = [manifest];
|
|
2512
|
+
function hasCard(roster) {
|
|
2513
|
+
return roster.some((item) => item.card !== null);
|
|
2514
|
+
}
|
|
2515
|
+
function fixtureRoster(roster) {
|
|
2516
|
+
return hasCard(roster) ? roster : SAMPLE_ROSTER;
|
|
2517
|
+
}
|
|
2518
|
+
function fixtureSeed(roster, all) {
|
|
2519
|
+
return hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE)];
|
|
2520
|
+
}
|
|
2521
|
+
//#endregion
|
|
2128
2522
|
//#region src/app/layouts/rightbar/market-rows.ts
|
|
2129
2523
|
var MARKET_STATE_KEY = {
|
|
2130
2524
|
checking: "panels.market.checking",
|
|
@@ -2142,11 +2536,34 @@ var MARKET_DOT = {
|
|
|
2142
2536
|
unchecked: "idle",
|
|
2143
2537
|
unknown: "idle"
|
|
2144
2538
|
};
|
|
2145
|
-
function
|
|
2539
|
+
function installedRows(modules, manifests, listed) {
|
|
2540
|
+
const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
|
|
2541
|
+
const rows = [];
|
|
2542
|
+
for (const module of modules) {
|
|
2543
|
+
if (listed.has(module.unit)) continue;
|
|
2544
|
+
const latest = module.latest;
|
|
2545
|
+
const outdated = latest !== void 0 && latest !== module.installed;
|
|
2546
|
+
rows.push({
|
|
2547
|
+
id: module.unit,
|
|
2548
|
+
titleKey: titles.get(module.unit) ?? module.pkg,
|
|
2549
|
+
state: outdated ? "outdated" : "installed",
|
|
2550
|
+
pkg: module.pkg,
|
|
2551
|
+
canInstall: false,
|
|
2552
|
+
canUpdate: outdated,
|
|
2553
|
+
canUninstall: true,
|
|
2554
|
+
...outdated ? { moduleUpdate: {
|
|
2555
|
+
installed: module.installed,
|
|
2556
|
+
latest
|
|
2557
|
+
} } : {}
|
|
2558
|
+
});
|
|
2559
|
+
}
|
|
2560
|
+
return rows;
|
|
2561
|
+
}
|
|
2562
|
+
function marketActions$1(row) {
|
|
2146
2563
|
return [
|
|
2147
2564
|
...row.canInstall ? ["install"] : [],
|
|
2148
|
-
...row.canUpdate ? ["update"] : [],
|
|
2149
|
-
...row.canUninstall ? ["uninstall"] : []
|
|
2565
|
+
...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : ["update-bundle"],
|
|
2566
|
+
...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
|
|
2150
2567
|
];
|
|
2151
2568
|
}
|
|
2152
2569
|
function stateOf(capability) {
|
|
@@ -2185,7 +2602,7 @@ function isOnMachine(state) {
|
|
|
2185
2602
|
return state === "installed" || state === "outdated";
|
|
2186
2603
|
}
|
|
2187
2604
|
function marketHasUpdates(rows, shared = []) {
|
|
2188
|
-
return rows.some((row) => row.state === "outdated") || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
|
|
2605
|
+
return rows.some((row) => row.state === "outdated" || row.moduleUpdate !== void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
|
|
2189
2606
|
}
|
|
2190
2607
|
function marketSections(rows) {
|
|
2191
2608
|
const installed = rows.filter((row) => isOnMachine(row.state));
|
|
@@ -2200,7 +2617,7 @@ function marketSections(rows) {
|
|
|
2200
2617
|
rows: rest
|
|
2201
2618
|
}]];
|
|
2202
2619
|
}
|
|
2203
|
-
function marketRows(manifests, capabilities) {
|
|
2620
|
+
function marketRows(manifests, capabilities, updates = {}) {
|
|
2204
2621
|
const catalog = manifests.filter((manifest) => (manifest.env?.plugins ?? []).length > 0 || (manifest.env?.libs ?? []).length > 0);
|
|
2205
2622
|
const rows = [];
|
|
2206
2623
|
for (const manifest of catalog) {
|
|
@@ -2210,6 +2627,7 @@ function marketRows(manifests, capabilities) {
|
|
|
2210
2627
|
const note = noteOf(state, install, manifest);
|
|
2211
2628
|
const onMachine = isOnMachine(state);
|
|
2212
2629
|
const reAdopt = capability?.released === true && install === void 0;
|
|
2630
|
+
const moduleUpdate = updates[manifest.id];
|
|
2213
2631
|
rows.push({
|
|
2214
2632
|
id: manifest.id,
|
|
2215
2633
|
titleKey: manifest.card?.titleKey ?? manifest.id,
|
|
@@ -2217,7 +2635,11 @@ function marketRows(manifests, capabilities) {
|
|
|
2217
2635
|
canInstall: state !== "installed" && (install === "ready" || reAdopt),
|
|
2218
2636
|
canUpdate: onMachine && isOutdated(capability),
|
|
2219
2637
|
canUninstall: onMachine,
|
|
2220
|
-
...
|
|
2638
|
+
...moduleUpdate === void 0 ? {} : { moduleUpdate },
|
|
2639
|
+
...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : { note: {
|
|
2640
|
+
key: "panels.market.moduleUpdate",
|
|
2641
|
+
params: { version: moduleUpdate.latest }
|
|
2642
|
+
} }
|
|
2221
2643
|
});
|
|
2222
2644
|
}
|
|
2223
2645
|
return rows;
|
|
@@ -2376,60 +2798,103 @@ function MarketCheckedAt({ t, at }) {
|
|
|
2376
2798
|
return () => clearInterval(timer);
|
|
2377
2799
|
}, []);
|
|
2378
2800
|
if (at === null) return null;
|
|
2379
|
-
return /* @__PURE__ */ h("span",
|
|
2801
|
+
return /* @__PURE__ */ h("span", null, t("panels.market.checkedAt", { time: checkedAgoText(at, now, t) }));
|
|
2380
2802
|
}
|
|
2803
|
+
var PanelFoot_module_default = {
|
|
2804
|
+
foot: "_foot_1us83_1",
|
|
2805
|
+
footText: "_footText_1us83_12",
|
|
2806
|
+
footTextMd: "_footTextMd_1us83_17"
|
|
2807
|
+
};
|
|
2808
|
+
//#endregion
|
|
2809
|
+
//#region src/shared/components/PanelFoot.tsx
|
|
2810
|
+
function PanelFoot({ text, size = "sm", children }) {
|
|
2811
|
+
return /* @__PURE__ */ h("footer", { className: PanelFoot_module_default.foot }, /* @__PURE__ */ h("span", { className: size === "md" ? PanelFoot_module_default.footTextMd : PanelFoot_module_default.footText }, text), children ?? null);
|
|
2812
|
+
}
|
|
2813
|
+
var MarketPage_module_default = {
|
|
2814
|
+
marketList: "_marketList_7yq35_1",
|
|
2815
|
+
marketRow: "_marketRow_7yq35_12",
|
|
2816
|
+
marketIcon: "_marketIcon_7yq35_22",
|
|
2817
|
+
marketMain: "_marketMain_7yq35_34",
|
|
2818
|
+
marketName: "_marketName_7yq35_41",
|
|
2819
|
+
marketDesc: "_marketDesc_7yq35_50",
|
|
2820
|
+
marketUsedBy: "_marketUsedBy_7yq35_61",
|
|
2821
|
+
marketVersion: "_marketVersion_7yq35_75",
|
|
2822
|
+
marketEnd: "_marketEnd_7yq35_97",
|
|
2823
|
+
marketActions: "_marketActions_7yq35_104",
|
|
2824
|
+
marketSection: "_marketSection_7yq35_110",
|
|
2825
|
+
marketSectionHead: "_marketSectionHead_7yq35_117",
|
|
2826
|
+
marketSectionTitle: "_marketSectionTitle_7yq35_123",
|
|
2827
|
+
marketSectionCount: "_marketSectionCount_7yq35_129",
|
|
2828
|
+
marketProgress: "_marketProgress_7yq35_135",
|
|
2829
|
+
marketNote: "_marketNote_7yq35_145",
|
|
2830
|
+
marketFailure: "_marketFailure_7yq35_152",
|
|
2831
|
+
marketEmpty: "_marketEmpty_7yq35_159",
|
|
2832
|
+
marketPage: "_marketPage_7yq35_164",
|
|
2833
|
+
marketPageHead: "_marketPageHead_7yq35_181",
|
|
2834
|
+
marketPageTitle: "_marketPageTitle_7yq35_189",
|
|
2835
|
+
marketPageIntro: "_marketPageIntro_7yq35_194",
|
|
2836
|
+
marketPageTools: "_marketPageTools_7yq35_200",
|
|
2837
|
+
marketIconButton: "_marketIconButton_7yq35_209",
|
|
2838
|
+
marketIconWrap: "_marketIconWrap_7yq35_234",
|
|
2839
|
+
marketIconButtonSpinning: "_marketIconButtonSpinning_7yq35_238",
|
|
2840
|
+
"wb-spin": "_wb-spin_7yq35_1",
|
|
2841
|
+
marketAddButton: "_marketAddButton_7yq35_242",
|
|
2842
|
+
marketChecking: "_marketChecking_7yq35_259",
|
|
2843
|
+
marketEmptyTitle: "_marketEmptyTitle_7yq35_267"
|
|
2844
|
+
};
|
|
2381
2845
|
//#endregion
|
|
2382
2846
|
//#region src/app/layouts/rightbar/MarketView.tsx
|
|
2383
2847
|
var PROGRESS_KEY = {
|
|
2384
2848
|
install: "panels.market.installing",
|
|
2385
2849
|
update: "panels.market.updating",
|
|
2850
|
+
"update-bundle": "panels.market.updating",
|
|
2851
|
+
"remove-bundle": "panels.market.uninstalling",
|
|
2386
2852
|
uninstall: "panels.market.uninstalling",
|
|
2387
2853
|
"update-dependency": "panels.market.updating"
|
|
2388
2854
|
};
|
|
2389
2855
|
var ACTION_LABEL_KEY = {
|
|
2390
2856
|
install: "panels.market.install",
|
|
2391
2857
|
update: "panels.market.update",
|
|
2858
|
+
"update-bundle": "panels.market.update",
|
|
2859
|
+
"remove-bundle": "panels.market.uninstall",
|
|
2392
2860
|
uninstall: "panels.market.uninstall",
|
|
2393
2861
|
"update-dependency": "panels.market.update"
|
|
2394
2862
|
};
|
|
2395
|
-
function MarketLine({ t, row, pending,
|
|
2863
|
+
function MarketLine({ t, row, pending, failure, onAct }) {
|
|
2396
2864
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
2397
2865
|
const locked = pending !== null;
|
|
2398
|
-
const actions = marketActions(row);
|
|
2866
|
+
const actions = marketActions$1(row);
|
|
2399
2867
|
const stateText = t(MARKET_STATE_KEY[row.state]);
|
|
2400
|
-
return /* @__PURE__ */ h("li", { className:
|
|
2401
|
-
className:
|
|
2868
|
+
return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
|
|
2869
|
+
className: MarketPage_module_default.marketIcon,
|
|
2402
2870
|
"aria-hidden": "true"
|
|
2403
|
-
}, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className:
|
|
2404
|
-
className:
|
|
2871
|
+
}, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, t(row.titleKey)), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: stateText }, /* @__PURE__ */ h("span", {
|
|
2872
|
+
className: MarketPage_module_default.marketDesc,
|
|
2405
2873
|
role: "img",
|
|
2406
|
-
"aria-label": stateText
|
|
2407
|
-
|
|
2408
|
-
}, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
|
|
2874
|
+
"aria-label": stateText
|
|
2875
|
+
}, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2409
2876
|
state: "ongoing",
|
|
2410
2877
|
size: 14
|
|
2411
|
-
}) : /* @__PURE__ */ h(StateDot, {
|
|
2878
|
+
}) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2412
2879
|
state: MARKET_DOT[row.state],
|
|
2413
2880
|
size: 9
|
|
2414
|
-
}), stateText)), /* @__PURE__ */ h("div", { className:
|
|
2881
|
+
}), stateText))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2415
2882
|
state: "ongoing",
|
|
2416
2883
|
size: 14
|
|
2417
|
-
}), t(PROGRESS_KEY[running.action])) :
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
onClick: onCancel
|
|
2432
|
-
}, t("panels.market.confirmNo"))) : null, row.note === void 0 ? null : /* @__PURE__ */ h("div", { className: "wb-marketNote" }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: "wb-marketFailure" }, failure));
|
|
2884
|
+
}), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
|
|
2885
|
+
const danger = action === "uninstall" || action === "remove-bundle";
|
|
2886
|
+
return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
2887
|
+
key: action,
|
|
2888
|
+
type: "button",
|
|
2889
|
+
size: "sm",
|
|
2890
|
+
variant: action === "install" ? "primary" : "outline",
|
|
2891
|
+
className: danger ? "wb-dangerAction" : void 0,
|
|
2892
|
+
icon: danger ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
|
|
2893
|
+
"aria-label": danger ? t("panels.market.uninstallLabel", { name: t(row.titleKey) }) : void 0,
|
|
2894
|
+
disabled: locked,
|
|
2895
|
+
onClick: () => onAct(action)
|
|
2896
|
+
}, t(ACTION_LABEL_KEY[action]));
|
|
2897
|
+
}))), row.note === void 0 ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
|
|
2433
2898
|
}
|
|
2434
2899
|
function SharedLine({ t, row, pending, failure, onAct }) {
|
|
2435
2900
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
@@ -2437,98 +2902,1127 @@ function SharedLine({ t, row, pending, failure, onAct }) {
|
|
|
2437
2902
|
const actions = sharedActions(row);
|
|
2438
2903
|
const stateText = t(SHARED_STATE_KEY[row.state]);
|
|
2439
2904
|
const version = row.version;
|
|
2440
|
-
return /* @__PURE__ */ h("li", { className:
|
|
2441
|
-
className:
|
|
2905
|
+
return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
|
|
2906
|
+
className: MarketPage_module_default.marketIcon,
|
|
2442
2907
|
"aria-hidden": "true"
|
|
2443
|
-
}, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className:
|
|
2444
|
-
className: "wb-marketName",
|
|
2445
|
-
title: row.detail
|
|
2446
|
-
}, row.label, version === void 0 ? null : /* @__PURE__ */ h("span", { className: "wb-marketVersion" }, version.installed !== void 0 && version.latest !== void 0 && row.state === "outdated" ? t("panels.market.versionArrow", {
|
|
2908
|
+
}, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: row.detail ?? "" }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, row.label, version === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, version.installed !== void 0 && version.latest !== void 0 && row.state === "outdated" ? t("panels.market.versionArrow", {
|
|
2447
2909
|
from: version.installed,
|
|
2448
2910
|
to: version.latest
|
|
2449
|
-
}) : version.installed ?? version.latest ?? "")), /* @__PURE__ */ h("span", {
|
|
2450
|
-
className:
|
|
2911
|
+
}) : version.installed ?? version.latest ?? ""))), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: stateText }, /* @__PURE__ */ h("span", {
|
|
2912
|
+
className: MarketPage_module_default.marketDesc,
|
|
2451
2913
|
role: "img",
|
|
2452
|
-
"aria-label": stateText
|
|
2453
|
-
|
|
2454
|
-
}, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
|
|
2914
|
+
"aria-label": stateText
|
|
2915
|
+
}, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2455
2916
|
state: "ongoing",
|
|
2456
2917
|
size: 14
|
|
2457
|
-
}) : /* @__PURE__ */ h(StateDot, {
|
|
2918
|
+
}) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2458
2919
|
state: SHARED_DOT[row.state],
|
|
2459
2920
|
size: 9
|
|
2460
|
-
}), stateText, /* @__PURE__ */ h("span", { className:
|
|
2921
|
+
}), stateText, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) }))))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
2461
2922
|
state: "ongoing",
|
|
2462
2923
|
size: 14
|
|
2463
|
-
}), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className:
|
|
2924
|
+
}), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
2464
2925
|
key: action,
|
|
2465
2926
|
type: "button",
|
|
2466
|
-
|
|
2927
|
+
size: "sm",
|
|
2928
|
+
variant: "outline",
|
|
2467
2929
|
disabled: locked,
|
|
2468
2930
|
onClick: () => onAct(action)
|
|
2469
|
-
}, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className:
|
|
2931
|
+
}, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
|
|
2932
|
+
}
|
|
2933
|
+
function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
|
|
2934
|
+
const [acknowledged, setAcknowledged] = useState(false);
|
|
2935
|
+
return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
|
|
2936
|
+
open: name !== null,
|
|
2937
|
+
title: t("panels.market.confirmUninstallTitle", { name: name ?? "" }),
|
|
2938
|
+
description: t("panels.market.confirmUninstallDetail"),
|
|
2939
|
+
acknowledgeLabel: t("panels.market.confirmUninstallAck"),
|
|
2940
|
+
cancelLabel: t("panels.market.confirmNo"),
|
|
2941
|
+
closeLabel: t("panels.market.confirmNo"),
|
|
2942
|
+
confirmLabel: t("panels.market.confirmYes"),
|
|
2943
|
+
acknowledged,
|
|
2944
|
+
onAcknowledgedChange: setAcknowledged,
|
|
2945
|
+
onCancel,
|
|
2946
|
+
onConfirm
|
|
2947
|
+
});
|
|
2948
|
+
}
|
|
2949
|
+
function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmAction, onConfirming }) {
|
|
2950
|
+
if (rows.length === 0) return null;
|
|
2951
|
+
return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ h(MarketLine, {
|
|
2952
|
+
key: row.id,
|
|
2953
|
+
t,
|
|
2954
|
+
row,
|
|
2955
|
+
pending,
|
|
2956
|
+
failure: failureOf(row.id),
|
|
2957
|
+
onAct: (action) => action === confirmAction ? onConfirming(row.id) : void act(row.id, action)
|
|
2958
|
+
}))));
|
|
2470
2959
|
}
|
|
2471
|
-
function MarketView({ t, manifests, capabilities, freshness, onChanged, mock }) {
|
|
2960
|
+
function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, mock }) {
|
|
2472
2961
|
const source = mock?.manifests ?? manifests;
|
|
2473
2962
|
const effective = mock === void 0 ? capabilities : mock.capabilities;
|
|
2474
|
-
const rows = marketRows(source, effective);
|
|
2963
|
+
const rows = marketRows(source, effective, mock?.updates ?? updates ?? {});
|
|
2475
2964
|
const shared = sharedRows(source, effective);
|
|
2965
|
+
const installedList = installedRows(mock?.installed ?? installed ?? [], source, new Set(rows.map((row) => row.id)));
|
|
2966
|
+
const rowById = new Map([...rows, ...installedList].map((row) => [row.id, row]));
|
|
2476
2967
|
const [pending, setPending] = useState(mock?.pending ?? null);
|
|
2477
2968
|
const provision = useHostWrite({
|
|
2478
2969
|
channel: "provision",
|
|
2479
|
-
networkText: t("panels.failed")
|
|
2970
|
+
networkText: t("panels.failed")
|
|
2971
|
+
});
|
|
2972
|
+
const [confirming, setConfirming] = useState(mock?.confirming ?? null);
|
|
2973
|
+
const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
|
|
2974
|
+
const [failed, setFailed] = useState(mock?.failure ?? null);
|
|
2975
|
+
const [restartNeeded, setRestartNeeded] = useState(false);
|
|
2976
|
+
const act = async (id, action) => {
|
|
2977
|
+
if (mock !== void 0) return;
|
|
2978
|
+
setPending({
|
|
2979
|
+
id,
|
|
2980
|
+
action
|
|
2981
|
+
});
|
|
2982
|
+
setConfirming(null);
|
|
2983
|
+
setFailed(null);
|
|
2984
|
+
setRestartNeeded(false);
|
|
2985
|
+
const dependency = action === "update-dependency";
|
|
2986
|
+
const outcome = await provision.send(dependency ? {
|
|
2987
|
+
action,
|
|
2988
|
+
id
|
|
2989
|
+
} : action === "remove-bundle" ? {
|
|
2990
|
+
action,
|
|
2991
|
+
name: rowById.get(id)?.pkg ?? ""
|
|
2992
|
+
} : {
|
|
2993
|
+
action,
|
|
2994
|
+
unit: id
|
|
2995
|
+
});
|
|
2996
|
+
setPending(null);
|
|
2997
|
+
if (!outcome.ok) {
|
|
2998
|
+
setFailed({
|
|
2999
|
+
id,
|
|
3000
|
+
message: t("panels.market.failed", { reason: outcome.message })
|
|
3001
|
+
});
|
|
3002
|
+
return;
|
|
3003
|
+
}
|
|
3004
|
+
const value = outcome.value;
|
|
3005
|
+
setRestartNeeded(value?.change?.application === "restart-required");
|
|
3006
|
+
onChanged();
|
|
3007
|
+
};
|
|
3008
|
+
if (!(freshness.loaded && installedRead !== false)) return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
3009
|
+
state: "ongoing",
|
|
3010
|
+
size: 14
|
|
3011
|
+
}), t("panels.market.checking")));
|
|
3012
|
+
if (rows.length === 0 && installedList.length === 0) return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
|
|
3013
|
+
return /* @__PURE__ */ h(Fragment, null, marketSections(rows).map((section) => /* @__PURE__ */ h(MarketSection, {
|
|
3014
|
+
key: section.id,
|
|
3015
|
+
t,
|
|
3016
|
+
titleKey: section.titleKey,
|
|
3017
|
+
rows: section.rows,
|
|
3018
|
+
pending,
|
|
3019
|
+
failureOf: (id) => failed?.id === id ? failed.message : null,
|
|
3020
|
+
act,
|
|
3021
|
+
confirmAction: "uninstall",
|
|
3022
|
+
onConfirming: setConfirming
|
|
3023
|
+
})), /* @__PURE__ */ h(MarketSection, {
|
|
3024
|
+
t,
|
|
3025
|
+
titleKey: "panels.market.installedSection",
|
|
3026
|
+
rows: installedList,
|
|
3027
|
+
pending,
|
|
3028
|
+
failureOf: (id) => failed?.id === id ? failed.message : null,
|
|
3029
|
+
act,
|
|
3030
|
+
confirmAction: "remove-bundle",
|
|
3031
|
+
onConfirming: setConfirming
|
|
3032
|
+
}), restartNeeded ? /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, t("panels.market.restartNeeded")) : null, /* @__PURE__ */ h(PanelFoot, {
|
|
3033
|
+
size: "md",
|
|
3034
|
+
text: t("panels.market.foot")
|
|
3035
|
+
}), shared.length === 0 ? null : /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, shared.length), /* @__PURE__ */ h(MarketCheckedAt, {
|
|
3036
|
+
t,
|
|
3037
|
+
at: freshness.checkedAt
|
|
3038
|
+
})), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, shared.map((row) => /* @__PURE__ */ h(SharedLine, {
|
|
3039
|
+
key: row.id,
|
|
3040
|
+
t,
|
|
3041
|
+
row,
|
|
3042
|
+
pending,
|
|
3043
|
+
failure: failed?.id === row.id ? failed.message : null,
|
|
3044
|
+
onAct: (action) => void act(row.id, action)
|
|
3045
|
+
})))), /* @__PURE__ */ h(ConfirmUninstall, {
|
|
3046
|
+
key: confirming ?? "",
|
|
3047
|
+
t,
|
|
3048
|
+
name: confirmingRow === void 0 ? null : t(confirmingRow.titleKey),
|
|
3049
|
+
onCancel: () => setConfirming(null),
|
|
3050
|
+
onConfirm: () => {
|
|
3051
|
+
const id = confirming;
|
|
3052
|
+
setConfirming(null);
|
|
3053
|
+
if (id === null) return;
|
|
3054
|
+
act(id, rowById.get(id)?.pkg === void 0 ? "uninstall" : "remove-bundle");
|
|
3055
|
+
}
|
|
3056
|
+
}));
|
|
3057
|
+
}
|
|
3058
|
+
//#endregion
|
|
3059
|
+
//#region src/shared/api/bundle-install.ts
|
|
3060
|
+
var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
|
|
3061
|
+
var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
|
|
3062
|
+
var MODULE_VERSIONS_ROUTE = "module-versions";
|
|
3063
|
+
//#endregion
|
|
3064
|
+
//#region src/shared/hooks/bundle-queries.ts
|
|
3065
|
+
function readBundleRegistries() {
|
|
3066
|
+
return apiGet(BUNDLE_REGISTRIES_ROUTE);
|
|
3067
|
+
}
|
|
3068
|
+
function readBundleInspection(spec, registry) {
|
|
3069
|
+
return apiGet(BUNDLE_INSPECT_ROUTE, {
|
|
3070
|
+
spec,
|
|
3071
|
+
...registry === void 0 || registry === "" ? {} : { registry }
|
|
3072
|
+
});
|
|
3073
|
+
}
|
|
3074
|
+
function readModuleVersions() {
|
|
3075
|
+
return apiGet(MODULE_VERSIONS_ROUTE);
|
|
3076
|
+
}
|
|
3077
|
+
var AddModule_module_default = {
|
|
3078
|
+
wide: "_wide_xf7fq_1",
|
|
3079
|
+
dialog: "_dialog_xf7fq_8",
|
|
3080
|
+
content: "_content_xf7fq_13",
|
|
3081
|
+
stack: "_stack_xf7fq_18",
|
|
3082
|
+
body: "_body_xf7fq_25",
|
|
3083
|
+
field: "_field_xf7fq_32",
|
|
3084
|
+
input: "_input_xf7fq_39",
|
|
3085
|
+
registryField: "_registryField_xf7fq_45",
|
|
3086
|
+
options: "_options_xf7fq_51",
|
|
3087
|
+
guideToggle: "_guideToggle_xf7fq_59",
|
|
3088
|
+
registryToggle: "_registryToggle_xf7fq_78",
|
|
3089
|
+
registryWrap: "_registryWrap_xf7fq_87",
|
|
3090
|
+
registryChosen: "_registryChosen_xf7fq_121",
|
|
3091
|
+
registry: "_registry_xf7fq_45",
|
|
3092
|
+
registryOption: "_registryOption_xf7fq_143",
|
|
3093
|
+
registryPick: "_registryPick_xf7fq_159",
|
|
3094
|
+
registryTitle: "_registryTitle_xf7fq_179",
|
|
3095
|
+
registryHint: "_registryHint_xf7fq_189",
|
|
3096
|
+
inputError: "_inputError_xf7fq_197",
|
|
3097
|
+
guide: "_guide_xf7fq_59",
|
|
3098
|
+
guideList: "_guideList_xf7fq_214",
|
|
3099
|
+
guideItem: "_guideItem_xf7fq_223",
|
|
3100
|
+
guideIndex: "_guideIndex_xf7fq_230",
|
|
3101
|
+
guideMain: "_guideMain_xf7fq_244",
|
|
3102
|
+
guideTitle: "_guideTitle_xf7fq_252",
|
|
3103
|
+
guideHint: "_guideHint_xf7fq_258",
|
|
3104
|
+
guideExample: "_guideExample_xf7fq_264",
|
|
3105
|
+
guideExampleLabel: "_guideExampleLabel_xf7fq_274",
|
|
3106
|
+
footer: "_footer_xf7fq_278",
|
|
3107
|
+
hero: "_hero_xf7fq_285",
|
|
3108
|
+
heroIcon: "_heroIcon_xf7fq_294",
|
|
3109
|
+
wizardTitle: "_wizardTitle_xf7fq_311",
|
|
3110
|
+
subject: "_subject_xf7fq_318",
|
|
3111
|
+
subjectName: "_subjectName_xf7fq_329",
|
|
3112
|
+
subjectMeta: "_subjectMeta_xf7fq_335",
|
|
3113
|
+
subjectDesc: "_subjectDesc_xf7fq_336",
|
|
3114
|
+
result: "_result_xf7fq_343",
|
|
3115
|
+
resultWarn: "_resultWarn_xf7fq_344",
|
|
3116
|
+
approval: "_approval_xf7fq_357",
|
|
3117
|
+
approvalTitle: "_approvalTitle_xf7fq_367",
|
|
3118
|
+
approvalText: "_approvalText_xf7fq_374",
|
|
3119
|
+
approvalCaution: "_approvalCaution_xf7fq_380",
|
|
3120
|
+
note: "_note_xf7fq_387",
|
|
3121
|
+
noteWarn: "_noteWarn_xf7fq_394",
|
|
3122
|
+
noteError: "_noteError_xf7fq_398",
|
|
3123
|
+
problem: "_problem_xf7fq_402",
|
|
3124
|
+
detailLabel: "_detailLabel_xf7fq_409",
|
|
3125
|
+
detail: "_detail_xf7fq_409"
|
|
3126
|
+
};
|
|
3127
|
+
//#endregion
|
|
3128
|
+
//#region src/app/layouts/market/add-module-text.ts
|
|
3129
|
+
var GUIDE_ITEMS = [
|
|
3130
|
+
{
|
|
3131
|
+
titleKey: "panels.market.add.guideIdTitle",
|
|
3132
|
+
exampleKey: "panels.market.add.guideIdExample",
|
|
3133
|
+
hintKey: "panels.market.add.guideIdHint"
|
|
3134
|
+
},
|
|
3135
|
+
{
|
|
3136
|
+
titleKey: "panels.market.add.guideGitTitle",
|
|
3137
|
+
exampleKey: "panels.market.add.guideGitExample",
|
|
3138
|
+
hintKey: "panels.market.add.guideGitHint"
|
|
3139
|
+
},
|
|
3140
|
+
{
|
|
3141
|
+
titleKey: "panels.market.add.guidePathTitle",
|
|
3142
|
+
exampleKey: "panels.market.add.guidePathExample",
|
|
3143
|
+
hintKey: "panels.market.add.guidePathHint"
|
|
3144
|
+
}
|
|
3145
|
+
];
|
|
3146
|
+
function hostOf(url) {
|
|
3147
|
+
try {
|
|
3148
|
+
return new URL(url).host;
|
|
3149
|
+
} catch {
|
|
3150
|
+
return url;
|
|
3151
|
+
}
|
|
3152
|
+
}
|
|
3153
|
+
var OFFICIAL_NPM_HOST = "registry.npmjs.org";
|
|
3154
|
+
var KNOWN_HOSTS = {
|
|
3155
|
+
[OFFICIAL_NPM_HOST]: "panels.market.add.registryOfficial",
|
|
3156
|
+
"registry.npmmirror.com": "panels.market.add.registryMirror"
|
|
3157
|
+
};
|
|
3158
|
+
function registryNameKey(host) {
|
|
3159
|
+
return KNOWN_HOSTS[host];
|
|
3160
|
+
}
|
|
3161
|
+
function normalizeRegistry(url) {
|
|
3162
|
+
const parsed = new URL(url);
|
|
3163
|
+
if (!parsed.pathname.endsWith("/")) parsed.pathname += "/";
|
|
3164
|
+
return parsed.href;
|
|
3165
|
+
}
|
|
3166
|
+
function registryKey(url, resolved) {
|
|
3167
|
+
const target = url ?? resolved;
|
|
3168
|
+
if (target === null) return "";
|
|
3169
|
+
try {
|
|
3170
|
+
return normalizeRegistry(target);
|
|
3171
|
+
} catch {
|
|
3172
|
+
return target;
|
|
3173
|
+
}
|
|
3174
|
+
}
|
|
3175
|
+
function registryOptions(registries) {
|
|
3176
|
+
const resolved = registries === null ? null : registries.resolved;
|
|
3177
|
+
const entries = [
|
|
3178
|
+
registries === null ? null : registries.registry,
|
|
3179
|
+
...registries === null ? [] : registries.fallbackRegistries,
|
|
3180
|
+
null
|
|
3181
|
+
];
|
|
3182
|
+
const offered = [];
|
|
3183
|
+
const keys = /* @__PURE__ */ new Set();
|
|
3184
|
+
for (const entry of entries) {
|
|
3185
|
+
const key = registryKey(entry, resolved);
|
|
3186
|
+
if (keys.has(key)) continue;
|
|
3187
|
+
keys.add(key);
|
|
3188
|
+
const url = entry ?? resolved;
|
|
3189
|
+
if (url === null) {
|
|
3190
|
+
offered.push({
|
|
3191
|
+
choice: {
|
|
3192
|
+
kind: "default",
|
|
3193
|
+
value: ""
|
|
3194
|
+
},
|
|
3195
|
+
host: OFFICIAL_NPM_HOST,
|
|
3196
|
+
nameKey: "panels.market.add.registryDefault"
|
|
3197
|
+
});
|
|
3198
|
+
continue;
|
|
3199
|
+
}
|
|
3200
|
+
const host = hostOf(url);
|
|
3201
|
+
const nameKey = registryNameKey(host);
|
|
3202
|
+
offered.push({
|
|
3203
|
+
choice: entry === null ? {
|
|
3204
|
+
kind: "default",
|
|
3205
|
+
value: ""
|
|
3206
|
+
} : {
|
|
3207
|
+
kind: "url",
|
|
3208
|
+
value: entry
|
|
3209
|
+
},
|
|
3210
|
+
host,
|
|
3211
|
+
...nameKey === void 0 ? {} : { nameKey }
|
|
3212
|
+
});
|
|
3213
|
+
}
|
|
3214
|
+
offered.push({ choice: {
|
|
3215
|
+
kind: "custom",
|
|
3216
|
+
value: ""
|
|
3217
|
+
} });
|
|
3218
|
+
return offered;
|
|
3219
|
+
}
|
|
3220
|
+
function customRegistryAllowed(value) {
|
|
3221
|
+
return /^https?:\/\//.test(value.trim());
|
|
3222
|
+
}
|
|
3223
|
+
function registryOf(choice, custom) {
|
|
3224
|
+
if (choice.kind === "custom") return customRegistryAllowed(custom) ? custom.trim() : void 0;
|
|
3225
|
+
return choice.value === "" ? void 0 : choice.value;
|
|
3226
|
+
}
|
|
3227
|
+
function registryName(option, t) {
|
|
3228
|
+
if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
|
|
3229
|
+
if (option.nameKey !== void 0) return t(option.nameKey);
|
|
3230
|
+
return option.host ?? t("panels.market.add.registryDefault");
|
|
3231
|
+
}
|
|
3232
|
+
function optionLabel(option, t) {
|
|
3233
|
+
if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
|
|
3234
|
+
if (option.host === void 0) return t("panels.market.add.registryDefault");
|
|
3235
|
+
return option.nameKey === void 0 ? option.host : t("panels.market.add.registryWithHost", {
|
|
3236
|
+
name: t(option.nameKey),
|
|
3237
|
+
host: option.host
|
|
3238
|
+
});
|
|
3239
|
+
}
|
|
3240
|
+
var PROBLEM_KEYS = {
|
|
3241
|
+
"invalid-spec": "panels.market.add.problemInvalid",
|
|
3242
|
+
"already-installed": "panels.market.add.problemInstalled",
|
|
3243
|
+
"not-found": "panels.market.add.problemNotFound",
|
|
3244
|
+
"not-a-package": "panels.market.add.problemNotPackage",
|
|
3245
|
+
"not-a-bundle": "panels.market.add.problemNotBundle",
|
|
3246
|
+
network: "panels.market.add.problemNetwork",
|
|
3247
|
+
unknown: "panels.market.add.problemUnknown"
|
|
3248
|
+
};
|
|
3249
|
+
function problemKey(problem) {
|
|
3250
|
+
return PROBLEM_KEYS[problem] ?? PROBLEM_KEYS.unknown;
|
|
3251
|
+
}
|
|
3252
|
+
var FAILURE_KEYS = {
|
|
3253
|
+
network: "panels.market.add.failureNetwork",
|
|
3254
|
+
"spec-host": "panels.market.add.failureNetworkHost",
|
|
3255
|
+
"not-found": "panels.market.add.failureNotFound",
|
|
3256
|
+
"no-matching-version": "panels.market.add.failureNoMatchingVersion",
|
|
3257
|
+
"disk-full": "panels.market.add.failureDiskFull",
|
|
3258
|
+
permission: "panels.market.add.failurePermission",
|
|
3259
|
+
"build-blocked": "panels.market.add.failureBuildBlocked",
|
|
3260
|
+
integrity: "panels.market.add.failureIntegrity",
|
|
3261
|
+
timeout: "panels.market.add.failureTimeout",
|
|
3262
|
+
"pnpm-missing": "panels.market.add.failurePnpmMissing",
|
|
3263
|
+
"operation-error": "panels.market.add.failureGeneric",
|
|
3264
|
+
"incompatible-version": "panels.market.add.failureGeneric",
|
|
3265
|
+
"not-bundle": "panels.market.add.failureGeneric",
|
|
3266
|
+
"invalid-spec": "panels.market.add.failureGeneric",
|
|
3267
|
+
"bundle-in-use": "panels.market.add.failureGeneric",
|
|
3268
|
+
"not-removable": "panels.market.add.failureGeneric",
|
|
3269
|
+
"stop-profile": "panels.market.add.failureGeneric",
|
|
3270
|
+
"stale-approval": "panels.market.add.failureGeneric"
|
|
3271
|
+
};
|
|
3272
|
+
function failureCode(change) {
|
|
3273
|
+
if (change.failedAt === "spec-host") return "spec-host";
|
|
3274
|
+
return change.errorCode ?? change.packageResult?.kind ?? change.application;
|
|
3275
|
+
}
|
|
3276
|
+
function failureReasonKey(code) {
|
|
3277
|
+
return FAILURE_KEYS[code];
|
|
3278
|
+
}
|
|
3279
|
+
function failureReason(code, application, t) {
|
|
3280
|
+
const key = failureReasonKey(code);
|
|
3281
|
+
if (key !== void 0) return t(key);
|
|
3282
|
+
if (code === application) return t("panels.market.add.reason.unknown");
|
|
3283
|
+
return code;
|
|
3284
|
+
}
|
|
3285
|
+
var SUPPLY_KEYS = {
|
|
3286
|
+
installed: "panels.market.add.supplyInstalled",
|
|
3287
|
+
"pending-restart": "panels.market.add.supplyPending",
|
|
3288
|
+
failed: "panels.market.add.supplyFailed",
|
|
3289
|
+
"not-a-module": "panels.market.add.notModule",
|
|
3290
|
+
"no-needs": void 0
|
|
3291
|
+
};
|
|
3292
|
+
function supplyKey(state) {
|
|
3293
|
+
return SUPPLY_KEYS[state];
|
|
3294
|
+
}
|
|
3295
|
+
//#endregion
|
|
3296
|
+
//#region src/app/layouts/market/AddModuleRegistry.tsx
|
|
3297
|
+
var REGISTRY_ID = "wb-add-module-registry";
|
|
3298
|
+
function AddModuleRegistry({ t, state }) {
|
|
3299
|
+
const chosen = state.choices.find((option) => option.choice.kind === state.choice.kind && option.choice.value === state.choice.value);
|
|
3300
|
+
const customBad = state.choice.kind === "custom" && state.custom.trim() !== "" && !customRegistryAllowed(state.custom);
|
|
3301
|
+
const registryRoot = useRef(null);
|
|
3302
|
+
const registryAnchor = useRef(null);
|
|
3303
|
+
const registryPanel = useRef(null);
|
|
3304
|
+
const registryPosition = (0, _deepseek_ai_dsh_client_ui_primitives.useAnchoredPosition)({
|
|
3305
|
+
open: state.registryOpen,
|
|
3306
|
+
anchorRef: registryAnchor,
|
|
3307
|
+
panelRef: registryPanel,
|
|
3308
|
+
align: "end",
|
|
3309
|
+
gap: 6,
|
|
3310
|
+
margin: 12
|
|
3311
|
+
});
|
|
3312
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(registryRoot, state.registryOpen, (next) => {
|
|
3313
|
+
if (!next) state.closeRegistry();
|
|
3314
|
+
});
|
|
3315
|
+
return /* @__PURE__ */ h("div", {
|
|
3316
|
+
className: AddModule_module_default.registryWrap,
|
|
3317
|
+
ref: registryRoot,
|
|
3318
|
+
onKeyDown: (event) => {
|
|
3319
|
+
if (event.key !== "Escape" || !state.registryOpen) return;
|
|
3320
|
+
event.stopPropagation();
|
|
3321
|
+
state.closeRegistry();
|
|
3322
|
+
}
|
|
3323
|
+
}, /* @__PURE__ */ h("button", {
|
|
3324
|
+
type: "button",
|
|
3325
|
+
ref: registryAnchor,
|
|
3326
|
+
className: AddModule_module_default.registryToggle,
|
|
3327
|
+
"aria-expanded": state.registryOpen,
|
|
3328
|
+
"aria-haspopup": "dialog",
|
|
3329
|
+
"aria-controls": REGISTRY_ID,
|
|
3330
|
+
disabled: state.phase === "inspecting",
|
|
3331
|
+
onClick: state.toggleRegistry
|
|
3332
|
+
}, /* @__PURE__ */ h("span", null, t("panels.market.add.registryToggle")), " ", /* @__PURE__ */ h("span", { className: AddModule_module_default.registryChosen }, chosen === void 0 ? t("panels.market.add.registryDefault") : registryName(chosen, t)), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 })), state.registryOpen ? /* @__PURE__ */ h("div", {
|
|
3333
|
+
id: REGISTRY_ID,
|
|
3334
|
+
className: AddModule_module_default.registry,
|
|
3335
|
+
ref: registryPanel,
|
|
3336
|
+
role: "dialog",
|
|
3337
|
+
"aria-label": t("panels.market.add.registryLegend"),
|
|
3338
|
+
style: registryPosition ?? void 0
|
|
3339
|
+
}, state.choices.map((option) => {
|
|
3340
|
+
const active = option.choice.kind === state.choice.kind && option.choice.value === state.choice.value;
|
|
3341
|
+
if (!(option.choice.kind === "custom")) return /* @__PURE__ */ h("label", {
|
|
3342
|
+
key: `${option.choice.kind}|${option.choice.value}`,
|
|
3343
|
+
className: AddModule_module_default.registryOption,
|
|
3344
|
+
"data-checked": active
|
|
3345
|
+
}, /* @__PURE__ */ h("input", {
|
|
3346
|
+
type: "radio",
|
|
3347
|
+
name: REGISTRY_ID,
|
|
3348
|
+
checked: active,
|
|
3349
|
+
onChange: () => state.setChoice(option.choice)
|
|
3350
|
+
}), /* @__PURE__ */ h("span", { className: AddModule_module_default.registryTitle }, /* @__PURE__ */ h("span", null, optionLabel(option, t))));
|
|
3351
|
+
return /* @__PURE__ */ h("div", {
|
|
3352
|
+
key: `${option.choice.kind}|${option.choice.value}`,
|
|
3353
|
+
className: AddModule_module_default.registryOption,
|
|
3354
|
+
"data-checked": active
|
|
3355
|
+
}, /* @__PURE__ */ h("label", { className: AddModule_module_default.registryPick }, /* @__PURE__ */ h("input", {
|
|
3356
|
+
type: "radio",
|
|
3357
|
+
name: REGISTRY_ID,
|
|
3358
|
+
checked: active,
|
|
3359
|
+
onChange: () => state.setChoice(option.choice)
|
|
3360
|
+
}), /* @__PURE__ */ h("span", { className: AddModule_module_default.registryTitle }, /* @__PURE__ */ h("span", null, t("panels.market.add.registryCustom")))), /* @__PURE__ */ h(TextField, {
|
|
3361
|
+
type: "text",
|
|
3362
|
+
className: AddModule_module_default.registryField,
|
|
3363
|
+
"aria-label": t("panels.market.add.registryCustom"),
|
|
3364
|
+
placeholder: t("panels.market.add.registryCustomPlaceholder"),
|
|
3365
|
+
value: state.custom,
|
|
3366
|
+
disabled: !active,
|
|
3367
|
+
invalid: customBad,
|
|
3368
|
+
onChange: (event) => state.setCustom(event.target.value)
|
|
3369
|
+
}), customBad ? /* @__PURE__ */ h("span", {
|
|
3370
|
+
className: AddModule_module_default.inputError,
|
|
3371
|
+
role: "alert"
|
|
3372
|
+
}, t("panels.market.add.registryCustomInvalid")) : null, /* @__PURE__ */ h("span", { className: AddModule_module_default.registryHint }, t("panels.market.add.registryCustomHint")));
|
|
3373
|
+
})) : null);
|
|
3374
|
+
}
|
|
3375
|
+
//#endregion
|
|
3376
|
+
//#region src/app/layouts/market/AddModuleForm.tsx
|
|
3377
|
+
function AddModuleForm({ t, state }) {
|
|
3378
|
+
return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.field }, /* @__PURE__ */ h(TextField, {
|
|
3379
|
+
type: "text",
|
|
3380
|
+
className: AddModule_module_default.input,
|
|
3381
|
+
value: state.spec,
|
|
3382
|
+
placeholder: t("panels.market.add.specPlaceholder"),
|
|
3383
|
+
spellCheck: false,
|
|
3384
|
+
autoComplete: "off",
|
|
3385
|
+
"aria-label": t("panels.market.add.specLabel"),
|
|
3386
|
+
invalid: state.problem !== null,
|
|
3387
|
+
onChange: (event) => state.setSpec(event.target.value),
|
|
3388
|
+
onKeyDown: (event) => {
|
|
3389
|
+
if (event.key === "Enter" && state.spec.trim() !== "") state.check();
|
|
3390
|
+
}
|
|
3391
|
+
})), state.problem === null ? null : /* @__PURE__ */ h("p", {
|
|
3392
|
+
className: AddModule_module_default.problem,
|
|
3393
|
+
role: "alert"
|
|
3394
|
+
}, t(problemKey(state.problem.problem), { reason: state.problem.reason })), state.failure === null ? null : /* @__PURE__ */ h("p", {
|
|
3395
|
+
className: AddModule_module_default.problem,
|
|
3396
|
+
role: "alert"
|
|
3397
|
+
}, state.failure), /* @__PURE__ */ h("div", { className: AddModule_module_default.options }, /* @__PURE__ */ h("button", {
|
|
3398
|
+
type: "button",
|
|
3399
|
+
className: AddModule_module_default.guideToggle,
|
|
3400
|
+
"aria-expanded": state.guideOpen,
|
|
3401
|
+
onClick: state.toggleGuide
|
|
3402
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }), /* @__PURE__ */ h("span", null, t(state.guideOpen ? "panels.market.add.guideHide" : "panels.market.add.guideToggle"))), /* @__PURE__ */ h(AddModuleRegistry, {
|
|
3403
|
+
t,
|
|
3404
|
+
state
|
|
3405
|
+
})), state.guideOpen ? /* @__PURE__ */ h("div", { className: AddModule_module_default.guide }, /* @__PURE__ */ h("ol", { className: AddModule_module_default.guideList }, GUIDE_ITEMS.map((item, index) => /* @__PURE__ */ h("li", {
|
|
3406
|
+
className: AddModule_module_default.guideItem,
|
|
3407
|
+
key: item.exampleKey
|
|
3408
|
+
}, /* @__PURE__ */ h("span", {
|
|
3409
|
+
className: AddModule_module_default.guideIndex,
|
|
3410
|
+
"aria-hidden": "true"
|
|
3411
|
+
}, index + 1), /* @__PURE__ */ h("span", { className: AddModule_module_default.guideMain }, /* @__PURE__ */ h("span", { className: AddModule_module_default.guideTitle }, t(item.titleKey)), /* @__PURE__ */ h("span", { className: AddModule_module_default.guideHint }, t(item.hintKey)), /* @__PURE__ */ h("span", { className: AddModule_module_default.guideExample }, /* @__PURE__ */ h("span", { className: AddModule_module_default.guideExampleLabel }, t("panels.market.add.guideExampleLabel")), /* @__PURE__ */ h("code", null, t(item.exampleKey)))), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3412
|
+
type: "button",
|
|
3413
|
+
size: "sm",
|
|
3414
|
+
variant: "outline",
|
|
3415
|
+
"aria-label": t("panels.market.add.guideFill"),
|
|
3416
|
+
onClick: () => state.setSpec(t(item.exampleKey))
|
|
3417
|
+
}, t("panels.market.add.guideFill")))))) : null);
|
|
3418
|
+
}
|
|
3419
|
+
var SafetyNote_module_default = { note: "_note_1enlz_1" };
|
|
3420
|
+
//#endregion
|
|
3421
|
+
//#region src/app/layouts/market/SafetyNote.tsx
|
|
3422
|
+
function SafetyNote({ t }) {
|
|
3423
|
+
return /* @__PURE__ */ h("p", {
|
|
3424
|
+
className: SafetyNote_module_default.note,
|
|
3425
|
+
role: "note"
|
|
3426
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
|
|
3427
|
+
size: 14,
|
|
3428
|
+
"aria-hidden": "true"
|
|
3429
|
+
}), /* @__PURE__ */ h("span", null, t("panels.market.add.guideSafety")));
|
|
3430
|
+
}
|
|
3431
|
+
//#endregion
|
|
3432
|
+
//#region src/app/layouts/market/AddModuleStages.tsx
|
|
3433
|
+
var SUPPLY_TONES = {
|
|
3434
|
+
"pending-restart": `${AddModule_module_default.note} ${AddModule_module_default.noteWarn}`,
|
|
3435
|
+
"not-a-module": `${AddModule_module_default.note} ${AddModule_module_default.noteWarn}`,
|
|
3436
|
+
failed: `${AddModule_module_default.note} ${AddModule_module_default.noteError}`
|
|
3437
|
+
};
|
|
3438
|
+
function supplyTone(state) {
|
|
3439
|
+
return SUPPLY_TONES[state] ?? AddModule_module_default.note;
|
|
3440
|
+
}
|
|
3441
|
+
function AddModulePending({ t, kind }) {
|
|
3442
|
+
return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
|
|
3443
|
+
className: AddModule_module_default.heroIcon,
|
|
3444
|
+
"data-state": "ongoing",
|
|
3445
|
+
"aria-hidden": "true"
|
|
3446
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
3447
|
+
state: "ongoing",
|
|
3448
|
+
size: 28
|
|
3449
|
+
})), /* @__PURE__ */ h("h2", {
|
|
3450
|
+
className: AddModule_module_default.wizardTitle,
|
|
3451
|
+
role: "status"
|
|
3452
|
+
}, kind === "inspecting" ? t("panels.market.add.checking") : t("panels.market.add.installingTitle"))));
|
|
3453
|
+
}
|
|
3454
|
+
function AddModulePreview({ t, state }) {
|
|
3455
|
+
const preview = state.preview;
|
|
3456
|
+
if (preview === null) return null;
|
|
3457
|
+
const source = preview.registry === "" ? t("panels.market.add.registryDefault") : preview.registry;
|
|
3458
|
+
return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, preview.name), preview.version === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: preview.version })), preview.description === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectDesc }, preview.description), /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, source)));
|
|
3459
|
+
}
|
|
3460
|
+
function AddModuleResult({ t, state }) {
|
|
3461
|
+
const outcome = state.outcome;
|
|
3462
|
+
if (outcome === null) return null;
|
|
3463
|
+
const reason = failureReason(failureCode(outcome.change), outcome.change.application, t);
|
|
3464
|
+
const supply = supplyKey(outcome.supply.state);
|
|
3465
|
+
const builds = state.builds;
|
|
3466
|
+
const failed = outcome.change.application === "failed";
|
|
3467
|
+
const restart = outcome.change.application === "restart-required";
|
|
3468
|
+
const cancelled = outcome.change.application === "cancelled";
|
|
3469
|
+
const name = outcome.module.kind === "module" ? outcome.module.unit : outcome.module.pkg;
|
|
3470
|
+
return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
|
|
3471
|
+
className: AddModule_module_default.heroIcon,
|
|
3472
|
+
"data-state": failed ? "error" : cancelled ? "idle" : "done",
|
|
3473
|
+
"aria-hidden": "true"
|
|
3474
|
+
}, failed ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, { size: 28 }) : cancelled ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
3475
|
+
state: "idle",
|
|
3476
|
+
size: 28
|
|
3477
|
+
}) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleFillRegular, { size: 28 })), /* @__PURE__ */ h("h2", {
|
|
3478
|
+
className: AddModule_module_default.wizardTitle,
|
|
3479
|
+
role: failed ? "alert" : "status"
|
|
3480
|
+
}, failed ? t("panels.market.add.failedTitle") : cancelled ? t("panels.market.add.cancelledTitle") : t("panels.market.add.installedTitle"))), /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, outcome.module.pkg), name === outcome.module.pkg ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, name), outcome.module.version === void 0 ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: outcome.module.version }))), failed ? /* @__PURE__ */ h("p", {
|
|
3481
|
+
className: AddModule_module_default.resultWarn,
|
|
3482
|
+
role: "alert"
|
|
3483
|
+
}, t("panels.market.add.failed", { reason })) : restart ? /* @__PURE__ */ h("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")) : cancelled ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ h("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 ? null : /* @__PURE__ */ h("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ h("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)), state.removed ? /* @__PURE__ */ h("p", { className: AddModule_module_default.note }, t("panels.market.add.removed")) : null);
|
|
3484
|
+
}
|
|
3485
|
+
//#endregion
|
|
3486
|
+
//#region src/app/layouts/market/add-module-mock.ts
|
|
3487
|
+
function change(over) {
|
|
3488
|
+
return {
|
|
3489
|
+
application: "applied",
|
|
3490
|
+
stage: "install",
|
|
3491
|
+
changed: true,
|
|
3492
|
+
target: "@dsh-workbench/module-hello",
|
|
3493
|
+
...over
|
|
3494
|
+
};
|
|
3495
|
+
}
|
|
3496
|
+
function outcome(over, supply = { state: "installed" }) {
|
|
3497
|
+
return {
|
|
3498
|
+
change: change(over),
|
|
3499
|
+
module: {
|
|
3500
|
+
kind: "module",
|
|
3501
|
+
pkg: "@dsh-workbench/module-hello",
|
|
3502
|
+
unit: "hello",
|
|
3503
|
+
version: "0.1.2"
|
|
3504
|
+
},
|
|
3505
|
+
supply
|
|
3506
|
+
};
|
|
3507
|
+
}
|
|
3508
|
+
function refused(problem, reason = "") {
|
|
3509
|
+
return {
|
|
3510
|
+
id: `refused-${problem}`,
|
|
3511
|
+
label: `预检拒:${problem}`,
|
|
3512
|
+
phase: "idle",
|
|
3513
|
+
spec: "@dsh-workbench/module-nope",
|
|
3514
|
+
problem: {
|
|
3515
|
+
problem,
|
|
3516
|
+
reason
|
|
3517
|
+
}
|
|
3518
|
+
};
|
|
3519
|
+
}
|
|
3520
|
+
var ADD_MODULE_MOCKS = [
|
|
3521
|
+
{
|
|
3522
|
+
id: "empty",
|
|
3523
|
+
label: "刚打开",
|
|
3524
|
+
phase: "idle",
|
|
3525
|
+
spec: ""
|
|
3526
|
+
},
|
|
3527
|
+
{
|
|
3528
|
+
id: "typed",
|
|
3529
|
+
label: "填了包名",
|
|
3530
|
+
phase: "idle",
|
|
3531
|
+
spec: "@dsh-workbench/module-hello"
|
|
3532
|
+
},
|
|
3533
|
+
{
|
|
3534
|
+
id: "guide",
|
|
3535
|
+
label: "展开了示例",
|
|
3536
|
+
phase: "idle",
|
|
3537
|
+
spec: "",
|
|
3538
|
+
guideOpen: true
|
|
3539
|
+
},
|
|
3540
|
+
{
|
|
3541
|
+
id: "inspecting",
|
|
3542
|
+
label: "正在预检",
|
|
3543
|
+
phase: "inspecting",
|
|
3544
|
+
spec: "@dsh-workbench/module-hello"
|
|
3545
|
+
},
|
|
3546
|
+
refused("invalid-spec"),
|
|
3547
|
+
refused("already-installed", "已经在 profile 里:@dsh-workbench/module-hello@0.1.2"),
|
|
3548
|
+
refused("not-found"),
|
|
3549
|
+
refused("not-a-package"),
|
|
3550
|
+
refused("not-a-bundle"),
|
|
3551
|
+
refused("network", "getaddrinfo ENOTFOUND registry.example.com"),
|
|
3552
|
+
refused("unknown", "pnpm 的返回码是 1"),
|
|
3553
|
+
{
|
|
3554
|
+
id: "preview",
|
|
3555
|
+
label: "预览(可装)",
|
|
3556
|
+
phase: "preview",
|
|
3557
|
+
spec: "@dsh-workbench/module-hello",
|
|
3558
|
+
preview: {
|
|
3559
|
+
name: "@dsh-workbench/module-hello",
|
|
3560
|
+
version: "0.1.2",
|
|
3561
|
+
description: "最小样本模块:一枚「你好」卡片",
|
|
3562
|
+
registry: "registry.npmmirror.com"
|
|
3563
|
+
}
|
|
3564
|
+
},
|
|
3565
|
+
{
|
|
3566
|
+
id: "preview-no-source",
|
|
3567
|
+
label: "预览(问不出源)",
|
|
3568
|
+
phase: "preview",
|
|
3569
|
+
spec: "@dsh-workbench/module-hello",
|
|
3570
|
+
preview: {
|
|
3571
|
+
name: "@dsh-workbench/module-hello",
|
|
3572
|
+
version: "",
|
|
3573
|
+
description: "",
|
|
3574
|
+
registry: ""
|
|
3575
|
+
}
|
|
3576
|
+
},
|
|
3577
|
+
{
|
|
3578
|
+
id: "installing",
|
|
3579
|
+
label: "正在安装(可取消)",
|
|
3580
|
+
phase: "installing",
|
|
3581
|
+
spec: "@dsh-workbench/module-hello"
|
|
3582
|
+
},
|
|
3583
|
+
{
|
|
3584
|
+
id: "needs-approval",
|
|
3585
|
+
label: "安装脚本待批",
|
|
3586
|
+
phase: "result",
|
|
3587
|
+
spec: "@dsh-workbench/module-hello",
|
|
3588
|
+
outcome: {
|
|
3589
|
+
...outcome({
|
|
3590
|
+
application: "failed",
|
|
3591
|
+
stage: "install",
|
|
3592
|
+
errorCode: "build-blocked",
|
|
3593
|
+
pendingBuilds: ["esbuild", "sharp"]
|
|
3594
|
+
}),
|
|
3595
|
+
supply: {
|
|
3596
|
+
state: "failed",
|
|
3597
|
+
reason: "装上之前得先允许安装脚本"
|
|
3598
|
+
}
|
|
3599
|
+
}
|
|
3600
|
+
},
|
|
3601
|
+
{
|
|
3602
|
+
id: "failed-registry",
|
|
3603
|
+
label: "失败:源上没有",
|
|
3604
|
+
phase: "result",
|
|
3605
|
+
spec: "@dsh-workbench/module-nope",
|
|
3606
|
+
outcome: outcome({
|
|
3607
|
+
application: "failed",
|
|
3608
|
+
stage: "install",
|
|
3609
|
+
failedAt: "registry",
|
|
3610
|
+
errorCode: "not-found"
|
|
3611
|
+
})
|
|
3612
|
+
},
|
|
3613
|
+
{
|
|
3614
|
+
id: "failed-pnpm",
|
|
3615
|
+
label: "失败:pnpm 执行出错",
|
|
3616
|
+
phase: "result",
|
|
3617
|
+
spec: "@dsh-workbench/module-hello",
|
|
3618
|
+
outcome: outcome({
|
|
3619
|
+
application: "failed",
|
|
3620
|
+
stage: "install",
|
|
3621
|
+
errorCode: "operation-error",
|
|
3622
|
+
errorDetail: "ERR_PNPM_FETCH_404 GET https://registry.example.com/@dsh-workbench%2Fmodule-hello: Not Found"
|
|
3623
|
+
})
|
|
3624
|
+
},
|
|
3625
|
+
{
|
|
3626
|
+
id: "done-applied",
|
|
3627
|
+
label: "装好了(已生效)",
|
|
3628
|
+
phase: "result",
|
|
3629
|
+
spec: "@dsh-workbench/module-hello",
|
|
3630
|
+
outcome: outcome({})
|
|
3631
|
+
},
|
|
3632
|
+
{
|
|
3633
|
+
id: "done-restart",
|
|
3634
|
+
label: "装好了(要重启)",
|
|
3635
|
+
phase: "result",
|
|
3636
|
+
spec: "@dsh-workbench/module-hello",
|
|
3637
|
+
outcome: outcome({ application: "restart-required" }, { state: "pending-restart" })
|
|
3638
|
+
},
|
|
3639
|
+
{
|
|
3640
|
+
id: "not-a-module",
|
|
3641
|
+
label: "装进来的不是模块",
|
|
3642
|
+
phase: "result",
|
|
3643
|
+
spec: "some-random-package",
|
|
3644
|
+
outcome: {
|
|
3645
|
+
change: change({ target: "some-random-package" }),
|
|
3646
|
+
module: {
|
|
3647
|
+
kind: "not-module",
|
|
3648
|
+
pkg: "some-random-package"
|
|
3649
|
+
},
|
|
3650
|
+
supply: { state: "not-a-module" }
|
|
3651
|
+
}
|
|
3652
|
+
},
|
|
3653
|
+
{
|
|
3654
|
+
id: "cancelled",
|
|
3655
|
+
label: "已取消",
|
|
3656
|
+
phase: "result",
|
|
3657
|
+
spec: "@dsh-workbench/module-hello",
|
|
3658
|
+
outcome: outcome({
|
|
3659
|
+
application: "cancelled",
|
|
3660
|
+
changed: false
|
|
3661
|
+
}, { state: "no-needs" })
|
|
3662
|
+
},
|
|
3663
|
+
{
|
|
3664
|
+
id: "done-no-needs",
|
|
3665
|
+
label: "装好了(不要额外供给)",
|
|
3666
|
+
phase: "result",
|
|
3667
|
+
spec: "@dsh-workbench/module-plain",
|
|
3668
|
+
outcome: {
|
|
3669
|
+
change: change({ target: "@dsh-workbench/module-plain" }),
|
|
3670
|
+
module: {
|
|
3671
|
+
kind: "module",
|
|
3672
|
+
pkg: "@dsh-workbench/module-plain",
|
|
3673
|
+
unit: "plain",
|
|
3674
|
+
version: "1.0.0"
|
|
3675
|
+
},
|
|
3676
|
+
supply: { state: "no-needs" }
|
|
3677
|
+
}
|
|
3678
|
+
},
|
|
3679
|
+
{
|
|
3680
|
+
id: "removed",
|
|
3681
|
+
label: "移除掉了",
|
|
3682
|
+
phase: "result",
|
|
3683
|
+
spec: "some-random-package",
|
|
3684
|
+
removed: true,
|
|
3685
|
+
outcome: {
|
|
3686
|
+
change: change({
|
|
3687
|
+
stage: "remove",
|
|
3688
|
+
target: "some-random-package"
|
|
3689
|
+
}),
|
|
3690
|
+
module: {
|
|
3691
|
+
kind: "not-module",
|
|
3692
|
+
pkg: "some-random-package"
|
|
3693
|
+
},
|
|
3694
|
+
supply: { state: "not-a-module" }
|
|
3695
|
+
}
|
|
3696
|
+
}
|
|
3697
|
+
];
|
|
3698
|
+
var frozen = () => {};
|
|
3699
|
+
function stateOfMock(base, mock) {
|
|
3700
|
+
return {
|
|
3701
|
+
...base,
|
|
3702
|
+
spec: mock.spec,
|
|
3703
|
+
guideOpen: mock.guideOpen ?? false,
|
|
3704
|
+
phase: mock.phase,
|
|
3705
|
+
choices: base.choices,
|
|
3706
|
+
custom: "",
|
|
3707
|
+
registryOpen: false,
|
|
3708
|
+
problem: mock.problem ?? null,
|
|
3709
|
+
preview: mock.preview ?? null,
|
|
3710
|
+
outcome: mock.outcome ?? null,
|
|
3711
|
+
failure: mock.failure ?? null,
|
|
3712
|
+
removed: mock.removed ?? false,
|
|
3713
|
+
builds: mock.outcome?.change.pendingBuilds ?? [],
|
|
3714
|
+
setSpec: frozen,
|
|
3715
|
+
setChoice: frozen,
|
|
3716
|
+
setCustom: frozen,
|
|
3717
|
+
toggleRegistry: frozen,
|
|
3718
|
+
closeRegistry: frozen,
|
|
3719
|
+
toggleGuide: frozen,
|
|
3720
|
+
check: frozen,
|
|
3721
|
+
edit: frozen,
|
|
3722
|
+
install: frozen,
|
|
3723
|
+
cancelInstall: frozen,
|
|
3724
|
+
removeIt: frozen
|
|
3725
|
+
};
|
|
3726
|
+
}
|
|
3727
|
+
//#endregion
|
|
3728
|
+
//#region src/app/layouts/market/use-add-module.ts
|
|
3729
|
+
function newRequestId() {
|
|
3730
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
3731
|
+
}
|
|
3732
|
+
function useAddModule(options) {
|
|
3733
|
+
const { open, onInstalled, failedText } = options;
|
|
3734
|
+
const [spec, setSpec] = useState("");
|
|
3735
|
+
const [choice, setChoice] = useState({
|
|
3736
|
+
kind: "default",
|
|
3737
|
+
value: ""
|
|
3738
|
+
});
|
|
3739
|
+
const [custom, setCustom] = useState("");
|
|
3740
|
+
const [registryOpen, setRegistryOpen] = useState(false);
|
|
3741
|
+
const [guideOpen, setGuideOpen] = useState(false);
|
|
3742
|
+
const [phase, setPhase] = useState("idle");
|
|
3743
|
+
const [choices, setChoices] = useState(() => registryOptions(null));
|
|
3744
|
+
const [problem, setProblem] = useState(null);
|
|
3745
|
+
const [preview, setPreview] = useState(null);
|
|
3746
|
+
const [outcome, setOutcome] = useState(null);
|
|
3747
|
+
const [failure, setFailure] = useState(null);
|
|
3748
|
+
const [removed, setRemoved] = useState(false);
|
|
3749
|
+
const generationRef = useRef(0);
|
|
3750
|
+
const requestIdRef = useRef("");
|
|
3751
|
+
const write = useHostWrite({
|
|
3752
|
+
channel: "provision",
|
|
3753
|
+
networkText: failedText
|
|
2480
3754
|
});
|
|
2481
|
-
const
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
3755
|
+
const cancel = useHostWrite({
|
|
3756
|
+
channel: "provision",
|
|
3757
|
+
networkText: failedText
|
|
3758
|
+
});
|
|
3759
|
+
const remove = useHostWrite({
|
|
3760
|
+
channel: "provision",
|
|
3761
|
+
networkText: failedText
|
|
3762
|
+
});
|
|
3763
|
+
useEffect(() => {
|
|
3764
|
+
if (!open) return void 0;
|
|
3765
|
+
let alive = true;
|
|
3766
|
+
readBundleRegistries().then((response) => {
|
|
3767
|
+
if (!alive) return;
|
|
3768
|
+
setChoices(registryOptions(response.ok ? response.registries : null));
|
|
2488
3769
|
});
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
3770
|
+
return () => {
|
|
3771
|
+
alive = false;
|
|
3772
|
+
};
|
|
3773
|
+
}, [open]);
|
|
3774
|
+
const registry = registryOf(choice, custom);
|
|
3775
|
+
useEffect(() => {
|
|
3776
|
+
if (open) return;
|
|
3777
|
+
generationRef.current += 1;
|
|
3778
|
+
setGuideOpen(false);
|
|
3779
|
+
setRegistryOpen(false);
|
|
3780
|
+
setProblem(null);
|
|
3781
|
+
setPreview(null);
|
|
3782
|
+
setOutcome(null);
|
|
3783
|
+
setFailure(null);
|
|
3784
|
+
setRemoved(false);
|
|
3785
|
+
setPhase("idle");
|
|
3786
|
+
}, [open]);
|
|
3787
|
+
const check = useCallback(() => {
|
|
3788
|
+
const wanted = spec.trim();
|
|
3789
|
+
if (wanted === "") return;
|
|
3790
|
+
const mine = generationRef.current + 1;
|
|
3791
|
+
generationRef.current = mine;
|
|
3792
|
+
setProblem(null);
|
|
3793
|
+
setFailure(null);
|
|
3794
|
+
setPreview(null);
|
|
3795
|
+
setOutcome(null);
|
|
3796
|
+
setRemoved(false);
|
|
3797
|
+
setRegistryOpen(false);
|
|
3798
|
+
setPhase("inspecting");
|
|
3799
|
+
readBundleInspection(wanted, registry).then((response) => {
|
|
3800
|
+
if (generationRef.current !== mine) return;
|
|
3801
|
+
if (!response.ok) {
|
|
3802
|
+
setFailure(response.error.message);
|
|
3803
|
+
setPhase("idle");
|
|
3804
|
+
return;
|
|
3805
|
+
}
|
|
3806
|
+
const inspection = response.inspection;
|
|
3807
|
+
if (inspection.status === "refused") {
|
|
3808
|
+
setProblem({
|
|
3809
|
+
problem: inspection.problem,
|
|
3810
|
+
reason: inspection.reason
|
|
3811
|
+
});
|
|
3812
|
+
setPhase("idle");
|
|
3813
|
+
return;
|
|
3814
|
+
}
|
|
3815
|
+
setPreview({
|
|
3816
|
+
name: inspection.name ?? wanted,
|
|
3817
|
+
version: inspection.version ?? "",
|
|
3818
|
+
description: inspection.description ?? "",
|
|
3819
|
+
registry: inspection.registry ?? ""
|
|
3820
|
+
});
|
|
3821
|
+
setPhase("preview");
|
|
2498
3822
|
});
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
3823
|
+
}, [spec, registry]);
|
|
3824
|
+
const install = useCallback((approvedBuilds = []) => {
|
|
3825
|
+
const wanted = spec.trim();
|
|
3826
|
+
if (wanted === "") return;
|
|
3827
|
+
const mine = generationRef.current + 1;
|
|
3828
|
+
generationRef.current = mine;
|
|
3829
|
+
const id = newRequestId();
|
|
3830
|
+
requestIdRef.current = id;
|
|
3831
|
+
setFailure(null);
|
|
3832
|
+
setRemoved(false);
|
|
3833
|
+
setPhase("installing");
|
|
3834
|
+
write.send({
|
|
3835
|
+
action: "install-bundle",
|
|
3836
|
+
spec: wanted,
|
|
3837
|
+
...registry === void 0 ? {} : { registry },
|
|
3838
|
+
requestId: id,
|
|
3839
|
+
...approvedBuilds.length === 0 ? {} : { approvedBuilds: [...approvedBuilds] }
|
|
3840
|
+
}).then((response) => {
|
|
3841
|
+
if (generationRef.current !== mine) return;
|
|
3842
|
+
if (!response.ok) {
|
|
3843
|
+
setFailure(response.message);
|
|
3844
|
+
setPhase("result");
|
|
3845
|
+
return;
|
|
3846
|
+
}
|
|
3847
|
+
const value = response.value;
|
|
3848
|
+
setOutcome({
|
|
3849
|
+
change: value.change,
|
|
3850
|
+
module: value.module,
|
|
3851
|
+
supply: value.supply
|
|
3852
|
+
});
|
|
3853
|
+
setPhase("result");
|
|
3854
|
+
if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
|
|
3855
|
+
});
|
|
3856
|
+
}, [
|
|
3857
|
+
spec,
|
|
3858
|
+
registry,
|
|
3859
|
+
write,
|
|
3860
|
+
onInstalled
|
|
3861
|
+
]);
|
|
3862
|
+
const cancelInstall = useCallback(() => {
|
|
3863
|
+
cancel.send({
|
|
3864
|
+
action: "cancel-install",
|
|
3865
|
+
requestId: requestIdRef.current
|
|
3866
|
+
});
|
|
3867
|
+
}, [cancel]);
|
|
3868
|
+
const removeIt = useCallback(() => {
|
|
3869
|
+
const pkg = outcome?.module.pkg;
|
|
3870
|
+
if (pkg === void 0) return;
|
|
3871
|
+
remove.send({
|
|
3872
|
+
action: "remove-bundle",
|
|
3873
|
+
name: pkg
|
|
3874
|
+
}).then((result) => {
|
|
3875
|
+
if (!result.ok) return;
|
|
3876
|
+
setRemoved(true);
|
|
3877
|
+
onInstalled();
|
|
2503
3878
|
});
|
|
2504
|
-
|
|
3879
|
+
}, [
|
|
3880
|
+
outcome,
|
|
3881
|
+
remove,
|
|
3882
|
+
onInstalled
|
|
3883
|
+
]);
|
|
3884
|
+
const edit = useCallback(() => {
|
|
3885
|
+
generationRef.current += 1;
|
|
3886
|
+
setProblem(null);
|
|
3887
|
+
setFailure(null);
|
|
3888
|
+
setPreview(null);
|
|
3889
|
+
setPhase("idle");
|
|
3890
|
+
}, []);
|
|
3891
|
+
return {
|
|
3892
|
+
spec,
|
|
3893
|
+
choice,
|
|
3894
|
+
custom,
|
|
3895
|
+
registryOpen,
|
|
3896
|
+
guideOpen,
|
|
3897
|
+
phase,
|
|
3898
|
+
choices,
|
|
3899
|
+
problem,
|
|
3900
|
+
preview,
|
|
3901
|
+
outcome,
|
|
3902
|
+
failure,
|
|
3903
|
+
removed,
|
|
3904
|
+
builds: outcome?.change.pendingBuilds ?? [],
|
|
3905
|
+
setSpec,
|
|
3906
|
+
setChoice: useCallback((next) => {
|
|
3907
|
+
setChoice(next);
|
|
3908
|
+
}, []),
|
|
3909
|
+
setCustom,
|
|
3910
|
+
toggleRegistry: useCallback(() => setRegistryOpen((value) => !value), []),
|
|
3911
|
+
closeRegistry: useCallback(() => setRegistryOpen(false), []),
|
|
3912
|
+
toggleGuide: useCallback(() => setGuideOpen((value) => !value), []),
|
|
3913
|
+
check,
|
|
3914
|
+
edit,
|
|
3915
|
+
install,
|
|
3916
|
+
cancelInstall,
|
|
3917
|
+
removeIt
|
|
2505
3918
|
};
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
3919
|
+
}
|
|
3920
|
+
//#endregion
|
|
3921
|
+
//#region src/app/layouts/market/AddModuleDialog.tsx
|
|
3922
|
+
function AddModuleDialog({ t, open, onClose, onInstalled }) {
|
|
3923
|
+
const real = useAddModule({
|
|
3924
|
+
open,
|
|
3925
|
+
onInstalled,
|
|
3926
|
+
failedText: t("panels.failed")
|
|
3927
|
+
});
|
|
3928
|
+
const pick = useFixturePick({
|
|
3929
|
+
fixtures: ADD_MODULE_MOCKS,
|
|
3930
|
+
initial: ADD_MODULE_MOCKS[0]?.id ?? null
|
|
3931
|
+
});
|
|
3932
|
+
const mock = pick.enabled ? pick.current : void 0;
|
|
3933
|
+
const state = mock === void 0 ? real : stateOfMock(real, mock);
|
|
3934
|
+
if (!open) return null;
|
|
3935
|
+
const installing = state.phase === "installing";
|
|
3936
|
+
const checking = state.phase === "inspecting";
|
|
3937
|
+
const empty = state.spec.trim() === "";
|
|
3938
|
+
const failed = state.outcome?.change.application === "failed";
|
|
3939
|
+
const builds = state.builds;
|
|
3940
|
+
const notModule = state.outcome?.supply.state === "not-a-module";
|
|
3941
|
+
const footer = /* @__PURE__ */ h(Fragment, null, state.phase === "idle" ? /* @__PURE__ */ h("div", { className: AddModule_module_default.footer }, /* @__PURE__ */ h(SafetyNote, { t }), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3942
|
+
type: "button",
|
|
3943
|
+
variant: "primary",
|
|
3944
|
+
size: "md",
|
|
3945
|
+
className: AddModule_module_default.wide,
|
|
3946
|
+
disabled: empty || checking,
|
|
3947
|
+
"aria-busy": checking,
|
|
3948
|
+
onClick: state.check
|
|
3949
|
+
}, checking ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
3950
|
+
state: "ongoing",
|
|
3951
|
+
size: 12
|
|
3952
|
+
}) : null, t(checking ? "panels.market.add.checking" : "panels.market.add.run"))) : null, state.phase === "preview" ? /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3953
|
+
type: "button",
|
|
3954
|
+
variant: "outline",
|
|
3955
|
+
size: "md",
|
|
3956
|
+
onClick: state.edit
|
|
3957
|
+
}, t("panels.market.add.edit")), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3958
|
+
type: "button",
|
|
3959
|
+
variant: "primary",
|
|
3960
|
+
size: "md",
|
|
3961
|
+
onClick: () => state.install()
|
|
3962
|
+
}, t("panels.market.add.run"))) : null, installing ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3963
|
+
type: "button",
|
|
3964
|
+
variant: "outline",
|
|
3965
|
+
size: "sm",
|
|
3966
|
+
onClick: state.cancelInstall
|
|
3967
|
+
}, t("panels.market.add.cancel")) : null, state.phase === "result" ? /* @__PURE__ */ h(Fragment, null, failed && builds.length === 0 ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3968
|
+
type: "button",
|
|
3969
|
+
variant: "outline",
|
|
3970
|
+
size: "md",
|
|
3971
|
+
onClick: state.edit
|
|
3972
|
+
}, t("panels.market.add.changeRegistry")) : null, notModule ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3973
|
+
type: "button",
|
|
3974
|
+
variant: "outline",
|
|
3975
|
+
size: "md",
|
|
3976
|
+
className: "wb-dangerAction",
|
|
3977
|
+
onClick: state.removeIt
|
|
3978
|
+
}, t("panels.market.add.remove")) : null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3979
|
+
type: "button",
|
|
3980
|
+
variant: "outline",
|
|
3981
|
+
size: "md",
|
|
3982
|
+
onClick: onClose
|
|
3983
|
+
}, t("panels.market.add.close")), builds.length === 0 ? null : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3984
|
+
type: "button",
|
|
3985
|
+
variant: "primary",
|
|
3986
|
+
size: "md",
|
|
3987
|
+
onClick: () => state.install(builds)
|
|
3988
|
+
}, t("panels.market.add.approveRun")), failed && builds.length === 0 ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3989
|
+
type: "button",
|
|
3990
|
+
variant: "primary",
|
|
3991
|
+
size: "md",
|
|
3992
|
+
onClick: () => state.install()
|
|
3993
|
+
}, t("panels.market.add.retry")) : null) : null);
|
|
3994
|
+
return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
3995
|
+
open,
|
|
3996
|
+
onClose: () => {
|
|
3997
|
+
if (!installing) onClose();
|
|
3998
|
+
},
|
|
3999
|
+
title: t("panels.market.add.title"),
|
|
4000
|
+
description: t("panels.market.add.description"),
|
|
4001
|
+
closeLabel: t("panels.market.add.close"),
|
|
4002
|
+
className: AddModule_module_default.dialog,
|
|
4003
|
+
contentClassName: AddModule_module_default.content,
|
|
4004
|
+
footer
|
|
4005
|
+
}, /* @__PURE__ */ h("div", { className: AddModule_module_default.stack }, pick.enabled ? /* @__PURE__ */ h(MockStrip, {
|
|
4006
|
+
mocks: ADD_MODULE_MOCKS,
|
|
4007
|
+
index: pick.index,
|
|
4008
|
+
note: "夹具:只切状态,不发请求",
|
|
4009
|
+
onPick: (at) => pick.pick(ADD_MODULE_MOCKS[at]?.id ?? null)
|
|
4010
|
+
}) : null, state.phase === "idle" ? /* @__PURE__ */ h(AddModuleForm, {
|
|
2513
4011
|
t,
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
confirming: confirming === row.id,
|
|
2517
|
-
failure: failed?.id === row.id ? failed.message : null,
|
|
2518
|
-
onAct: (action) => action === "uninstall" ? setConfirming(row.id) : void act(row.id, action),
|
|
2519
|
-
onConfirm: () => void act(row.id, "uninstall"),
|
|
2520
|
-
onCancel: () => setConfirming(null)
|
|
2521
|
-
}))))), /* @__PURE__ */ h("footer", { className: "wb-modulesFoot" }, /* @__PURE__ */ h("span", { className: "wb-modulesFootText" }, t("panels.market.foot"))), shared.length === 0 ? null : /* @__PURE__ */ h("section", { className: "wb-marketSection" }, /* @__PURE__ */ h("div", { className: "wb-marketSectionHead" }, /* @__PURE__ */ h("h2", { className: "wb-marketSectionTitle" }, t("panels.market.sectionShared")), /* @__PURE__ */ h("span", { className: "wb-marketSectionCount" }, shared.length), /* @__PURE__ */ h(MarketCheckedAt, {
|
|
4012
|
+
state
|
|
4013
|
+
}) : null, state.phase === "inspecting" ? /* @__PURE__ */ h(AddModulePending, {
|
|
2522
4014
|
t,
|
|
2523
|
-
|
|
2524
|
-
})
|
|
2525
|
-
key: row.id,
|
|
4015
|
+
kind: "inspecting"
|
|
4016
|
+
}) : null, state.phase === "preview" ? /* @__PURE__ */ h(AddModulePreview, {
|
|
2526
4017
|
t,
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
})
|
|
4018
|
+
state
|
|
4019
|
+
}) : null, state.phase === "installing" ? /* @__PURE__ */ h(AddModulePending, {
|
|
4020
|
+
t,
|
|
4021
|
+
kind: "installing"
|
|
4022
|
+
}) : null, state.phase === "result" ? /* @__PURE__ */ h(AddModuleResult, {
|
|
4023
|
+
t,
|
|
4024
|
+
state
|
|
4025
|
+
}) : null));
|
|
2532
4026
|
}
|
|
2533
4027
|
//#endregion
|
|
2534
4028
|
//#region src/app/layouts/market/panel.tsx
|
|
@@ -2538,8 +4032,13 @@ var MOCK_FRESHNESS = {
|
|
|
2538
4032
|
checking: false,
|
|
2539
4033
|
checkedAt: null
|
|
2540
4034
|
};
|
|
2541
|
-
function
|
|
4035
|
+
function useLiveManifests(units) {
|
|
4036
|
+
useSyncExternalStore(useCallback((listener) => units.subscribe(listener), [units]), useCallback(() => units.version(), [units]));
|
|
4037
|
+
return units.manifests();
|
|
4038
|
+
}
|
|
4039
|
+
function makeMarketEntryIcon(units) {
|
|
2542
4040
|
return function MarketEntryIcon({ size = 16 }) {
|
|
4041
|
+
const manifests = useLiveManifests(units);
|
|
2543
4042
|
const { capabilities } = useCapabilityMap(0);
|
|
2544
4043
|
const hasUpdates = marketHasUpdates(marketRows(manifests, capabilities), sharedRows(manifests, capabilities));
|
|
2545
4044
|
useEffect(() => {
|
|
@@ -2549,12 +4048,34 @@ function makeMarketEntryIcon(manifests) {
|
|
|
2549
4048
|
return /* @__PURE__ */ h(IconModules, { size });
|
|
2550
4049
|
};
|
|
2551
4050
|
}
|
|
2552
|
-
function MarketPanel({ t,
|
|
4051
|
+
function MarketPanel({ t, units }) {
|
|
4052
|
+
const manifests = useLiveManifests(units);
|
|
2553
4053
|
const { capabilities, checkedAt, checking, forceProbe, reload } = useCapabilityMap(0);
|
|
2554
4054
|
const [decided, setDecided] = useState(false);
|
|
4055
|
+
const [adding, setAdding] = useState(false);
|
|
4056
|
+
const [updates, setUpdates] = useState({});
|
|
4057
|
+
const [installed, setInstalled] = useState([]);
|
|
4058
|
+
const [installedRead, setInstalledRead] = useState(false);
|
|
4059
|
+
const loadUpdates = useCallback(() => {
|
|
4060
|
+
readModuleVersions().then((response) => {
|
|
4061
|
+
setInstalledRead(true);
|
|
4062
|
+
if (!response.ok) return;
|
|
4063
|
+
setInstalled(response.modules);
|
|
4064
|
+
const next = {};
|
|
4065
|
+
for (const module of response.modules) {
|
|
4066
|
+
if (module.latest === void 0 || module.latest === module.installed) continue;
|
|
4067
|
+
next[module.unit] = {
|
|
4068
|
+
installed: module.installed,
|
|
4069
|
+
latest: module.latest
|
|
4070
|
+
};
|
|
4071
|
+
}
|
|
4072
|
+
setUpdates(next);
|
|
4073
|
+
});
|
|
4074
|
+
}, []);
|
|
2555
4075
|
useEffect(() => {
|
|
2556
4076
|
if (decided) return;
|
|
2557
4077
|
setDecided(true);
|
|
4078
|
+
loadUpdates();
|
|
2558
4079
|
if (!shouldProbeOnEnter({
|
|
2559
4080
|
checkedAt,
|
|
2560
4081
|
now: Date.now(),
|
|
@@ -2565,27 +4086,45 @@ function MarketPanel({ t, manifests }) {
|
|
|
2565
4086
|
}, [
|
|
2566
4087
|
decided,
|
|
2567
4088
|
checkedAt,
|
|
2568
|
-
forceProbe
|
|
4089
|
+
forceProbe,
|
|
4090
|
+
loadUpdates
|
|
2569
4091
|
]);
|
|
2570
4092
|
const freshness = {
|
|
2571
4093
|
loaded: capabilities !== null,
|
|
2572
4094
|
checking,
|
|
2573
4095
|
checkedAt
|
|
2574
4096
|
};
|
|
2575
|
-
const
|
|
4097
|
+
const pendingFreshness = {
|
|
4098
|
+
loaded: false,
|
|
4099
|
+
checking: true,
|
|
4100
|
+
checkedAt: null
|
|
4101
|
+
};
|
|
4102
|
+
const marketMocks = useMemo(() => buildMarketMocks(fixtureRoster(manifests)), [manifests]);
|
|
2576
4103
|
const fixturePick = useFixturePick({
|
|
2577
4104
|
fixtures: marketMocks,
|
|
2578
4105
|
initial: marketMocks[0]?.id ?? null
|
|
2579
4106
|
});
|
|
2580
4107
|
const mock = fixturePick.enabled ? fixturePick.current : void 0;
|
|
2581
4108
|
const mockNonce = fixturePick.nonce;
|
|
2582
|
-
return /* @__PURE__ */ h("div", { className:
|
|
4109
|
+
return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ h("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ h("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketPageTools }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("panels.market.recheck") }, /* @__PURE__ */ h("button", {
|
|
2583
4110
|
type: "button",
|
|
2584
|
-
className:
|
|
2585
|
-
|
|
4111
|
+
className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
|
|
4112
|
+
"aria-label": t("panels.market.checkUpdates"),
|
|
2586
4113
|
disabled: checking,
|
|
2587
|
-
onClick:
|
|
2588
|
-
|
|
4114
|
+
onClick: () => {
|
|
4115
|
+
forceProbe();
|
|
4116
|
+
loadUpdates();
|
|
4117
|
+
}
|
|
4118
|
+
}, /* @__PURE__ */ h("span", {
|
|
4119
|
+
className: MarketPage_module_default.marketIconWrap,
|
|
4120
|
+
"aria-hidden": "true"
|
|
4121
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, null)))), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4122
|
+
variant: "primary",
|
|
4123
|
+
size: "sm",
|
|
4124
|
+
className: MarketPage_module_default.marketAddButton,
|
|
4125
|
+
icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
|
|
4126
|
+
onClick: () => setAdding(true)
|
|
4127
|
+
}, t("panels.market.add.open")))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
|
|
2589
4128
|
mocks: marketMocks,
|
|
2590
4129
|
index: fixturePick.index,
|
|
2591
4130
|
onPick: (at) => fixturePick.pick(marketMocks[at]?.id ?? null)
|
|
@@ -2594,12 +4133,20 @@ function MarketPanel({ t, manifests }) {
|
|
|
2594
4133
|
t,
|
|
2595
4134
|
manifests,
|
|
2596
4135
|
capabilities,
|
|
2597
|
-
freshness: mock === void 0 ? freshness : MOCK_FRESHNESS,
|
|
4136
|
+
freshness: mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS,
|
|
2598
4137
|
onChanged: reload,
|
|
4138
|
+
updates,
|
|
4139
|
+
installed,
|
|
4140
|
+
installedRead: mock === void 0 ? installedRead : mock.installedRead ?? true,
|
|
2599
4141
|
mock
|
|
4142
|
+
}), /* @__PURE__ */ h(AddModuleDialog, {
|
|
4143
|
+
t,
|
|
4144
|
+
open: adding,
|
|
4145
|
+
onClose: () => setAdding(false),
|
|
4146
|
+
onInstalled: reload
|
|
2600
4147
|
}));
|
|
2601
4148
|
}
|
|
2602
|
-
function registerMarketPanel(ctx,
|
|
4149
|
+
function registerMarketPanel(ctx, units) {
|
|
2603
4150
|
const t = ctx.locale.bind(LOCALE_NS);
|
|
2604
4151
|
ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
|
|
2605
4152
|
name: "sidebar.panellist",
|
|
@@ -2607,12 +4154,12 @@ function registerMarketPanel(ctx, manifests) {
|
|
|
2607
4154
|
order: 30,
|
|
2608
4155
|
locale: LOCALE_NS,
|
|
2609
4156
|
label: () => t("panels.tab.market")
|
|
2610
|
-
}, makeMarketEntryIcon(
|
|
4157
|
+
}, makeMarketEntryIcon(units)));
|
|
2611
4158
|
ctx.slots.inject("main", () => ctx.slots.register({
|
|
2612
4159
|
name: "main",
|
|
2613
4160
|
key: MARKET_PANEL_ID,
|
|
2614
4161
|
locale: LOCALE_NS,
|
|
2615
|
-
inject: () => ({
|
|
4162
|
+
inject: () => ({ units })
|
|
2616
4163
|
}, MarketPanel));
|
|
2617
4164
|
}
|
|
2618
4165
|
//#endregion
|
|
@@ -2621,107 +4168,40 @@ var CLIENT_UNITS = [];
|
|
|
2621
4168
|
function assembleClientUnits(registry) {
|
|
2622
4169
|
for (const face of CLIENT_UNITS) registry.register(face);
|
|
2623
4170
|
}
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
}
|
|
2659
|
-
notify();
|
|
2660
|
-
return () => {
|
|
2661
|
-
const at = modules.indexOf(module);
|
|
2662
|
-
if (at < 0) return;
|
|
2663
|
-
modules.splice(at, 1);
|
|
2664
|
-
rebuild();
|
|
2665
|
-
notify();
|
|
2666
|
-
};
|
|
2667
|
-
},
|
|
2668
|
-
all: () => sorted,
|
|
2669
|
-
visible: () => sorted.filter((module) => module.enabledByDefault),
|
|
2670
|
-
byId: (id) => index.get(id),
|
|
2671
|
-
stepOwner: (kind) => steps.get(kind),
|
|
2672
|
-
subscribe(listener) {
|
|
2673
|
-
listeners.add(listener);
|
|
2674
|
-
return () => listeners.delete(listener);
|
|
2675
|
-
},
|
|
2676
|
-
version: () => revision
|
|
2677
|
-
};
|
|
2678
|
-
}
|
|
2679
|
-
//#endregion
|
|
2680
|
-
//#region src/app/units/registry.ts
|
|
2681
|
-
function toBoardModule(face) {
|
|
2682
|
-
return {
|
|
2683
|
-
id: face.manifest.id,
|
|
2684
|
-
titleKey: face.manifest.card?.titleKey ?? face.manifest.id,
|
|
2685
|
-
order: face.manifest.card?.order ?? 100,
|
|
2686
|
-
enabledByDefault: face.manifest.card?.enabledByDefault ?? false,
|
|
2687
|
-
View: face.card,
|
|
2688
|
-
...face.steps === void 0 ? {} : { steps: face.steps }
|
|
2689
|
-
};
|
|
2690
|
-
}
|
|
2691
|
-
function createClientUnitRegistry() {
|
|
2692
|
-
const faces = [];
|
|
2693
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
2694
|
-
const board = createBoardRegistry();
|
|
2695
|
-
let revision = 0;
|
|
2696
|
-
function notify() {
|
|
2697
|
-
revision += 1;
|
|
2698
|
-
for (const listener of listeners) listener();
|
|
2699
|
-
}
|
|
2700
|
-
return {
|
|
2701
|
-
register(face) {
|
|
2702
|
-
const id = face.manifest.id;
|
|
2703
|
-
if (faces.some((item) => item.manifest.id === id)) throw new Error(`套件 id 重复:${id}(id 会进持久化配置,不能撞)`);
|
|
2704
|
-
const unregisterBoard = board.register(toBoardModule(face));
|
|
2705
|
-
faces.push(face);
|
|
2706
|
-
notify();
|
|
2707
|
-
return () => {
|
|
2708
|
-
const at = faces.findIndex((item) => item.manifest.id === id);
|
|
2709
|
-
if (at < 0) return;
|
|
2710
|
-
faces.splice(at, 1);
|
|
2711
|
-
unregisterBoard();
|
|
2712
|
-
notify();
|
|
2713
|
-
};
|
|
2714
|
-
},
|
|
2715
|
-
all: () => faces,
|
|
2716
|
-
manifests: () => faces.map((face) => face.manifest),
|
|
2717
|
-
board,
|
|
2718
|
-
subscribe(listener) {
|
|
2719
|
-
listeners.add(listener);
|
|
2720
|
-
return () => listeners.delete(listener);
|
|
2721
|
-
},
|
|
2722
|
-
version: () => revision
|
|
2723
|
-
};
|
|
2724
|
-
}
|
|
4171
|
+
var BootGate_module_default = {
|
|
4172
|
+
actions: "_actions_jlw8j_1",
|
|
4173
|
+
progress: "_progress_jlw8j_2",
|
|
4174
|
+
commandRow: "_commandRow_jlw8j_3",
|
|
4175
|
+
bridge: "_bridge_jlw8j_4",
|
|
4176
|
+
raw: "_raw_jlw8j_5",
|
|
4177
|
+
gate: "_gate_jlw8j_9",
|
|
4178
|
+
card: "_card_jlw8j_20",
|
|
4179
|
+
title: "_title_jlw8j_35",
|
|
4180
|
+
hint: "_hint_jlw8j_43",
|
|
4181
|
+
steps: "_steps_jlw8j_50",
|
|
4182
|
+
step: "_step_jlw8j_50",
|
|
4183
|
+
mark: "_mark_jlw8j_77",
|
|
4184
|
+
label: "_label_jlw8j_102",
|
|
4185
|
+
detail: "_detail_jlw8j_106",
|
|
4186
|
+
elapsed: "_elapsed_jlw8j_124",
|
|
4187
|
+
error: "_error_jlw8j_132",
|
|
4188
|
+
copy: "_copy_jlw8j_158",
|
|
4189
|
+
command: "_command_jlw8j_3",
|
|
4190
|
+
buttons: "_buttons_jlw8j_191",
|
|
4191
|
+
mockSlot: "_mockSlot_jlw8j_198",
|
|
4192
|
+
button: "_button_jlw8j_191",
|
|
4193
|
+
fixTitle: "_fixTitle_jlw8j_249",
|
|
4194
|
+
rawSummary: "_rawSummary_jlw8j_282",
|
|
4195
|
+
bridgeLines: "_bridgeLines_jlw8j_292",
|
|
4196
|
+
bridgeLine: "_bridgeLine_jlw8j_292",
|
|
4197
|
+
link: "_link_jlw8j_309",
|
|
4198
|
+
loading: "_loading_jlw8j_323",
|
|
4199
|
+
loadingMotion: "_loadingMotion_jlw8j_332",
|
|
4200
|
+
"wb-spin": "_wb-spin_jlw8j_1",
|
|
4201
|
+
loadingTrack: "_loadingTrack_jlw8j_337",
|
|
4202
|
+
loadingArc: "_loadingArc_jlw8j_338",
|
|
4203
|
+
"wb-dash": "_wb-dash_jlw8j_1"
|
|
4204
|
+
};
|
|
2725
4205
|
//#endregion
|
|
2726
4206
|
//#region src/app/layouts/env-gate/gate-text.ts
|
|
2727
4207
|
function failedStepText(guidance, t) {
|
|
@@ -2795,10 +4275,10 @@ function spinnerIcon(size = 14) {
|
|
|
2795
4275
|
svg.setAttribute("height", String(size));
|
|
2796
4276
|
svg.setAttribute("viewBox", "0 0 24 24");
|
|
2797
4277
|
svg.setAttribute("aria-hidden", "true");
|
|
2798
|
-
svg.setAttribute("class",
|
|
4278
|
+
svg.setAttribute("class", BootGate_module_default.loading);
|
|
2799
4279
|
const group = document.createElementNS(SVG_NS, "g");
|
|
2800
|
-
group.setAttribute("class",
|
|
2801
|
-
for (const name of [
|
|
4280
|
+
group.setAttribute("class", BootGate_module_default.loadingMotion);
|
|
4281
|
+
for (const name of [BootGate_module_default.loadingTrack, BootGate_module_default.loadingArc]) {
|
|
2802
4282
|
const circle = document.createElementNS(SVG_NS, "circle");
|
|
2803
4283
|
circle.setAttribute("cx", "12");
|
|
2804
4284
|
circle.setAttribute("cy", "12");
|
|
@@ -3054,7 +4534,7 @@ function el(tag, className, text) {
|
|
|
3054
4534
|
return node;
|
|
3055
4535
|
}
|
|
3056
4536
|
function mountGateMockStrip(options) {
|
|
3057
|
-
const strip = el("div",
|
|
4537
|
+
const strip = el("div", `wb-mockStrip ${BootGate_module_default.mockSlot}`);
|
|
3058
4538
|
const note = el("span", "wb-mockNote");
|
|
3059
4539
|
const chips = [];
|
|
3060
4540
|
const paint = (active) => {
|
|
@@ -3114,9 +4594,9 @@ function createForcePlan() {
|
|
|
3114
4594
|
};
|
|
3115
4595
|
}
|
|
3116
4596
|
function commandRow(t) {
|
|
3117
|
-
const row = el$1("div",
|
|
3118
|
-
const code = el$1("code",
|
|
3119
|
-
const copy = el$1("button",
|
|
4597
|
+
const row = el$1("div", BootGate_module_default.commandRow);
|
|
4598
|
+
const code = el$1("code", BootGate_module_default.command);
|
|
4599
|
+
const copy = el$1("button", BootGate_module_default.copy);
|
|
3120
4600
|
copy.setAttribute("type", "button");
|
|
3121
4601
|
copy.setAttribute("aria-label", t("env.copyCommand"));
|
|
3122
4602
|
copy.title = t("env.copyCommand");
|
|
@@ -3125,14 +4605,15 @@ function commandRow(t) {
|
|
|
3125
4605
|
let text;
|
|
3126
4606
|
copy.addEventListener("click", () => {
|
|
3127
4607
|
if (text === void 0) return;
|
|
3128
|
-
|
|
4608
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text).then((ok) => {
|
|
4609
|
+
if (!ok) return;
|
|
3129
4610
|
copy.replaceChildren(svgIcon("check"));
|
|
3130
4611
|
copy.title = t("env.copied");
|
|
3131
4612
|
setTimeout(() => {
|
|
3132
4613
|
copy.replaceChildren(svgIcon("copy"));
|
|
3133
4614
|
copy.title = t("env.copyCommand");
|
|
3134
4615
|
}, 1500);
|
|
3135
|
-
}
|
|
4616
|
+
});
|
|
3136
4617
|
});
|
|
3137
4618
|
return {
|
|
3138
4619
|
row,
|
|
@@ -3148,47 +4629,47 @@ function createBootGate(ctx, options = {}) {
|
|
|
3148
4629
|
const request = options.request ?? apiGet;
|
|
3149
4630
|
if (typeof document === "undefined" || typeof document.getElementById !== "function" || document.body === void 0) return { close: () => {} };
|
|
3150
4631
|
const root = document.getElementById("root");
|
|
3151
|
-
const overlay = el$1("div",
|
|
4632
|
+
const overlay = el$1("div", BootGate_module_default.gate);
|
|
3152
4633
|
overlay.setAttribute("role", "dialog");
|
|
3153
4634
|
overlay.setAttribute("aria-modal", "true");
|
|
3154
4635
|
overlay.setAttribute("aria-label", t("env.title"));
|
|
3155
|
-
const card = el$1("div",
|
|
3156
|
-
const title = el$1("h1",
|
|
3157
|
-
const hint = el$1("p",
|
|
3158
|
-
const list = el$1("ul",
|
|
3159
|
-
const progressRow = el$1("div",
|
|
4636
|
+
const card = el$1("div", BootGate_module_default.card);
|
|
4637
|
+
const title = el$1("h1", BootGate_module_default.title, t("env.title"));
|
|
4638
|
+
const hint = el$1("p", BootGate_module_default.hint, t("env.checking"));
|
|
4639
|
+
const list = el$1("ul", BootGate_module_default.steps);
|
|
4640
|
+
const progressRow = el$1("div", BootGate_module_default.progress);
|
|
3160
4641
|
progressRow.hidden = true;
|
|
3161
|
-
const elapsed = el$1("span",
|
|
4642
|
+
const elapsed = el$1("span", BootGate_module_default.elapsed);
|
|
3162
4643
|
progressRow.append(elapsed);
|
|
3163
|
-
const actions = el$1("div",
|
|
4644
|
+
const actions = el$1("div", BootGate_module_default.actions);
|
|
3164
4645
|
actions.hidden = true;
|
|
3165
|
-
const fixTitle = el$1("h2",
|
|
3166
|
-
const fixWhy = el$1("p",
|
|
3167
|
-
const fixStep = el$1("p",
|
|
3168
|
-
const fixAdvice = el$1("p",
|
|
3169
|
-
const raw = el$1("details",
|
|
3170
|
-
const rawSummary = el$1("summary",
|
|
3171
|
-
const errorBox = el$1("pre",
|
|
4646
|
+
const fixTitle = el$1("h2", BootGate_module_default.fixTitle, t("env.fix.title"));
|
|
4647
|
+
const fixWhy = el$1("p", BootGate_module_default.hint);
|
|
4648
|
+
const fixStep = el$1("p", BootGate_module_default.hint);
|
|
4649
|
+
const fixAdvice = el$1("p", BootGate_module_default.hint);
|
|
4650
|
+
const raw = el$1("details", BootGate_module_default.raw);
|
|
4651
|
+
const rawSummary = el$1("summary", BootGate_module_default.rawSummary, t("env.fix.details"));
|
|
4652
|
+
const errorBox = el$1("pre", BootGate_module_default.error);
|
|
3172
4653
|
raw.append(rawSummary, errorBox);
|
|
3173
|
-
const buttons = el$1("div",
|
|
3174
|
-
const retry = el$1("button",
|
|
4654
|
+
const buttons = el$1("div", BootGate_module_default.buttons);
|
|
4655
|
+
const retry = el$1("button", BootGate_module_default.button, t("env.retry"));
|
|
3175
4656
|
retry.setAttribute("type", "button");
|
|
3176
4657
|
const fixCommand = commandRow(t);
|
|
3177
4658
|
buttons.append(retry);
|
|
3178
4659
|
actions.append(fixTitle, fixWhy, fixStep, fixCommand.row, fixAdvice, buttons, raw);
|
|
3179
|
-
const bridge = el$1("div",
|
|
4660
|
+
const bridge = el$1("div", BootGate_module_default.bridge);
|
|
3180
4661
|
bridge.hidden = true;
|
|
3181
|
-
const bridgeTitle = el$1("h2",
|
|
3182
|
-
const bridgeWhy = el$1("p",
|
|
3183
|
-
const bridgeLines = el$1("ul",
|
|
4662
|
+
const bridgeTitle = el$1("h2", BootGate_module_default.fixTitle, t("env.fix.title"));
|
|
4663
|
+
const bridgeWhy = el$1("p", BootGate_module_default.hint, t("env.bridge.why"));
|
|
4664
|
+
const bridgeLines = el$1("ul", BootGate_module_default.bridgeLines);
|
|
3184
4665
|
const bridgeCommand = commandRow(t);
|
|
3185
|
-
const bridgeRetry = el$1("button",
|
|
4666
|
+
const bridgeRetry = el$1("button", BootGate_module_default.button, t("env.retry"));
|
|
3186
4667
|
bridgeRetry.setAttribute("type", "button");
|
|
3187
|
-
const bridgeButtons = el$1("div",
|
|
4668
|
+
const bridgeButtons = el$1("div", BootGate_module_default.buttons);
|
|
3188
4669
|
bridgeButtons.append(bridgeRetry);
|
|
3189
|
-
const bridgeRaw = el$1("details",
|
|
3190
|
-
const bridgeRawText = el$1("pre",
|
|
3191
|
-
bridgeRaw.append(el$1("summary",
|
|
4670
|
+
const bridgeRaw = el$1("details", BootGate_module_default.raw);
|
|
4671
|
+
const bridgeRawText = el$1("pre", BootGate_module_default.error);
|
|
4672
|
+
bridgeRaw.append(el$1("summary", BootGate_module_default.rawSummary, t("env.fix.details")), bridgeRawText);
|
|
3192
4673
|
bridge.append(bridgeTitle, bridgeWhy, bridgeLines, bridgeCommand.row, bridgeButtons, bridgeRaw);
|
|
3193
4674
|
card.append(title, hint, list, progressRow, actions, bridge);
|
|
3194
4675
|
overlay.append(card);
|
|
@@ -3233,16 +4714,16 @@ function createBootGate(ctx, options = {}) {
|
|
|
3233
4714
|
function ensureRow(step) {
|
|
3234
4715
|
const existing = rows.get(step.id);
|
|
3235
4716
|
if (existing !== void 0) return existing;
|
|
3236
|
-
const item = el$1("li",
|
|
3237
|
-
const mark = el$1("span",
|
|
4717
|
+
const item = el$1("li", BootGate_module_default.step);
|
|
4718
|
+
const mark = el$1("span", BootGate_module_default.mark);
|
|
3238
4719
|
mark.setAttribute("aria-hidden", "true");
|
|
3239
4720
|
const row = {
|
|
3240
4721
|
item,
|
|
3241
4722
|
mark,
|
|
3242
|
-
detail: el$1("span",
|
|
4723
|
+
detail: el$1("span", BootGate_module_default.detail),
|
|
3243
4724
|
status: ""
|
|
3244
4725
|
};
|
|
3245
|
-
item.append(mark, el$1("span",
|
|
4726
|
+
item.append(mark, el$1("span", BootGate_module_default.label, stepLabel$1(step.id, t)), row.detail);
|
|
3246
4727
|
rows.set(step.id, row);
|
|
3247
4728
|
return row;
|
|
3248
4729
|
}
|
|
@@ -3289,10 +4770,10 @@ function createBootGate(ctx, options = {}) {
|
|
|
3289
4770
|
if (bridgeBroken && bridgeStep !== void 0) {
|
|
3290
4771
|
bridgeLines.replaceChildren(...(snapshot.bridgeIssues ?? ["unknown"]).map((issue) => {
|
|
3291
4772
|
const advice = bridgeAdvice(issue);
|
|
3292
|
-
const item = el$1("li",
|
|
4773
|
+
const item = el$1("li", BootGate_module_default.bridgeLine, t(advice.textKey));
|
|
3293
4774
|
if (advice.link !== void 0) {
|
|
3294
4775
|
const link = document.createElement("a");
|
|
3295
|
-
link.className =
|
|
4776
|
+
link.className = BootGate_module_default.link;
|
|
3296
4777
|
link.textContent = t(advice.link.labelKey);
|
|
3297
4778
|
link.href = advice.link.href;
|
|
3298
4779
|
link.target = "_blank";
|
|
@@ -3356,18 +4837,32 @@ function createBootGate(ctx, options = {}) {
|
|
|
3356
4837
|
poll();
|
|
3357
4838
|
return { close };
|
|
3358
4839
|
}
|
|
4840
|
+
var ExpandButton_module_default = {
|
|
4841
|
+
button: "_button_ssnyt_1",
|
|
4842
|
+
icon: "_icon_ssnyt_13"
|
|
4843
|
+
};
|
|
3359
4844
|
//#endregion
|
|
3360
4845
|
//#region src/app/layouts/rightbar/ExpandButton.tsx
|
|
3361
4846
|
function ExpandButton({ useRightbar, toggleRightbar, t }) {
|
|
3362
4847
|
if (useRightbar((state) => state.expanded)) return null;
|
|
3363
|
-
return /* @__PURE__ */ h("
|
|
4848
|
+
return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("rightbar.expand") }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3364
4849
|
type: "button",
|
|
3365
|
-
|
|
4850
|
+
size: "sm",
|
|
4851
|
+
variant: "ghost",
|
|
4852
|
+
className: ExpandButton_module_default.button,
|
|
3366
4853
|
"aria-label": t("rightbar.expand"),
|
|
3367
|
-
|
|
4854
|
+
icon: /* @__PURE__ */ h("span", { className: ExpandButton_module_default.icon }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutlineRegular, { size: 15 })),
|
|
3368
4855
|
onClick: toggleRightbar
|
|
3369
|
-
}
|
|
4856
|
+
}));
|
|
3370
4857
|
}
|
|
4858
|
+
var Breadcrumbs_module_default = {
|
|
4859
|
+
stripTabs: "_stripTabs_1dqp4_1",
|
|
4860
|
+
tab: "_tab_1dqp4_9",
|
|
4861
|
+
tabActive: "_tabActive_1dqp4_25",
|
|
4862
|
+
tabQuiet: "_tabQuiet_1dqp4_29",
|
|
4863
|
+
tabTitle: "_tabTitle_1dqp4_39",
|
|
4864
|
+
sep: "_sep_1dqp4_49"
|
|
4865
|
+
};
|
|
3371
4866
|
//#endregion
|
|
3372
4867
|
//#region src/app/layouts/rightbar/Breadcrumbs.tsx
|
|
3373
4868
|
function stepLabel(step, titleKeyOf, t) {
|
|
@@ -3377,23 +4872,21 @@ function stepLabel(step, titleKeyOf, t) {
|
|
|
3377
4872
|
}
|
|
3378
4873
|
function Breadcrumbs({ trail, onGoTo, titleKeyOf, t }) {
|
|
3379
4874
|
return /* @__PURE__ */ h("div", {
|
|
3380
|
-
className:
|
|
4875
|
+
className: Breadcrumbs_module_default.stripTabs,
|
|
3381
4876
|
role: "presentation"
|
|
3382
4877
|
}, trail.map((step, index) => {
|
|
3383
4878
|
const current = index === trail.length - 1;
|
|
3384
4879
|
return /* @__PURE__ */ h(Fragment, { key: `${step.kind}-${index}` }, index > 0 ? /* @__PURE__ */ h("span", {
|
|
3385
|
-
className:
|
|
4880
|
+
className: Breadcrumbs_module_default.sep,
|
|
3386
4881
|
"aria-hidden": "true"
|
|
3387
4882
|
}, "›") : null, current ? /* @__PURE__ */ h("div", {
|
|
3388
|
-
className:
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
tabIndex: -1
|
|
3392
|
-
}, /* @__PURE__ */ h("span", { className: "wb-tabTitle" }, stepLabel(step, titleKeyOf, t))) : /* @__PURE__ */ h("button", {
|
|
4883
|
+
className: `${Breadcrumbs_module_default.tab} ${Breadcrumbs_module_default.tabActive}`,
|
|
4884
|
+
"aria-current": "page"
|
|
4885
|
+
}, /* @__PURE__ */ h("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))) : /* @__PURE__ */ h("button", {
|
|
3393
4886
|
type: "button",
|
|
3394
|
-
className:
|
|
4887
|
+
className: `${Breadcrumbs_module_default.tab} ${Breadcrumbs_module_default.tabQuiet}`,
|
|
3395
4888
|
onClick: () => onGoTo(index)
|
|
3396
|
-
}, /* @__PURE__ */ h("span", { className:
|
|
4889
|
+
}, /* @__PURE__ */ h("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
|
|
3397
4890
|
}));
|
|
3398
4891
|
}
|
|
3399
4892
|
//#endregion
|
|
@@ -3403,13 +4896,15 @@ function BoardEmpty({ t, onOpenModules, onOpenMarket }) {
|
|
|
3403
4896
|
icon: /* @__PURE__ */ h(IconBrandMark, { size: 32 }),
|
|
3404
4897
|
title: t("panels.empty"),
|
|
3405
4898
|
hint: t("panels.emptyHint"),
|
|
3406
|
-
action: /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(
|
|
4899
|
+
action: /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3407
4900
|
type: "button",
|
|
3408
|
-
|
|
4901
|
+
size: "sm",
|
|
4902
|
+
variant: "outline",
|
|
3409
4903
|
onClick: onOpenModules
|
|
3410
|
-
}, t("panels.choose")), /* @__PURE__ */ h(
|
|
4904
|
+
}, t("panels.choose")), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3411
4905
|
type: "button",
|
|
3412
|
-
|
|
4906
|
+
size: "sm",
|
|
4907
|
+
variant: "outline",
|
|
3413
4908
|
onClick: onOpenMarket
|
|
3414
4909
|
}, t("panels.browseMarket")))
|
|
3415
4910
|
});
|
|
@@ -3426,6 +4921,22 @@ function BoardMockStrip({ fixtures, show }) {
|
|
|
3426
4921
|
onPick: fixtures.pick
|
|
3427
4922
|
});
|
|
3428
4923
|
}
|
|
4924
|
+
var ModulesPage_module_default = {
|
|
4925
|
+
trigger: "_trigger_1weg4_1",
|
|
4926
|
+
pop: "_pop_1weg4_7",
|
|
4927
|
+
head: "_head_1weg4_21",
|
|
4928
|
+
title: "_title_1weg4_29",
|
|
4929
|
+
reset: "_reset_1weg4_37",
|
|
4930
|
+
list: "_list_1weg4_59",
|
|
4931
|
+
row: "_row_1weg4_68",
|
|
4932
|
+
rowOver: "_rowOver_1weg4_83",
|
|
4933
|
+
ghost: "_ghost_1weg4_93",
|
|
4934
|
+
grip: "_grip_1weg4_108",
|
|
4935
|
+
label: "_label_1weg4_116",
|
|
4936
|
+
name: "_name_1weg4_123",
|
|
4937
|
+
error: "_error_1weg4_134",
|
|
4938
|
+
dep: "_dep_1weg4_142"
|
|
4939
|
+
};
|
|
3429
4940
|
//#endregion
|
|
3430
4941
|
//#region src/app/layouts/rightbar/panel-mock.ts
|
|
3431
4942
|
function row(id, titleKey, shown) {
|
|
@@ -3669,7 +5180,7 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
|
|
|
3669
5180
|
};
|
|
3670
5181
|
const dragging = drag === null ? void 0 : rows[drag.from];
|
|
3671
5182
|
return /* @__PURE__ */ h(Fragment, null, drag?.at === void 0 || dragging === void 0 ? null : /* @__PURE__ */ h("div", {
|
|
3672
|
-
className:
|
|
5183
|
+
className: ModulesPage_module_default.ghost,
|
|
3673
5184
|
style: {
|
|
3674
5185
|
left: `${drag.at.x + 12}px`,
|
|
3675
5186
|
top: `${drag.at.y - 12}px`
|
|
@@ -3679,16 +5190,17 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
|
|
|
3679
5190
|
icon: null,
|
|
3680
5191
|
title: t("panels.noneInstalled"),
|
|
3681
5192
|
hint: t("panels.noneInstalledHint"),
|
|
3682
|
-
action: /* @__PURE__ */ h(
|
|
5193
|
+
action: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3683
5194
|
type: "button",
|
|
3684
|
-
|
|
5195
|
+
size: "sm",
|
|
5196
|
+
variant: "outline",
|
|
3685
5197
|
onClick: onOpenMarket
|
|
3686
5198
|
}, t("panels.browseMarket"))
|
|
3687
|
-
}) : /* @__PURE__ */ h("ul", { className:
|
|
5199
|
+
}) : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, rows.map((unit, index) => {
|
|
3688
5200
|
const badge = panelBadgeKey(capabilities?.[unit.id]);
|
|
3689
5201
|
const dep = badge === void 0 ? void 0 : t(badge);
|
|
3690
5202
|
return /* @__PURE__ */ h("li", {
|
|
3691
|
-
className:
|
|
5203
|
+
className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
|
|
3692
5204
|
key: unit.id,
|
|
3693
5205
|
draggable: true,
|
|
3694
5206
|
onDragStart: (event) => {
|
|
@@ -3720,28 +5232,24 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
|
|
|
3720
5232
|
event.preventDefault();
|
|
3721
5233
|
drop();
|
|
3722
5234
|
}
|
|
3723
|
-
}, /* @__PURE__ */ h("span", {
|
|
3724
|
-
className:
|
|
3725
|
-
title: t("panels.dragHint"),
|
|
5235
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
|
|
5236
|
+
className: ModulesPage_module_default.grip,
|
|
3726
5237
|
"aria-hidden": "true"
|
|
3727
|
-
}, "⠿"), /* @__PURE__ */ h("span", { className:
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
"aria-checked": unit.shown,
|
|
3731
|
-
"aria-label": `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
|
|
3732
|
-
className: "wb-switch",
|
|
5238
|
+
}, "⠿")), /* @__PURE__ */ h("span", { className: ModulesPage_module_default.label }, /* @__PURE__ */ h("span", { className: ModulesPage_module_default.name }, t(unit.titleKey)), dep === void 0 ? null : /* @__PURE__ */ h("span", { className: ModulesPage_module_default.dep }, dep)), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Switch, {
|
|
5239
|
+
checked: unit.shown,
|
|
5240
|
+
label: `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
|
|
3733
5241
|
disabled: busy,
|
|
3734
|
-
|
|
3735
|
-
action:
|
|
5242
|
+
onChange: (next) => void write({
|
|
5243
|
+
action: next ? "show" : "hide",
|
|
3736
5244
|
id: unit.id
|
|
3737
5245
|
})
|
|
3738
|
-
}
|
|
3739
|
-
})), /* @__PURE__ */ h(
|
|
5246
|
+
}));
|
|
5247
|
+
})), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, /* @__PURE__ */ h("button", {
|
|
3740
5248
|
type: "button",
|
|
3741
|
-
className:
|
|
5249
|
+
className: ModulesPage_module_default.reset,
|
|
3742
5250
|
disabled: busy,
|
|
3743
5251
|
onClick: () => void write({ action: "reset" })
|
|
3744
|
-
}, t("panels.reset"))), failed ? /* @__PURE__ */ h("p", { className:
|
|
5252
|
+
}, t("panels.reset"))), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
|
|
3745
5253
|
}
|
|
3746
5254
|
//#endregion
|
|
3747
5255
|
//#region src/app/layouts/rightbar/PanelModules.tsx
|
|
@@ -3765,37 +5273,32 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
|
|
|
3765
5273
|
forceProbe
|
|
3766
5274
|
]);
|
|
3767
5275
|
const root = useRef(null);
|
|
3768
|
-
const panelMocks = useMemo(() => buildPanelMocks(manifests), [manifests]);
|
|
5276
|
+
const panelMocks = useMemo(() => buildPanelMocks(fixtureRoster(manifests)), [manifests]);
|
|
3769
5277
|
const fixturePick = useFixturePick({
|
|
3770
5278
|
fixtures: panelMocks,
|
|
3771
5279
|
initial: panelMocks[0]?.id ?? null
|
|
3772
5280
|
});
|
|
3773
5281
|
const panelMock = fixturePick.enabled ? fixturePick.current : void 0;
|
|
3774
5282
|
const mockNonce = fixturePick.nonce;
|
|
3775
|
-
|
|
3776
|
-
if (!open) return void 0;
|
|
3777
|
-
const onDown = (event) => {
|
|
3778
|
-
if (root.current !== null && !root.current.contains(event.target)) onOpenChange(false);
|
|
3779
|
-
};
|
|
3780
|
-
document.addEventListener("mousedown", onDown);
|
|
3781
|
-
return () => document.removeEventListener("mousedown", onDown);
|
|
3782
|
-
}, [open, onOpenChange]);
|
|
5283
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(root, open, onOpenChange);
|
|
3783
5284
|
const units = enabledUnits ?? [];
|
|
3784
5285
|
return /* @__PURE__ */ h("div", {
|
|
3785
|
-
className:
|
|
5286
|
+
className: ModulesPage_module_default.trigger,
|
|
3786
5287
|
ref: root
|
|
3787
|
-
}, /* @__PURE__ */ h("
|
|
5288
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("panels.title") }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3788
5289
|
type: "button",
|
|
3789
|
-
|
|
5290
|
+
size: "sm",
|
|
5291
|
+
variant: "ghost",
|
|
5292
|
+
className: `wb-stripButton${open ? " wb-stripButtonActive" : ""}`,
|
|
3790
5293
|
"aria-label": t("panels.title"),
|
|
3791
5294
|
"aria-expanded": open,
|
|
3792
|
-
|
|
5295
|
+
icon: /* @__PURE__ */ h(IconModules, { size: 16 }),
|
|
3793
5296
|
onClick: () => onOpenChange(!open)
|
|
3794
|
-
}
|
|
3795
|
-
className:
|
|
5297
|
+
})), open ? /* @__PURE__ */ h("div", {
|
|
5298
|
+
className: ModulesPage_module_default.pop,
|
|
3796
5299
|
role: "dialog",
|
|
3797
5300
|
"aria-label": t("panels.title")
|
|
3798
|
-
}, /* @__PURE__ */ h("header", { className:
|
|
5301
|
+
}, /* @__PURE__ */ h("header", { className: ModulesPage_module_default.head }, /* @__PURE__ */ h("span", { className: ModulesPage_module_default.title }, t("panels.tab.modules"))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
|
|
3799
5302
|
mocks: panelMocks,
|
|
3800
5303
|
index: fixturePick.index,
|
|
3801
5304
|
onPick: (at) => fixturePick.pick(panelMocks[at]?.id ?? null)
|
|
@@ -4135,22 +5638,21 @@ function ModuleHost({ module, step, panelToken, onPanelRefresh, onSummary, ...re
|
|
|
4135
5638
|
});
|
|
4136
5639
|
}
|
|
4137
5640
|
function PanelHeader({ t, trail, onGoTo, titleKeyOf, refreshing, at, refreshEnabled, onRefresh, modulesOpen, onModulesOpenChange, enabledUnits, manifests, workspace, refreshToken, onOpenMarket, onCollapse }) {
|
|
4138
|
-
return /* @__PURE__ */ h("header", { className: "wb-panelHeader" }, /* @__PURE__ */ h("div", {
|
|
4139
|
-
className: "wb-tabStrip",
|
|
4140
|
-
role: "tablist"
|
|
4141
|
-
}, /* @__PURE__ */ h(Breadcrumbs, {
|
|
5641
|
+
return /* @__PURE__ */ h("header", { className: "wb-panelHeader" }, /* @__PURE__ */ h("div", { className: "wb-tabStrip" }, /* @__PURE__ */ h(Breadcrumbs, {
|
|
4142
5642
|
trail,
|
|
4143
5643
|
onGoTo,
|
|
4144
5644
|
titleKeyOf,
|
|
4145
5645
|
t
|
|
4146
|
-
}), /* @__PURE__ */ h("span", { className: "wb-stripFill" }), /* @__PURE__ */ h("div", { className: "wb-stripChrome" }, /* @__PURE__ */ h("
|
|
5646
|
+
}), /* @__PURE__ */ h("span", { className: "wb-stripFill" }), /* @__PURE__ */ h("div", { className: "wb-stripChrome" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: refreshing ? t("rightbar.refreshing") : at === null ? t("rightbar.refresh") : `${t("rightbar.refresh")} · ${t("rightbar.updatedAt", { time: new Date(at).toLocaleTimeString().slice(0, 5) })}` }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4147
5647
|
type: "button",
|
|
4148
|
-
|
|
5648
|
+
size: "sm",
|
|
5649
|
+
variant: "ghost",
|
|
5650
|
+
className: `wb-stripButton${refreshing ? " wb-spinning" : ""}`,
|
|
4149
5651
|
"aria-label": refreshing ? t("rightbar.refreshing") : t("rightbar.refresh"),
|
|
4150
5652
|
disabled: refreshing || !refreshEnabled,
|
|
4151
|
-
|
|
5653
|
+
icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 16 }),
|
|
4152
5654
|
onClick: onRefresh
|
|
4153
|
-
}
|
|
5655
|
+
})), /* @__PURE__ */ h(PanelModules, {
|
|
4154
5656
|
t,
|
|
4155
5657
|
open: modulesOpen,
|
|
4156
5658
|
onOpenChange: onModulesOpenChange,
|
|
@@ -4159,13 +5661,15 @@ function PanelHeader({ t, trail, onGoTo, titleKeyOf, refreshing, at, refreshEnab
|
|
|
4159
5661
|
refreshToken,
|
|
4160
5662
|
manifests,
|
|
4161
5663
|
onOpenMarket
|
|
4162
|
-
}), /* @__PURE__ */ h("
|
|
5664
|
+
}), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("rightbar.collapse") }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4163
5665
|
type: "button",
|
|
4164
|
-
|
|
5666
|
+
size: "sm",
|
|
5667
|
+
variant: "ghost",
|
|
5668
|
+
className: "wb-stripButton",
|
|
4165
5669
|
"aria-label": t("rightbar.collapse"),
|
|
4166
|
-
|
|
5670
|
+
icon: /* @__PURE__ */ h("span", { className: "wb-stripIconFlip" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutlineRegular, { size: 16 })),
|
|
4167
5671
|
onClick: onCollapse
|
|
4168
|
-
}
|
|
5672
|
+
})))));
|
|
4169
5673
|
}
|
|
4170
5674
|
function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onNavigate, onOpenMarket, onSummary, onOpenModules, t }) {
|
|
4171
5675
|
if (top.kind !== "board") {
|
|
@@ -4189,7 +5693,7 @@ function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onN
|
|
|
4189
5693
|
}
|
|
4190
5694
|
return /* @__PURE__ */ h(Fragment, null, plan.reading ? /* @__PURE__ */ h(CenteredState, {
|
|
4191
5695
|
icon: null,
|
|
4192
|
-
title: t("panels.reading")
|
|
5696
|
+
title: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, t("panels.reading"))
|
|
4193
5697
|
}) : null, plan.empty ? /* @__PURE__ */ h(BoardEmpty, {
|
|
4194
5698
|
t,
|
|
4195
5699
|
onOpenModules,
|
|
@@ -4222,12 +5726,12 @@ function Rightbar(props) {
|
|
|
4222
5726
|
const boardWorkspace = board.path;
|
|
4223
5727
|
const enabledUnits = useEnabledUnits(panelToken, boardWorkspace);
|
|
4224
5728
|
const [modulesOpen, setModulesOpen] = useState(false);
|
|
4225
|
-
const fixtures = useBoardMock(manifests);
|
|
5729
|
+
const fixtures = useBoardMock(fixtureRoster(manifests));
|
|
4226
5730
|
const visibleModules = selectBoardModules(enabledUnits, (id) => modules.byId(id), capabilities);
|
|
4227
5731
|
const plan = planBoard(fixtures.shape, {
|
|
4228
5732
|
modules: visibleModules,
|
|
4229
5733
|
configRead: enabledUnits !== null
|
|
4230
|
-
}, modules.all());
|
|
5734
|
+
}, fixtureSeed(manifests, modules.all()));
|
|
4231
5735
|
const world = createSuiteWorld({
|
|
4232
5736
|
workspaces,
|
|
4233
5737
|
sessions,
|
|
@@ -4264,8 +5768,8 @@ function Rightbar(props) {
|
|
|
4264
5768
|
onGoTo: props.goToPanel,
|
|
4265
5769
|
titleKeyOf,
|
|
4266
5770
|
refreshing: summary.refreshing,
|
|
4267
|
-
at: summary.at,
|
|
4268
5771
|
refreshEnabled: feedEnabled,
|
|
5772
|
+
at: summary.at,
|
|
4269
5773
|
onRefresh: refreshPanel,
|
|
4270
5774
|
modulesOpen,
|
|
4271
5775
|
onModulesOpenChange: setModulesOpen,
|
|
@@ -4478,13 +5982,12 @@ function openNewSession(input) {
|
|
|
4478
5982
|
//#endregion
|
|
4479
5983
|
//#region src/app/layouts/sidebar/WorkspaceSection.tsx
|
|
4480
5984
|
function WorkspaceSection({ t, wide, onNewSession }) {
|
|
4481
|
-
return /* @__PURE__ */ h("div", { className: "wb-wsSection" }, /* @__PURE__ */ h("div", { className: "wb-sectionHeader" }, wide ? /* @__PURE__ */ h("span", { className: "wb-sectionLabel" }, t("workspace.section")) : null, /* @__PURE__ */ h("button", {
|
|
5985
|
+
return /* @__PURE__ */ h("div", { className: "wb-wsSection" }, /* @__PURE__ */ h("div", { className: "wb-sectionHeader" }, wide ? /* @__PURE__ */ h("span", { className: "wb-sectionLabel" }, t("workspace.section")) : null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("session.new.label") }, /* @__PURE__ */ h("button", {
|
|
4482
5986
|
type: "button",
|
|
4483
5987
|
className: "wb-iconButton wb-wsNew",
|
|
4484
|
-
title: t("session.new.label"),
|
|
4485
5988
|
"aria-label": t("session.new"),
|
|
4486
5989
|
onClick: onNewSession
|
|
4487
|
-
}, /* @__PURE__ */ h(
|
|
5990
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconNewChatOutlineRegular, { size: 16 })))));
|
|
4488
5991
|
}
|
|
4489
5992
|
//#endregion
|
|
4490
5993
|
//#region src/app/layouts/sidebar/PanelNav.tsx
|
|
@@ -4492,50 +5995,34 @@ function PanelRow({ id, label, active, wide, onSelect, fallbackGlyph, renderEntr
|
|
|
4492
5995
|
const glyph = fallbackGlyph ?? (id !== null && renderEntry !== void 0 ? renderEntry(id, active, wide) : null);
|
|
4493
5996
|
const hint = usePanelHint(id);
|
|
4494
5997
|
const name = panelRowName(label, hint, t);
|
|
4495
|
-
return /* @__PURE__ */ h(
|
|
5998
|
+
return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
5999
|
+
label: name,
|
|
6000
|
+
disabled: !(hint !== null || !wide)
|
|
6001
|
+
}, /* @__PURE__ */ h("button", {
|
|
4496
6002
|
type: "button",
|
|
4497
6003
|
className: cx("wb-panelRow", active && "wb-panelActive"),
|
|
4498
6004
|
"aria-current": active ? "page" : void 0,
|
|
4499
6005
|
"aria-label": name,
|
|
4500
|
-
title: hint !== null || !wide ? name : void 0,
|
|
4501
6006
|
onClick: () => onSelect(id)
|
|
4502
6007
|
}, /* @__PURE__ */ h("span", {
|
|
4503
6008
|
className: "wb-panelGlyph",
|
|
4504
6009
|
"aria-hidden": "true"
|
|
4505
|
-
}, glyph, hint !== null && !wide ? /* @__PURE__ */ h("span", { className: "wb-panelDot" }, /* @__PURE__ */ h(StateDot, {
|
|
6010
|
+
}, glyph, hint !== null && !wide ? /* @__PURE__ */ h("span", { className: "wb-panelDot" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
4506
6011
|
state: "warning",
|
|
4507
6012
|
size: 9
|
|
4508
|
-
})) : null), wide ? /* @__PURE__ */ h("span", { className: "wb-panelTitle" }, label) : null, hint === null || !wide ? null : /* @__PURE__ */ h(
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
}, t(hint.labelKey)));
|
|
6013
|
+
})) : null), wide ? /* @__PURE__ */ h("span", { className: "wb-panelTitle" }, label) : null, hint === null || !wide ? null : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
6014
|
+
tone: "warning",
|
|
6015
|
+
className: "wb-panelTag"
|
|
6016
|
+
}, t(hint.labelKey))));
|
|
4512
6017
|
}
|
|
4513
6018
|
//#endregion
|
|
4514
6019
|
//#region src/app/layouts/sidebar/ProjectSwitcher.tsx
|
|
6020
|
+
var ADD_WORKSPACE_ID = "__wb-add-workspace__";
|
|
4515
6021
|
function ProjectSwitcher({ items, current, workspaceTitle, onPick, onAdd, t }) {
|
|
4516
6022
|
const [open, setOpen] = useState(false);
|
|
4517
|
-
const root = useRef(null);
|
|
4518
|
-
useEffect(() => {
|
|
4519
|
-
if (!open) return void 0;
|
|
4520
|
-
const onDown = (event) => {
|
|
4521
|
-
if (root.current !== null && !root.current.contains(event.target)) setOpen(false);
|
|
4522
|
-
};
|
|
4523
|
-
const onKey = (event) => {
|
|
4524
|
-
if (event.key === "Escape") setOpen(false);
|
|
4525
|
-
};
|
|
4526
|
-
document.addEventListener("mousedown", onDown);
|
|
4527
|
-
document.addEventListener("keydown", onKey);
|
|
4528
|
-
return () => {
|
|
4529
|
-
document.removeEventListener("mousedown", onDown);
|
|
4530
|
-
document.removeEventListener("keydown", onKey);
|
|
4531
|
-
};
|
|
4532
|
-
}, [open]);
|
|
4533
6023
|
const title = current ? workspaceTitle(current.title) : t("project.none");
|
|
4534
6024
|
const currentId = current?.workspaceId ?? null;
|
|
4535
|
-
|
|
4536
|
-
className: "wb-project",
|
|
4537
|
-
ref: root
|
|
4538
|
-
}, /* @__PURE__ */ h("button", {
|
|
6025
|
+
const trigger = /* @__PURE__ */ h("button", {
|
|
4539
6026
|
type: "button",
|
|
4540
6027
|
className: "wb-projectButton",
|
|
4541
6028
|
"aria-haspopup": "listbox",
|
|
@@ -4543,31 +6030,39 @@ function ProjectSwitcher({ items, current, workspaceTitle, onPick, onAdd, t }) {
|
|
|
4543
6030
|
"aria-label": t("project.label"),
|
|
4544
6031
|
title: current ? current.path : title,
|
|
4545
6032
|
onClick: () => setOpen((value) => !value)
|
|
4546
|
-
}, /* @__PURE__ */ h("span", { className: "wb-projectGlyph wb-projectGlyphActive" }, open ? /* @__PURE__ */ h(
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
"
|
|
4557
|
-
|
|
4558
|
-
|
|
4559
|
-
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
6033
|
+
}, /* @__PURE__ */ h("span", { className: "wb-projectGlyph wb-projectGlyphActive" }, open ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, { size: 16 }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, { size: 16 })), /* @__PURE__ */ h("span", { className: "wb-projectName" }, title), /* @__PURE__ */ h("span", { className: cx("wb-projectChevron", open && "wb-projectChevronOpen") }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 })));
|
|
6034
|
+
return /* @__PURE__ */ h("div", { className: "wb-project" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
6035
|
+
open,
|
|
6036
|
+
portal: true,
|
|
6037
|
+
anchor: trigger,
|
|
6038
|
+
align: "start",
|
|
6039
|
+
side: "bottom",
|
|
6040
|
+
selection: "check",
|
|
6041
|
+
selectedId: currentId ?? void 0,
|
|
6042
|
+
items: [...items.length === 0 ? [{
|
|
6043
|
+
type: "label",
|
|
6044
|
+
id: "empty",
|
|
6045
|
+
text: t("project.empty")
|
|
6046
|
+
}] : [], ...items.map((workspace) => ({
|
|
6047
|
+
id: workspace.workspaceId,
|
|
6048
|
+
label: workspaceTitle(workspace.title),
|
|
6049
|
+
icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, { size: 16 })
|
|
6050
|
+
}))],
|
|
6051
|
+
footer: [{
|
|
6052
|
+
id: ADD_WORKSPACE_ID,
|
|
6053
|
+
label: t("project.add"),
|
|
6054
|
+
icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 14 })
|
|
6055
|
+
}],
|
|
6056
|
+
onSelect: (id) => {
|
|
4567
6057
|
setOpen(false);
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
|
|
6058
|
+
if (id === ADD_WORKSPACE_ID) {
|
|
6059
|
+
onAdd();
|
|
6060
|
+
return;
|
|
6061
|
+
}
|
|
6062
|
+
onPick(id);
|
|
6063
|
+
},
|
|
6064
|
+
onClose: () => setOpen(false)
|
|
6065
|
+
}));
|
|
4571
6066
|
}
|
|
4572
6067
|
//#endregion
|
|
4573
6068
|
//#region src/app/layouts/sidebar/SessionList.tsx
|
|
@@ -4575,7 +6070,7 @@ function SessionLeading({ node, statuses, renderSlot }) {
|
|
|
4575
6070
|
if (node.blank) return null;
|
|
4576
6071
|
const primary = statuses[0];
|
|
4577
6072
|
if (primary === void 0 || primary.state === "idle") return /* @__PURE__ */ h(Fragment, null, renderSlot("sidebar.session.row.leading", { sessionId: node.id }));
|
|
4578
|
-
return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(StateDot, {
|
|
6073
|
+
return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
4579
6074
|
state: primary.state,
|
|
4580
6075
|
size: 10
|
|
4581
6076
|
}), statuses.map((status) => /* @__PURE__ */ h("span", {
|
|
@@ -4586,24 +6081,8 @@ function SessionLeading({ node, statuses, renderSlot }) {
|
|
|
4586
6081
|
function SessionRow({ node, active, onOpen, renderSlot, t }) {
|
|
4587
6082
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
4588
6083
|
const menuState = useMemo(() => [menuOpen, setMenuOpen], [menuOpen]);
|
|
4589
|
-
const root = useRef(null);
|
|
4590
6084
|
const statuses = sessionStatuses(node, t);
|
|
4591
6085
|
const label = node.blank ? t("session.new") : node.title;
|
|
4592
|
-
useEffect(() => {
|
|
4593
|
-
if (!menuOpen) return void 0;
|
|
4594
|
-
const onDown = (event) => {
|
|
4595
|
-
if (root.current !== null && !root.current.contains(event.target)) setMenuOpen(false);
|
|
4596
|
-
};
|
|
4597
|
-
const onKey = (event) => {
|
|
4598
|
-
if (event.key === "Escape") setMenuOpen(false);
|
|
4599
|
-
};
|
|
4600
|
-
document.addEventListener("mousedown", onDown);
|
|
4601
|
-
document.addEventListener("keydown", onKey);
|
|
4602
|
-
return () => {
|
|
4603
|
-
document.removeEventListener("mousedown", onDown);
|
|
4604
|
-
document.removeEventListener("keydown", onKey);
|
|
4605
|
-
};
|
|
4606
|
-
}, [menuOpen]);
|
|
4607
6086
|
const owner = {
|
|
4608
6087
|
sessionId: node.id,
|
|
4609
6088
|
displayTitle: label
|
|
@@ -4611,31 +6090,31 @@ function SessionRow({ node, active, onOpen, renderSlot, t }) {
|
|
|
4611
6090
|
return /* @__PURE__ */ h("div", {
|
|
4612
6091
|
className: cx("wb-sessionRow", active && "wb-selected", menuOpen && "wb-menuOpen"),
|
|
4613
6092
|
"aria-current": active ? "true" : void 0,
|
|
4614
|
-
ref: root,
|
|
4615
6093
|
onClick: () => onOpen(node.id)
|
|
4616
6094
|
}, /* @__PURE__ */ h("span", { className: "wb-sessionLeading" }, /* @__PURE__ */ h(SessionLeading, {
|
|
4617
6095
|
node,
|
|
4618
6096
|
statuses,
|
|
4619
6097
|
renderSlot
|
|
4620
|
-
})), /* @__PURE__ */ h("span", { className: "wb-sessionTitle" }, label), node.pinned ? /* @__PURE__ */ h("span", {
|
|
6098
|
+
})), /* @__PURE__ */ h("span", { className: "wb-sessionTitle" }, label), node.pinned ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("session.pinned") }, /* @__PURE__ */ h("span", {
|
|
4621
6099
|
className: "wb-sessionPin",
|
|
4622
6100
|
role: "img",
|
|
4623
|
-
"aria-label": t("session.pinned")
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
6101
|
+
"aria-label": t("session.pinned")
|
|
6102
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPinOutlineRegular, { size: 14 }))) : null, /* @__PURE__ */ h("span", { className: "wb-sessionTime" }, relativeTime(node.updatedAt, t)), /* @__PURE__ */ h("span", { className: "wb-rowActions" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
6103
|
+
open: menuOpen,
|
|
6104
|
+
portal: true,
|
|
6105
|
+
anchor: /* @__PURE__ */ h("button", {
|
|
6106
|
+
type: "button",
|
|
6107
|
+
className: "wb-iconButton",
|
|
6108
|
+
"aria-haspopup": "menu",
|
|
6109
|
+
"aria-expanded": menuOpen,
|
|
6110
|
+
"aria-label": t("session.actions", { name: label }),
|
|
6111
|
+
onClick: (event) => {
|
|
6112
|
+
event.stopPropagation();
|
|
6113
|
+
setMenuOpen((value) => !value);
|
|
6114
|
+
}
|
|
6115
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconEllipsisOutlineRegular, { size: 16 })),
|
|
6116
|
+
onClose: () => setMenuOpen(false)
|
|
6117
|
+
}, renderSlot("sidebar.workspaces.session.menu.item", owner, { hookContext: menuState })), renderSlot("sidebar.workspaces.session.row.action", owner)));
|
|
4639
6118
|
}
|
|
4640
6119
|
function SessionList({ workspace, pinnedIds, archived, panelActive, useSessions, useSessionStatus, onOpen, renderSlot, t }) {
|
|
4641
6120
|
const list = useSessions((state) => state);
|
|
@@ -4702,12 +6181,11 @@ function Sidebar(props) {
|
|
|
4702
6181
|
});
|
|
4703
6182
|
};
|
|
4704
6183
|
const wide = !collapsed;
|
|
4705
|
-
return /* @__PURE__ */ h("div", { className: cx("wb-root", collapsed && "wb-collapsed") }, /* @__PURE__ */ h("div", { className: "wb-logoRow" }, wide ? /* @__PURE__ */ h("button", {
|
|
6184
|
+
return /* @__PURE__ */ h("div", { className: cx("wb-root", collapsed && "wb-collapsed") }, /* @__PURE__ */ h("div", { className: "wb-logoRow" }, wide ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { label: t("panel.conversation") }, /* @__PURE__ */ h("button", {
|
|
4706
6185
|
type: "button",
|
|
4707
6186
|
className: "wb-brand",
|
|
4708
|
-
title: t("panel.conversation"),
|
|
4709
6187
|
onClick: () => props.selectPanel(null)
|
|
4710
|
-
}, /* @__PURE__ */ h("span", { className: "wb-brandIdentity" }, /* @__PURE__ */ h("span", { className: "wb-brandMark" }, renderSlot("sidebar.brand.mark", { size: 24 }, { fallback: /* @__PURE__ */ h(IconBrandMark, { size: 24 }) })), /* @__PURE__ */ h("span", { className: "wb-brandName" }, renderSlot("sidebar.brand.name", {}, { fallback: t("brand.name") })))) : null, /* @__PURE__ */ h("button", {
|
|
6188
|
+
}, /* @__PURE__ */ h("span", { className: "wb-brandIdentity" }, /* @__PURE__ */ h("span", { className: "wb-brandMark" }, renderSlot("sidebar.brand.mark", { size: 24 }, { fallback: /* @__PURE__ */ h(IconBrandMark, { size: 24 }) })), /* @__PURE__ */ h("span", { className: "wb-brandName" }, renderSlot("sidebar.brand.name", {}, { fallback: t("brand.name") }))))) : null, /* @__PURE__ */ h("button", {
|
|
4711
6189
|
type: "button",
|
|
4712
6190
|
className: "wb-iconButton wb-toggle",
|
|
4713
6191
|
"aria-label": t(collapsed ? "toggle.open" : "toggle.collapse"),
|
|
@@ -4715,7 +6193,7 @@ function Sidebar(props) {
|
|
|
4715
6193
|
}, !wide ? /* @__PURE__ */ h("span", {
|
|
4716
6194
|
className: "wb-railMark",
|
|
4717
6195
|
"aria-hidden": "true"
|
|
4718
|
-
}, renderSlot("sidebar.brand.mark", { size: 24 }, { fallback: /* @__PURE__ */ h(IconBrandMark, { size: 24 }) })) : null, /* @__PURE__ */ h("span", { className: "wb-panelIcon" }, /* @__PURE__ */ h(
|
|
6196
|
+
}, renderSlot("sidebar.brand.mark", { size: 24 }, { fallback: /* @__PURE__ */ h(IconBrandMark, { size: 24 }) })) : null, /* @__PURE__ */ h("span", { className: "wb-panelIcon" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutlineRegular, { size: wide ? 16 : 18 })), !wide ? renderSlot("sidebar.toggle.badge", {}) : null)), /* @__PURE__ */ h("nav", {
|
|
4719
6197
|
className: "wb-panelList",
|
|
4720
6198
|
"aria-label": t("panels.label")
|
|
4721
6199
|
}, panelEntries.map((entry) => /* @__PURE__ */ h(PanelRow, {
|
|
@@ -4764,16 +6242,28 @@ function Sidebar(props) {
|
|
|
4764
6242
|
}
|
|
4765
6243
|
//#endregion
|
|
4766
6244
|
//#region src/shared/styles/rightbar.css?raw
|
|
4767
|
-
var rightbar_default = ".wb-rightbar {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-width: 0;\n overflow: hidden;\n background: var(--dsw-alias-bg-base);\n border-left: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-panelHeader {\n flex: none;\n height: 38px;\n}\n\n.wb-tabStrip {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 4px;\n height: 38px;\n padding: 10px 6px 0 10px;\n}\n\n.wb-stripTabs {\n display: flex;\n align-items: center;\n gap: 4px;\n min-width: 0;\n overflow: hidden;\n}\n\n.wb-stripFill {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wb-stripChrome {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: none;\n margin-left: 4px;\n}\n\n.wb-tab {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: none;\n height: 28px;\n padding: 0 10px;\n border: 0;\n border-radius: 8px;\n background: none;\n font: inherit;\n font-size: 13px;\n line-height: 16px;\n max-width: 100%;\n}\n\n.wb-tabActive {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-tabQuiet {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n.wb-tabQuiet:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-tabTitle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-crumbSep {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-stripChrome .wb-iconButton {\n width: 28px;\n height: 28px;\n padding: 6px;\n border-radius: 8px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-stripChrome .wb-iconButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-stripChrome .wb-iconButton:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-stripChrome .wb-spinning svg {\n animation: wb-spin 0.9s linear infinite;\n}\n\n@keyframes wb-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.wb-collapseButton svg {\n transform: scaleX(-1);\n}\n\n.wb-expandButton {\n width: 28px;\n flex: none;\n padding: 0;\n border: 0;\n background: none;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-expandButton:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-expandButton svg {\n width: 15px;\n height: 15px;\n}\n\n.wb-expandIcon {\n display: block;\n transform: scaleX(-1);\n}\n\n.wb-panelBody {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n scrollbar-gutter: stable;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.wb-view {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n}\n\n.wb-view > .wb-issueList {\n margin: 0 -8px;\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: 20px;\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: 8px;\n padding: 20px 16px;\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: 4px;\n}\n\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: none;\n padding: 8px 10px 8px 20px;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: 6px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen.wb-iconButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: 22px;\n height: 22px;\n padding: 4px;\n border-radius: 6px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh.wb-iconButton {\n margin-left: 0;\n}\n\n.wb-cardOpen.wb-iconButton:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-cardRefresh.wb-iconButton,\n.wb-envRefresh.wb-iconButton {\n flex: none;\n width: 22px;\n height: 22px;\n padding: 4px;\n border-radius: 6px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh.wb-iconButton {\n margin-left: auto;\n}\n\n.wb-cardRefresh.wb-iconButton:hover:not(:disabled),\n.wb-envRefresh.wb-iconButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-cardRefresh.wb-iconButton:disabled,\n.wb-envRefresh.wb-iconButton:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardRefresh.wb-spinning svg,\n.wb-envRefresh.wb-spinning svg {\n animation: wb-spin 0.9s linear infinite;\n}\n\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n}\n\n.wb-cardBody > :not(.wb-issueList) {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.wb-cardMore {\n box-sizing: border-box;\n border: 0;\n background: none;\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n text-align: left;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n border-radius: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n\n.wb-cardMore:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-prio {\n box-sizing: border-box;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 18px;\n padding: 0 5px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-state-error-primary);\n background: var(--dsw-alias-bg-mask-1);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='2'] {\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='3'] {\n color: var(--dsw-alias-state-business-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='4'] {\n color: var(--dsw-alias-label-tertiary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-typeDot {\n flex: none;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n corner-shape: round;\n background: var(--dsw-alias-label-tertiary);\n}\n\n.wb-typeDot[data-type='PROCESSING'] {\n background: var(--dsw-alias-state-business-primary);\n}\n\n.wb-typeDot[data-type='COMPLETED'] {\n background: var(--dsw-alias-state-success-primary);\n}\n\n.wb-typeDot[data-type='unknown'] {\n background: var(--dsw-alias-label-tertiary);\n}\n\n.wb-issueList {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.wb-issueRow {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n width: 100%;\n text-align: left;\n border: 0;\n border-radius: 12px;\n background: none;\n padding: 8px;\n font: inherit;\n color: inherit;\n text-decoration: none;\n cursor: pointer;\n font-size: 13px;\n}\n\n.wb-issueList > .wb-issueRow + .wb-issueRow::before {\n content: '';\n position: absolute;\n top: -1.5px;\n left: 8px;\n right: 8px;\n height: 0.5px;\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-issueRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-issueLink {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n color: inherit;\n text-decoration: none;\n}\n\n.wb-issueToChat {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n opacity: 0.65;\n}\n\n.wb-issueRow:hover .wb-issueToChat {\n opacity: 1;\n}\n\n.wb-issueToChat:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-issueToChatFailed,\n.wb-issueToChatFailed:hover {\n color: var(--dsw-alias-label-danger, #e5646b);\n opacity: 1;\n}\n\n.wb-issueRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-issueMain {\n display: flex;\n flex-direction: column;\n gap: 5px;\n flex: 1;\n min-width: 0;\n}\n\n.wb-issueLine {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n min-width: 0;\n font-size: 12px;\n line-height: 16px;\n}\n\n.wb-issueCode {\n flex: none;\n min-width: 3.4em;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n.wb-issueTitle {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: 13px;\n line-height: 20px;\n color: var(--dsw-alias-label-primary);\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-issueMeta {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n}\n\n.wb-issueStatus {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-issueIteration {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-issuePreview {\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-issueOpen {\n flex: none;\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-issueRow:hover .wb-issueOpen {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-issueMetaItem {\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n\n.wb-metaDot {\n flex: none;\n font-size: inherit;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-issueTime {\n flex: none;\n font-variant-numeric: tabular-nums;\n}\n\n.wb-releaseState {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.wb-releaseStateTitle {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-releaseStateHint {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releaseActions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n}\n\n.wb-releaseResolving {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-releaseGear {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envSkeletonBlock {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-top: 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-envSkeletonTitle {\n width: 96px;\n}\n.wb-envSkeletonLine {\n width: 72%;\n height: 10px;\n}\n\n.wb-envListSkeleton {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 1px 0;\n}\n\n.wb-envListSkeleton > :nth-child(2n) {\n width: 58%;\n}\n\n.wb-envBlock {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding-top: 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-envBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.wb-envBlockActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.wb-envBlockTitle {\n display: flex;\n align-items: center;\n gap: 4px;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n line-height: 20px;\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-envBlockTitle:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-envChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform 0.15s var(--ds-ease-in-out);\n}\n\n.wb-envChevronOpen {\n transform: rotate(180deg);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-envChevron {\n transition: none;\n }\n}\n\n.wb-envList {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.wb-envListTitle {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envLine {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-envLineText {\n flex: none;\n min-width: 0;\n font-size: 12px;\n line-height: 18px;\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: 72px;\n overflow-y: auto;\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 30px;\n padding: 6px 8px;\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: 13px;\n line-height: 20px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: 12px;\n height: 12px;\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color 0.12s ease,\n border-color 0.12s ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-envLineAt {\n flex: none;\n margin-left: auto;\n font-size: 10px;\n line-height: 16px;\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.wb-envChatFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-envListEmpty {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releasePublishPick {\n position: relative;\n display: inline-flex;\n}\n\n.wb-releasePublishRow {\n display: flex;\n justify-content: flex-end;\n padding-top: 12px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-releasePublish {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.wb-releaseConfirm {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px 8px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-releaseConfirmTitle {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-releaseConfirmRow {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n line-height: 16px;\n}\n\n.wb-releaseConfirmKey {\n flex: none;\n width: 52px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releaseConfirmValue {\n display: inline-flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 4px;\n min-width: 0;\n overflow-wrap: anywhere;\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-releaseConfirmSep {\n margin: 0 6px;\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-cmdbField > .wb-cmdbFieldLabel:empty {\n display: none;\n}\n\n.wb-releaseConfirmValue .wb-cmdbField {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n width: auto;\n}\n\n.wb-releaseConfirmValue .wb-cmdbFieldInput {\n flex: none;\n min-width: 0;\n max-width: 240px;\n min-height: 0;\n padding: 1px 6px;\n font-size: 11px;\n line-height: 16px;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-releaseConfirmValue .wb-menu {\n min-width: 220px;\n right: auto;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-layer-2));\n}\n\n.wb-releaseConfirmActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 2px;\n}\n\n.wb-cardGear.wb-iconButton {\n flex: none;\n width: 22px;\n height: 22px;\n padding: 3px;\n border-radius: 6px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear.wb-iconButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-lineEllipsis {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-rowDot {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.wb-row:has(> .wb-rowDot) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n\n.wb-chips {\n display: flex;\n gap: var(--wb-gap-xs);\n flex-wrap: wrap;\n}\n\n.wb-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 26px;\n padding: 0 10px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: 13px;\n background: none;\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-chip:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-chipActive {\n color: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-border-l4);\n background: var(--dsw-alias-interactive-bg-active);\n}\n\n.wb-chipCount {\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n border-radius: 12px;\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: 0.5px;\n margin: 0 8px -0.5px;\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: 13px;\n border-radius: 4px;\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse 1.4s var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: 10px;\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 14px;\n flex: 1;\n min-height: 240px;\n padding: 0 24px 24px;\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: 16px;\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: 14px;\n line-height: 22px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: 300px;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: 320px;\n font-family: var(--ds-font-family-code, monospace);\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 2px;\n}\n\n.wb-primaryButton {\n height: 28px;\n padding: 0 14px;\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-brand-primary);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary-foreground);\n cursor: pointer;\n}\n\n.wb-primaryButton:hover:not(:disabled) {\n background: var(--dsw-alias-button-primary-hover);\n}\n\n.wb-linkButton {\n padding: 2px 6px;\n border: none;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-linkButton:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-outlineButton {\n height: 28px;\n padding: 0 14px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-button-elevated-fill);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n.wb-outlineButton:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-linkButton:disabled,\n.wb-primaryButton:disabled,\n.wb-outlineButton:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.wb-approvalHint {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n}\n\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: 8px;\n}\n\n.wb-approvalLabel {\n flex: none;\n width: 56px;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-approvalValue {\n margin: 0;\n font-size: 13px;\n line-height: 18px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalBody {\n max-height: 132px;\n overflow-y: auto;\n white-space: pre-wrap;\n font-weight: 400;\n}\n\n.wb-approvalHosts,\n.wb-approvalWarn {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-approvalCommand {\n font-family: var(--ds-font-family-code);\n font-size: 13px;\n line-height: 20px;\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-detailHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.wb-detailTitle {\n margin: 0;\n font-size: 15px;\n line-height: 24px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-detailStatus {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-detailType {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-detailMeta {\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.wb-detailMetaRow {\n display: flex;\n gap: 8px;\n font-size: 11px;\n line-height: 16px;\n}\n\n.wb-detailMetaRow dt {\n flex: none;\n width: 62px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-detailMetaRow dd {\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n word-break: break-all;\n}\n\n.wb-detailBody {\n font-size: 13px;\n line-height: 22px;\n color: var(--dsw-alias-label-primary);\n white-space: pre-wrap;\n word-break: break-word;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n padding-top: 10px;\n}\n\n.wb-detailEmpty {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-imageChip {\n align-self: flex-start;\n font-size: 11px;\n line-height: 16px;\n padding: 1px 6px;\n border-radius: 4px;\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-intentBar {\n position: sticky;\n bottom: 0;\n margin-top: auto;\n padding-top: 10px;\n background: var(--dsw-alias-bg-base);\n}\n\n.wb-intentButton {\n width: 100%;\n height: 30px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-button-elevated-fill);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n.wb-intentButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-panelBody {\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}\n\n.wb-rightbar :is(button, [role='tab']):focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-rightbar {\n container-type: inline-size;\n}\n\n@container (max-width: 340px) {\n .wb-panelBody {\n padding: 8px;\n }\n\n .wb-issueTime {\n display: none;\n }\n}\n\n.wb-refreshButton:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-gateActions[hidden],\n.wb-gateProgress[hidden],\n.wb-gateCommandRow[hidden],\n.wb-gateBridge[hidden],\n.wb-gateRaw[hidden] {\n display: none;\n}\n\n.wb-gate {\n position: fixed;\n inset: 0;\n z-index: 2147483000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: var(--dsw-alias-bg-base);\n}\n\n.wb-gateCard {\n width: 100%;\n max-width: 420px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n text-align: center;\n}\n\n.wb-gateCard:has(.wb-gateActions:not([hidden])),\n.wb-gateCard:has(.wb-gateBridge:not([hidden])) {\n max-width: 520px;\n}\n\n.wb-gateBrand {\n display: flex;\n margin-bottom: 6px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-gateTitle {\n margin: 0;\n font-size: 16px;\n line-height: 24px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-gateHint {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-gateSteps {\n list-style: none;\n margin: 6px 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: left;\n}\n\n.wb-gateStep {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.wb-gateStep[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-gateMark {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n.wb-gateStep[data-status='ok'] .wb-gateMark {\n color: var(--dsw-alias-state-success-primary);\n}\n\n.wb-gateStep[data-status='warn'] .wb-gateMark {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.wb-gateStep[data-status='failed'] .wb-gateMark {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-gateLabel {\n flex: none;\n}\n\n.wb-gateDetail {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-loading {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-loading[hidden] {\n display: none;\n}\n\n.wb-loadingMotion {\n transform-origin: center;\n animation: wb-spin 1.5s linear infinite;\n}\n\n.wb-loadingTrack,\n.wb-loadingArc {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n.wb-loadingTrack {\n opacity: 0.25;\n}\n\n.wb-loadingArc {\n stroke-dasharray: 12 150;\n animation: wb-dash 1.5s ease-in-out infinite;\n}\n\n@keyframes wb-dash {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-loadingMotion,\n .wb-loadingArc {\n animation: none;\n }\n}\n\n.wb-gateProgress {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n margin-top: 4px;\n max-width: 100%;\n}\n\n.wb-gateElapsed {\n flex: none;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n.wb-gateError {\n margin: 0;\n padding: 8px 10px;\n max-height: 120px;\n overflow: auto;\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: 11px;\n line-height: 16px;\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-gateCommandRow {\n display: flex;\n align-items: center;\n gap: 4px;\n margin: 0 0 8px;\n padding-right: 4px;\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-gateCopy {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n.wb-gateCopy:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-gateCommand {\n flex: 1;\n min-width: 0;\n padding: 8px 10px;\n border-radius: 8px;\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: 11px;\n line-height: 16px;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-gateButtons {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n}\n\n.wb-modules {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.wb-iconButtonActive {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-modulesPop {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n z-index: 30;\n width: 360px;\n max-width: calc(100vw - 48px);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: 14px;\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: 0 12px 32px rgba(0, 0, 0, 0.36);\n overflow: hidden;\n}\n\n.wb-modulesHead {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px 9px 14px;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-modulesTitle {\n flex: 1;\n font-size: 13px;\n line-height: 20px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-modulesReset {\n flex: none;\n padding: 3px 8px;\n border: none;\n border-radius: 6px;\n background: transparent;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n.wb-modulesReset:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-modulesReset:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-modulesList {\n list-style: none;\n margin: 0;\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.wb-modulesRow {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: 8px;\n padding: 7px 8px;\n border-radius: 8px;\n cursor: grab;\n}\n\n.wb-modulesRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-modulesRowOver::before {\n content: '';\n position: absolute;\n top: -3px;\n left: 8px;\n right: 8px;\n height: 2px;\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-modulesGhost {\n position: fixed;\n z-index: 40;\n pointer-events: none;\n padding: 4px 10px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);\n font-size: 13px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n.wb-modulesGrip {\n font-size: 11px;\n line-height: 16px;\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n.wb-modulesLabel {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n\n.wb-modulesName {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 13px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-modulesFoot {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-modulesFootText {\n flex: 1;\n min-width: 0;\n}\n\n.wb-modulesError {\n margin: 0;\n padding: 0 14px 10px;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-panelBody.wb-fixtureMany .wb-mockStrip {\n display: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: 10px;\n line-height: 14px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: 2px 7px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n corner-shape: round;\n background: transparent;\n font-size: 10px;\n line-height: 14px;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n\n.wb-gate > .wb-mockStrip {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n.wb-marketList {\n list-style: none;\n margin: 0;\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 320px;\n overflow-y: auto;\n}\n\n.wb-marketRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 14px;\n row-gap: 4px;\n padding: 8px;\n border-radius: var(--dsw-radius-lg);\n}\n\n.wb-marketIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketMain {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.wb-marketName {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketDesc {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketUsedBy {\n margin-left: 8px;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n.wb-marketUsedBy::before {\n content: '·';\n margin-right: 6px;\n opacity: 0.8;\n}\n\n.wb-marketName .wb-marketVersion {\n margin-left: 6px;\n font-size: 12px;\n font-weight: 400;\n line-height: 18px;\n}\n\n.wb-marketVersion {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-marketVersion::before {\n content: '';\n display: inline-block;\n width: 1px;\n height: 10px;\n margin: 0 8px 0 2px;\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-marketEnd {\n flex: none;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.wb-marketActions {\n flex: none;\n display: flex;\n gap: 6px;\n}\n\n.wb-marketSection {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n}\n\n.wb-marketSectionHead {\n display: flex;\n align-items: baseline;\n gap: 8px;\n}\n\n.wb-marketSectionTitle {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketSectionCount {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-marketAction {\n flex: none;\n min-height: 32px;\n padding: 6px 14px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-marketAction:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketAction:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-marketActionPrimary {\n border-color: transparent;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketActionDanger {\n border-color: transparent;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-marketProgress {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-height: 32px;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketConfirm {\n grid-column: 2 / -1;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.wb-marketConfirmText {\n flex: 1;\n min-width: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketNote {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-marketFailure {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-marketEmpty {\n padding: 18px 16px;\n text-align: center;\n}\n\n.wb-marketPage {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 32px;\n padding: 0 clamp(24px, 4vw, 48px) 48px;\n overflow: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketPage > * {\n width: 100%;\n max-width: 960px;\n}\n\n.wb-marketPageHead {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding-top: 28px;\n}\n\n.wb-marketPageTitle {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n.wb-marketPageIntro {\n margin: 4px 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketPageHead .wb-marketRefresh {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.wb-marketPageHead .wb-marketRefresh:disabled {\n cursor: default;\n}\n\n.wb-marketRefresh.wb-spinning svg {\n animation: wb-spin 0.9s linear infinite;\n}\n\n.wb-marketChecked {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-marketPage .wb-marketList {\n padding: 0;\n max-height: none;\n overflow: visible;\n}\n\n.wb-marketPage .wb-marketRow {\n margin: 0 -8px;\n}\n\n.wb-marketPage .wb-modulesFoot {\n padding: 0;\n border-top: none;\n}\n\n.wb-switch {\n flex: none;\n box-sizing: border-box;\n position: relative;\n width: 36px;\n height: 20px;\n padding: 2px;\n border: 0;\n border-radius: 999px;\n corner-shape: round;\n background: var(--dsw-alias-border-l3);\n cursor: pointer;\n transition: background 0.12s ease;\n}\n\n.wb-switch[aria-checked='true'] {\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-switch:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-switch:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-switchKnob {\n display: block;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n corner-shape: round;\n background: var(--dsw-alias-label-primary-foreground);\n transition: transform 0.12s ease;\n}\n\n.wb-switch[aria-checked='true'] .wb-switchKnob {\n transform: translateX(16px);\n}\n\n.wb-gateActions,\n.wb-gateBridge {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n margin-top: 4px;\n padding: 14px 16px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: 14px;\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n.wb-gateFixTitle {\n margin: 0;\n font-size: 13px;\n line-height: 20px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-gateActions .wb-gateHint,\n.wb-gateBridge .wb-gateHint {\n margin: 0;\n font-size: 12px;\n line-height: 19px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-gateActions .wb-gateCommandRow,\n.wb-gateBridge .wb-gateCommandRow {\n margin: 0;\n}\n\n.wb-gateActions .wb-gateButtons,\n.wb-gateBridge .wb-gateButtons {\n justify-content: flex-start;\n}\n\n.wb-gateRaw {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-gateRawSummary {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-gateActions .wb-gateError,\n.wb-gateBridge .wb-gateError {\n margin-top: 6px;\n}\n\n.wb-gateBridgeLines {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-size: 12px;\n line-height: 19px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-gateBridgeLine a {\n display: block;\n margin-top: 4px;\n width: fit-content;\n}\n\n.wb-gateLink {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n.wb-gateLink::after {\n content: '↗';\n margin-left: 2px;\n}\n\n.wb-gateLink:hover {\n text-decoration: underline;\n}\n\n.wb-blocker {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n padding: 20px 16px;\n text-align: center;\n}\n\n.wb-blockerIcon {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-blockerTitle {\n margin: 2px 0 0;\n font-size: 14px;\n line-height: 22px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-blockerHint {\n margin: 0;\n max-width: 42em;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n.wb-blocker.wb-blockerInline {\n align-items: flex-start;\n gap: 6px;\n padding: 4px 0 2px;\n text-align: left;\n}\n\n.wb-blocker.wb-blockerInline .wb-blockerTitle {\n font-size: 13px;\n line-height: 20px;\n}\n\n.wb-blocker.wb-blockerInline .wb-blockerHint {\n max-width: 100%;\n}\n\n.wb-blocker.wb-blockerInline .wb-blockerActions {\n margin-top: 8px;\n}\n\n.wb-blocker.wb-blockerInline .wb-blockerRaw {\n margin-top: 4px;\n max-width: 100%;\n}\n\n.wb-blockerActions {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 6px;\n}\n\n.wb-blockerRaw {\n margin-top: 10px;\n width: 100%;\n max-width: 360px;\n text-align: left;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-blockerRaw summary {\n cursor: pointer;\n}\n\n.wb-blockerRaw .wb-gateError {\n margin: 6px 0 0;\n}\n\n.wb-blockerNotice {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: 10px;\n margin: 0 0 10px;\n padding: 10px 12px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.wb-blockerNotice.wb-flat {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n.wb-blockerNoticeText {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 0;\n}\n\n.wb-blockerNoticeTitle {\n font-size: 12.5px;\n line-height: 18px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-blockerNoticeHint {\n font-size: 11.5px;\n line-height: 17px;\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-blockerNoticeActions {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: -2px;\n}\n\n.wb-modulesDep {\n flex: none;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n.wb-blockerFailure {\n margin: 8px 0 0;\n font-size: 11.5px;\n line-height: 17px;\n color: var(--dsw-alias-label-danger, #e5646b);\n overflow-wrap: anywhere;\n}\n\n.wb-blockerFailureDetail {\n display: block;\n margin-top: 2px;\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n.wb-blockerInlineLink {\n margin-left: 2px;\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n vertical-align: baseline;\n}\n\n.wb-blockerInlineLink:hover {\n text-decoration: underline;\n}\n\n.wb-blockerInlineLink:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n.wb-marketPage .wb-modulesFootText {\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketConfirm {\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-top: 4px;\n padding: 10px 0 2px;\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n.wb-marketConfirmText {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.wb-marketConfirmTitle {\n font: var(--dsw-font-s-strong-14);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-marketConfirmDetail {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-marketConfirm .wb-marketAction {\n padding: 6px 14px;\n}\n\n.wb-marketActionDanger {\n border-color: var(--dsw-alias-state-error-primary);\n background: transparent;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-marketActionDanger:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover-danger);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-marketEmpty {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 64px 16px;\n text-align: center;\n}\n\n.wb-marketEmptyTitle {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n line-height: 18px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbPublishTo {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-cmdbForm {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.wb-cmdbField {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n}\n\n.wb-menu {\n box-sizing: border-box;\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: 100;\n padding: 4px;\n display: flex;\n flex-direction: column;\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-menu-surface-fill, var(--dsw-alias-bg-layer-2));\n box-shadow: var(--dsw-elevation-prominent);\n backdrop-filter: var(--dsw-menu-backdrop-filter);\n max-height: 240px;\n overflow-y: auto;\n}\n\n.wb-menuTop {\n top: auto;\n bottom: calc(100% + 4px);\n}\n\n.wb-menuItem {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n min-height: 30px;\n padding: 6px 8px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n cursor: pointer;\n font-size: 13px;\n line-height: 20px;\n color: var(--dsw-alias-label-primary);\n text-align: left;\n}\n\n.wb-menuItem:hover,\n.wb-menuItem:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n outline: none;\n}\n\n.wb-menuItemLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-menuItemMark {\n flex: none;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-menuItemCheck {\n flex: none;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldTrigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 6px;\n text-align: left;\n cursor: pointer;\n}\n\n.wb-cmdbFieldInput {\n box-sizing: border-box;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 28px;\n padding: 4px 8px;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-size: 13px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldInput:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-border-l1);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\nselect.wb-cmdbFieldInput {\n cursor: pointer;\n}\n\n.wb-cmdbFieldLabel {\n flex: none;\n width: 72px;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbFieldInput {\n flex: 1 1 auto;\n min-width: 0;\n height: 26px;\n padding: 0 8px;\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-base);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldInput:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: 1px;\n}\n\n.wb-cmdbEnvs {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 0;\n padding: 0;\n border: none;\n min-width: 0;\n}\n\n.wb-cmdbEnvs > .wb-cmdbFieldLabel {\n width: auto;\n margin-bottom: 2px;\n}\n\n.wb-cmdbEnvGroup {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.wb-cmdbEnvGroupLabel {\n margin: 0;\n padding: 6px 8px 2px;\n font-size: 11px;\n line-height: 15px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cmdbEnvs > .wb-cmdbEnvGroup + .wb-cmdbEnvGroup {\n margin-top: 2px;\n padding-top: 8px;\n border-top: 0.5px solid var(--dsw-alias-border-l1);\n}\n\n.wb-cmdbEnvs .wb-cmdbEnvGroupLabel {\n padding-left: 0;\n padding-bottom: 4px;\n}\n\n.wb-cmdbFieldNote {\n flex: none;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n.wb-note {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cmdbLoading {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbFieldWaiting {\n display: flex;\n align-items: center;\n color: var(--dsw-alias-label-tertiary);\n cursor: default;\n}\n\n.wb-problems {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wb-problem {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: 8px;\n padding: 4px 0;\n}\n\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-rowKey {\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-rowValue {\n min-width: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rowSub {\n display: block;\n margin-top: 2px;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n}\n\n.wb-cmdbConfirm {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n border: 0.5px solid var(--dsw-alias-state-error-primary);\n border-radius: var(--dsw-radius-sm);\n}\n\n.wb-cmdbConfirmText {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbDone {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-state-success-primary);\n}\n\n.wb-cmdbAsk {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding-top: 8px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-cmdbAskText {\n flex: 1 1 auto;\n min-width: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-cmdbAsk > .wb-linkButton {\n flex: none;\n white-space: nowrap;\n}\n\n.wb-longTask {\n padding-top: 12px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n text-decoration: none;\n white-space: nowrap;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: 12px;\n line-height: 18px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: 11px;\n line-height: 16px;\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: 2px 0 0;\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump > summary {\n cursor: pointer;\n font-size: 11px;\n}\n\n.wb-longTaskDump > pre {\n margin: 4px 0 0;\n max-height: 220px;\n overflow: auto;\n font-size: 11px;\n line-height: 16px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n";
|
|
6245
|
+
var rightbar_default = ".wb-rightbar {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-width: 0;\n overflow: hidden;\n background: var(--dsw-alias-bg-base);\n border-left: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-panelHeader {\n flex: none;\n height: var(--wb-len-38);\n}\n\n.wb-tabStrip {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-38);\n padding: var(--wb-len-10) var(--wb-len-6) 0 var(--wb-len-10);\n}\n\n.wb-stripFill {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wb-rightbar :is(button, [role='tab']):focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-rightbar {\n container-type: inline-size;\n}\n\n.wb-dangerAction {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-stripChrome {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n flex: none;\n margin-left: var(--wb-len-4);\n}\n\n.wb-panelBody {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n scrollbar-gutter: stable;\n padding: var(--wb-len-12);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n.wb-panelBody {\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}";
|
|
4768
6246
|
//#endregion
|
|
4769
6247
|
//#region src/shared/styles/tokens.css?raw
|
|
4770
6248
|
var tokens_default = ".wb-root,\n.wb-rightbar {\n --wb-bar-height: 36px;\n --wb-gap-xs: 6px;\n --wb-font-row: 14px;\n}\n";
|
|
4771
6249
|
//#endregion
|
|
6250
|
+
//#region src/shared/styles/tokens/palette.css?raw
|
|
6251
|
+
var palette_default = ":root {\n --wb-static-titlebar-fill: #ffffff8c;\n --wb-static-titlebar-fill-hover: #ffffff4d;\n --wb-static-titlebar-fill-dark: #ffffff26;\n --wb-static-titlebar-fill-dark-hover: #fff3;\n --wb-static-mask-opaque: #000;\n --wb-static-shadow-ghost: 0 8px 20px rgba(0, 0, 0, 0.4);\n}\n";
|
|
6252
|
+
//#endregion
|
|
6253
|
+
//#region src/shared/styles/tokens/scale.css?raw
|
|
6254
|
+
var scale_default = ":root {\n --wb-dur-0-12: 0.12s;\n --wb-dur-0-15: 0.15s;\n --wb-dur-0-9: 0.9s;\n --wb-dur-1-4: 1.4s;\n --wb-dur-1-5: 1.5s;\n --wb-font-10: 10px;\n --wb-font-11-5: 11.5px;\n --wb-font-12-5: 12.5px;\n --wb-font-15: 15px;\n --wb-font-17: 17px;\n --wb-font-18: 18px;\n --wb-font-6: 6px;\n --wb-len-0-5: 0.5px;\n --wb-len-1: 1px;\n --wb-len-10: 10px;\n --wb-len-12: 12px;\n --wb-len-120: 120px;\n --wb-len-13: 13px;\n --wb-len-132: 132px;\n --wb-len-14: 14px;\n --wb-len-144: 144px;\n --wb-len-15: 15px;\n --wb-len-16: 16px;\n --wb-len-18: 18px;\n --wb-len-2: 2px;\n --wb-len-20: 20px;\n --wb-len-200: 200px;\n --wb-len-22: 22px;\n --wb-len-220: 220px;\n --wb-len-24: 24px;\n --wb-len-240: 240px;\n --wb-len-26: 26px;\n --wb-len-260: 260px;\n --wb-len-28: 28px;\n --wb-len-3: 3px;\n --wb-len-3-4em: 3.4em;\n --wb-len-30: 30px;\n --wb-len-300: 300px;\n --wb-len-32: 32px;\n --wb-len-320: 320px;\n --wb-len-34: 34px;\n --wb-len-36: 36px;\n --wb-len-360: 360px;\n --wb-len-38: 38px;\n --wb-len-4: 4px;\n --wb-len-440: 440px;\n --wb-len-40: 40px;\n --wb-len-420: 420px;\n --wb-len-42em: 42em;\n --wb-len-44: 44px;\n --wb-len-48: 48px;\n --wb-len-5: 5px;\n --wb-len-52: 52px;\n --wb-len-520: 520px;\n --wb-len-56: 56px;\n --wb-len-560: 560px;\n --wb-len-6: 6px;\n --wb-len-60: 60px;\n --wb-len-62: 62px;\n --wb-len-64: 64px;\n --wb-len-7: 7px;\n --wb-len-72: 72px;\n --wb-len-8: 8px;\n --wb-len-800: 800px;\n --wb-len-9: 9px;\n --wb-len-96: 96px;\n --wb-len-960: 960px;\n --wb-len-neg-0-5: -0.5px;\n --wb-len-neg-1-5: -1.5px;\n --wb-len-neg-12: -12px;\n --wb-len-neg-2: -2px;\n --wb-len-neg-3: -3px;\n --wb-len-neg-4: -4px;\n --wb-len-neg-6: -6px;\n --wb-len-neg-8: -8px;\n --wb-line-10: 10px;\n --wb-line-13: 13px;\n --wb-line-14: 14px;\n --wb-line-15: 15px;\n --wb-line-16: 16px;\n --wb-line-17: 17px;\n --wb-line-18: 18px;\n --wb-line-19: 19px;\n --wb-line-20: 20px;\n --wb-line-22: 22px;\n --wb-line-24: 24px;\n --wb-radius-13: 13px;\n --wb-radius-14: 14px;\n --wb-radius-2: 2px;\n --wb-radius-6: 6px;\n --wb-radius-pill: 999px;\n --wb-track-brand: .04em;\n --wb-z-100: 100;\n --wb-z-1100: 1100;\n --wb-z-30: 30;\n --wb-z-40: 40;\n --wb-z-top: 2147483000;\n}\n";
|
|
6255
|
+
//#endregion
|
|
4772
6256
|
//#region src/shared/styles/sidebar-app.css?raw
|
|
4773
|
-
var sidebar_app_default = ".wb-wsSection {\n position: relative;\n flex: none;\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n margin: 0 var(--dsh-session-list-scrollbar-offset) 4px 0;\n padding-right: calc(\n var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) -\n var(--dsh-session-list-scrollbar-offset)\n );\n}\n.wb-sectionHeader {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n height: 36px;\n flex: none;\n margin-bottom: 4px;\n padding-left: 8px;\n padding-right: 2px;\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n}\n.wb-wsNew {\n margin-left: auto;\n}\n.wb-sectionLabel {\n flex: none;\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n white-space: nowrap;\n line-height: 20px;\n}\n.wb-collapsed .wb-wsSection {\n margin: 0 0 12px;\n padding-right: 0;\n}\n.wb-collapsed .wb-sectionHeader {\n justify-content: flex-start;\n gap: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n}\n.wb-collapsed .wb-wsNew {\n margin-left: 0;\n}\n\n.wb-project {\n position: relative;\n flex: none;\n margin: 0 2px 4px;\n}\n.wb-projectButton {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: 34px;\n padding: 0 8px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}\n.wb-projectButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-projectButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-collapsed .wb-projectButton {\n justify-content: center;\n width: var(--wb-bar-height);\n height: var(--wb-bar-height);\n padding: 0;\n}\n.wb-collapsed .wb-projectName,\n.wb-collapsed .wb-projectChevron {\n display: none;\n}\n.wb-projectGlyph {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 20px;\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-projectGlyphActive {\n color: var(--dsw-alias-state-business-primary);\n}\n.wb-projectName {\n flex: 1;\n min-width: 0;\n font-size: var(--wb-font-row);\n line-height: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wb-projectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform 0.15s var(--ds-ease-in-out);\n}\n.wb-projectChevronOpen {\n transform: rotate(180deg);\n}\n\n.wb-popover {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: auto;\n min-width: 100%;\n max-width: 360px;\n z-index: 100;\n box-sizing: border-box;\n padding: 4px;\n display: flex;\n flex-direction: column;\n max-height: 320px;\n overflow-y: auto;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-menu-surface-fill);\n backdrop-filter: var(--dsw-menu-backdrop-filter);\n box-shadow: var(--dsw-elevation-prominent);\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}\n.wb-popoverItem {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n min-height: 34px;\n padding: 6px 8px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n cursor: pointer;\n}\n.wb-popoverItem:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-popoverItemActive {\n background: transparent;\n}\n.wb-popoverItem:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n outline: none;\n}\n.wb-popoverItemIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n color: var(--dsw-alias-menu-icon);\n}\n.wb-popoverItemIcon svg {\n width: 14px;\n height: 14px;\n}\n.wb-popoverItemTitle {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n line-height: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wb-popoverCheck {\n flex: none;\n display: inline-flex;\n width: 14px;\n height: 14px;\n color: var(--dsw-alias-label-primary);\n}\n.wb-popoverSep {\n height: 0.5px;\n margin: 3px 2px;\n background: var(--dsw-alias-border-l2);\n}\n.wb-popoverAdd {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n min-height: 34px;\n padding: 6px 8px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n font: inherit;\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n cursor: pointer;\n}\n.wb-popoverAdd:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n.wb-popoverAdd svg {\n color: var(--dsw-alias-menu-icon);\n}\n.wb-popoverEmpty {\n padding: 6px 8px;\n font-size: 11px;\n line-height: 15px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-sessions {\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n margin-left: -4px;\n margin-right: var(--dsh-session-list-scrollbar-offset);\n padding-left: 4px;\n padding-right: calc(\n var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) -\n var(--dsh-session-list-scrollbar-offset)\n );\n padding-bottom: 16px;\n scrollbar-gutter: stable;\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}\n\n.wb-sessions > * + * {\n margin-top: 2px;\n}\n\n.wb-sessionLeading {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 20px;\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-sessionPin {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 20px;\n margin-left: 6px;\n color: var(--dsw-alias-label-caption);\n}\n.wb-rowActions {\n flex: none;\n display: none;\n align-items: center;\n gap: 10px;\n}\n.wb-sessionRow:hover .wb-rowActions,\n.wb-sessionRow.wb-menuOpen .wb-rowActions {\n display: inline-flex;\n}\n.wb-sessionRow:hover .wb-sessionTime,\n.wb-sessionRow.wb-menuOpen .wb-sessionTime,\n.wb-sessionRow:hover .wb-sessionPin,\n.wb-sessionRow.wb-menuOpen .wb-sessionPin {\n display: none;\n}\n.wb-sessionRow.wb-menuOpen {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-iconButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n border-radius: var(--dsw-radius-xs);\n background: none;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n.wb-iconButton:hover {\n color: var(--dsw-alias-label-primary);\n}\n.wb-iconButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-rowMenu {\n left: auto;\n right: 0;\n min-width: 144px;\n max-width: 260px;\n}\n\n.wb-sessionRow {\n position: relative;\n flex: none;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n height: 32px;\n padding: 0 8px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}\n.wb-sessionRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-sessionRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-stateDot {\n position: relative;\n display: inline-block;\n flex: none;\n}\n.wb-stateDot::after {\n content: '';\n position: absolute;\n inset: 20%;\n border-radius: 50%;\n corner-shape: round;\n background: currentColor;\n}\n.wb-stateDot[data-state='done'] {\n color: var(--dsw-alias-state-success-primary);\n}\n.wb-stateDot[data-state='warning'] {\n color: var(--dsw-alias-state-warn-primary);\n}\n.wb-stateDot[data-state='error'] {\n color: var(--dsw-alias-state-error-primary);\n}\n.wb-stateDot[data-state='idle'] {\n color: var(--dsw-alias-state-idle-primary);\n}\n.wb-visuallyHidden {\n clip: rect(0 0 0 0);\n white-space: nowrap;\n width: 1px;\n height: 1px;\n position: absolute;\n overflow: hidden;\n}\n.wb-sessionTitle {\n flex: 1;\n min-width: 0;\n margin: 0 6px 0 4px;\n font-size: var(--wb-font-row);\n line-height: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wb-sessionTime {\n flex: none;\n font-size: 10px;\n line-height: 16px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-empty {\n padding: 16px 12px;\n font-size: 13px;\n color: var(--dsw-alias-label-tertiary);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-projectChevron {\n transition: none;\n }\n}\n\n.wb-sessionRow.wb-selected {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-panelTag {\n flex: none;\n margin-left: auto;\n white-space: nowrap;\n padding: 1px 8px;\n border-radius: 999px;\n corner-shape: round;\n color: var(--dsw-alias-state-warn-primary);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: 11px;\n font-weight: 500;\n line-height: 17px;\n}\n.wb-panelGlyph {\n position: relative;\n}\n.wb-panelDot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: -3px;\n right: -3px;\n}\n\nbutton.pXSMma_workspace {\n display: none;\n}\n";
|
|
6257
|
+
var sidebar_app_default = ".wb-wsSection {\n position: relative;\n flex: none;\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n margin: 0 var(--dsh-session-list-scrollbar-offset) var(--wb-len-4) 0;\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n}\n.wb-sectionHeader {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-36);\n flex: none;\n margin-bottom: var(--wb-len-4);\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-2);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n}\n.wb-wsNew {\n margin-left: auto;\n}\n.wb-sectionLabel {\n flex: none;\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n white-space: nowrap;\n line-height: var(--wb-line-20);\n}\n.wb-collapsed .wb-wsSection {\n margin: 0 0 var(--wb-len-12);\n padding-right: 0;\n}\n.wb-collapsed .wb-sectionHeader {\n justify-content: flex-start;\n gap: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n}\n.wb-collapsed .wb-wsNew {\n margin-left: 0;\n}\n\n.wb-project {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n.wb-projectButton {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}\n.wb-projectButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-projectButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-collapsed .wb-projectButton {\n justify-content: center;\n width: var(--wb-bar-height);\n height: var(--wb-bar-height);\n padding: 0;\n}\n.wb-collapsed .wb-projectName,\n.wb-collapsed .wb-projectChevron {\n display: none;\n}\n.wb-projectGlyph {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-projectGlyphActive {\n color: var(--dsw-alias-state-business-primary);\n}\n.wb-projectName {\n flex: 1;\n min-width: 0;\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wb-projectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform var(--wb-dur-0-15) var(--ds-ease-in-out);\n}\n.wb-projectChevronOpen {\n transform: rotate(180deg);\n}.wb-sessions {\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n margin-left: var(--wb-len-neg-4);\n margin-right: var(--dsh-session-list-scrollbar-offset);\n padding-left: var(--wb-len-4);\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n padding-bottom: var(--wb-len-16);\n scrollbar-gutter: stable;\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}\n\n.wb-sessions > * + * {\n margin-top: var(--wb-len-2);\n}\n\n.wb-sessionLeading {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-sessionPin {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n margin-left: var(--wb-len-6);\n color: var(--dsw-alias-label-caption);\n}\n.wb-rowActions {\n flex: none;\n display: none;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n.wb-rowActions .wb-iconButton {\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n}\n.wb-sessionRow:hover .wb-rowActions,\n.wb-sessionRow.wb-menuOpen .wb-rowActions {\n display: inline-flex;\n}\n.wb-sessionRow:hover .wb-sessionTime,\n.wb-sessionRow.wb-menuOpen .wb-sessionTime,\n.wb-sessionRow:hover .wb-sessionPin,\n.wb-sessionRow.wb-menuOpen .wb-sessionPin {\n display: none;\n}\n.wb-sessionRow.wb-menuOpen {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-iconButton:hover {\n color: var(--dsw-alias-label-primary);\n}\n.wb-iconButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-rowMenu {\n left: auto;\n right: 0;\n min-width: var(--wb-len-144);\n max-width: var(--wb-len-260);\n}\n\n.wb-sessionRow {\n position: relative;\n flex: none;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}\n.wb-sessionRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-sessionRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-visuallyHidden {\n clip: rect(0 0 0 0);\n white-space: nowrap;\n width: var(--wb-len-1);\n height: var(--wb-len-1);\n position: absolute;\n overflow: hidden;\n}\n.wb-sessionTitle {\n flex: 1;\n min-width: 0;\n margin: 0 var(--wb-len-6) 0 var(--wb-len-4);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wb-sessionTime {\n flex: none;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-empty {\n padding: var(--wb-len-16) var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-projectChevron {\n transition: none;\n }\n}\n\n.wb-sessionRow.wb-selected {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-panelTag {\n flex: none;\n margin-left: auto;\n}\n.wb-panelGlyph {\n position: relative;\n}\n.wb-panelDot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: var(--wb-len-neg-3);\n right: var(--wb-len-neg-3);\n}\n\nbutton.pXSMma_workspace {\n display: none;\n}\n";
|
|
4774
6258
|
//#endregion
|
|
4775
6259
|
//#region src/shared/styles/sidebar.css?raw
|
|
4776
|
-
var sidebar_default = ".wb-root{--dsh-sidebar-inline-padding:12px;height:100%;padding:
|
|
6260
|
+
var sidebar_default = ".wb-root{--dsh-sidebar-inline-padding:12px;height:100%;padding:var(--wb-len-6) var(--dsh-sidebar-inline-padding);box-sizing:border-box;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);flex-direction:column;font-size:var(--dsw-font-s-14-font-size);display:flex}[data-platform=darwin] .wb-root{background:0 0}.wb-root.wb-collapsed{padding:var(--wb-len-18) var(--wb-len-10) var(--wb-len-6)}[data-windows-titlebar] .wb-root .wb-logoRow{height:var(--wb-len-40);margin:0;padding:0}[data-windows-titlebar] .wb-toggle{top:calc((var(--dsh-windows-titlebar-height) - var(--wb-len-28)) / 2);z-index:var(--wb-z-30);-webkit-app-region:no-drag;position:fixed;left:var(--wb-len-12)}[data-windows-titlebar] .wb-root.wb-collapsed .wb-logoRow{height:0}[data-windows-titlebar] .wb-root:not(.wb-collapsed) .wb-brand{padding-left:var(--wb-len-4)}[data-windows-titlebar] .wb-brandIdentity{transform:translateY(1px)}[data-windows-titlebar] .wb-brandMark{transform:translate(1px)}[data-windows-titlebar] .wb-brandName{font-weight:400}[data-windows-titlebar] .wb-root.wb-collapsed{padding:0}[data-windows-titlebar] .wb-root:not(.wb-collapsed) .wb-newSession{margin-top:var(--wb-len-8);margin-left:0}[data-windows-titlebar] .wb-collapsed .wb-panelList,[data-windows-titlebar] .wb-collapsed .wb-regionArea,[data-windows-titlebar] .wb-collapsed .wb-footArea{display:none}html[data-windows-titlebar]:has([data-sidebar-collapsed=true]){--dsh-windows-menu-start:84px}[data-windows-titlebar] .wb-collapsed .wb-newSession{top:calc((var(--dsh-windows-titlebar-height) - var(--wb-len-28)) / 2);z-index:var(--wb-z-30);-webkit-app-region:no-drag;border:none;margin:0;padding:0;position:fixed;left:var(--wb-len-48)}[data-windows-titlebar] .wb-railIn .wb-iconButton,[data-windows-titlebar] .wb-railIn .wb-newSession{animation:none}[data-windows-titlebar] .wb-collapsed .wb-toggle,[data-windows-titlebar] .wb-collapsed .wb-newSession{corner-shape:round;width:var(--wb-len-28);height:var(--wb-len-28);color:var(--dsw-alias-label-secondary);border-radius:50%}[data-windows-titlebar] .wb-collapsed .wb-toggle .wb-panelIcon{display:inline}.wb-root.wb-quietBars{--dsh-scrollbar-thumb:transparent;--dsh-scrollbar-thumb-hover:transparent}.wb-fading>*{opacity:0;transition:opacity var(--wb-dur-0-15) var(--ds-ease-in-out)}.wb-wide{animation:wb-wide-in var(--ds-transition-duration) var(--ds-ease-in-out)}@keyframes wb-wide-in{0%{opacity:0}}.wb-railIn .wb-iconButton,.wb-railIn .wb-newSession,.wb-railIn .wb-panelList,.wb-railIn .wb-regionArea{animation:wb-rail-in var(--wb-dur-0-15) var(--ds-ease-in-out) backwards}.wb-railIn .wb-footArea{animation:wb-rail-fade-in var(--wb-dur-0-15) var(--ds-ease-in-out) backwards}@keyframes wb-rail-in{0%{opacity:0;transform:translate(49px)}}@keyframes wb-rail-fade-in{0%{opacity:0}}.wb-topStrip{box-sizing:border-box;height:var(--wb-len-52);margin:var(--wb-len-neg-6) calc(-1 * var(--dsh-sidebar-inline-padding)) 0;flex:none;justify-content:flex-end;align-items:center;padding:0 var(--wb-len-12) var(--wb-len-2);display:flex}[data-fullscreen] .wb-topStrip{justify-content:flex-start}.wb-topStrip+.wb-logoRow{margin-top:var(--wb-len-neg-12)}.wb-logoRow{box-sizing:border-box;flex:none;justify-content:flex-end;align-items:center;gap:var(--wb-len-8);height:var(--wb-len-60);margin-bottom:var(--wb-len-4);padding:var(--wb-len-8) 0 var(--wb-len-8) var(--wb-len-4);display:flex;overflow:hidden}.wb-collapsed .wb-logoRow{justify-content:flex-start;height:var(--wb-len-36);margin-bottom:var(--wb-len-12);padding:0;overflow:visible}.wb-brand{min-width:0;color:inherit;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;padding:0;display:inline-flex;overflow:hidden}[data-platform=darwin] .wb-brand{cursor:default}.wb-brandIdentity{align-items:center;gap:var(--wb-len-8);min-width:0;height:var(--wb-len-24);display:inline-flex}.wb-brandMark{flex:none;justify-content:center;align-items:center;display:inline-flex}.wb-brandName{letter-spacing:var(--wb-track-brand);align-items:center;gap:var(--wb-len-6);min-width:0;height:var(--wb-len-24);font-size:var(--wb-font-18);font-weight:600;line-height:var(--wb-line-24);display:inline-flex}.wb-fallbackBrandName{letter-spacing:0;white-space:nowrap;font-size:var(--wb-font-17)}.wb-localBuildBrand{white-space:nowrap;flex-direction:column;flex:none;justify-content:center;align-items:flex-start;gap:var(--wb-len-1);height:var(--wb-len-24);display:inline-flex}.wb-localBuildTitle{letter-spacing:0;font-size:var(--dsw-font-xxs-12-font-size);line-height:var(--wb-line-13)}.wb-iconButton{border-radius:var(--dsw-radius-sm);cursor:pointer;width:var(--wb-len-28);height:var(--wb-len-28);color:var(--dsw-alias-label-secondary);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.wb-iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-iconButton.wb-toggle:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.wb-collapsed .wb-iconButton{border-radius:var(--dsw-radius-md);width:var(--wb-len-36);height:var(--wb-len-36)}.wb-collapsed .wb-toggle .wb-panelIcon{display:none}.wb-collapsed .wb-toggle:hover .wb-panelIcon{display:inline}.wb-collapsed .wb-toggle:hover .wb-railMark{display:none}.wb-railMark{justify-content:center;align-items:center;display:inline-flex}.wb-collapsed .wb-iconButton{color:var(--dsw-alias-label-primary)}.wb-buildVersion{height:var(--wb-len-10);color:var(--dsw-alias-label-primary-inverted);background:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:var(--wb-radius-2);flex:none;align-items:center;padding:0 var(--wb-len-3);font-size:var(--wb-font-6);font-weight:500;line-height:var(--wb-line-10);display:inline-flex}.wb-newSession{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-button-elevated-fill);height:var(--wb-len-38);color:var(--dsw-alias-label-primary);cursor:pointer;flex:none;justify-content:center;align-items:center;gap:0;margin:0 var(--wb-len-2) var(--wb-len-12);padding:var(--wb-len-8) var(--wb-len-12);font-size:var(--dsw-font-s-14-font-size);font-weight:500;line-height:var(--wb-line-22);display:flex;position:relative;overflow:hidden;container-type:inline-size}.wb-newSession:hover{background:var(--dsw-alias-button-floating-hover)}[data-platform=darwin] .wb-newSession{background:var(--wb-static-titlebar-fill)}[data-platform=darwin] .wb-newSession:hover{background:var(--wb-static-titlebar-fill-hover)}[data-platform=darwin] [data-ds-dark-theme] .wb-newSession{background:var(--wb-static-titlebar-fill-dark)}[data-platform=darwin] [data-ds-dark-theme] .wb-newSession:hover{background:var(--wb-static-titlebar-fill-dark-hover)}.wb-collapsed .wb-newSession{background:0 0;border-color:transparent;align-self:flex-start;gap:0;width:var(--wb-len-36);height:var(--wb-len-36);margin:0 0 var(--wb-len-12);padding:0}.wb-collapsed .wb-newSession:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-newSessionLabel{white-space:nowrap;max-width:var(--wb-len-200);overflow:hidden}.wb-collapsed .wb-newSessionLabel{max-width:0}.wb-newSessionLabelMask{flex:1;min-width:0}.wb-newSession:is(:hover,:focus-visible) .wb-newSessionLabelMask:has(+.wb-newSessionShortcut){overflow:hidden;mask-image:linear-gradient(90deg,var(--wb-static-mask-opaque) calc(100% - var(--wb-len-16)),transparent)}.wb-newSessionContent{justify-content:center;align-items:center;gap:var(--wb-len-6);width:100cqw;display:flex}.wb-newSessionContent>svg{flex:none}.wb-newSessionShortcut{opacity:0;pointer-events:none;flex:none;font-weight:400;display:inline-flex}.wb-newSession:is(:hover,:focus-visible) .wb-newSessionShortcut{opacity:1}.wb-panelList{flex-direction:column;flex:none;gap:var(--wb-len-4);margin-bottom:var(--wb-len-8);display:flex}.wb-panelRow{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:var(--wb-len-36);color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:var(--wb-len-8);margin:0 var(--wb-len-2);padding:var(--wb-len-7) var(--wb-len-8);line-height:var(--wb-line-22);display:flex}.wb-panelRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-panelRow.wb-panelActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.wb-panelRow:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.wb-panelGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.wb-panelTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.wb-collapsed .wb-panelList{gap:var(--wb-len-12);margin-bottom:var(--wb-len-12)}.wb-collapsed .wb-panelRow{width:var(--wb-len-36);height:var(--wb-len-36);color:var(--dsw-alias-label-primary);justify-content:center;margin:0;padding:0}.wb-regionArea{min-height:0;margin-left:var(--wb-len-neg-4);margin-right:calc(-1 * var(--dsh-sidebar-inline-padding));flex-direction:column;flex:1;padding-left:var(--wb-len-4);display:flex;overflow:hidden}.wb-collapsed .wb-regionArea{margin-left:0;margin-right:0;padding-left:0}.wb-footArea{flex-direction:column;flex:none;display:flex}.wb-settingsArea,.wb-footerActions{flex:none;width:100%;min-width:0}.wb-footerActions{display:flex}.wb-collapsed .wb-footArea{align-items:center}.wb-collapsed .wb-settingsArea,.wb-collapsed .wb-footerActions{justify-content:center;width:auto;display:flex}@media (prefers-reduced-motion:reduce){.wb-wide,.wb-fading>*,.wb-railIn .wb-iconButton,.wb-railIn .wb-newSession,.wb-railIn .wb-panelList,.wb-railIn .wb-footArea,.wb-railIn .wb-regionArea{transition:none;animation:none}}\n";
|
|
6261
|
+
//#endregion
|
|
6262
|
+
//#region src/shared/styles/chrome.css?raw
|
|
6263
|
+
var chrome_default = ".wb-stripButton {\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-stripIconFlip {\n display: block;\n transform: scaleX(-1);\n}\n\n.wb-stripButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stripButton:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-stripButtonActive {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stripButton.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-panelBody.wb-fixtureMany .wb-mockStrip {\n display: none;\n}\n\n@keyframes wb-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n";
|
|
6264
|
+
//#endregion
|
|
6265
|
+
//#region src/shared/styles/board.css?raw
|
|
6266
|
+
var board_default = ".wb-view {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n\n.wb-view > .wb-issueList {\n margin: 0 var(--wb-len-neg-8);\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12);\n}\n\n.wb-cardBody > :not(.wb-issueList) {\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-8);\n}\n\n.wb-cardMore {\n align-self: flex-start;\n color: var(--dsw-alias-label-secondary);\n padding-top: var(--wb-len-6);\n padding-bottom: var(--wb-len-6);\n}\n\n.wb-cardMore:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-prio {\n box-sizing: border-box;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--wb-len-22);\n height: var(--wb-len-18);\n padding: 0 var(--wb-len-5);\n border-radius: var(--wb-radius-6);\n font-size: var(--dsw-font-xxxs-11-font-size);\n font-weight: 600;\n line-height: 1;\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-state-error-primary);\n background: var(--dsw-alias-bg-mask-1);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='2'] {\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='3'] {\n color: var(--dsw-alias-state-business-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent);\n}\n\n.wb-prio[data-level='4'] {\n color: var(--dsw-alias-label-tertiary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-typeDot {\n flex: none;\n width: var(--wb-len-5);\n height: var(--wb-len-5);\n border-radius: 50%;\n corner-shape: round;\n background: var(--dsw-alias-label-tertiary);\n}\n\n.wb-typeDot[data-type='PROCESSING'] {\n background: var(--dsw-alias-state-business-primary);\n}\n\n.wb-typeDot[data-type='COMPLETED'] {\n background: var(--dsw-alias-state-success-primary);\n}\n\n.wb-typeDot[data-type='unknown'] {\n background: var(--dsw-alias-label-tertiary);\n}\n\n.wb-issueList {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-issueRow {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n text-align: left;\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: none;\n padding: var(--wb-len-8);\n font: inherit;\n color: inherit;\n text-decoration: none;\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-issueList > .wb-issueRow + .wb-issueRow::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-1-5);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-issueRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-issueLink {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--wb-len-8);\n flex: 1;\n min-width: 0;\n color: inherit;\n text-decoration: none;\n}\n\n.wb-issueToChat {\n flex: none;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.65;\n}\n\n.wb-issueRow:hover .wb-issueToChat {\n opacity: 1;\n}\n\n.wb-issueToChat:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-issueToChatFailed,\n.wb-issueToChatFailed:hover {\n color: var(--dsw-alias-state-error-primary);\n opacity: 1;\n}\n\n.wb-issueRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-issueMain {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-5);\n flex: 1;\n min-width: 0;\n}\n\n.wb-issueLine {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-16);\n}\n\n.wb-issueCode {\n flex: none;\n min-width: var(--wb-len-3-4em);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n.wb-issueTitle {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-issueMeta {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n}\n\n.wb-issueStatus {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-issueIteration {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-issuePreview {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-issueOpen {\n flex: none;\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-issueRow:hover .wb-issueOpen {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-issueMetaItem {\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n\n.wb-metaDot {\n flex: none;\n font-size: inherit;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-issueTime {\n flex: none;\n font-variant-numeric: tabular-nums;\n}\n\n.wb-releaseState {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n.wb-releaseStateTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-releaseStateHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releaseActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n\n.wb-releaseResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-releaseGear {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envSkeletonBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-envSkeletonTitle {\n width: var(--wb-len-96);\n}\n.wb-envSkeletonLine {\n width: 72%;\n height: var(--wb-len-10);\n}\n\n.wb-envListSkeleton {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-1) 0;\n}\n\n.wb-envListSkeleton > :nth-child(2n) {\n width: 58%;\n}\n\n.wb-envBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-envBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-envBlockActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n.wb-envBlockTitle {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n font-weight: 500;\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-envBlockTitle:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-envChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform var(--wb-dur-0-15) var(--ds-ease-in-out);\n}\n\n.wb-envChevronOpen {\n transform: rotate(180deg);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-envChevron {\n transition: none;\n }\n}\n\n.wb-envList {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-envListTitle {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-envLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-envLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-envChatFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-envListEmpty {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releasePublishPick {\n position: relative;\n display: inline-flex;\n}\n\n.wb-releasePublishRow {\n display: flex;\n justify-content: flex-end;\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-releasePublish {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n}\n\n.wb-releaseConfirm {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-10) var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-releaseConfirmTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-releaseConfirmRow {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n}\n\n.wb-releaseConfirmKey {\n flex: none;\n width: var(--wb-len-52);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-releaseConfirmValue {\n display: inline-flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow-wrap: anywhere;\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-releaseConfirmSep {\n margin: 0 var(--wb-len-6);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-cmdbField > .wb-cmdbFieldLabel:empty {\n display: none;\n}\n\n.wb-releaseConfirmValue .wb-cmdbField {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: auto;\n}\n\n.wb-releaseConfirmValue .wb-cmdbFieldInput {\n flex: none;\n min-width: 0;\n max-width: var(--wb-len-240);\n min-height: 0;\n padding: var(--wb-len-1) var(--wb-len-6);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-releaseConfirmValue .wb-menu {\n min-width: var(--wb-len-220);\n right: auto;\n background: var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-layer-2));\n}\n\n.wb-releaseConfirmActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n\n.wb-lineEllipsis {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-rowDot {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-row:has(> .wb-rowDot) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n\n.wb-chips {\n display: flex;\n gap: var(--wb-gap-xs);\n flex-wrap: wrap;\n}\n\n.wb-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-13);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-chip:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-chipActive {\n color: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-border-l4);\n background: var(--dsw-alias-interactive-bg-active);\n}\n\n.wb-chipCount {\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }\n}\n\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalBody {\n max-height: var(--wb-len-132);\n overflow-y: auto;\n white-space: pre-wrap;\n font-weight: 400;\n}\n\n.wb-approvalHosts,\n.wb-approvalWarn {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-detailHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n.wb-detailTitle {\n margin: 0;\n font-size: var(--wb-font-15);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-detailStatus {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-detailType {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-detailMeta {\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-detailMetaRow {\n display: flex;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n}\n\n.wb-detailMetaRow dt {\n flex: none;\n width: var(--wb-len-62);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-detailMetaRow dd {\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n word-break: break-all;\n}\n\n.wb-detailBody {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n white-space: pre-wrap;\n word-break: break-word;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n padding-top: var(--wb-len-10);\n}\n\n.wb-detailEmpty {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-imageChip {\n align-self: flex-start;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n padding: var(--wb-len-1) var(--wb-len-6);\n border-radius: var(--dsw-radius-xs);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-intentBar {\n position: sticky;\n bottom: 0;\n margin-top: auto;\n padding-top: var(--wb-len-10);\n background: var(--dsw-alias-bg-base);\n}\n\n.wb-intentButton {\n width: 100%;\n height: var(--wb-len-30);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-button-elevated-fill);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n.wb-intentButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n@container (max-width: 340px) {\n .wb-panelBody {\n padding: var(--wb-len-8);\n }\n\n .wb-issueTime {\n display: none;\n }\n}\n\n@keyframes wb-dash {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbPublishTo {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-cmdbForm {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n.wb-cmdbField {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n position: relative;\n}\n\n.wb-menu {\n box-sizing: border-box;\n position: absolute;\n top: calc(100% + var(--wb-len-4));\n left: 0;\n right: 0;\n z-index: var(--wb-z-100);\n padding: var(--wb-len-4);\n display: flex;\n flex-direction: column;\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-menu-surface-fill, var(--dsw-alias-bg-layer-2));\n box-shadow: var(--dsw-elevation-prominent);\n backdrop-filter: var(--dsw-menu-backdrop-filter);\n max-height: var(--wb-len-240);\n overflow-y: auto;\n}\n\n.wb-menuTop {\n top: auto;\n bottom: calc(100% + var(--wb-len-4));\n}\n\n.wb-menuItem {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n}\n\n.wb-menuItem:hover,\n.wb-menuItem:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n outline: none;\n}\n\n.wb-menuItemLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-menuItemMark {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n.wb-menuItemCheck {\n flex: none;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldTrigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-6);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-cmdbFieldInput {\n box-sizing: border-box;\n flex: 1 1 auto;\n min-width: 0;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldInput:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-border-l1);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\nselect.wb-cmdbFieldInput {\n cursor: pointer;\n}\n\n.wb-cmdbFieldLabel {\n flex: none;\n width: var(--wb-len-72);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbFieldInput {\n flex: 1 1 auto;\n min-width: 0;\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-base);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cmdbFieldInput:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: 1px;\n}\n\n.wb-cmdbEnvs {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n border: none;\n min-width: 0;\n}\n\n.wb-cmdbEnvs > .wb-cmdbFieldLabel {\n width: auto;\n margin-bottom: var(--wb-len-2);\n}\n\n.wb-cmdbEnvGroup {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n.wb-cmdbEnvGroupLabel {\n margin: 0;\n padding: var(--wb-len-6) var(--wb-len-8) var(--wb-len-2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-15);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cmdbEnvs > .wb-cmdbEnvGroup + .wb-cmdbEnvGroup {\n margin-top: var(--wb-len-2);\n padding-top: var(--wb-len-8);\n border-top: 0.5px solid var(--dsw-alias-border-l1);\n}\n\n.wb-cmdbEnvs .wb-cmdbEnvGroupLabel {\n padding-left: 0;\n padding-bottom: var(--wb-len-4);\n}\n\n.wb-cmdbFieldNote {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cmdbLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbFieldWaiting {\n display: flex;\n align-items: center;\n color: var(--dsw-alias-label-tertiary);\n cursor: default;\n}\n\n.wb-problems {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-rowKey {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rowSub {\n display: block;\n margin-top: var(--wb-len-2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cmdbConfirm {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-state-error-primary);\n border-radius: var(--dsw-radius-sm);\n}\n\n.wb-cmdbConfirmText {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cmdbDone {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-success-primary);\n}\n\n.wb-cmdbAsk {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n padding-top: var(--wb-len-8);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-cmdbAskText {\n flex: 1 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-anchorButton {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n cursor: pointer;\n}\n\n.wb-anchorButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.wb-envRefresh.wb-iconButton {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-envRefresh.wb-iconButton:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-envRefresh.wb-iconButton:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-envRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}";
|
|
4777
6267
|
//#endregion
|
|
4778
6268
|
//#region src/shared/hooks/use-api-resource.ts
|
|
4779
6269
|
var use_api_resource_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -5041,10 +6531,11 @@ function useBlockerActions(onRetry, onOpenMarket) {
|
|
|
5041
6531
|
return;
|
|
5042
6532
|
}
|
|
5043
6533
|
if (action.kind === "copy") {
|
|
5044
|
-
|
|
6534
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(action.text).then((ok) => {
|
|
6535
|
+
if (!ok) return;
|
|
5045
6536
|
setCopied(action.text);
|
|
5046
6537
|
setTimeout(() => setCopied(null), 1500);
|
|
5047
|
-
}
|
|
6538
|
+
});
|
|
5048
6539
|
return;
|
|
5049
6540
|
}
|
|
5050
6541
|
window.open(action.url, "_blank", "noopener");
|
|
@@ -5054,18 +6545,39 @@ function useBlockerActions(onRetry, onOpenMarket) {
|
|
|
5054
6545
|
failure
|
|
5055
6546
|
};
|
|
5056
6547
|
}
|
|
6548
|
+
var BlockerState_module_default = {
|
|
6549
|
+
blocker: "_blocker_cfaak_1",
|
|
6550
|
+
icon: "_icon_cfaak_10",
|
|
6551
|
+
title: "_title_cfaak_15",
|
|
6552
|
+
hint: "_hint_cfaak_23",
|
|
6553
|
+
blockerInline: "_blockerInline_cfaak_32",
|
|
6554
|
+
actions: "_actions_cfaak_48",
|
|
6555
|
+
raw: "_raw_cfaak_52",
|
|
6556
|
+
notice: "_notice_cfaak_71",
|
|
6557
|
+
noticeFlat: "_noticeFlat_cfaak_84",
|
|
6558
|
+
noticeText: "_noticeText_cfaak_91",
|
|
6559
|
+
noticeTitle: "_noticeTitle_cfaak_98",
|
|
6560
|
+
noticeHint: "_noticeHint_cfaak_105",
|
|
6561
|
+
noticeActions: "_noticeActions_cfaak_112",
|
|
6562
|
+
failure: "_failure_cfaak_119",
|
|
6563
|
+
failureDetail: "_failureDetail_cfaak_127",
|
|
6564
|
+
inlineLink: "_inlineLink_cfaak_134",
|
|
6565
|
+
rawText: "_rawText_cfaak_156"
|
|
6566
|
+
};
|
|
5057
6567
|
//#endregion
|
|
5058
6568
|
//#region src/shared/components/BlockerState.tsx
|
|
5059
6569
|
var BlockerState_exports = /* @__PURE__ */ __exportAll({ BlockerState: () => BlockerState });
|
|
5060
6570
|
function BlockerState({ blocker, t, onRetry, busy = false, flush = false, onOpenMarket }) {
|
|
5061
6571
|
const { run, copied, running, failure } = useBlockerActions(onRetry, onOpenMarket);
|
|
6572
|
+
const [rawOpen, setRawOpen] = useState(false);
|
|
5062
6573
|
const pending = blockerPending(busy, running);
|
|
5063
6574
|
const inlineActions = blocker.actions.filter((action) => action.kind === "open-url" && action.inline === true);
|
|
5064
6575
|
const buttonActions = blocker.actions.filter((action) => !(action.kind === "open-url" && action.inline === true) || blocker.hint === void 0);
|
|
5065
|
-
const buttons = buttonActions.map((action, index) => /* @__PURE__ */ h(
|
|
6576
|
+
const buttons = buttonActions.map((action, index) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
5066
6577
|
key: `${action.kind}:${action.label}`,
|
|
5067
6578
|
type: "button",
|
|
5068
|
-
|
|
6579
|
+
size: "sm",
|
|
6580
|
+
variant: index === 0 ? "primary" : "ghost",
|
|
5069
6581
|
disabled: pending,
|
|
5070
6582
|
onClick: () => run(action)
|
|
5071
6583
|
}, blockerActionLabel(action, {
|
|
@@ -5073,26 +6585,40 @@ function BlockerState({ blocker, t, onRetry, busy = false, flush = false, onOpen
|
|
|
5073
6585
|
running,
|
|
5074
6586
|
copied
|
|
5075
6587
|
}, t)));
|
|
5076
|
-
const failureBlock = failure === null ? null : /* @__PURE__ */ h("p", { className:
|
|
6588
|
+
const failureBlock = failure === null ? null : /* @__PURE__ */ h("p", { className: BlockerState_module_default.failure }, t("blocker.fix.failed"), failure.message, failure.detail === void 0 ? null : /* @__PURE__ */ h("span", { className: BlockerState_module_default.failureDetail }, failure.detail));
|
|
5077
6589
|
if (blocker.severity === "notice") return /* @__PURE__ */ h("div", {
|
|
5078
|
-
className:
|
|
6590
|
+
className: `${BlockerState_module_default.notice}${flush ? ` ${BlockerState_module_default.noticeFlat}` : ""}`,
|
|
5079
6591
|
role: "status",
|
|
5080
6592
|
"aria-busy": pending
|
|
5081
|
-
}, /* @__PURE__ */ h("span", { className:
|
|
6593
|
+
}, /* @__PURE__ */ h("span", { className: BlockerState_module_default.noticeText }, /* @__PURE__ */ h("span", { className: BlockerState_module_default.noticeTitle }, blocker.title), blocker.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: BlockerState_module_default.noticeHint }, blocker.hint)), /* @__PURE__ */ h("span", { className: BlockerState_module_default.noticeActions }, buttons), failureBlock);
|
|
5082
6594
|
return /* @__PURE__ */ h("div", {
|
|
5083
|
-
className:
|
|
6595
|
+
className: `${BlockerState_module_default.blocker}${flush ? ` ${BlockerState_module_default.blockerInline}` : ""}`,
|
|
5084
6596
|
role: "status",
|
|
5085
6597
|
"aria-busy": pending
|
|
5086
6598
|
}, flush ? null : /* @__PURE__ */ h("span", {
|
|
5087
|
-
className:
|
|
6599
|
+
className: BlockerState_module_default.icon,
|
|
5088
6600
|
"aria-hidden": "true"
|
|
5089
|
-
}, /* @__PURE__ */ h(IconBrandMark, { size: 32 })), /* @__PURE__ */ h("p", { className:
|
|
6601
|
+
}, /* @__PURE__ */ h(IconBrandMark, { size: 32 })), /* @__PURE__ */ h("p", { className: BlockerState_module_default.title }, blocker.title), blocker.hint === void 0 && inlineActions.length === 0 ? null : /* @__PURE__ */ h("p", { className: BlockerState_module_default.hint }, blocker.hint, inlineActions.map((action) => /* @__PURE__ */ h("button", {
|
|
5090
6602
|
key: `inline:${action.kind}:${action.label}`,
|
|
5091
6603
|
type: "button",
|
|
5092
|
-
className:
|
|
6604
|
+
className: BlockerState_module_default.inlineLink,
|
|
5093
6605
|
disabled: pending,
|
|
5094
6606
|
onClick: () => run(action)
|
|
5095
|
-
}, action.label, /* @__PURE__ */ h(
|
|
6607
|
+
}, action.label, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 })))), buttonActions.length === 0 ? null : /* @__PURE__ */ h("div", { className: BlockerState_module_default.actions }, buttons), failureBlock, blocker.detail === void 0 ? null : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
|
|
6608
|
+
className: BlockerState_module_default.raw,
|
|
6609
|
+
icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconInfoOutlineRegular, { size: 14 }),
|
|
6610
|
+
title: t("env.fix.details"),
|
|
6611
|
+
open: rawOpen,
|
|
6612
|
+
expandable: true,
|
|
6613
|
+
expandOnRowClick: true,
|
|
6614
|
+
previewChevron: true,
|
|
6615
|
+
onToggle: () => setRawOpen(!rawOpen)
|
|
6616
|
+
}, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
6617
|
+
code: blocker.detail,
|
|
6618
|
+
className: BlockerState_module_default.rawText,
|
|
6619
|
+
copyLabel: t("blocker.copy"),
|
|
6620
|
+
copiedLabel: t("env.copied")
|
|
6621
|
+
})));
|
|
5096
6622
|
}
|
|
5097
6623
|
//#endregion
|
|
5098
6624
|
//#region src/app/client.tsx
|
|
@@ -5119,6 +6645,7 @@ var kit = {
|
|
|
5119
6645
|
...dist_exports,
|
|
5120
6646
|
...dist_exports,
|
|
5121
6647
|
...dist_exports,
|
|
6648
|
+
...dist_exports,
|
|
5122
6649
|
...dist_exports
|
|
5123
6650
|
},
|
|
5124
6651
|
api: {
|
|
@@ -5136,10 +6663,11 @@ function messagesOf(units) {
|
|
|
5136
6663
|
...face.messages === void 0 ? {} : { messages: face.messages }
|
|
5137
6664
|
})));
|
|
5138
6665
|
}
|
|
6666
|
+
var COMPONENT_CSS_MARKER = "\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-len-20);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n text-decoration: none;\n white-space: nowrap;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-12);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: var(--wb-len-2) var(--wb-len-7);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: transparent;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n._foot_1us83_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1us83_12 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1us83_17 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._marketList_7yq35_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n max-height: var(--wb-len-320);\n overflow-y: auto;\n}\n\n._marketRow_7yq35_12 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_7yq35_22 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-40);\n height: var(--wb-len-40);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_7yq35_34 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_7yq35_41 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketDesc_7yq35_50 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketUsedBy_7yq35_61 {\n margin-left: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n._marketUsedBy_7yq35_61::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_7yq35_41 ._marketVersion_7yq35_75 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_7yq35_75 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_7yq35_75::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketEnd_7yq35_97 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_7yq35_104 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_7yq35_110 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_7yq35_117 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_7yq35_123 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_7yq35_129 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_7yq35_135 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_7yq35_145 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_7yq35_152 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_7yq35_159 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_7yq35_164 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_7yq35_164 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_7yq35_181 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_7yq35_189 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_7yq35_194 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_7yq35_200 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketIconButton_7yq35_209 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_7yq35_209:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_7yq35_209:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_7yq35_234 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_7yq35_238 svg {\n animation: _wb-spin_7yq35_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_7yq35_242 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_7yq35_159 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketChecking_7yq35_259 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketEmptyTitle_7yq35_267 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_7yq35_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._wide_xf7fq_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_xf7fq_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_xf7fq_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_xf7fq_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_xf7fq_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_xf7fq_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_xf7fq_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_xf7fq_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_xf7fq_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_xf7fq_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_xf7fq_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_xf7fq_59 svg,\n._registryToggle_xf7fq_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_xf7fq_59[aria-expanded='true'] svg,\n._registryToggle_xf7fq_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_xf7fq_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_xf7fq_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_xf7fq_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_xf7fq_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_xf7fq_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_xf7fq_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_xf7fq_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_xf7fq_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_xf7fq_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_xf7fq_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_xf7fq_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_xf7fq_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_xf7fq_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_xf7fq_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_xf7fq_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_xf7fq_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_xf7fq_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_xf7fq_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_xf7fq_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_xf7fq_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_xf7fq_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_xf7fq_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_xf7fq_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_xf7fq_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_xf7fq_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_xf7fq_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_xf7fq_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_xf7fq_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_xf7fq_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_xf7fq_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._wizardTitle_xf7fq_311 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_xf7fq_318 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_xf7fq_329 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_xf7fq_335,\n._subjectDesc_xf7fq_336 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_xf7fq_343,\n._resultWarn_xf7fq_344 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_xf7fq_344 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._approval_xf7fq_357 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_xf7fq_367 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_xf7fq_374 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_xf7fq_380 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_xf7fq_387 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_xf7fq_394 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_xf7fq_398 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_xf7fq_402 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_xf7fq_409 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_xf7fq_409 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._actions_jlw8j_1[hidden],\n._progress_jlw8j_2[hidden],\n._commandRow_jlw8j_3[hidden],\n._bridge_jlw8j_4[hidden],\n._raw_jlw8j_5[hidden] {\n display: none;\n}\n\n._gate_jlw8j_9 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_jlw8j_20 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_jlw8j_20:has(._actions_jlw8j_1:not([hidden])),\n._card_jlw8j_20:has(._bridge_jlw8j_4:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_jlw8j_35 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_jlw8j_50 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_jlw8j_50 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_jlw8j_50[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_jlw8j_77 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_jlw8j_50[data-status='ok'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_jlw8j_50[data-status='warn'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_jlw8j_50[data-status='failed'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_jlw8j_102 {\n flex: none;\n}\n\n._detail_jlw8j_106 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_jlw8j_2 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_jlw8j_124 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_jlw8j_132 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_jlw8j_3 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_jlw8j_158 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_jlw8j_158:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_jlw8j_3 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_jlw8j_191 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_jlw8j_198 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_jlw8j_191 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_jlw8j_191:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_jlw8j_191:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_jlw8j_1,\n._bridge_jlw8j_4 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_jlw8j_249 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_jlw8j_1 ._hint_jlw8j_43,\n._bridge_jlw8j_4 ._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_jlw8j_1 ._commandRow_jlw8j_3,\n._bridge_jlw8j_4 ._commandRow_jlw8j_3 {\n margin: 0;\n}\n\n._actions_jlw8j_1 ._buttons_jlw8j_191,\n._bridge_jlw8j_4 ._buttons_jlw8j_191 {\n justify-content: flex-start;\n}\n\n._raw_jlw8j_5 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_jlw8j_282 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_jlw8j_1 ._error_jlw8j_132,\n._bridge_jlw8j_4 ._error_jlw8j_132 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_jlw8j_292 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_jlw8j_292 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_jlw8j_309 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_jlw8j_309::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_jlw8j_309:hover {\n text-decoration: underline;\n}\n\n._loading_jlw8j_323 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_jlw8j_323[hidden] {\n display: none;\n}\n\n._loadingMotion_jlw8j_332 {\n transform-origin: center;\n animation: _wb-spin_jlw8j_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_jlw8j_337,\n._loadingArc_jlw8j_338 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_jlw8j_337 {\n opacity: 0.25;\n}\n\n._loadingArc_jlw8j_338 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_jlw8j_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_jlw8j_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_jlw8j_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_jlw8j_332,\n ._loadingArc_jlw8j_338 {\n animation: none;\n }\n}\n._button_ssnyt_1 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_ssnyt_1:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._icon_ssnyt_13 {\n display: block;\n transform: scaleX(-1);\n}\n\n._icon_ssnyt_13 svg {\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_1weg4_1 {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n._pop_1weg4_7 {\n position: absolute;\n top: calc(100% + var(--wb-len-8));\n right: 0;\n z-index: var(--wb-z-30);\n width: var(--wb-len-360);\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_1weg4_21 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_1weg4_29 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_1weg4_37:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_1weg4_59 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_1weg4_68 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: grab;\n}\n\n._row_1weg4_68:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOver_1weg4_83::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_1weg4_93 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_1weg4_108 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n._label_1weg4_116 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_1weg4_123 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_1weg4_134 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_1weg4_142 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n._blocker_cfaak_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_cfaak_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_cfaak_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_cfaak_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._title_cfaak_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._hint_cfaak_23 {\n max-width: 100%;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._actions_cfaak_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._raw_cfaak_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_cfaak_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_cfaak_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_cfaak_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_cfaak_71._noticeFlat_cfaak_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_cfaak_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_cfaak_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_cfaak_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_cfaak_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_cfaak_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_cfaak_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineLink_cfaak_134 {\n margin-left: var(--wb-len-2);\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n vertical-align: baseline;\n}\n\n._inlineLink_cfaak_134:hover {\n text-decoration: underline;\n}\n\n._inlineLink_cfaak_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n._rawText_cfaak_156 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
|
|
5139
6667
|
function installStyles() {
|
|
5140
6668
|
const style = document.createElement("style");
|
|
5141
6669
|
style.setAttribute(STYLE_MARKER, "");
|
|
5142
|
-
style.textContent = `${tokens_default}\n${sidebar_default}\n${sidebar_app_default}\n${rightbar_default}`;
|
|
6670
|
+
style.textContent = `${tokens_default}\n${palette_default}\n${scale_default}\n${sidebar_default}\n${sidebar_app_default}\n${rightbar_default}\n${chrome_default}\n${board_default}\n${COMPONENT_CSS_MARKER}`;
|
|
5143
6671
|
document.head.appendChild(style);
|
|
5144
6672
|
return () => style.remove();
|
|
5145
6673
|
}
|
|
@@ -5181,7 +6709,6 @@ function mount(ctx) {
|
|
|
5181
6709
|
manifests: () => units.manifests()
|
|
5182
6710
|
});
|
|
5183
6711
|
assembleClientUnits(units);
|
|
5184
|
-
const manifests = units.manifests();
|
|
5185
6712
|
const store = rightbarStore;
|
|
5186
6713
|
const observable = {
|
|
5187
6714
|
getSnapshot: () => store.getSnapshot(),
|
|
@@ -5213,7 +6740,15 @@ function mount(ctx) {
|
|
|
5213
6740
|
ctx.layout.openRightbar(track, fullscreen);
|
|
5214
6741
|
} else ctx.layout.closeRightbar();
|
|
5215
6742
|
},
|
|
5216
|
-
toggleRightbar: () =>
|
|
6743
|
+
toggleRightbar: () => {
|
|
6744
|
+
store.toggleExpanded();
|
|
6745
|
+
if (!store.getSnapshot().expanded) {
|
|
6746
|
+
ctx.layout.closeRightbar();
|
|
6747
|
+
return;
|
|
6748
|
+
}
|
|
6749
|
+
seedRightbarWidth(ctx);
|
|
6750
|
+
ctx.layout.openRightbar(true, false);
|
|
6751
|
+
},
|
|
5217
6752
|
openPanel: (step) => store.open(step),
|
|
5218
6753
|
goToPanel: (index) => store.goTo(index)
|
|
5219
6754
|
};
|
|
@@ -5248,7 +6783,7 @@ function mount(ctx) {
|
|
|
5248
6783
|
units
|
|
5249
6784
|
})
|
|
5250
6785
|
}, Rightbar));
|
|
5251
|
-
registerMarketPanel(ctx,
|
|
6786
|
+
registerMarketPanel(ctx, units);
|
|
5252
6787
|
const gate = createBootGate(ctx);
|
|
5253
6788
|
ctx.effect(() => () => gate.close(), "dsh-workbench: env gate");
|
|
5254
6789
|
ctx.slots.inject("conversation.approval.detail", () => ctx.slots.register({
|