dsh-plugin-shop 0.7.0 → 0.7.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client.js +244 -248
- package/lib/index.js +237 -32
- package/lib/typert.host.js +10 -10
- package/lib/typert.remote-client.js +9 -9
- package/lib/types/client/locales.d.ts +0 -2
- package/lib/types/host/dsh-cli.d.ts +66 -0
- package/lib/types/host/executor.d.ts +29 -0
- package/lib/types/host/index.d.ts +8 -4
- package/lib/types/host/install.d.ts +1 -1
- package/lib/types/host/restart.d.ts +7 -1
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -4347,7 +4347,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4347
4347
|
literal("denied"),
|
|
4348
4348
|
literal("version-mismatch"),
|
|
4349
4349
|
literal("needs-acknowledgement"),
|
|
4350
|
-
literal("git-missing"),
|
|
4351
4350
|
literal("tarball-integrity")
|
|
4352
4351
|
]),
|
|
4353
4352
|
"detail": string()
|
|
@@ -4437,7 +4436,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4437
4436
|
},
|
|
4438
4437
|
sourceLocation: {
|
|
4439
4438
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4440
|
-
"line":
|
|
4439
|
+
"line": 574,
|
|
4441
4440
|
"column": 9
|
|
4442
4441
|
}
|
|
4443
4442
|
},
|
|
@@ -4455,7 +4454,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4455
4454
|
},
|
|
4456
4455
|
sourceLocation: {
|
|
4457
4456
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4458
|
-
"line":
|
|
4457
|
+
"line": 759,
|
|
4459
4458
|
"column": 9
|
|
4460
4459
|
}
|
|
4461
4460
|
},
|
|
@@ -4483,7 +4482,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4483
4482
|
},
|
|
4484
4483
|
sourceLocation: {
|
|
4485
4484
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4486
|
-
"line":
|
|
4485
|
+
"line": 624,
|
|
4487
4486
|
"column": 9
|
|
4488
4487
|
}
|
|
4489
4488
|
},
|
|
@@ -4510,7 +4509,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4510
4509
|
},
|
|
4511
4510
|
sourceLocation: {
|
|
4512
4511
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4513
|
-
"line":
|
|
4512
|
+
"line": 748,
|
|
4514
4513
|
"column": 3
|
|
4515
4514
|
}
|
|
4516
4515
|
},
|
|
@@ -4528,7 +4527,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4528
4527
|
},
|
|
4529
4528
|
sourceLocation: {
|
|
4530
4529
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4531
|
-
"line":
|
|
4530
|
+
"line": 909,
|
|
4532
4531
|
"column": 9
|
|
4533
4532
|
}
|
|
4534
4533
|
},
|
|
@@ -4583,7 +4582,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4583
4582
|
},
|
|
4584
4583
|
sourceLocation: {
|
|
4585
4584
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4586
|
-
"line":
|
|
4585
|
+
"line": 851,
|
|
4587
4586
|
"column": 9
|
|
4588
4587
|
}
|
|
4589
4588
|
},
|
|
@@ -4610,7 +4609,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4610
4609
|
},
|
|
4611
4610
|
sourceLocation: {
|
|
4612
4611
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4613
|
-
"line":
|
|
4612
|
+
"line": 977,
|
|
4614
4613
|
"column": 9
|
|
4615
4614
|
}
|
|
4616
4615
|
},
|
|
@@ -4628,7 +4627,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4628
4627
|
},
|
|
4629
4628
|
sourceLocation: {
|
|
4630
4629
|
"file": "packages/dsh-plugin-shop/src/host/index.ts",
|
|
4631
|
-
"line":
|
|
4630
|
+
"line": 960,
|
|
4632
4631
|
"column": 9
|
|
4633
4632
|
}
|
|
4634
4633
|
}
|
|
@@ -4676,7 +4675,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4676
4675
|
case "not-in-catalog": return "notInCatalogCode";
|
|
4677
4676
|
case "version-mismatch": return "versionMismatchCode";
|
|
4678
4677
|
case "needs-acknowledgement": return "needsAcknowledgementCode";
|
|
4679
|
-
case "git-missing": return "gitMissingCode";
|
|
4680
4678
|
case "tarball-integrity": return "tarballIntegrityCode";
|
|
4681
4679
|
}
|
|
4682
4680
|
}
|
|
@@ -4967,7 +4965,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4967
4965
|
categoryUi: "界面",
|
|
4968
4966
|
categoryWorkflow: "工作流",
|
|
4969
4967
|
categoryIntegration: "集成",
|
|
4970
|
-
categoryTheme: "
|
|
4968
|
+
categoryTheme: "主题",
|
|
4971
4969
|
categoryOther: "其他",
|
|
4972
4970
|
empty: "目录中暂无插件。",
|
|
4973
4971
|
emptySearch: "没有匹配的插件。",
|
|
@@ -5008,7 +5006,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5008
5006
|
notInCatalogCode: "不在目录中",
|
|
5009
5007
|
versionMismatchCode: "版本不匹配",
|
|
5010
5008
|
needsAcknowledgementCode: "需要确认",
|
|
5011
|
-
gitMissingCode: "缺少 git",
|
|
5012
5009
|
tarballIntegrityCode: "压缩包完整性校验失败",
|
|
5013
5010
|
npmSource: "npm 包",
|
|
5014
5011
|
githubSource: "源码在 GitHub",
|
|
@@ -5056,7 +5053,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5056
5053
|
categoryUi: "UI",
|
|
5057
5054
|
categoryWorkflow: "Workflow",
|
|
5058
5055
|
categoryIntegration: "Integration",
|
|
5059
|
-
categoryTheme: "Themes
|
|
5056
|
+
categoryTheme: "Themes",
|
|
5060
5057
|
categoryOther: "Other",
|
|
5061
5058
|
empty: "No plugins in the catalog.",
|
|
5062
5059
|
emptySearch: "No matching plugins.",
|
|
@@ -5097,7 +5094,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5097
5094
|
notInCatalogCode: "Not in the catalog",
|
|
5098
5095
|
versionMismatchCode: "Version mismatch",
|
|
5099
5096
|
needsAcknowledgementCode: "Acknowledgement required",
|
|
5100
|
-
gitMissingCode: "git missing",
|
|
5101
5097
|
tarballIntegrityCode: "tarball integrity check failed",
|
|
5102
5098
|
npmSource: "npm package",
|
|
5103
5099
|
githubSource: "source on GitHub",
|
|
@@ -5278,108 +5274,108 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5278
5274
|
};
|
|
5279
5275
|
}
|
|
5280
5276
|
//#endregion
|
|
5281
|
-
//#region \0dsh-plugin-shop-css:
|
|
5282
|
-
const css = "/* Shop tab styles — a market shelf inside the settings surface. The visual\n * language is the dsh theme's alias tokens ONLY (the four tokens the previous\n * styles referenced that do not exist — bg-layer-3, interactive-bg-hover,\n * state-error, state-success — are corrected to bg-layer-2 and the\n * state-*-primary set). The signature is the category spine: one HUE per\n * category (seven fixed hues, not the brand token — the brand resolves to\n * near-black in the light theme, so seven brand opacities read as seven\n * shades of gray), with the category name as the cover label in the same hue. Class names are mapped to content-derived names at bundle time\n * (tsdown.s8583e3_client.s942a79_config.s5f67aa_ts) and stubbed in tests; only the keys are relied\n * on.\n *\n * One token rule the theme forces: the background LAYERS do not carry\n * contrast. In the light theme bg-base, bg-layer-1, bg-layer-2 and\n * bg-layer-3 all resolve to the same white; only the dark theme spreads them\n * (950/875/850/800). So a layer-2 fill on a layer-1 ground is invisible for\n * half of all users, and anything whose fill is its ONLY affordance — the\n * loading skeleton, the borderless capability chips — derives its fill from\n * label-primary instead, which inverts with the theme by construction.\n * Elements that also carry a border or text may keep a layer fill.\n * `css-tokens.s8583e3_client.sfd9d8a_spec.s5f67aa_ts` pins this. */\n\n.s255e5a_panel {\n display: flex;\n flex-direction: column;\n gap: 14px;\n /* The shelf never scrolls sideways: a card too wide for its track wraps\n * its badges rather than widening the panel. */\n overflow-x: hidden;\n}\n\n.s44a3ec_stateLine {\n margin: 0;\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* Visually hidden but screen-reader readable (the loading copy while the\n * skeleton stands in visually). */\n.s3a0ece_srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n overflow: hidden;\n white-space: nowrap;\n}\n\n/* The loading shelf: ghost cards with the same geometry as the real grid, so\n * the swap to content is a same-shape handoff instead of a jump. */\n.se0c3b4_skeletonGrid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 8px;\n}\n\n.s520416_skeletonCard {\n position: relative;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n}\n\n/* The shimmer sweep: one gradient band travels across each ghost card while\n * the bars breathe, so the loading state reads as \"the shelf is scanning\". */\n.s520416_skeletonCard::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(\n 100deg,\n transparent 25%,\n color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent) 50%,\n transparent 75%\n );\n transform: translateX(-100%);\n animation: dshShopSkeletonSweep 1.4s ease-in-out infinite;\n pointer-events: none;\n}\n\n@keyframes dshShopSkeletonSweep {\n to { transform: translateX(100%); }\n}\n\n.s8c7d6f_skeletonName {\n width: 55%;\n height: 14px;\n margin: 10px 12px 0;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.sf5179e_skeletonSummary {\n width: 92%;\n height: 12px;\n margin: 10px 12px 0;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.sbb0d25_skeletonSummaryShort {\n width: 68%;\n height: 12px;\n margin: 6px 12px 10px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n/* The ghost of the action line, right where the real buttons land. */\n.s96e910_skeletonActions {\n display: block;\n width: 84px;\n height: 24px;\n margin: 0 12px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.s520416_skeletonCard span {\n animation: dshShopSkeletonPulse 1.6s ease-in-out infinite;\n}\n\n@keyframes dshShopSkeletonPulse {\n 0%, 100% { opacity: 0.5; }\n 50% { opacity: 1; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .s520416_skeletonCard span { animation: none; opacity: 0.75; }\n .s520416_skeletonCard::after { content: none; }\n}\n\n.s73242a_actionButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.s73242a_actionButton:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));\n color: var(--dsw-alias-brand-primary);\n}\n\n.s73242a_actionButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s646509_toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.s745e3c_toolbarRight {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n/* The shop's own version, right of the search box: `v0.4.4`, plus the\n * update button when the version check found a newer release. */\n.s4fe61f_versionBlock {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sb9b924_versionText {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sa04455_updateSelfButton {\n padding: 2px 10px;\n border: 1px solid var(--dsw-alias-brand-primary);\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n color: var(--dsw-alias-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n}\n\n.sa04455_updateSelfButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, transparent);\n}\n\n.sa04455_updateSelfButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The on-demand re-check next to the version number: a quiet pill; the\n * border and text carry it in the light theme where bg layers are white. */\n.s614a38_checkUpdateButton {\n padding: 2px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n cursor: pointer;\n}\n\n.s614a38_checkUpdateButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n color: var(--dsw-alias-label-primary);\n}\n\n.s614a38_checkUpdateButton:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n.s614a38_checkUpdateButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The project's GitHub mark, right of the version row: a quiet icon link.\n * The octocat carries itself — color shift on hover, no text, no border. */\n.sa987f7_githubLink {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px;\n border-radius: 6px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sa987f7_githubLink:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.sa987f7_githubLink:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The self-update's expanded states (running log / done + restart /\n * failure detail) sit under the toolbar, above the category bar. */\n.sb81ba5_selfUpdatePanel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.s232ec4_searchInput {\n width: min(280px, 100%);\n padding: 6px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n.s232ec4_searchInput:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s1555aa_staleBlock {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.s3946f1_staleBadge {\n padding: 2px 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n color: var(--dsw-alias-state-warn-primary);\n font-size: 12px;\n}\n\n.sb2c859_categoryBar {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 6px;\n}\n\n.s26d58e_categoryButton {\n padding: 3px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n cursor: pointer;\n}\n\n.s26d58e_categoryButton:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));\n color: var(--dsw-alias-brand-primary);\n}\n\n.s5f68c4_categoryButtonOn {\n border-color: var(--dsw-alias-brand-primary);\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n color: var(--dsw-alias-brand-primary);\n font-weight: 600;\n}\n\n.s26d58e_categoryButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s668774_catalogHeading {\n margin: 2px 0 0;\n font-size: 16px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-primary);\n}\n\n.sccc4d1_catalogStats {\n margin: 6px 0 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s6de1ab_emptyLine {\n margin: 0;\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* The shelf: a responsive grid of cards. */\n/* Single-line rows: one full-width column, one plugin per line. */\n.sf657f5_cards {\n display: grid;\n grid-template-columns: 1fr;\n max-width: 100%;\n gap: 8px;\n list-style: none;\n margin: 0;\n padding: 0;\n animation: dshShopCardsIn 220ms ease;\n}\n\n@keyframes dshShopCardsIn {\n from { opacity: 0; transform: translateY(3px); }\n to { opacity: 1; transform: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sf657f5_cards { animation: none; }\n}\n\n.s65f383_card {\n position: relative;\n display: flex;\n flex-direction: column;\n /* A grid item's min-width is auto by default: its content would widen the\n * 1fr track past the panel and overflow horizontally. */\n min-width: 0;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease;\n /* Off-screen cards skip layout and paint; the placeholder keeps scrollbar\n * estimation sane before the browser has measured the real height. */\n content-visibility: auto;\n contain-intrinsic-size: auto 140px;\n}\n\n/* The sentinel that triggers the next shelf batch: zero visual footprint. */\n.sd7ee01_cardsSentry {\n height: 1px;\n margin: 0;\n padding: 0;\n}\n\n.s705cc6_showingLine {\n margin: 0;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s65f383_card:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l1));\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .s65f383_card { transition: none; }\n .s65f383_card:hover { transform: none; }\n}\n\n/* The signature: a spine and cover in the category's own hue. The hues are\n * fixed mid-bright colors that read on both themes; `other` deliberately\n * stays a neutral gray so the fallback category does not compete. */\n.s4ce25d_cardSpine {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 3px;\n background: var(--spine-hue, #8B8E96);\n}\n\n.s65f383_card[data-category='tool'] { --spine-hue: #4C8DFF; }\n.s65f383_card[data-category='provider'] { --spine-hue: #A78BFA; }\n.s65f383_card[data-category='ui'] { --spine-hue: #2DD4BF; }\n.s65f383_card[data-category='workflow'] { --spine-hue: #F59E0B; }\n.s65f383_card[data-category='integration'] { --spine-hue: #34D399; }\n.s65f383_card[data-category='theme'] { --spine-hue: #F472B6; }\n.s65f383_card[data-category='other'] { --spine-hue: #8B8E96; }\n\n/* The category sits in the badge row as a quiet chip in the category's own\n * hue — the border carries it where the light theme's white layers cannot\n * (the same lesson as the check button). */\n.s9c8eaa_categoryBadge {\n padding: 1px 7px;\n border: 1px solid color-mix(in srgb, var(--spine-hue, #8B8E96) 45%, transparent);\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--spine-hue, #8B8E96);\n white-space: nowrap;\n}\n\n.sa97234_entryHeader {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n min-width: 0;\n padding: 8px 12px 2px;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.sa97234_entryHeader:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n/* The name fills the row and truncates rather than wraps; the badges stay\n * intact beside it. */\n.sc3f149_name {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-primary);\n}\n\n.s513026_badges {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n/* The action line: buttons side by side; an active install/uninstall flow\n * (gate, log, notices) takes the full width below them. */\n.s9b5048_cardActions {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n padding: 8px 12px 10px;\n}\n\n.s9b5048_cardActions > .sc4f2ac_gate,\n.s9b5048_cardActions > .s4d374c_installPanel,\n.s9b5048_cardActions > .sf53ca0_installedActions {\n flex-basis: 100%;\n}\n\n/* The entry's version, always visible on the card (the expanded detail\n * repeats it in the version row) — the same quiet mono as the toolbar. */\n.sc6ec6e_cardVersion {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n/* The octocat marking a github-sourced entry, beside its short commit. */\n.s71f10f_sourceBadge {\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s5e82cb_tierBadge {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 11px;\n line-height: 1.6;\n}\n\n.s5e82cb_tierBadge[data-tier='verified'] {\n color: var(--dsw-alias-state-success-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent);\n}\n\n.s5e82cb_tierBadge[data-tier='verified-stale'] {\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n}\n\n.s5e82cb_tierBadge[data-tier='community'] {\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n border: 1px solid var(--dsw-alias-border-l2);\n}\n\n.s4bbe02_incompatibleBadge {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 11px;\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n}\n\n.sff43b4_starsBadge {\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s73f7fb_chevron, .s61393c_chevronOpen {\n color: var(--dsw-alias-label-secondary);\n transition: transform 120ms ease;\n}\n\n.s61393c_chevronOpen { transform: rotate(180deg); }\n\n@media (prefers-reduced-motion: reduce) {\n .s73f7fb_chevron, .s61393c_chevronOpen { transition: none; }\n}\n\n.s820ebf_body {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 0 12px;\n}\n\n.sb8fbc8_summary {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.se507db_summaryZh {\n margin: -4px 0 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Expanded cards show the full summary: the clamp is lifted, never raised —\n * a higher number would still truncate the author's text, just later. */\n.s10baf0_summaryExpanded {\n -webkit-line-clamp: unset;\n display: block;\n}\n\n.sb9dba9_summaryZhExpanded {\n -webkit-line-clamp: unset;\n display: block;\n}\n\n.s6eca19_incompatibleDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.s9d2029_capabilitiesBlock {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.s3bdbd5_capabilitiesNote {\n margin: 0;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s441702_capabilities {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.s441702_capabilities li {\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 6%, transparent);\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sde3f0c_detail {\n border-top: 1px solid var(--dsw-alias-border-l1);\n padding-top: 8px;\n}\n\n.se98179_detailRows {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin: 0;\n}\n\n.sfb4d2f_detailRow {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n}\n\n.sfb4d2f_detailRow dt {\n color: var(--dsw-alias-label-secondary);\n}\n\n.sfb4d2f_detailRow dd {\n margin: 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n overflow-wrap: anywhere;\n text-align: right;\n color: var(--dsw-alias-label-primary);\n}\n\n.sfb4d2f_detailRow a {\n color: var(--dsw-alias-brand-primary);\n text-decoration: none;\n}\n\n.sfb4d2f_detailRow a:hover {\n text-decoration: underline;\n}\n\n.sfb4d2f_detailRow a:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The publishing account, beside the npm link. Secondary label colour and a\n * middot separator carry the distinction — never a background fill, which is\n * invisible in the light theme where every bg-layer token is the same white. */\n/* Who published the entry, at the right edge of the action row. `margin-left:\n * auto` is what pushes it there; the row is a wrapping flex, so an active\n * install flow (which claims the full width) drops this to the next line\n * rather than squeezing it. */\n.s1ff66f_author {\n margin-left: auto;\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n}\n\n.sd58c6d_reviewedLine {\n margin: 8px 0 0;\n padding: 6px 8px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n font-size: 12px;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n/* Install flow. */\n.s4d374c_installPanel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 2px;\n}\n\n.se7aaed_installButton, .sb43a49_confirmButton, .s6e45d1_cancelButton {\n align-self: flex-start;\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 13px;\n cursor: pointer;\n}\n\n.se7aaed_installButton {\n border: 1px solid var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-bg-base);\n}\n\n.se7aaed_installButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, var(--dsw-alias-label-primary));\n}\n\n.sb43a49_confirmButton {\n border: 1px solid var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-bg-base);\n}\n\n.sb43a49_confirmButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, var(--dsw-alias-label-primary));\n}\n\n.s6e45d1_cancelButton {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n}\n\n.s6e45d1_cancelButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n}\n\n.se7aaed_installButton:focus-visible, .sb43a49_confirmButton:focus-visible, .s6e45d1_cancelButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The shelf card of a plugin that is installed and current carries this\n * non-interactive label instead of an install button. Border + text do the\n * work in the light theme, where every bg-layer token resolves to white. */\n.sb6fc74_installedLabel {\n align-self: flex-start;\n margin: 0;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n font-size: 13px;\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n/* An installed card's controls: the installed label or the update button,\n * plus the uninstall button. The install panel's running/failed states are\n * column layouts and sit as one item of this row. */\n.sf53ca0_installedActions {\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* Uninstall revokes privilege; the quiet outline keeps it from competing\n * with the primary action, and the error tint says \"removes\". */\n.s96967f_uninstallButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 55%, transparent);\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-state-error-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.s96967f_uninstallButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);\n}\n\n.s96967f_uninstallButton:focus-visible {\n outline: 2px solid var(--dsw-alias-state-error-primary);\n outline-offset: 1px;\n}\n\n/* The restart dsh button on a done install: quiet outline, same rank as\n * the other secondary actions. */\n.s6ac237_restartButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.s6ac237_restartButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n}\n\n.s6ac237_restartButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.sc4f2ac_gate {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px;\n border: 1px solid var(--dsw-alias-state-warn-primary);\n border-radius: 8px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n.s559c38_gateTitle {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.s3c0ace_gateBody {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n.sc323e5_gateWarning {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.s4b2373_gateActions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.s52b5a5_installing {\n margin: 0;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s64ab71_log {\n max-height: 160px;\n overflow: auto;\n margin: 0;\n padding: 8px;\n border-radius: 6px;\n background: var(--dsw-alias-bg-base);\n border: 1px solid var(--dsw-alias-border-l1);\n list-style: none;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n line-height: 1.5;\n}\n\n.s1531a8_logLine {\n white-space: pre-wrap;\n word-break: break-all;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sf20dda_notice {\n margin: 0;\n font-size: 12px;\n color: var(--dsw-alias-state-success-primary);\n}\n\n.seb9b08_failedHeading {\n margin: 0;\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.sfd3021_failedDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n.s50ba35_rejectedCode {\n margin: 0;\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.se75489_rejectedDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n/* Installed section. */\n.sa276cf_outdatedSection {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 6px;\n}\n\n.sceae6e_outdatedList {\n display: flex;\n flex-direction: column;\n gap: 8px;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.s8d2072_outdatedRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n padding: 10px 12px;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.s5c2545_outdatedInfo {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.s5c2545_outdatedInfo strong {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 13px;\n word-break: break-all;\n color: var(--dsw-alias-label-primary);\n}\n\n.s877c68_outdatedVersions {\n /* Two inline labels with nothing between them in the markup ran together as\n * `installed v1.0.0latest v2.0.0`: JSX drops the whitespace-only line, and\n * the per-label class the markup asked for was never defined (singular\n * against this rule's plural). The container owns the gap, the same idiom\n * as .s513026_badges — the labels need no class of their own. */\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sa1f556_outdatedActions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n/* The enable/disable switch. */\n.s11c019_switch {\n position: relative;\n width: 32px;\n height: 18px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-2);\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.s7580e8_switchOn {\n border-color: var(--dsw-alias-state-success-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 55%, transparent);\n}\n\n.saab2b3_switchKnob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 999px;\n background: var(--dsw-alias-label-primary);\n transition: transform 120ms ease, background 120ms ease;\n}\n\n.s7580e8_switchOn .saab2b3_switchKnob {\n transform: translateX(14px);\n background: var(--dsw-alias-bg-base);\n}\n\n.s11c019_switch:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .s11c019_switch, .saab2b3_switchKnob { transition: none; }\n}\n\n/* The hot enable/disable switch on installed rows: the knob button plus the\n * §8 hot-apply / failure notices rendered beside it. */\n.sd9f9e4_switchWrap {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n";
|
|
5283
|
-
if (typeof document !== "undefined" && !document.querySelector("style[data-plugin-css=\"
|
|
5277
|
+
//#region \0dsh-plugin-shop-css:26093961
|
|
5278
|
+
const css = "/* Shop tab styles — a market shelf inside the settings surface. The visual\n * language is the dsh theme's alias tokens ONLY (the four tokens the previous\n * styles referenced that do not exist — bg-layer-3, interactive-bg-hover,\n * state-error, state-success — are corrected to bg-layer-2 and the\n * state-*-primary set). The signature is the category spine: one HUE per\n * category (seven fixed hues, not the brand token — the brand resolves to\n * near-black in the light theme, so seven brand opacities read as seven\n * shades of gray), with the category name as the cover label in the same hue. Class names are mapped to content-derived names at bundle time\n * (tsdown.sfae5fa_client.se9da7d_config.se722f1_ts) and stubbed in tests; only the keys are relied\n * on.\n *\n * One token rule the theme forces: the background LAYERS do not carry\n * contrast. In the light theme bg-base, bg-layer-1, bg-layer-2 and\n * bg-layer-3 all resolve to the same white; only the dark theme spreads them\n * (950/875/850/800). So a layer-2 fill on a layer-1 ground is invisible for\n * half of all users, and anything whose fill is its ONLY affordance — the\n * loading skeleton, the borderless capability chips — derives its fill from\n * label-primary instead, which inverts with the theme by construction.\n * Elements that also carry a border or text may keep a layer fill.\n * `css-tokens.sfae5fa_client.s2f7a8b_spec.se722f1_ts` pins this. */\n\n.s99b207_panel {\n display: flex;\n flex-direction: column;\n gap: 14px;\n /* The shelf never scrolls sideways: a card too wide for its track wraps\n * its badges rather than widening the panel.\n *\n * `clip` rather than `hidden`, with a margin, because `.se23a0e_searchInput` sits\n * at exactly (0, 0) of this box — it is the first child of `.s27ad76_toolbar`,\n * itself the first child here, and this rule carries no padding — so its\n * focus ring paints ENTIRELY outside the panel. `hidden` clipped it at the\n * padding edge, and because the spec forbids one axis being `hidden` while\n * the other is `visible`, it silently promoted overflow-y to `auto` and\n * clipped the ring top and bottom as well; all that survived was a stray\n * arc on the right, where the 280px input stops short of the panel. `clip`\n * does not coerce the other axis, so overflow-y stays `visible`, and\n * `overflow-clip-margin` buys back the 3px the ring reaches sideways.\n * `hidden` stays as the first declaration, the fallback for engines\n * without `clip`; there the ring is clipped as before, never worse. */\n overflow-x: hidden;\n overflow-x: clip;\n overflow-clip-margin: 3px;\n}\n\n.s2abe0f_stateLine {\n margin: 0;\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* Visually hidden but screen-reader readable (the loading copy while the\n * skeleton stands in visually). */\n.sfb85e5_srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n overflow: hidden;\n white-space: nowrap;\n}\n\n/* The loading shelf: ghost cards with the same geometry as the real grid, so\n * the swap to content is a same-shape handoff instead of a jump. */\n.s728a01_skeletonGrid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 8px;\n}\n\n.s33d002_skeletonCard {\n position: relative;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n}\n\n/* The shimmer sweep: one gradient band travels across each ghost card while\n * the bars breathe, so the loading state reads as \"the shelf is scanning\". */\n.s33d002_skeletonCard::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(\n 100deg,\n transparent 25%,\n color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent) 50%,\n transparent 75%\n );\n transform: translateX(-100%);\n animation: dshShopSkeletonSweep 1.4s ease-in-out infinite;\n pointer-events: none;\n}\n\n@keyframes dshShopSkeletonSweep {\n to { transform: translateX(100%); }\n}\n\n.s46e666_skeletonName {\n width: 55%;\n height: 14px;\n margin: 10px 12px 0;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.s2a467d_skeletonSummary {\n width: 92%;\n height: 12px;\n margin: 10px 12px 0;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.s232601_skeletonSummaryShort {\n width: 68%;\n height: 12px;\n margin: 6px 12px 10px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n/* The ghost of the action line, right where the real buttons land. */\n.sde9b0c_skeletonActions {\n display: block;\n width: 84px;\n height: 24px;\n margin: 0 12px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);\n}\n\n.s33d002_skeletonCard span {\n animation: dshShopSkeletonPulse 1.6s ease-in-out infinite;\n}\n\n@keyframes dshShopSkeletonPulse {\n 0%, 100% { opacity: 0.5; }\n 50% { opacity: 1; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .s33d002_skeletonCard span { animation: none; opacity: 0.75; }\n .s33d002_skeletonCard::after { content: none; }\n}\n\n.sb632c0_actionButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.sb632c0_actionButton:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));\n color: var(--dsw-alias-brand-primary);\n}\n\n.sb632c0_actionButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s27ad76_toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.saba3c3_toolbarRight {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n/* The shop's own version, right of the search box: `v0.4.4`, plus the\n * update button when the version check found a newer release. */\n.s6736c0_versionBlock {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.s2dff04_versionText {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s40b16e_updateSelfButton {\n padding: 2px 10px;\n border: 1px solid var(--dsw-alias-brand-primary);\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n color: var(--dsw-alias-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n}\n\n.s40b16e_updateSelfButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, transparent);\n}\n\n.s40b16e_updateSelfButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The on-demand re-check next to the version number: a quiet pill; the\n * border and text carry it in the light theme where bg layers are white. */\n.secd6a2_checkUpdateButton {\n padding: 2px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n cursor: pointer;\n}\n\n.secd6a2_checkUpdateButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n color: var(--dsw-alias-label-primary);\n}\n\n.secd6a2_checkUpdateButton:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n.secd6a2_checkUpdateButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The project's GitHub mark, right of the version row: a quiet icon link.\n * The octocat carries itself — color shift on hover, no text, no border. */\n.s5e1ce3_githubLink {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px;\n border-radius: 6px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s5e1ce3_githubLink:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.s5e1ce3_githubLink:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The self-update's expanded states (running log / done + restart /\n * failure detail) sit under the toolbar, above the category bar. */\n.s798348_selfUpdatePanel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.se23a0e_searchInput {\n width: min(280px, 100%);\n padding: 6px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n.se23a0e_searchInput:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s82b1d4_staleBlock {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.see2588_staleBadge {\n padding: 2px 8px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n color: var(--dsw-alias-state-warn-primary);\n font-size: 12px;\n}\n\n.se67e0b_categoryBar {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 6px;\n}\n\n.s8c06a0_categoryButton {\n padding: 3px 10px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n cursor: pointer;\n}\n\n.s8c06a0_categoryButton:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l2));\n color: var(--dsw-alias-brand-primary);\n}\n\n.s65a55a_categoryButtonOn {\n border-color: var(--dsw-alias-brand-primary);\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n color: var(--dsw-alias-brand-primary);\n font-weight: 600;\n}\n\n.s8c06a0_categoryButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.sb6cdd6_catalogHeading {\n margin: 2px 0 0;\n font-size: 16px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-primary);\n}\n\n.s38a33e_catalogStats {\n margin: 6px 0 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.se3ba96_emptyLine {\n margin: 0;\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n}\n\n/* The shelf: a responsive grid of cards. */\n/* Single-line rows: one full-width column, one plugin per line. */\n.sb41fe1_cards {\n display: grid;\n grid-template-columns: 1fr;\n max-width: 100%;\n gap: 8px;\n list-style: none;\n margin: 0;\n padding: 0;\n animation: dshShopCardsIn 220ms ease;\n}\n\n@keyframes dshShopCardsIn {\n from { opacity: 0; transform: translateY(3px); }\n to { opacity: 1; transform: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sb41fe1_cards { animation: none; }\n}\n\n.sfcd584_card {\n position: relative;\n display: flex;\n flex-direction: column;\n /* A grid item's min-width is auto by default: its content would widen the\n * 1fr track past the panel and overflow horizontally. */\n min-width: 0;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease;\n /* Off-screen cards skip layout and paint; the placeholder keeps scrollbar\n * estimation sane before the browser has measured the real height. */\n content-visibility: auto;\n contain-intrinsic-size: auto 140px;\n}\n\n/* The sentinel that triggers the next shelf batch: zero visual footprint. */\n.sf2d932_cardsSentry {\n height: 1px;\n margin: 0;\n padding: 0;\n}\n\n.s947694_showingLine {\n margin: 0;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sfcd584_card:hover {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, var(--dsw-alias-border-l1));\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sfcd584_card { transition: none; }\n .sfcd584_card:hover { transform: none; }\n}\n\n/* The signature: a spine and cover in the category's own hue. The hues are\n * fixed mid-bright colors that read on both themes; `other` deliberately\n * stays a neutral gray so the fallback category does not compete. */\n.sfc4028_cardSpine {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 3px;\n background: var(--spine-hue, #8B8E96);\n}\n\n.sfcd584_card[data-category='tool'] { --spine-hue: #4C8DFF; }\n.sfcd584_card[data-category='provider'] { --spine-hue: #A78BFA; }\n.sfcd584_card[data-category='ui'] { --spine-hue: #2DD4BF; }\n.sfcd584_card[data-category='workflow'] { --spine-hue: #F59E0B; }\n.sfcd584_card[data-category='integration'] { --spine-hue: #34D399; }\n.sfcd584_card[data-category='theme'] { --spine-hue: #F472B6; }\n.sfcd584_card[data-category='other'] { --spine-hue: #8B8E96; }\n\n/* The category sits in the badge row as a quiet chip in the category's own\n * hue — the border carries it where the light theme's white layers cannot\n * (the same lesson as the check button). */\n.sb94610_categoryBadge {\n padding: 1px 7px;\n border: 1px solid color-mix(in srgb, var(--spine-hue, #8B8E96) 45%, transparent);\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--spine-hue, #8B8E96);\n white-space: nowrap;\n}\n\n.s50a94e_entryHeader {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n min-width: 0;\n padding: 8px 12px 2px;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.s50a94e_entryHeader:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n/* The name fills the row and truncates rather than wraps; the badges stay\n * intact beside it. */\n.sfdbf47_name {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-primary);\n}\n\n.s28e55e_badges {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n/* The action line: buttons side by side; an active install/uninstall flow\n * (gate, log, notices) takes the full width below them. */\n.s9359c0_cardActions {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n padding: 8px 12px 10px;\n}\n\n.s9359c0_cardActions > .s549462_gate,\n.s9359c0_cardActions > .s20fbe0_installPanel,\n.s9359c0_cardActions > .s94517f_installedActions {\n flex-basis: 100%;\n}\n\n/* The entry's version, always visible on the card (the expanded detail\n * repeats it in the version row) — the same quiet mono as the toolbar. */\n.sc54e24_cardVersion {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n letter-spacing: 0.02em;\n color: var(--dsw-alias-label-secondary);\n}\n\n/* The octocat marking a github-sourced entry, beside its short commit. */\n.s623bee_sourceBadge {\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sf9a12c_tierBadge {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 11px;\n line-height: 1.6;\n}\n\n.sf9a12c_tierBadge[data-tier='verified'] {\n color: var(--dsw-alias-state-success-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent);\n}\n\n.sf9a12c_tierBadge[data-tier='verified-stale'] {\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n}\n\n.sf9a12c_tierBadge[data-tier='community'] {\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n border: 1px solid var(--dsw-alias-border-l2);\n}\n\n.s671f97_incompatibleBadge {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 11px;\n color: var(--dsw-alias-state-warn-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-warn-primary) 40%, transparent);\n}\n\n.s963e5c_starsBadge {\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sbb5739_chevron, .s4e56e8_chevronOpen {\n color: var(--dsw-alias-label-secondary);\n transition: transform 120ms ease;\n}\n\n.s4e56e8_chevronOpen { transform: rotate(180deg); }\n\n@media (prefers-reduced-motion: reduce) {\n .sbb5739_chevron, .s4e56e8_chevronOpen { transition: none; }\n}\n\n.sf9a60a_body {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 0 12px;\n}\n\n.sfd2791_summary {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.s69ed84_summaryZh {\n margin: -4px 0 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Expanded cards show the full summary: the clamp is lifted, never raised —\n * a higher number would still truncate the author's text, just later. */\n.s83c8c8_summaryExpanded {\n -webkit-line-clamp: unset;\n display: block;\n}\n\n.s20b5b9_summaryZhExpanded {\n -webkit-line-clamp: unset;\n display: block;\n}\n\n.s45793c_incompatibleDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.s551fd2_capabilitiesBlock {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.sb1f0de_capabilitiesNote {\n margin: 0;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s9a5379_capabilities {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.s9a5379_capabilities li {\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 6%, transparent);\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.s9e0e76_detail {\n border-top: 1px solid var(--dsw-alias-border-l1);\n padding-top: 8px;\n}\n\n.s41121d_detailRows {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin: 0;\n}\n\n.s852a05_detailRow {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n}\n\n.s852a05_detailRow dt {\n color: var(--dsw-alias-label-secondary);\n}\n\n.s852a05_detailRow dd {\n margin: 0;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n overflow-wrap: anywhere;\n text-align: right;\n color: var(--dsw-alias-label-primary);\n}\n\n.s852a05_detailRow a {\n color: var(--dsw-alias-brand-primary);\n text-decoration: none;\n}\n\n.s852a05_detailRow a:hover {\n text-decoration: underline;\n}\n\n.s852a05_detailRow a:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The publishing account, beside the npm link. Secondary label colour and a\n * middot separator carry the distinction — never a background fill, which is\n * invisible in the light theme where every bg-layer token is the same white. */\n/* Who published the entry, at the right edge of the action row. `margin-left:\n * auto` is what pushes it there; the row is a wrapping flex, so an active\n * install flow (which claims the full width) drops this to the next line\n * rather than squeezing it. */\n.s367f3b_author {\n margin-left: auto;\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n}\n\n.s2f9e91_reviewedLine {\n margin: 8px 0 0;\n padding: 6px 8px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n font-size: 12px;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n/* Install flow. */\n.s20fbe0_installPanel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 2px;\n}\n\n.s89d599_installButton, .s7b4348_confirmButton, .s20b00b_cancelButton {\n align-self: flex-start;\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 13px;\n cursor: pointer;\n}\n\n.s89d599_installButton {\n border: 1px solid var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-bg-base);\n}\n\n.s89d599_installButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, var(--dsw-alias-label-primary));\n}\n\n.s7b4348_confirmButton {\n border: 1px solid var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-bg-base);\n}\n\n.s7b4348_confirmButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-brand-primary) 88%, var(--dsw-alias-label-primary));\n}\n\n.s20b00b_cancelButton {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n}\n\n.s20b00b_cancelButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n}\n\n.s89d599_installButton:focus-visible, .s7b4348_confirmButton:focus-visible, .s20b00b_cancelButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n/* The shelf card of a plugin that is installed and current carries this\n * non-interactive label instead of an install button. Border + text do the\n * work in the light theme, where every bg-layer token resolves to white. */\n.s1e55fb_installedLabel {\n align-self: flex-start;\n margin: 0;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n font-size: 13px;\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n/* An installed card's controls: the installed label or the update button,\n * plus the uninstall button. The install panel's running/failed states are\n * column layouts and sit as one item of this row. */\n.s94517f_installedActions {\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* Uninstall revokes privilege; the quiet outline keeps it from competing\n * with the primary action, and the error tint says \"removes\". */\n.s432016_uninstallButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 55%, transparent);\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-state-error-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.s432016_uninstallButton:hover {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);\n}\n\n.s432016_uninstallButton:focus-visible {\n outline: 2px solid var(--dsw-alias-state-error-primary);\n outline-offset: 1px;\n}\n\n/* The restart dsh button on a done install: quiet outline, same rank as\n * the other secondary actions. */\n.s5c0f5a_restartButton {\n align-self: flex-start;\n padding: 5px 14px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-2);\n color: var(--dsw-alias-label-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.s5c0f5a_restartButton:hover {\n border-color: var(--dsw-alias-label-secondary);\n}\n\n.s5c0f5a_restartButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s549462_gate {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px;\n border: 1px solid var(--dsw-alias-state-warn-primary);\n border-radius: 8px;\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n.sed2c7d_gateTitle {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.sdce129_gateBody {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n.sfae869_gateWarning {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.sae8426_gateActions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.s260a62_installing {\n margin: 0;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sba0b9c_log {\n max-height: 160px;\n overflow: auto;\n margin: 0;\n padding: 8px;\n border-radius: 6px;\n background: var(--dsw-alias-bg-base);\n border: 1px solid var(--dsw-alias-border-l1);\n list-style: none;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n line-height: 1.5;\n}\n\n.s5c7c9d_logLine {\n white-space: pre-wrap;\n word-break: break-all;\n color: var(--dsw-alias-label-secondary);\n}\n\n.sebdc74_notice {\n margin: 0;\n font-size: 12px;\n color: var(--dsw-alias-state-success-primary);\n}\n\n.s2672db_failedHeading {\n margin: 0;\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.s3a9748_failedDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n.sc1144d_rejectedCode {\n margin: 0;\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-state-error-primary);\n}\n\n.s2209a3_rejectedDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.6;\n color: var(--dsw-alias-label-primary);\n}\n\n/* Installed section. */\n.sb4abbb_outdatedSection {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 6px;\n}\n\n.sbca39c_outdatedList {\n display: flex;\n flex-direction: column;\n gap: 8px;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.s1abd04_outdatedRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n padding: 10px 12px;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1);\n}\n\n.s10dca9_outdatedInfo {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.s10dca9_outdatedInfo strong {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 13px;\n word-break: break-all;\n color: var(--dsw-alias-label-primary);\n}\n\n.sb04966_outdatedVersions {\n /* Two inline labels with nothing between them in the markup ran together as\n * `installed v1.0.0latest v2.0.0`: JSX drops the whitespace-only line, and\n * the per-label class the markup asked for was never defined (singular\n * against this rule's plural). The container owns the gap, the same idiom\n * as .s28e55e_badges — the labels need no class of their own. */\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.see54bf_outdatedActions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n/* The enable/disable switch. */\n.sa65b66_switch {\n position: relative;\n width: 32px;\n height: 18px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: var(--dsw-alias-bg-layer-2);\n cursor: pointer;\n transition: background 120ms ease, border-color 120ms ease;\n}\n\n.s50b82f_switchOn {\n border-color: var(--dsw-alias-state-success-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 55%, transparent);\n}\n\n.sbbb39a_switchKnob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 999px;\n background: var(--dsw-alias-label-primary);\n transition: transform 120ms ease, background 120ms ease;\n}\n\n.s50b82f_switchOn .sbbb39a_switchKnob {\n transform: translateX(14px);\n background: var(--dsw-alias-bg-base);\n}\n\n.sa65b66_switch:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sa65b66_switch, .sbbb39a_switchKnob { transition: none; }\n}\n\n/* The hot enable/disable switch on installed rows: the knob button plus the\n * §8 hot-apply / failure notices rendered beside it. */\n.s24b48c_switchWrap {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n";
|
|
5279
|
+
if (typeof document !== "undefined" && !document.querySelector("style[data-plugin-css=\"26093961\"]")) {
|
|
5284
5280
|
const tag = document.createElement("style");
|
|
5285
|
-
tag.dataset.pluginCss = "
|
|
5281
|
+
tag.dataset.pluginCss = "26093961";
|
|
5286
5282
|
tag.textContent = css;
|
|
5287
5283
|
document.head.appendChild(tag);
|
|
5288
5284
|
}
|
|
5289
|
-
var
|
|
5290
|
-
"client": "
|
|
5291
|
-
"config": "
|
|
5292
|
-
"ts": "
|
|
5293
|
-
"spec": "
|
|
5294
|
-
"panel": "
|
|
5295
|
-
"
|
|
5296
|
-
"
|
|
5297
|
-
"
|
|
5298
|
-
"
|
|
5299
|
-
"
|
|
5300
|
-
"
|
|
5301
|
-
"
|
|
5302
|
-
"
|
|
5303
|
-
"
|
|
5304
|
-
"
|
|
5305
|
-
"
|
|
5306
|
-
"
|
|
5307
|
-
"
|
|
5308
|
-
"
|
|
5309
|
-
"
|
|
5310
|
-
"
|
|
5311
|
-
"
|
|
5312
|
-
"
|
|
5313
|
-
"staleBlock": "
|
|
5314
|
-
"staleBadge": "
|
|
5315
|
-
"categoryBar": "
|
|
5316
|
-
"categoryButton": "
|
|
5317
|
-
"categoryButtonOn": "
|
|
5318
|
-
"catalogHeading": "
|
|
5319
|
-
"catalogStats": "
|
|
5320
|
-
"emptyLine": "
|
|
5321
|
-
"cards": "
|
|
5322
|
-
"card": "
|
|
5323
|
-
"cardsSentry": "
|
|
5324
|
-
"showingLine": "
|
|
5325
|
-
"cardSpine": "
|
|
5326
|
-
"categoryBadge": "
|
|
5327
|
-
"entryHeader": "
|
|
5328
|
-
"name": "
|
|
5329
|
-
"badges": "
|
|
5330
|
-
"cardActions": "
|
|
5331
|
-
"gate": "
|
|
5332
|
-
"installPanel": "
|
|
5333
|
-
"installedActions": "
|
|
5334
|
-
"cardVersion": "
|
|
5335
|
-
"sourceBadge": "
|
|
5336
|
-
"tierBadge": "
|
|
5337
|
-
"incompatibleBadge": "
|
|
5338
|
-
"starsBadge": "
|
|
5339
|
-
"chevron": "
|
|
5340
|
-
"chevronOpen": "
|
|
5341
|
-
"body": "
|
|
5342
|
-
"summary": "
|
|
5343
|
-
"summaryZh": "
|
|
5344
|
-
"summaryExpanded": "
|
|
5345
|
-
"summaryZhExpanded": "
|
|
5346
|
-
"incompatibleDetail": "
|
|
5347
|
-
"capabilitiesBlock": "
|
|
5348
|
-
"capabilitiesNote": "
|
|
5349
|
-
"capabilities": "
|
|
5350
|
-
"detail": "
|
|
5351
|
-
"detailRows": "
|
|
5352
|
-
"detailRow": "
|
|
5353
|
-
"author": "
|
|
5354
|
-
"reviewedLine": "
|
|
5355
|
-
"installButton": "
|
|
5356
|
-
"confirmButton": "
|
|
5357
|
-
"cancelButton": "
|
|
5358
|
-
"installedLabel": "
|
|
5359
|
-
"uninstallButton": "
|
|
5360
|
-
"restartButton": "
|
|
5361
|
-
"gateTitle": "
|
|
5362
|
-
"gateBody": "
|
|
5363
|
-
"gateWarning": "
|
|
5364
|
-
"gateActions": "
|
|
5365
|
-
"installing": "
|
|
5366
|
-
"log": "
|
|
5367
|
-
"logLine": "
|
|
5368
|
-
"notice": "
|
|
5369
|
-
"failedHeading": "
|
|
5370
|
-
"failedDetail": "
|
|
5371
|
-
"rejectedCode": "
|
|
5372
|
-
"rejectedDetail": "
|
|
5373
|
-
"outdatedSection": "
|
|
5374
|
-
"outdatedList": "
|
|
5375
|
-
"outdatedRow": "
|
|
5376
|
-
"outdatedInfo": "
|
|
5377
|
-
"outdatedVersions": "
|
|
5378
|
-
"outdatedActions": "
|
|
5379
|
-
"switch": "
|
|
5380
|
-
"switchOn": "
|
|
5381
|
-
"switchKnob": "
|
|
5382
|
-
"switchWrap": "
|
|
5285
|
+
var _dsh_plugin_shop_css_26093961_default = {
|
|
5286
|
+
"client": "sfae5fa_client",
|
|
5287
|
+
"config": "se9da7d_config",
|
|
5288
|
+
"ts": "se722f1_ts",
|
|
5289
|
+
"spec": "s2f7a8b_spec",
|
|
5290
|
+
"panel": "s99b207_panel",
|
|
5291
|
+
"searchInput": "se23a0e_searchInput",
|
|
5292
|
+
"toolbar": "s27ad76_toolbar",
|
|
5293
|
+
"stateLine": "s2abe0f_stateLine",
|
|
5294
|
+
"srOnly": "sfb85e5_srOnly",
|
|
5295
|
+
"skeletonGrid": "s728a01_skeletonGrid",
|
|
5296
|
+
"skeletonCard": "s33d002_skeletonCard",
|
|
5297
|
+
"skeletonName": "s46e666_skeletonName",
|
|
5298
|
+
"skeletonSummary": "s2a467d_skeletonSummary",
|
|
5299
|
+
"skeletonSummaryShort": "s232601_skeletonSummaryShort",
|
|
5300
|
+
"skeletonActions": "sde9b0c_skeletonActions",
|
|
5301
|
+
"actionButton": "sb632c0_actionButton",
|
|
5302
|
+
"toolbarRight": "saba3c3_toolbarRight",
|
|
5303
|
+
"versionBlock": "s6736c0_versionBlock",
|
|
5304
|
+
"versionText": "s2dff04_versionText",
|
|
5305
|
+
"updateSelfButton": "s40b16e_updateSelfButton",
|
|
5306
|
+
"checkUpdateButton": "secd6a2_checkUpdateButton",
|
|
5307
|
+
"githubLink": "s5e1ce3_githubLink",
|
|
5308
|
+
"selfUpdatePanel": "s798348_selfUpdatePanel",
|
|
5309
|
+
"staleBlock": "s82b1d4_staleBlock",
|
|
5310
|
+
"staleBadge": "see2588_staleBadge",
|
|
5311
|
+
"categoryBar": "se67e0b_categoryBar",
|
|
5312
|
+
"categoryButton": "s8c06a0_categoryButton",
|
|
5313
|
+
"categoryButtonOn": "s65a55a_categoryButtonOn",
|
|
5314
|
+
"catalogHeading": "sb6cdd6_catalogHeading",
|
|
5315
|
+
"catalogStats": "s38a33e_catalogStats",
|
|
5316
|
+
"emptyLine": "se3ba96_emptyLine",
|
|
5317
|
+
"cards": "sb41fe1_cards",
|
|
5318
|
+
"card": "sfcd584_card",
|
|
5319
|
+
"cardsSentry": "sf2d932_cardsSentry",
|
|
5320
|
+
"showingLine": "s947694_showingLine",
|
|
5321
|
+
"cardSpine": "sfc4028_cardSpine",
|
|
5322
|
+
"categoryBadge": "sb94610_categoryBadge",
|
|
5323
|
+
"entryHeader": "s50a94e_entryHeader",
|
|
5324
|
+
"name": "sfdbf47_name",
|
|
5325
|
+
"badges": "s28e55e_badges",
|
|
5326
|
+
"cardActions": "s9359c0_cardActions",
|
|
5327
|
+
"gate": "s549462_gate",
|
|
5328
|
+
"installPanel": "s20fbe0_installPanel",
|
|
5329
|
+
"installedActions": "s94517f_installedActions",
|
|
5330
|
+
"cardVersion": "sc54e24_cardVersion",
|
|
5331
|
+
"sourceBadge": "s623bee_sourceBadge",
|
|
5332
|
+
"tierBadge": "sf9a12c_tierBadge",
|
|
5333
|
+
"incompatibleBadge": "s671f97_incompatibleBadge",
|
|
5334
|
+
"starsBadge": "s963e5c_starsBadge",
|
|
5335
|
+
"chevron": "sbb5739_chevron",
|
|
5336
|
+
"chevronOpen": "s4e56e8_chevronOpen",
|
|
5337
|
+
"body": "sf9a60a_body",
|
|
5338
|
+
"summary": "sfd2791_summary",
|
|
5339
|
+
"summaryZh": "s69ed84_summaryZh",
|
|
5340
|
+
"summaryExpanded": "s83c8c8_summaryExpanded",
|
|
5341
|
+
"summaryZhExpanded": "s20b5b9_summaryZhExpanded",
|
|
5342
|
+
"incompatibleDetail": "s45793c_incompatibleDetail",
|
|
5343
|
+
"capabilitiesBlock": "s551fd2_capabilitiesBlock",
|
|
5344
|
+
"capabilitiesNote": "sb1f0de_capabilitiesNote",
|
|
5345
|
+
"capabilities": "s9a5379_capabilities",
|
|
5346
|
+
"detail": "s9e0e76_detail",
|
|
5347
|
+
"detailRows": "s41121d_detailRows",
|
|
5348
|
+
"detailRow": "s852a05_detailRow",
|
|
5349
|
+
"author": "s367f3b_author",
|
|
5350
|
+
"reviewedLine": "s2f9e91_reviewedLine",
|
|
5351
|
+
"installButton": "s89d599_installButton",
|
|
5352
|
+
"confirmButton": "s7b4348_confirmButton",
|
|
5353
|
+
"cancelButton": "s20b00b_cancelButton",
|
|
5354
|
+
"installedLabel": "s1e55fb_installedLabel",
|
|
5355
|
+
"uninstallButton": "s432016_uninstallButton",
|
|
5356
|
+
"restartButton": "s5c0f5a_restartButton",
|
|
5357
|
+
"gateTitle": "sed2c7d_gateTitle",
|
|
5358
|
+
"gateBody": "sdce129_gateBody",
|
|
5359
|
+
"gateWarning": "sfae869_gateWarning",
|
|
5360
|
+
"gateActions": "sae8426_gateActions",
|
|
5361
|
+
"installing": "s260a62_installing",
|
|
5362
|
+
"log": "sba0b9c_log",
|
|
5363
|
+
"logLine": "s5c7c9d_logLine",
|
|
5364
|
+
"notice": "sebdc74_notice",
|
|
5365
|
+
"failedHeading": "s2672db_failedHeading",
|
|
5366
|
+
"failedDetail": "s3a9748_failedDetail",
|
|
5367
|
+
"rejectedCode": "sc1144d_rejectedCode",
|
|
5368
|
+
"rejectedDetail": "s2209a3_rejectedDetail",
|
|
5369
|
+
"outdatedSection": "sb4abbb_outdatedSection",
|
|
5370
|
+
"outdatedList": "sbca39c_outdatedList",
|
|
5371
|
+
"outdatedRow": "s1abd04_outdatedRow",
|
|
5372
|
+
"outdatedInfo": "s10dca9_outdatedInfo",
|
|
5373
|
+
"outdatedVersions": "sb04966_outdatedVersions",
|
|
5374
|
+
"outdatedActions": "see54bf_outdatedActions",
|
|
5375
|
+
"switch": "sa65b66_switch",
|
|
5376
|
+
"switchOn": "s50b82f_switchOn",
|
|
5377
|
+
"switchKnob": "sbbb39a_switchKnob",
|
|
5378
|
+
"switchWrap": "s24b48c_switchWrap"
|
|
5383
5379
|
};
|
|
5384
5380
|
//#endregion
|
|
5385
5381
|
//#region src/client/ShopTab.tsx
|
|
@@ -5396,7 +5392,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5396
5392
|
width: "14",
|
|
5397
5393
|
height: "14",
|
|
5398
5394
|
"aria-hidden": "true",
|
|
5399
|
-
className: open ?
|
|
5395
|
+
className: open ? _dsh_plugin_shop_css_26093961_default.chevronOpen : _dsh_plugin_shop_css_26093961_default.chevron,
|
|
5400
5396
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
5401
5397
|
fill: "currentColor",
|
|
5402
5398
|
d: "M3.5 6 8 10.5 12.5 6l1 1L8 12.5 2.5 7l1-1Z"
|
|
@@ -5417,32 +5413,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5417
5413
|
const author = authorOf(entry);
|
|
5418
5414
|
const category = entry.catalog?.category ?? "other";
|
|
5419
5415
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5420
|
-
className:
|
|
5416
|
+
className: _dsh_plugin_shop_css_26093961_default.card,
|
|
5421
5417
|
"data-shop-entry": entry.name,
|
|
5422
5418
|
"data-category": category,
|
|
5423
5419
|
children: [
|
|
5424
5420
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5425
|
-
className:
|
|
5421
|
+
className: _dsh_plugin_shop_css_26093961_default.cardSpine,
|
|
5426
5422
|
"aria-hidden": "true"
|
|
5427
5423
|
}),
|
|
5428
5424
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
5429
5425
|
type: "button",
|
|
5430
|
-
className:
|
|
5426
|
+
className: _dsh_plugin_shop_css_26093961_default.entryHeader,
|
|
5431
5427
|
"aria-expanded": open,
|
|
5432
5428
|
"aria-controls": detailId,
|
|
5433
5429
|
onClick: () => setOpen((current) => !current),
|
|
5434
5430
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5435
|
-
className:
|
|
5431
|
+
className: _dsh_plugin_shop_css_26093961_default.name,
|
|
5436
5432
|
children: entry.name
|
|
5437
5433
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5438
|
-
className:
|
|
5434
|
+
className: _dsh_plugin_shop_css_26093961_default.badges,
|
|
5439
5435
|
children: [
|
|
5440
5436
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5441
|
-
className:
|
|
5437
|
+
className: _dsh_plugin_shop_css_26093961_default.categoryBadge,
|
|
5442
5438
|
children: t(categoryKey(entry))
|
|
5443
5439
|
}),
|
|
5444
5440
|
entry.source === "npm" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5445
|
-
className:
|
|
5441
|
+
className: _dsh_plugin_shop_css_26093961_default.sourceBadge,
|
|
5446
5442
|
"data-shop-source-npm": true,
|
|
5447
5443
|
role: "img",
|
|
5448
5444
|
"aria-label": t("npmSource"),
|
|
@@ -5459,7 +5455,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5459
5455
|
})
|
|
5460
5456
|
}),
|
|
5461
5457
|
hasGithubHome(entry) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5462
|
-
className:
|
|
5458
|
+
className: _dsh_plugin_shop_css_26093961_default.sourceBadge,
|
|
5463
5459
|
"data-shop-source-github": true,
|
|
5464
5460
|
role: "img",
|
|
5465
5461
|
"aria-label": t("githubSource"),
|
|
@@ -5473,23 +5469,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5473
5469
|
})
|
|
5474
5470
|
}),
|
|
5475
5471
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5476
|
-
className:
|
|
5472
|
+
className: _dsh_plugin_shop_css_26093961_default.cardVersion,
|
|
5477
5473
|
"data-card-version": true,
|
|
5478
5474
|
children: ["v", displayVersion(entry)]
|
|
5479
5475
|
}),
|
|
5480
5476
|
entry.tier !== "community" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5481
|
-
className:
|
|
5477
|
+
className: _dsh_plugin_shop_css_26093961_default.tierBadge,
|
|
5482
5478
|
"data-tier": entry.tier,
|
|
5483
5479
|
children: t(tierKey(entry.tier))
|
|
5484
5480
|
}),
|
|
5485
5481
|
missing.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5486
|
-
className:
|
|
5482
|
+
className: _dsh_plugin_shop_css_26093961_default.incompatibleBadge,
|
|
5487
5483
|
"data-shop-incompatible": true,
|
|
5488
5484
|
title: t("incompatibleDetail", { modules: missing.join(", ") }),
|
|
5489
5485
|
children: t("incompatibleBadge")
|
|
5490
5486
|
}),
|
|
5491
5487
|
stars !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5492
|
-
className:
|
|
5488
|
+
className: _dsh_plugin_shop_css_26093961_default.starsBadge,
|
|
5493
5489
|
role: "img",
|
|
5494
5490
|
"aria-label": t("stars", { count: stars }),
|
|
5495
5491
|
children: ["★ ", formatStars(stars)]
|
|
@@ -5499,38 +5495,38 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5499
5495
|
})]
|
|
5500
5496
|
}),
|
|
5501
5497
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5502
|
-
className:
|
|
5498
|
+
className: _dsh_plugin_shop_css_26093961_default.body,
|
|
5503
5499
|
children: [
|
|
5504
5500
|
summary !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5505
|
-
className: open ? `${
|
|
5501
|
+
className: open ? `${_dsh_plugin_shop_css_26093961_default.summary} ${_dsh_plugin_shop_css_26093961_default.summaryExpanded}` : _dsh_plugin_shop_css_26093961_default.summary,
|
|
5506
5502
|
children: summary.en
|
|
5507
5503
|
}),
|
|
5508
5504
|
summary?.zh !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5509
|
-
className: open ? `${
|
|
5505
|
+
className: open ? `${_dsh_plugin_shop_css_26093961_default.summaryZh} ${_dsh_plugin_shop_css_26093961_default.summaryZhExpanded}` : _dsh_plugin_shop_css_26093961_default.summaryZh,
|
|
5510
5506
|
children: summary.zh
|
|
5511
5507
|
}),
|
|
5512
5508
|
missing.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5513
|
-
className:
|
|
5509
|
+
className: _dsh_plugin_shop_css_26093961_default.incompatibleDetail,
|
|
5514
5510
|
children: t("incompatibleDetail", { modules: missing.join(", ") })
|
|
5515
5511
|
}),
|
|
5516
5512
|
open && entry.catalog !== void 0 && entry.catalog.capabilities.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5517
|
-
className:
|
|
5513
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilitiesBlock,
|
|
5518
5514
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5519
|
-
className:
|
|
5515
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilitiesNote,
|
|
5520
5516
|
children: t("capabilitiesNote")
|
|
5521
5517
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
5522
|
-
className:
|
|
5518
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilities,
|
|
5523
5519
|
children: entry.catalog.capabilities.map((capability) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: capability }, capability))
|
|
5524
5520
|
})]
|
|
5525
5521
|
}),
|
|
5526
5522
|
open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
5527
5523
|
id: detailId,
|
|
5528
|
-
className:
|
|
5524
|
+
className: _dsh_plugin_shop_css_26093961_default.detail,
|
|
5529
5525
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
5530
|
-
className:
|
|
5526
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRows,
|
|
5531
5527
|
children: [
|
|
5532
5528
|
npmUrl !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5533
|
-
className:
|
|
5529
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
5534
5530
|
"data-shop-npm": true,
|
|
5535
5531
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("npmPage") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
5536
5532
|
href: npmUrl,
|
|
@@ -5540,7 +5536,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5540
5536
|
}) })]
|
|
5541
5537
|
}),
|
|
5542
5538
|
entry.repository !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5543
|
-
className:
|
|
5539
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
5544
5540
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("repository") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: /^https?:\/\//.test(entry.repository) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
5545
5541
|
href: entry.repository,
|
|
5546
5542
|
target: "_blank",
|
|
@@ -5549,12 +5545,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5549
5545
|
}) : entry.repository })]
|
|
5550
5546
|
}),
|
|
5551
5547
|
entry.license !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5552
|
-
className:
|
|
5548
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
5553
5549
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", { children: t("license") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", { children: isCustomLicense(entry.license) ? t("customLicense") : entry.license })]
|
|
5554
5550
|
})
|
|
5555
5551
|
]
|
|
5556
5552
|
}), entry.tier === "verified-stale" && entry.review !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5557
|
-
className:
|
|
5553
|
+
className: _dsh_plugin_shop_css_26093961_default.reviewedLine,
|
|
5558
5554
|
children: entry.review.reviewedVersion !== void 0 ? t("reviewedVersionLine", {
|
|
5559
5555
|
reviewed: entry.review.reviewedVersion,
|
|
5560
5556
|
current: entry.version
|
|
@@ -5567,7 +5563,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5567
5563
|
]
|
|
5568
5564
|
}),
|
|
5569
5565
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5570
|
-
className:
|
|
5566
|
+
className: _dsh_plugin_shop_css_26093961_default.cardActions,
|
|
5571
5567
|
"data-shop-actions": true,
|
|
5572
5568
|
children: [installed === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InstallPanel, {
|
|
5573
5569
|
name: entry.name,
|
|
@@ -5592,7 +5588,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5592
5588
|
restart,
|
|
5593
5589
|
restartSupported
|
|
5594
5590
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5595
|
-
className:
|
|
5591
|
+
className: _dsh_plugin_shop_css_26093961_default.installedLabel,
|
|
5596
5592
|
"data-shop-installed": true,
|
|
5597
5593
|
children: t("installed")
|
|
5598
5594
|
}),
|
|
@@ -5610,7 +5606,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5610
5606
|
restartSupported
|
|
5611
5607
|
})
|
|
5612
5608
|
] }), author !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5613
|
-
className:
|
|
5609
|
+
className: _dsh_plugin_shop_css_26093961_default.author,
|
|
5614
5610
|
"data-shop-author": true,
|
|
5615
5611
|
children: t("authorLine", { author })
|
|
5616
5612
|
})]
|
|
@@ -5627,23 +5623,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5627
5623
|
const [gateOpen, setGateOpen] = (0, react.useState)(false);
|
|
5628
5624
|
const { view, start } = useInstall(install, installStatus);
|
|
5629
5625
|
if (view.kind === "running") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5630
|
-
className:
|
|
5626
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
5631
5627
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5632
|
-
className:
|
|
5628
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
5633
5629
|
children: t("installing")
|
|
5634
5630
|
}), view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5635
|
-
className:
|
|
5631
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
5636
5632
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5637
|
-
className:
|
|
5633
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
5638
5634
|
children: line
|
|
5639
5635
|
}, index))
|
|
5640
5636
|
})]
|
|
5641
5637
|
});
|
|
5642
5638
|
if (view.kind === "done") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5643
|
-
className:
|
|
5639
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
5644
5640
|
children: [
|
|
5645
5641
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5646
|
-
className:
|
|
5642
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5647
5643
|
"data-shop-restart-notice": true,
|
|
5648
5644
|
children: view.needsRestart ? t(restartReasonKey(view.restartReason)) : t("installedNoRestartNotice")
|
|
5649
5645
|
}),
|
|
@@ -5652,63 +5648,63 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5652
5648
|
restart
|
|
5653
5649
|
}),
|
|
5654
5650
|
view.needsRestart && !restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5655
|
-
className:
|
|
5651
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5656
5652
|
"data-shop-restart-disabled": true,
|
|
5657
5653
|
children: t("restartDisabledNotice")
|
|
5658
5654
|
})
|
|
5659
5655
|
]
|
|
5660
5656
|
});
|
|
5661
5657
|
if (view.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5662
|
-
className:
|
|
5658
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
5663
5659
|
children: [
|
|
5664
5660
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5665
|
-
className:
|
|
5661
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
5666
5662
|
children: t("installFailed")
|
|
5667
5663
|
}),
|
|
5668
5664
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5669
|
-
className:
|
|
5665
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
5670
5666
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5671
|
-
className:
|
|
5667
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
5672
5668
|
children: line
|
|
5673
5669
|
}, index))
|
|
5674
5670
|
}),
|
|
5675
5671
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5676
|
-
className:
|
|
5672
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
5677
5673
|
children: view.detail === "" ? t("installTransportFailed") : view.detail
|
|
5678
5674
|
})
|
|
5679
5675
|
]
|
|
5680
5676
|
});
|
|
5681
5677
|
if (view.kind === "rejected") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5682
|
-
className:
|
|
5678
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
5683
5679
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5684
|
-
className:
|
|
5680
|
+
className: _dsh_plugin_shop_css_26093961_default.rejectedCode,
|
|
5685
5681
|
children: t(rejectionCodeKey(view.code))
|
|
5686
5682
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5687
|
-
className:
|
|
5683
|
+
className: _dsh_plugin_shop_css_26093961_default.rejectedDetail,
|
|
5688
5684
|
children: view.detail
|
|
5689
5685
|
})]
|
|
5690
5686
|
});
|
|
5691
5687
|
if (gateOpen) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5692
|
-
className:
|
|
5688
|
+
className: _dsh_plugin_shop_css_26093961_default.gate,
|
|
5693
5689
|
children: [
|
|
5694
5690
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5695
|
-
className:
|
|
5691
|
+
className: _dsh_plugin_shop_css_26093961_default.gateTitle,
|
|
5696
5692
|
children: t("acknowledgementTitle")
|
|
5697
5693
|
}),
|
|
5698
5694
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5699
|
-
className:
|
|
5695
|
+
className: _dsh_plugin_shop_css_26093961_default.gateBody,
|
|
5700
5696
|
children: t("acknowledgementBody")
|
|
5701
5697
|
}),
|
|
5702
5698
|
missing.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5703
|
-
className:
|
|
5699
|
+
className: _dsh_plugin_shop_css_26093961_default.gateWarning,
|
|
5704
5700
|
"data-shop-incompatible-warning": true,
|
|
5705
5701
|
children: t("incompatibleInstallWarning", { modules: missing.join(", ") })
|
|
5706
5702
|
}),
|
|
5707
5703
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5708
|
-
className:
|
|
5704
|
+
className: _dsh_plugin_shop_css_26093961_default.gateActions,
|
|
5709
5705
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5710
5706
|
type: "button",
|
|
5711
|
-
className:
|
|
5707
|
+
className: _dsh_plugin_shop_css_26093961_default.confirmButton,
|
|
5712
5708
|
"data-shop-confirm": true,
|
|
5713
5709
|
onClick: () => {
|
|
5714
5710
|
setGateOpen(false);
|
|
@@ -5721,7 +5717,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5721
5717
|
children: t("confirm")
|
|
5722
5718
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5723
5719
|
type: "button",
|
|
5724
|
-
className:
|
|
5720
|
+
className: _dsh_plugin_shop_css_26093961_default.cancelButton,
|
|
5725
5721
|
onClick: () => setGateOpen(false),
|
|
5726
5722
|
children: t("cancel")
|
|
5727
5723
|
})]
|
|
@@ -5731,7 +5727,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5731
5727
|
const update = variant === "update";
|
|
5732
5728
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5733
5729
|
type: "button",
|
|
5734
|
-
className:
|
|
5730
|
+
className: _dsh_plugin_shop_css_26093961_default.installButton,
|
|
5735
5731
|
...update ? { "data-shop-update": true } : { "data-shop-install": true },
|
|
5736
5732
|
onClick: () => {
|
|
5737
5733
|
if (tier === "verified") start({
|
|
@@ -5753,23 +5749,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5753
5749
|
function UninstallPanel({ name, t, uninstall, installStatus, restart, restartSupported }) {
|
|
5754
5750
|
const { view, start } = useUninstall(uninstall, installStatus);
|
|
5755
5751
|
if (view.kind === "running") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5756
|
-
className:
|
|
5752
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
5757
5753
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5758
|
-
className:
|
|
5754
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
5759
5755
|
children: t("uninstalling")
|
|
5760
5756
|
}), view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5761
|
-
className:
|
|
5757
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
5762
5758
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5763
|
-
className:
|
|
5759
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
5764
5760
|
children: line
|
|
5765
5761
|
}, index))
|
|
5766
5762
|
})]
|
|
5767
5763
|
});
|
|
5768
5764
|
if (view.kind === "done") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5769
|
-
className:
|
|
5765
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
5770
5766
|
children: [
|
|
5771
5767
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5772
|
-
className:
|
|
5768
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5773
5769
|
"data-shop-uninstall-done": true,
|
|
5774
5770
|
children: view.needsRestart ? t("uninstalledRestartNotice") : t("uninstalledLiveNotice")
|
|
5775
5771
|
}),
|
|
@@ -5778,28 +5774,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5778
5774
|
restart
|
|
5779
5775
|
}),
|
|
5780
5776
|
view.needsRestart && !restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5781
|
-
className:
|
|
5777
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5782
5778
|
"data-shop-restart-disabled": true,
|
|
5783
5779
|
children: t("restartDisabledNotice")
|
|
5784
5780
|
})
|
|
5785
5781
|
]
|
|
5786
5782
|
});
|
|
5787
5783
|
if (view.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5788
|
-
className:
|
|
5784
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
5789
5785
|
children: [
|
|
5790
5786
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5791
|
-
className:
|
|
5787
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
5792
5788
|
children: t("uninstallFailed")
|
|
5793
5789
|
}),
|
|
5794
5790
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5795
|
-
className:
|
|
5791
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
5796
5792
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5797
|
-
className:
|
|
5793
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
5798
5794
|
children: line
|
|
5799
5795
|
}, index))
|
|
5800
5796
|
}),
|
|
5801
5797
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5802
|
-
className:
|
|
5798
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
5803
5799
|
children: view.detail === "" ? t("uninstallTransportFailed") : view.detail
|
|
5804
5800
|
})
|
|
5805
5801
|
]
|
|
@@ -5807,7 +5803,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5807
5803
|
if (view.kind !== "idle") return null;
|
|
5808
5804
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5809
5805
|
type: "button",
|
|
5810
|
-
className:
|
|
5806
|
+
className: _dsh_plugin_shop_css_26093961_default.uninstallButton,
|
|
5811
5807
|
"data-shop-uninstall": true,
|
|
5812
5808
|
onClick: () => void start({ name }),
|
|
5813
5809
|
children: t("uninstall")
|
|
@@ -5864,37 +5860,37 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5864
5860
|
return () => clearInterval(timer);
|
|
5865
5861
|
}, [state, t]);
|
|
5866
5862
|
if (state.kind === "restarting") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5867
|
-
className:
|
|
5863
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5868
5864
|
"data-shop-restarting": true,
|
|
5869
5865
|
children: t("restarting")
|
|
5870
5866
|
});
|
|
5871
5867
|
if (state.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5872
|
-
className:
|
|
5868
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
5873
5869
|
"data-shop-restart-error": true,
|
|
5874
5870
|
children: state.detail
|
|
5875
5871
|
});
|
|
5876
5872
|
if (gateOpen) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5877
|
-
className:
|
|
5873
|
+
className: _dsh_plugin_shop_css_26093961_default.gate,
|
|
5878
5874
|
children: [
|
|
5879
5875
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5880
|
-
className:
|
|
5876
|
+
className: _dsh_plugin_shop_css_26093961_default.gateTitle,
|
|
5881
5877
|
children: t("restartTitle")
|
|
5882
5878
|
}),
|
|
5883
5879
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5884
|
-
className:
|
|
5880
|
+
className: _dsh_plugin_shop_css_26093961_default.gateBody,
|
|
5885
5881
|
children: t("restartBody")
|
|
5886
5882
|
}),
|
|
5887
5883
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5888
|
-
className:
|
|
5884
|
+
className: _dsh_plugin_shop_css_26093961_default.gateActions,
|
|
5889
5885
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5890
5886
|
type: "button",
|
|
5891
|
-
className:
|
|
5887
|
+
className: _dsh_plugin_shop_css_26093961_default.confirmButton,
|
|
5892
5888
|
"data-shop-restart-confirm": true,
|
|
5893
5889
|
onClick: () => void onConfirm(),
|
|
5894
5890
|
children: t("restartConfirm")
|
|
5895
5891
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5896
5892
|
type: "button",
|
|
5897
|
-
className:
|
|
5893
|
+
className: _dsh_plugin_shop_css_26093961_default.cancelButton,
|
|
5898
5894
|
onClick: () => setGateOpen(false),
|
|
5899
5895
|
children: t("cancel")
|
|
5900
5896
|
})]
|
|
@@ -5903,7 +5899,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5903
5899
|
});
|
|
5904
5900
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5905
5901
|
type: "button",
|
|
5906
|
-
className:
|
|
5902
|
+
className: _dsh_plugin_shop_css_26093961_default.restartButton,
|
|
5907
5903
|
"data-shop-restart": true,
|
|
5908
5904
|
onClick: () => setGateOpen(true),
|
|
5909
5905
|
children: t("restart")
|
|
@@ -5943,7 +5939,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5943
5939
|
}
|
|
5944
5940
|
};
|
|
5945
5941
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5946
|
-
className:
|
|
5942
|
+
className: _dsh_plugin_shop_css_26093961_default.switchWrap,
|
|
5947
5943
|
"data-shop-enabled-switch": row.name,
|
|
5948
5944
|
children: [
|
|
5949
5945
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -5952,18 +5948,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5952
5948
|
"aria-checked": enabled,
|
|
5953
5949
|
"aria-label": t("enabledSwitch"),
|
|
5954
5950
|
"data-shop-toggle": true,
|
|
5955
|
-
className: `${
|
|
5951
|
+
className: `${_dsh_plugin_shop_css_26093961_default.switch} ${enabled ? _dsh_plugin_shop_css_26093961_default.switchOn : ""}`,
|
|
5956
5952
|
onClick: () => void onToggle(),
|
|
5957
5953
|
disabled: toggle.kind === "saving",
|
|
5958
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
5954
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.switchKnob })
|
|
5959
5955
|
}),
|
|
5960
5956
|
toggle.kind === "saved" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5961
|
-
className:
|
|
5957
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
5962
5958
|
"data-shop-hot-apply": true,
|
|
5963
5959
|
children: t("hotApplyNote")
|
|
5964
5960
|
}),
|
|
5965
5961
|
toggle.kind === "error" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5966
|
-
className:
|
|
5962
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
5967
5963
|
"data-shop-toggle-error": true,
|
|
5968
5964
|
children: toggle.detail
|
|
5969
5965
|
})
|
|
@@ -5975,27 +5971,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5975
5971
|
* install flow for `name@latest`, reusing `InstallPanel`). */
|
|
5976
5972
|
function OutdatedRow({ row, tier, source, missing, t, setEnabled, install, installStatus, restart, restartSupported }) {
|
|
5977
5973
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5978
|
-
className:
|
|
5974
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedRow,
|
|
5979
5975
|
"data-shop-outdated-entry": row.name,
|
|
5980
5976
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5981
|
-
className:
|
|
5977
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedInfo,
|
|
5982
5978
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5983
|
-
className:
|
|
5979
|
+
className: _dsh_plugin_shop_css_26093961_default.badges,
|
|
5984
5980
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5985
|
-
className:
|
|
5981
|
+
className: _dsh_plugin_shop_css_26093961_default.name,
|
|
5986
5982
|
children: row.name
|
|
5987
5983
|
}), missing.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5988
|
-
className:
|
|
5984
|
+
className: _dsh_plugin_shop_css_26093961_default.incompatibleBadge,
|
|
5989
5985
|
"data-shop-incompatible": true,
|
|
5990
5986
|
title: t("incompatibleUpdateDetail", { modules: missing.join(", ") }),
|
|
5991
5987
|
children: t("incompatibleBadge")
|
|
5992
5988
|
})]
|
|
5993
5989
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5994
|
-
className:
|
|
5990
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedVersions,
|
|
5995
5991
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("installedVersion", { version: source === "github" ? row.installed.slice(0, 7) : row.installed }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("latestVersion", { version: row.latest }) })]
|
|
5996
5992
|
})]
|
|
5997
5993
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5998
|
-
className:
|
|
5994
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedActions,
|
|
5999
5995
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(EnabledSwitch, {
|
|
6000
5996
|
row,
|
|
6001
5997
|
t,
|
|
@@ -6025,20 +6021,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6025
6021
|
function OutdatedSection({ state, tiers, sources, missingByName, t, setEnabled, install, installStatus, restart, restartSupported }) {
|
|
6026
6022
|
if (state.kind === "loading") return null;
|
|
6027
6023
|
if (state.kind === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6028
|
-
className:
|
|
6024
|
+
className: _dsh_plugin_shop_css_26093961_default.stateLine,
|
|
6029
6025
|
"data-shop-outdated-error": true,
|
|
6030
6026
|
children: t("error")
|
|
6031
6027
|
});
|
|
6032
6028
|
const outdated = state.entries.filter((entry) => entry.outdated);
|
|
6033
6029
|
if (outdated.length === 0) return null;
|
|
6034
6030
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
6035
|
-
className:
|
|
6031
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedSection,
|
|
6036
6032
|
"data-shop-outdated": true,
|
|
6037
6033
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
6038
|
-
className:
|
|
6034
|
+
className: _dsh_plugin_shop_css_26093961_default.catalogHeading,
|
|
6039
6035
|
children: t("installedSection")
|
|
6040
6036
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
6041
|
-
className:
|
|
6037
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedList,
|
|
6042
6038
|
children: outdated.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OutdatedRow, {
|
|
6043
6039
|
row,
|
|
6044
6040
|
tier: tiers.get(row.name) ?? "community",
|
|
@@ -6211,50 +6207,50 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6211
6207
|
return map;
|
|
6212
6208
|
}, [catalogState]);
|
|
6213
6209
|
if (catalogState.kind === "loading") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6214
|
-
className:
|
|
6210
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
6215
6211
|
"data-shop-tab": true,
|
|
6216
6212
|
"aria-busy": "true",
|
|
6217
6213
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6218
|
-
className:
|
|
6214
|
+
className: _dsh_plugin_shop_css_26093961_default.srOnly,
|
|
6219
6215
|
children: t("loading")
|
|
6220
6216
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6221
|
-
className:
|
|
6217
|
+
className: _dsh_plugin_shop_css_26093961_default.skeletonGrid,
|
|
6222
6218
|
"data-shop-skeleton": true,
|
|
6223
6219
|
"aria-hidden": "true",
|
|
6224
6220
|
children: Array.from({ length: 8 }, (_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6225
|
-
className:
|
|
6221
|
+
className: _dsh_plugin_shop_css_26093961_default.skeletonCard,
|
|
6226
6222
|
children: [
|
|
6227
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
6228
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
6229
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
6230
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
6223
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonName }),
|
|
6224
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonSummary }),
|
|
6225
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonSummaryShort }),
|
|
6226
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonActions })
|
|
6231
6227
|
]
|
|
6232
6228
|
}, i))
|
|
6233
6229
|
})]
|
|
6234
6230
|
});
|
|
6235
6231
|
if (catalogState.kind === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6236
|
-
className:
|
|
6232
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
6237
6233
|
"data-shop-tab": true,
|
|
6238
6234
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6239
|
-
className:
|
|
6235
|
+
className: _dsh_plugin_shop_css_26093961_default.stateLine,
|
|
6240
6236
|
children: t("error")
|
|
6241
6237
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6242
6238
|
type: "button",
|
|
6243
|
-
className:
|
|
6239
|
+
className: _dsh_plugin_shop_css_26093961_default.actionButton,
|
|
6244
6240
|
onClick: () => setRequest({ kind: "retry" }),
|
|
6245
6241
|
children: t("retry")
|
|
6246
6242
|
})]
|
|
6247
6243
|
});
|
|
6248
6244
|
const { result } = catalogState;
|
|
6249
6245
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6250
|
-
className:
|
|
6246
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
6251
6247
|
"data-shop-tab": true,
|
|
6252
6248
|
children: [
|
|
6253
6249
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6254
|
-
className:
|
|
6250
|
+
className: _dsh_plugin_shop_css_26093961_default.toolbar,
|
|
6255
6251
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
6256
6252
|
type: "search",
|
|
6257
|
-
className:
|
|
6253
|
+
className: _dsh_plugin_shop_css_26093961_default.searchInput,
|
|
6258
6254
|
"aria-label": t("search"),
|
|
6259
6255
|
placeholder: t("search"),
|
|
6260
6256
|
value: query,
|
|
@@ -6263,31 +6259,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6263
6259
|
setVisibleCount(48);
|
|
6264
6260
|
}
|
|
6265
6261
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6266
|
-
className:
|
|
6262
|
+
className: _dsh_plugin_shop_css_26093961_default.toolbarRight,
|
|
6267
6263
|
children: [
|
|
6268
6264
|
result.stale && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6269
|
-
className:
|
|
6265
|
+
className: _dsh_plugin_shop_css_26093961_default.staleBlock,
|
|
6270
6266
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6271
|
-
className:
|
|
6267
|
+
className: _dsh_plugin_shop_css_26093961_default.staleBadge,
|
|
6272
6268
|
children: t("staleLabel", { date: result.builtAt.slice(0, 10) })
|
|
6273
6269
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6274
6270
|
type: "button",
|
|
6275
|
-
className:
|
|
6271
|
+
className: _dsh_plugin_shop_css_26093961_default.actionButton,
|
|
6276
6272
|
onClick: () => setRequest({ kind: "refresh" }),
|
|
6277
6273
|
children: t("refresh")
|
|
6278
6274
|
})]
|
|
6279
6275
|
}),
|
|
6280
6276
|
selfVersion !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6281
|
-
className:
|
|
6277
|
+
className: _dsh_plugin_shop_css_26093961_default.versionBlock,
|
|
6282
6278
|
children: [
|
|
6283
6279
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
6284
|
-
className:
|
|
6280
|
+
className: _dsh_plugin_shop_css_26093961_default.versionText,
|
|
6285
6281
|
"data-shop-version": true,
|
|
6286
6282
|
children: ["v", selfVersion.installed]
|
|
6287
6283
|
}),
|
|
6288
6284
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6289
6285
|
type: "button",
|
|
6290
|
-
className:
|
|
6286
|
+
className: _dsh_plugin_shop_css_26093961_default.checkUpdateButton,
|
|
6291
6287
|
"data-shop-check-update": true,
|
|
6292
6288
|
disabled: checkState !== "idle",
|
|
6293
6289
|
onClick: () => void checkVersion(),
|
|
@@ -6295,7 +6291,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6295
6291
|
}),
|
|
6296
6292
|
selfVersion.outdated && selfVersion.latest !== null && selfUpdate.view.kind === "idle" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6297
6293
|
type: "button",
|
|
6298
|
-
className:
|
|
6294
|
+
className: _dsh_plugin_shop_css_26093961_default.updateSelfButton,
|
|
6299
6295
|
"data-shop-update-self": true,
|
|
6300
6296
|
onClick: () => {
|
|
6301
6297
|
if (selfVersion.latest !== null) selfUpdate.start({ version: selfVersion.latest });
|
|
@@ -6305,7 +6301,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6305
6301
|
]
|
|
6306
6302
|
}),
|
|
6307
6303
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
6308
|
-
className:
|
|
6304
|
+
className: _dsh_plugin_shop_css_26093961_default.githubLink,
|
|
6309
6305
|
href: SHOP_REPO_URL,
|
|
6310
6306
|
target: "_blank",
|
|
6311
6307
|
rel: "noopener noreferrer",
|
|
@@ -6324,27 +6320,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6324
6320
|
})]
|
|
6325
6321
|
}),
|
|
6326
6322
|
selfUpdate.view.kind === "running" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6327
|
-
className:
|
|
6323
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
6328
6324
|
"data-shop-self-updating": true,
|
|
6329
6325
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6330
|
-
className:
|
|
6326
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
6331
6327
|
children: t("installing")
|
|
6332
6328
|
}), selfUpdate.view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6333
|
-
className:
|
|
6329
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
6334
6330
|
children: selfUpdate.view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6335
|
-
className:
|
|
6331
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
6336
6332
|
children: line
|
|
6337
6333
|
}, index))
|
|
6338
6334
|
})]
|
|
6339
6335
|
}),
|
|
6340
6336
|
selfUpdate.view.kind === "done" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6341
|
-
className:
|
|
6337
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
6342
6338
|
"data-shop-self-update-done": true,
|
|
6343
6339
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6344
|
-
className:
|
|
6340
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
6345
6341
|
children: [
|
|
6346
6342
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6347
|
-
className:
|
|
6343
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
6348
6344
|
children: t("installedRestartNotice")
|
|
6349
6345
|
}),
|
|
6350
6346
|
restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RestartPanel, {
|
|
@@ -6352,7 +6348,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6352
6348
|
restart
|
|
6353
6349
|
}),
|
|
6354
6350
|
!restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6355
|
-
className:
|
|
6351
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
6356
6352
|
"data-shop-restart-disabled": true,
|
|
6357
6353
|
children: t("restartDisabledNotice")
|
|
6358
6354
|
})
|
|
@@ -6360,34 +6356,34 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6360
6356
|
})
|
|
6361
6357
|
}),
|
|
6362
6358
|
selfUpdate.view.kind === "failed" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6363
|
-
className:
|
|
6359
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
6364
6360
|
"data-shop-self-update-failed": true,
|
|
6365
6361
|
children: [
|
|
6366
6362
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6367
|
-
className:
|
|
6363
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
6368
6364
|
children: t("updateFailed")
|
|
6369
6365
|
}),
|
|
6370
6366
|
selfUpdate.view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6371
|
-
className:
|
|
6367
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
6372
6368
|
children: selfUpdate.view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6373
|
-
className:
|
|
6369
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
6374
6370
|
children: line
|
|
6375
6371
|
}, index))
|
|
6376
6372
|
}),
|
|
6377
6373
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6378
|
-
className:
|
|
6374
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
6379
6375
|
children: selfUpdate.view.detail === "" ? t("updateTransportFailed") : selfUpdate.view.detail
|
|
6380
6376
|
})
|
|
6381
6377
|
]
|
|
6382
6378
|
}),
|
|
6383
6379
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6384
|
-
className:
|
|
6380
|
+
className: _dsh_plugin_shop_css_26093961_default.categoryBar,
|
|
6385
6381
|
role: "group",
|
|
6386
6382
|
"aria-label": t("catalog"),
|
|
6387
6383
|
children: [
|
|
6388
6384
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
6389
6385
|
type: "button",
|
|
6390
|
-
className: category === null ? `${
|
|
6386
|
+
className: category === null ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
6391
6387
|
"aria-pressed": category === null,
|
|
6392
6388
|
onClick: () => {
|
|
6393
6389
|
setCategory(null);
|
|
@@ -6401,7 +6397,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6401
6397
|
}),
|
|
6402
6398
|
CATEGORY_ORDER.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
6403
6399
|
type: "button",
|
|
6404
|
-
className: category === key ? `${
|
|
6400
|
+
className: category === key ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
6405
6401
|
"aria-pressed": category === key,
|
|
6406
6402
|
onClick: () => {
|
|
6407
6403
|
setCategory(key);
|
|
@@ -6415,7 +6411,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6415
6411
|
}, key)),
|
|
6416
6412
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
6417
6413
|
type: "button",
|
|
6418
|
-
className: category === "installed" ? `${
|
|
6414
|
+
className: category === "installed" ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
6419
6415
|
"aria-pressed": category === "installed",
|
|
6420
6416
|
onClick: () => {
|
|
6421
6417
|
setCategory("installed");
|
|
@@ -6430,20 +6426,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6430
6426
|
]
|
|
6431
6427
|
}),
|
|
6432
6428
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6433
|
-
className:
|
|
6429
|
+
className: _dsh_plugin_shop_css_26093961_default.catalogStats,
|
|
6434
6430
|
children: t("catalogStats", {
|
|
6435
6431
|
count: String(result.plugins.length),
|
|
6436
6432
|
date: result.builtAt.slice(0, 10)
|
|
6437
6433
|
})
|
|
6438
6434
|
}),
|
|
6439
6435
|
result.plugins.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6440
|
-
className:
|
|
6436
|
+
className: _dsh_plugin_shop_css_26093961_default.emptyLine,
|
|
6441
6437
|
children: t("empty")
|
|
6442
6438
|
}) : filtered.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6443
|
-
className:
|
|
6439
|
+
className: _dsh_plugin_shop_css_26093961_default.emptyLine,
|
|
6444
6440
|
children: t("emptySearch")
|
|
6445
6441
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
|
|
6446
|
-
className:
|
|
6442
|
+
className: _dsh_plugin_shop_css_26093961_default.cards,
|
|
6447
6443
|
children: [visible.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EntryCard, {
|
|
6448
6444
|
entry,
|
|
6449
6445
|
stars: starsOf(entry, stars),
|
|
@@ -6458,12 +6454,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6458
6454
|
setEnabled
|
|
6459
6455
|
}) }, entryKey(entry))), incremental && visibleCount < filtered.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
6460
6456
|
ref: sentinelRef,
|
|
6461
|
-
className:
|
|
6457
|
+
className: _dsh_plugin_shop_css_26093961_default.cardsSentry,
|
|
6462
6458
|
"data-shop-sentry": true,
|
|
6463
6459
|
"aria-hidden": "true"
|
|
6464
6460
|
})]
|
|
6465
6461
|
}), incremental && visibleCount < filtered.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
6466
|
-
className:
|
|
6462
|
+
className: _dsh_plugin_shop_css_26093961_default.showingLine,
|
|
6467
6463
|
"aria-live": "polite",
|
|
6468
6464
|
children: t("showing", {
|
|
6469
6465
|
shown: String(visibleCount),
|