dsh-plugin-shop 0.8.0-beta.4 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/client.js +239 -239
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,9 +35,9 @@ install them once with `npm install -g @deepseek-ai/dsh pnpm` and verify with
|
|
|
35
35
|
# holds back very recent releases, so a bare `add dsh-plugin-shop` can hand
|
|
36
36
|
# you an older version for a while. Pin the current release — refresh it
|
|
37
37
|
# with `npm view dsh-plugin-shop version`.
|
|
38
|
-
dsh plugin --profile web add dsh-plugin-shop@0.
|
|
38
|
+
dsh plugin --profile web add dsh-plugin-shop@0.8.0
|
|
39
39
|
# or straight through npx, nothing installed:
|
|
40
|
-
npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-shop@0.
|
|
40
|
+
npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-shop@0.8.0
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Replace `web` with your profile if you use another one. Then restart `dsh` once — a
|
|
@@ -67,7 +67,7 @@ ls -1 "${DSH_HOME:-$HOME/.dsh}/profiles" | grep -v '^node_modules$'
|
|
|
67
67
|
cooldown, and deterministic installs are the point of the agent path.
|
|
68
68
|
|
|
69
69
|
```sh
|
|
70
|
-
dsh plugin --profile <profile> add dsh-plugin-shop@0.
|
|
70
|
+
dsh plugin --profile <profile> add dsh-plugin-shop@0.8.0
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
**3. Verify — do not skip this.** A zero exit from step 2 means pnpm resolved the
|
package/lib/client.js
CHANGED
|
@@ -6918,111 +6918,111 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6918
6918
|
};
|
|
6919
6919
|
}
|
|
6920
6920
|
//#endregion
|
|
6921
|
-
//#region \0dsh-plugin-shop-css:
|
|
6922
|
-
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 *\n * Clipped on BOTH axes, with a margin, because `.s232ec4_searchInput` sits at\n * exactly (0, 0) of this box — it is the first child of `.s646509_toolbar`, itself\n * the first child here, and this rule carries no padding — so its focus\n * ring paints ENTIRELY outside the panel.\n *\n * Both axes is the load-bearing part: `overflow-clip-margin` is inert\n * unless the element clips on both. Clipping x alone left the margin doing\n * nothing — measured against the live app on 0.7.1, the ring reached 0 of\n * its 3px on the left at every device pixel ratio (1, 1.25, 1.5, 2), while\n * keeping the full 3px on the right, where the 280px input stops short of\n * the panel and never meets the clip edge. Raising the margin to 6px\n * changed nothing; clipping both axes with the SAME 3px restored the whole\n * ring. A test that reads declarations cannot see that difference, which is\n * why the first attempt at this shipped broken.\n *\n * `clip` is not a scroll container, so this does not bring back the\n * accidental scrolling `hidden` caused by coercing the other axis to\n * `auto`. Nothing is lost vertically: the panel's scrollHeight equals its\n * height and no descendant paints outside the clip rect (measured).\n * `overflow-x: hidden` stays as the fallback for engines without `clip`,\n * where the ring is clipped as it was before, never worse. */\n overflow-x: hidden;\n overflow: clip;\n overflow-clip-margin: 3px;\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.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.seb0a1e_catalogStatsRow {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 6px 0 0;\n}\n\n.sccc4d1_catalogStats {\n margin: 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/* Sits beside the 12px stats caption, so it is quieter than `.s73242a_actionButton`:\n * this is an affordance, not a call to action — the catalog reloads on its\n * own at mount and the shelf is already usable without it. */\n.s64a5ff_reloadButton {\n padding: 1px 9px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n font-size: 11px;\n line-height: 17px;\n cursor: pointer;\n}\n\n.s64a5ff_reloadButton:hover:not(:disabled) {\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.s64a5ff_reloadButton:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n.s64a5ff_reloadButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.s4453f3_reloadFailed {\n font-size: 11px;\n color: var(--dsw-alias-state-warn-primary);\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 flex-shrink: 0;\n padding: 3px 9px;\n border-radius: 999px;\n font-size: 12px;\n white-space: nowrap;\n color: var(--dsw-alias-state-error-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-error-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/* `white-space: pre-line` so the newline in the copy is the copy's own: the\n dictionary decides where the line breaks, and a translator changes it\n without touching the component. Collapses runs of spaces like `normal`, so\n only the explicit \\n survives. */\n.s6eca19_incompatibleDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n white-space: pre-line;\n color: var(--dsw-alias-state-error-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.sb00c36_restartSelfButton {\n /* The version row's third state. Geometry matches .s614a38_checkUpdateButton and\n * .sa04455_updateSelfButton exactly — the row is one evolving control and a\n * different pill would read as a different kind of thing. It takes the\n * emphasised fill rather than the neutral one because at that moment the\n * restart is the only thing left to do, the same reason Update has it. */\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.sb00c36_restartSelfButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\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 white-space: pre-line;\n color: var(--dsw-alias-state-error-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";
|
|
6923
|
-
if (typeof document !== "undefined" && !document.querySelector("style[data-plugin-css=\"
|
|
6921
|
+
//#region \0dsh-plugin-shop-css:26093961
|
|
6922
|
+
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 * Clipped on BOTH axes, with a margin, because `.se23a0e_searchInput` sits at\n * exactly (0, 0) of this box — it is the first child of `.s27ad76_toolbar`, itself\n * the first child here, and this rule carries no padding — so its focus\n * ring paints ENTIRELY outside the panel.\n *\n * Both axes is the load-bearing part: `overflow-clip-margin` is inert\n * unless the element clips on both. Clipping x alone left the margin doing\n * nothing — measured against the live app on 0.7.1, the ring reached 0 of\n * its 3px on the left at every device pixel ratio (1, 1.25, 1.5, 2), while\n * keeping the full 3px on the right, where the 280px input stops short of\n * the panel and never meets the clip edge. Raising the margin to 6px\n * changed nothing; clipping both axes with the SAME 3px restored the whole\n * ring. A test that reads declarations cannot see that difference, which is\n * why the first attempt at this shipped broken.\n *\n * `clip` is not a scroll container, so this does not bring back the\n * accidental scrolling `hidden` caused by coercing the other axis to\n * `auto`. Nothing is lost vertically: the panel's scrollHeight equals its\n * height and no descendant paints outside the clip rect (measured).\n * `overflow-x: hidden` stays as the fallback for engines without `clip`,\n * where the ring is clipped as it was before, never worse. */\n overflow-x: hidden;\n overflow: 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.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.sf2305c_catalogStatsRow {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 6px 0 0;\n}\n\n.s38a33e_catalogStats {\n margin: 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/* Sits beside the 12px stats caption, so it is quieter than `.sb632c0_actionButton`:\n * this is an affordance, not a call to action — the catalog reloads on its\n * own at mount and the shelf is already usable without it. */\n.s71d105_reloadButton {\n padding: 1px 9px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n font-size: 11px;\n line-height: 17px;\n cursor: pointer;\n}\n\n.s71d105_reloadButton:hover:not(:disabled) {\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.s71d105_reloadButton:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n.s71d105_reloadButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\n.sa079ea_reloadFailed {\n font-size: 11px;\n color: var(--dsw-alias-state-warn-primary);\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 flex-shrink: 0;\n padding: 3px 9px;\n border-radius: 999px;\n font-size: 12px;\n white-space: nowrap;\n color: var(--dsw-alias-state-error-primary);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, transparent);\n border: 1px solid color-mix(in srgb, var(--dsw-alias-state-error-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/* `white-space: pre-line` so the newline in the copy is the copy's own: the\n dictionary decides where the line breaks, and a translator changes it\n without touching the component. Collapses runs of spaces like `normal`, so\n only the explicit \\n survives. */\n.s45793c_incompatibleDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n white-space: pre-line;\n color: var(--dsw-alias-state-error-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.sdc8ac4_restartSelfButton {\n /* The version row's third state. Geometry matches .secd6a2_checkUpdateButton and\n * .s40b16e_updateSelfButton exactly — the row is one evolving control and a\n * different pill would read as a different kind of thing. It takes the\n * emphasised fill rather than the neutral one because at that moment the\n * restart is the only thing left to do, the same reason Update has it. */\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.sdc8ac4_restartSelfButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: 1px;\n}\n\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 white-space: pre-line;\n color: var(--dsw-alias-state-error-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";
|
|
6923
|
+
if (typeof document !== "undefined" && !document.querySelector("style[data-plugin-css=\"26093961\"]")) {
|
|
6924
6924
|
const tag = document.createElement("style");
|
|
6925
|
-
tag.dataset.pluginCss = "
|
|
6925
|
+
tag.dataset.pluginCss = "26093961";
|
|
6926
6926
|
tag.textContent = css;
|
|
6927
6927
|
document.head.appendChild(tag);
|
|
6928
6928
|
}
|
|
6929
|
-
var
|
|
6930
|
-
"client": "
|
|
6931
|
-
"config": "
|
|
6932
|
-
"ts": "
|
|
6933
|
-
"spec": "
|
|
6934
|
-
"panel": "
|
|
6935
|
-
"searchInput": "
|
|
6936
|
-
"toolbar": "
|
|
6937
|
-
"stateLine": "
|
|
6938
|
-
"srOnly": "
|
|
6939
|
-
"skeletonGrid": "
|
|
6940
|
-
"skeletonCard": "
|
|
6941
|
-
"skeletonName": "
|
|
6942
|
-
"skeletonSummary": "
|
|
6943
|
-
"skeletonSummaryShort": "
|
|
6944
|
-
"skeletonActions": "
|
|
6945
|
-
"actionButton": "
|
|
6946
|
-
"toolbarRight": "
|
|
6947
|
-
"versionBlock": "
|
|
6948
|
-
"versionText": "
|
|
6949
|
-
"updateSelfButton": "
|
|
6950
|
-
"checkUpdateButton": "
|
|
6951
|
-
"githubLink": "
|
|
6952
|
-
"selfUpdatePanel": "
|
|
6953
|
-
"staleBadge": "
|
|
6954
|
-
"categoryBar": "
|
|
6955
|
-
"categoryButton": "
|
|
6956
|
-
"categoryButtonOn": "
|
|
6957
|
-
"catalogHeading": "
|
|
6958
|
-
"catalogStatsRow": "
|
|
6959
|
-
"catalogStats": "
|
|
6960
|
-
"reloadButton": "
|
|
6961
|
-
"reloadFailed": "
|
|
6962
|
-
"emptyLine": "
|
|
6963
|
-
"cards": "
|
|
6964
|
-
"card": "
|
|
6965
|
-
"cardsSentry": "
|
|
6966
|
-
"showingLine": "
|
|
6967
|
-
"cardSpine": "
|
|
6968
|
-
"categoryBadge": "
|
|
6969
|
-
"entryHeader": "
|
|
6970
|
-
"name": "
|
|
6971
|
-
"badges": "
|
|
6972
|
-
"cardActions": "
|
|
6973
|
-
"gate": "
|
|
6974
|
-
"installPanel": "
|
|
6975
|
-
"installedActions": "
|
|
6976
|
-
"cardVersion": "
|
|
6977
|
-
"sourceBadge": "
|
|
6978
|
-
"tierBadge": "
|
|
6979
|
-
"incompatibleBadge": "
|
|
6980
|
-
"starsBadge": "
|
|
6981
|
-
"chevron": "
|
|
6982
|
-
"chevronOpen": "
|
|
6983
|
-
"body": "
|
|
6984
|
-
"summary": "
|
|
6985
|
-
"summaryZh": "
|
|
6986
|
-
"summaryExpanded": "
|
|
6987
|
-
"summaryZhExpanded": "
|
|
6988
|
-
"incompatibleDetail": "
|
|
6989
|
-
"capabilitiesBlock": "
|
|
6990
|
-
"capabilitiesNote": "
|
|
6991
|
-
"capabilities": "
|
|
6992
|
-
"detail": "
|
|
6993
|
-
"detailRows": "
|
|
6994
|
-
"detailRow": "
|
|
6995
|
-
"author": "
|
|
6996
|
-
"reviewedLine": "
|
|
6997
|
-
"installButton": "
|
|
6998
|
-
"confirmButton": "
|
|
6999
|
-
"cancelButton": "
|
|
7000
|
-
"installedLabel": "
|
|
7001
|
-
"uninstallButton": "
|
|
7002
|
-
"restartSelfButton": "
|
|
7003
|
-
"restartButton": "
|
|
7004
|
-
"gateTitle": "
|
|
7005
|
-
"gateBody": "
|
|
7006
|
-
"gateWarning": "
|
|
7007
|
-
"gateActions": "
|
|
7008
|
-
"installing": "
|
|
7009
|
-
"log": "
|
|
7010
|
-
"logLine": "
|
|
7011
|
-
"notice": "
|
|
7012
|
-
"failedHeading": "
|
|
7013
|
-
"failedDetail": "
|
|
7014
|
-
"rejectedCode": "
|
|
7015
|
-
"rejectedDetail": "
|
|
7016
|
-
"outdatedSection": "
|
|
7017
|
-
"outdatedList": "
|
|
7018
|
-
"outdatedRow": "
|
|
7019
|
-
"outdatedInfo": "
|
|
7020
|
-
"outdatedVersions": "
|
|
7021
|
-
"outdatedActions": "
|
|
7022
|
-
"switch": "
|
|
7023
|
-
"switchOn": "
|
|
7024
|
-
"switchKnob": "
|
|
7025
|
-
"switchWrap": "
|
|
6929
|
+
var _dsh_plugin_shop_css_26093961_default = {
|
|
6930
|
+
"client": "sfae5fa_client",
|
|
6931
|
+
"config": "se9da7d_config",
|
|
6932
|
+
"ts": "se722f1_ts",
|
|
6933
|
+
"spec": "s2f7a8b_spec",
|
|
6934
|
+
"panel": "s99b207_panel",
|
|
6935
|
+
"searchInput": "se23a0e_searchInput",
|
|
6936
|
+
"toolbar": "s27ad76_toolbar",
|
|
6937
|
+
"stateLine": "s2abe0f_stateLine",
|
|
6938
|
+
"srOnly": "sfb85e5_srOnly",
|
|
6939
|
+
"skeletonGrid": "s728a01_skeletonGrid",
|
|
6940
|
+
"skeletonCard": "s33d002_skeletonCard",
|
|
6941
|
+
"skeletonName": "s46e666_skeletonName",
|
|
6942
|
+
"skeletonSummary": "s2a467d_skeletonSummary",
|
|
6943
|
+
"skeletonSummaryShort": "s232601_skeletonSummaryShort",
|
|
6944
|
+
"skeletonActions": "sde9b0c_skeletonActions",
|
|
6945
|
+
"actionButton": "sb632c0_actionButton",
|
|
6946
|
+
"toolbarRight": "saba3c3_toolbarRight",
|
|
6947
|
+
"versionBlock": "s6736c0_versionBlock",
|
|
6948
|
+
"versionText": "s2dff04_versionText",
|
|
6949
|
+
"updateSelfButton": "s40b16e_updateSelfButton",
|
|
6950
|
+
"checkUpdateButton": "secd6a2_checkUpdateButton",
|
|
6951
|
+
"githubLink": "s5e1ce3_githubLink",
|
|
6952
|
+
"selfUpdatePanel": "s798348_selfUpdatePanel",
|
|
6953
|
+
"staleBadge": "see2588_staleBadge",
|
|
6954
|
+
"categoryBar": "se67e0b_categoryBar",
|
|
6955
|
+
"categoryButton": "s8c06a0_categoryButton",
|
|
6956
|
+
"categoryButtonOn": "s65a55a_categoryButtonOn",
|
|
6957
|
+
"catalogHeading": "sb6cdd6_catalogHeading",
|
|
6958
|
+
"catalogStatsRow": "sf2305c_catalogStatsRow",
|
|
6959
|
+
"catalogStats": "s38a33e_catalogStats",
|
|
6960
|
+
"reloadButton": "s71d105_reloadButton",
|
|
6961
|
+
"reloadFailed": "sa079ea_reloadFailed",
|
|
6962
|
+
"emptyLine": "se3ba96_emptyLine",
|
|
6963
|
+
"cards": "sb41fe1_cards",
|
|
6964
|
+
"card": "sfcd584_card",
|
|
6965
|
+
"cardsSentry": "sf2d932_cardsSentry",
|
|
6966
|
+
"showingLine": "s947694_showingLine",
|
|
6967
|
+
"cardSpine": "sfc4028_cardSpine",
|
|
6968
|
+
"categoryBadge": "sb94610_categoryBadge",
|
|
6969
|
+
"entryHeader": "s50a94e_entryHeader",
|
|
6970
|
+
"name": "sfdbf47_name",
|
|
6971
|
+
"badges": "s28e55e_badges",
|
|
6972
|
+
"cardActions": "s9359c0_cardActions",
|
|
6973
|
+
"gate": "s549462_gate",
|
|
6974
|
+
"installPanel": "s20fbe0_installPanel",
|
|
6975
|
+
"installedActions": "s94517f_installedActions",
|
|
6976
|
+
"cardVersion": "sc54e24_cardVersion",
|
|
6977
|
+
"sourceBadge": "s623bee_sourceBadge",
|
|
6978
|
+
"tierBadge": "sf9a12c_tierBadge",
|
|
6979
|
+
"incompatibleBadge": "s671f97_incompatibleBadge",
|
|
6980
|
+
"starsBadge": "s963e5c_starsBadge",
|
|
6981
|
+
"chevron": "sbb5739_chevron",
|
|
6982
|
+
"chevronOpen": "s4e56e8_chevronOpen",
|
|
6983
|
+
"body": "sf9a60a_body",
|
|
6984
|
+
"summary": "sfd2791_summary",
|
|
6985
|
+
"summaryZh": "s69ed84_summaryZh",
|
|
6986
|
+
"summaryExpanded": "s83c8c8_summaryExpanded",
|
|
6987
|
+
"summaryZhExpanded": "s20b5b9_summaryZhExpanded",
|
|
6988
|
+
"incompatibleDetail": "s45793c_incompatibleDetail",
|
|
6989
|
+
"capabilitiesBlock": "s551fd2_capabilitiesBlock",
|
|
6990
|
+
"capabilitiesNote": "sb1f0de_capabilitiesNote",
|
|
6991
|
+
"capabilities": "s9a5379_capabilities",
|
|
6992
|
+
"detail": "s9e0e76_detail",
|
|
6993
|
+
"detailRows": "s41121d_detailRows",
|
|
6994
|
+
"detailRow": "s852a05_detailRow",
|
|
6995
|
+
"author": "s367f3b_author",
|
|
6996
|
+
"reviewedLine": "s2f9e91_reviewedLine",
|
|
6997
|
+
"installButton": "s89d599_installButton",
|
|
6998
|
+
"confirmButton": "s7b4348_confirmButton",
|
|
6999
|
+
"cancelButton": "s20b00b_cancelButton",
|
|
7000
|
+
"installedLabel": "s1e55fb_installedLabel",
|
|
7001
|
+
"uninstallButton": "s432016_uninstallButton",
|
|
7002
|
+
"restartSelfButton": "sdc8ac4_restartSelfButton",
|
|
7003
|
+
"restartButton": "s5c0f5a_restartButton",
|
|
7004
|
+
"gateTitle": "sed2c7d_gateTitle",
|
|
7005
|
+
"gateBody": "sdce129_gateBody",
|
|
7006
|
+
"gateWarning": "sfae869_gateWarning",
|
|
7007
|
+
"gateActions": "sae8426_gateActions",
|
|
7008
|
+
"installing": "s260a62_installing",
|
|
7009
|
+
"log": "sba0b9c_log",
|
|
7010
|
+
"logLine": "s5c7c9d_logLine",
|
|
7011
|
+
"notice": "sebdc74_notice",
|
|
7012
|
+
"failedHeading": "s2672db_failedHeading",
|
|
7013
|
+
"failedDetail": "s3a9748_failedDetail",
|
|
7014
|
+
"rejectedCode": "sc1144d_rejectedCode",
|
|
7015
|
+
"rejectedDetail": "s2209a3_rejectedDetail",
|
|
7016
|
+
"outdatedSection": "sb4abbb_outdatedSection",
|
|
7017
|
+
"outdatedList": "sbca39c_outdatedList",
|
|
7018
|
+
"outdatedRow": "s1abd04_outdatedRow",
|
|
7019
|
+
"outdatedInfo": "s10dca9_outdatedInfo",
|
|
7020
|
+
"outdatedVersions": "sb04966_outdatedVersions",
|
|
7021
|
+
"outdatedActions": "see54bf_outdatedActions",
|
|
7022
|
+
"switch": "sa65b66_switch",
|
|
7023
|
+
"switchOn": "s50b82f_switchOn",
|
|
7024
|
+
"switchKnob": "sbbb39a_switchKnob",
|
|
7025
|
+
"switchWrap": "s24b48c_switchWrap"
|
|
7026
7026
|
};
|
|
7027
7027
|
//#endregion
|
|
7028
7028
|
//#region src/client/ShopTab.tsx
|
|
@@ -7039,7 +7039,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7039
7039
|
width: "14",
|
|
7040
7040
|
height: "14",
|
|
7041
7041
|
"aria-hidden": "true",
|
|
7042
|
-
className: open ?
|
|
7042
|
+
className: open ? _dsh_plugin_shop_css_26093961_default.chevronOpen : _dsh_plugin_shop_css_26093961_default.chevron,
|
|
7043
7043
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
7044
7044
|
fill: "currentColor",
|
|
7045
7045
|
d: "M3.5 6 8 10.5 12.5 6l1 1L8 12.5 2.5 7l1-1Z"
|
|
@@ -7073,32 +7073,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7073
7073
|
onSettled();
|
|
7074
7074
|
}, [flow, onSettled]);
|
|
7075
7075
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7076
|
-
className:
|
|
7076
|
+
className: _dsh_plugin_shop_css_26093961_default.card,
|
|
7077
7077
|
"data-shop-entry": entry.name,
|
|
7078
7078
|
"data-category": category,
|
|
7079
7079
|
children: [
|
|
7080
7080
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7081
|
-
className:
|
|
7081
|
+
className: _dsh_plugin_shop_css_26093961_default.cardSpine,
|
|
7082
7082
|
"aria-hidden": "true"
|
|
7083
7083
|
}),
|
|
7084
7084
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
7085
7085
|
type: "button",
|
|
7086
|
-
className:
|
|
7086
|
+
className: _dsh_plugin_shop_css_26093961_default.entryHeader,
|
|
7087
7087
|
"aria-expanded": open,
|
|
7088
7088
|
"aria-controls": detailId,
|
|
7089
7089
|
onClick: () => setOpen((current) => !current),
|
|
7090
7090
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7091
|
-
className:
|
|
7091
|
+
className: _dsh_plugin_shop_css_26093961_default.name,
|
|
7092
7092
|
children: entry.name
|
|
7093
7093
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7094
|
-
className:
|
|
7094
|
+
className: _dsh_plugin_shop_css_26093961_default.badges,
|
|
7095
7095
|
children: [
|
|
7096
7096
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7097
|
-
className:
|
|
7097
|
+
className: _dsh_plugin_shop_css_26093961_default.categoryBadge,
|
|
7098
7098
|
children: t(categoryKey(entry))
|
|
7099
7099
|
}),
|
|
7100
7100
|
entry.source === "npm" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7101
|
-
className:
|
|
7101
|
+
className: _dsh_plugin_shop_css_26093961_default.sourceBadge,
|
|
7102
7102
|
"data-shop-source-npm": true,
|
|
7103
7103
|
role: "img",
|
|
7104
7104
|
"aria-label": t("npmSource"),
|
|
@@ -7115,7 +7115,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7115
7115
|
})
|
|
7116
7116
|
}),
|
|
7117
7117
|
hasGithubHome(entry) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7118
|
-
className:
|
|
7118
|
+
className: _dsh_plugin_shop_css_26093961_default.sourceBadge,
|
|
7119
7119
|
"data-shop-source-github": true,
|
|
7120
7120
|
role: "img",
|
|
7121
7121
|
"aria-label": t("githubSource"),
|
|
@@ -7129,17 +7129,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7129
7129
|
})
|
|
7130
7130
|
}),
|
|
7131
7131
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7132
|
-
className:
|
|
7132
|
+
className: _dsh_plugin_shop_css_26093961_default.cardVersion,
|
|
7133
7133
|
"data-card-version": true,
|
|
7134
7134
|
children: ["v", displayVersion(entry)]
|
|
7135
7135
|
}),
|
|
7136
7136
|
entry.tier !== "community" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7137
|
-
className:
|
|
7137
|
+
className: _dsh_plugin_shop_css_26093961_default.tierBadge,
|
|
7138
7138
|
"data-tier": entry.tier,
|
|
7139
7139
|
children: t(tierKey(entry.tier))
|
|
7140
7140
|
}),
|
|
7141
7141
|
stars !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7142
|
-
className:
|
|
7142
|
+
className: _dsh_plugin_shop_css_26093961_default.starsBadge,
|
|
7143
7143
|
role: "img",
|
|
7144
7144
|
"aria-label": t("stars", { count: stars }),
|
|
7145
7145
|
children: ["★ ", formatStars(stars)]
|
|
@@ -7149,39 +7149,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7149
7149
|
})]
|
|
7150
7150
|
}),
|
|
7151
7151
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7152
|
-
className:
|
|
7152
|
+
className: _dsh_plugin_shop_css_26093961_default.body,
|
|
7153
7153
|
children: [
|
|
7154
7154
|
summary !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7155
|
-
className: open ? `${
|
|
7155
|
+
className: open ? `${_dsh_plugin_shop_css_26093961_default.summary} ${_dsh_plugin_shop_css_26093961_default.summaryExpanded}` : _dsh_plugin_shop_css_26093961_default.summary,
|
|
7156
7156
|
children: summary.en
|
|
7157
7157
|
}),
|
|
7158
7158
|
summary?.zh !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7159
|
-
className: open ? `${
|
|
7159
|
+
className: open ? `${_dsh_plugin_shop_css_26093961_default.summaryZh} ${_dsh_plugin_shop_css_26093961_default.summaryZhExpanded}` : _dsh_plugin_shop_css_26093961_default.summaryZh,
|
|
7160
7160
|
children: summary.zh
|
|
7161
7161
|
}),
|
|
7162
7162
|
blockers.map((blocker) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7163
|
-
className:
|
|
7163
|
+
className: _dsh_plugin_shop_css_26093961_default.incompatibleDetail,
|
|
7164
7164
|
"data-shop-incompatible-detail": true,
|
|
7165
7165
|
children: blocker.text
|
|
7166
7166
|
}, blocker.kind)),
|
|
7167
7167
|
open && entry.catalog !== void 0 && entry.catalog.capabilities.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7168
|
-
className:
|
|
7168
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilitiesBlock,
|
|
7169
7169
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7170
|
-
className:
|
|
7170
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilitiesNote,
|
|
7171
7171
|
children: t("capabilitiesNote")
|
|
7172
7172
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
7173
|
-
className:
|
|
7173
|
+
className: _dsh_plugin_shop_css_26093961_default.capabilities,
|
|
7174
7174
|
children: entry.catalog.capabilities.map((capability) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: capability }, capability))
|
|
7175
7175
|
})]
|
|
7176
7176
|
}),
|
|
7177
7177
|
open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
7178
7178
|
id: detailId,
|
|
7179
|
-
className:
|
|
7179
|
+
className: _dsh_plugin_shop_css_26093961_default.detail,
|
|
7180
7180
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
|
|
7181
|
-
className:
|
|
7181
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRows,
|
|
7182
7182
|
children: [
|
|
7183
7183
|
npmUrl !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7184
|
-
className:
|
|
7184
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
7185
7185
|
"data-shop-npm": true,
|
|
7186
7186
|
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", {
|
|
7187
7187
|
href: npmUrl,
|
|
@@ -7191,7 +7191,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7191
7191
|
}) })]
|
|
7192
7192
|
}),
|
|
7193
7193
|
entry.repository !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7194
|
-
className:
|
|
7194
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
7195
7195
|
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", {
|
|
7196
7196
|
href: entry.repository,
|
|
7197
7197
|
target: "_blank",
|
|
@@ -7200,12 +7200,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7200
7200
|
}) : entry.repository })]
|
|
7201
7201
|
}),
|
|
7202
7202
|
entry.license !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7203
|
-
className:
|
|
7203
|
+
className: _dsh_plugin_shop_css_26093961_default.detailRow,
|
|
7204
7204
|
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 })]
|
|
7205
7205
|
})
|
|
7206
7206
|
]
|
|
7207
7207
|
}), entry.tier === "verified-stale" && entry.review !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7208
|
-
className:
|
|
7208
|
+
className: _dsh_plugin_shop_css_26093961_default.reviewedLine,
|
|
7209
7209
|
children: entry.review.reviewedVersion !== void 0 ? t("reviewedVersionLine", {
|
|
7210
7210
|
reviewed: entry.review.reviewedVersion,
|
|
7211
7211
|
current: entry.version
|
|
@@ -7218,7 +7218,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7218
7218
|
]
|
|
7219
7219
|
}),
|
|
7220
7220
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7221
|
-
className:
|
|
7221
|
+
className: _dsh_plugin_shop_css_26093961_default.cardActions,
|
|
7222
7222
|
"data-shop-actions": true,
|
|
7223
7223
|
children: [installed === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InstallPanel, {
|
|
7224
7224
|
target: installTarget,
|
|
@@ -7243,7 +7243,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7243
7243
|
restart,
|
|
7244
7244
|
restartSupported
|
|
7245
7245
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7246
|
-
className:
|
|
7246
|
+
className: _dsh_plugin_shop_css_26093961_default.installedLabel,
|
|
7247
7247
|
"data-shop-installed": true,
|
|
7248
7248
|
children: t("installed")
|
|
7249
7249
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BlockerBadge, {
|
|
@@ -7265,7 +7265,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7265
7265
|
onSettled: uninstallSettled
|
|
7266
7266
|
})
|
|
7267
7267
|
] }), author !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7268
|
-
className:
|
|
7268
|
+
className: _dsh_plugin_shop_css_26093961_default.author,
|
|
7269
7269
|
"data-shop-author": true,
|
|
7270
7270
|
children: t("authorLine", { author })
|
|
7271
7271
|
})]
|
|
@@ -7303,7 +7303,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7303
7303
|
const detail = blockers.map((blocker) => blocker.text).join("\n");
|
|
7304
7304
|
const taken = blockers.some((blocker) => blocker.kind === "name-taken");
|
|
7305
7305
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7306
|
-
className:
|
|
7306
|
+
className: _dsh_plugin_shop_css_26093961_default.incompatibleBadge,
|
|
7307
7307
|
"data-shop-blocker": taken ? "name-taken" : "missing-peers",
|
|
7308
7308
|
role: "img",
|
|
7309
7309
|
"aria-label": detail,
|
|
@@ -7320,30 +7320,30 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7320
7320
|
const [gateOpen, setGateOpen] = (0, react.useState)(false);
|
|
7321
7321
|
const { view, start } = flow;
|
|
7322
7322
|
if (view.kind === "running") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7323
|
-
className:
|
|
7323
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
7324
7324
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7325
|
-
className:
|
|
7325
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
7326
7326
|
children: t("installing")
|
|
7327
7327
|
}), view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7328
|
-
className:
|
|
7328
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
7329
7329
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7330
|
-
className:
|
|
7330
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
7331
7331
|
children: line
|
|
7332
7332
|
}, index))
|
|
7333
7333
|
})]
|
|
7334
7334
|
});
|
|
7335
7335
|
if (view.kind === "done") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7336
|
-
className:
|
|
7336
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
7337
7337
|
children: [
|
|
7338
7338
|
view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7339
|
-
className:
|
|
7339
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
7340
7340
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7341
|
-
className:
|
|
7341
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
7342
7342
|
children: line
|
|
7343
7343
|
}, index))
|
|
7344
7344
|
}),
|
|
7345
7345
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7346
|
-
className:
|
|
7346
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7347
7347
|
"data-shop-restart-notice": true,
|
|
7348
7348
|
children: view.needsRestart ? t(restartReasonKey(view.restartReason)) : t("installedNoRestartNotice")
|
|
7349
7349
|
}),
|
|
@@ -7352,63 +7352,63 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7352
7352
|
restart
|
|
7353
7353
|
}),
|
|
7354
7354
|
view.needsRestart && !restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7355
|
-
className:
|
|
7355
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7356
7356
|
"data-shop-restart-disabled": true,
|
|
7357
7357
|
children: t("restartDisabledNotice")
|
|
7358
7358
|
})
|
|
7359
7359
|
]
|
|
7360
7360
|
});
|
|
7361
7361
|
if (view.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7362
|
-
className:
|
|
7362
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
7363
7363
|
children: [
|
|
7364
7364
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7365
|
-
className:
|
|
7365
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
7366
7366
|
children: t("installFailed")
|
|
7367
7367
|
}),
|
|
7368
7368
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7369
|
-
className:
|
|
7369
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
7370
7370
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7371
|
-
className:
|
|
7371
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
7372
7372
|
children: line
|
|
7373
7373
|
}, index))
|
|
7374
7374
|
}),
|
|
7375
7375
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7376
|
-
className:
|
|
7376
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
7377
7377
|
children: view.detail === "" ? t("installTransportFailed") : view.detail
|
|
7378
7378
|
})
|
|
7379
7379
|
]
|
|
7380
7380
|
});
|
|
7381
7381
|
if (view.kind === "rejected") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7382
|
-
className:
|
|
7382
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
7383
7383
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7384
|
-
className:
|
|
7384
|
+
className: _dsh_plugin_shop_css_26093961_default.rejectedCode,
|
|
7385
7385
|
children: t(rejectionCodeKey(view.code))
|
|
7386
7386
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7387
|
-
className:
|
|
7387
|
+
className: _dsh_plugin_shop_css_26093961_default.rejectedDetail,
|
|
7388
7388
|
children: view.detail
|
|
7389
7389
|
})]
|
|
7390
7390
|
});
|
|
7391
7391
|
if (gateOpen) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7392
|
-
className:
|
|
7392
|
+
className: _dsh_plugin_shop_css_26093961_default.gate,
|
|
7393
7393
|
children: [
|
|
7394
7394
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7395
|
-
className:
|
|
7395
|
+
className: _dsh_plugin_shop_css_26093961_default.gateTitle,
|
|
7396
7396
|
children: t("acknowledgementTitle")
|
|
7397
7397
|
}),
|
|
7398
7398
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7399
|
-
className:
|
|
7399
|
+
className: _dsh_plugin_shop_css_26093961_default.gateBody,
|
|
7400
7400
|
children: t("acknowledgementBody")
|
|
7401
7401
|
}),
|
|
7402
7402
|
!missingStated && blockersOf(missing, void 0, t).map((blocker) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7403
|
-
className:
|
|
7403
|
+
className: _dsh_plugin_shop_css_26093961_default.gateWarning,
|
|
7404
7404
|
"data-shop-incompatible-warning": true,
|
|
7405
7405
|
children: blocker.text
|
|
7406
7406
|
}, blocker.kind)),
|
|
7407
7407
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7408
|
-
className:
|
|
7408
|
+
className: _dsh_plugin_shop_css_26093961_default.gateActions,
|
|
7409
7409
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7410
7410
|
type: "button",
|
|
7411
|
-
className:
|
|
7411
|
+
className: _dsh_plugin_shop_css_26093961_default.confirmButton,
|
|
7412
7412
|
"data-shop-confirm": true,
|
|
7413
7413
|
onClick: () => {
|
|
7414
7414
|
setGateOpen(false);
|
|
@@ -7420,7 +7420,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7420
7420
|
children: t("confirm")
|
|
7421
7421
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7422
7422
|
type: "button",
|
|
7423
|
-
className:
|
|
7423
|
+
className: _dsh_plugin_shop_css_26093961_default.cancelButton,
|
|
7424
7424
|
onClick: () => setGateOpen(false),
|
|
7425
7425
|
children: t("cancel")
|
|
7426
7426
|
})]
|
|
@@ -7431,7 +7431,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7431
7431
|
const refused = blockers.some((blocker) => blocker.kind === "name-taken");
|
|
7432
7432
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7433
7433
|
type: "button",
|
|
7434
|
-
className:
|
|
7434
|
+
className: _dsh_plugin_shop_css_26093961_default.installButton,
|
|
7435
7435
|
disabled: refused,
|
|
7436
7436
|
...refused ? { "data-shop-refused": true } : {},
|
|
7437
7437
|
...update ? { "data-shop-update": true } : { "data-shop-install": true },
|
|
@@ -7462,23 +7462,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7462
7462
|
if (view.kind === "done") settled.current();
|
|
7463
7463
|
}, [view.kind]);
|
|
7464
7464
|
if (view.kind === "running") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7465
|
-
className:
|
|
7465
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
7466
7466
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7467
|
-
className:
|
|
7467
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
7468
7468
|
children: t("uninstalling")
|
|
7469
7469
|
}), view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7470
|
-
className:
|
|
7470
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
7471
7471
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7472
|
-
className:
|
|
7472
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
7473
7473
|
children: line
|
|
7474
7474
|
}, index))
|
|
7475
7475
|
})]
|
|
7476
7476
|
});
|
|
7477
7477
|
if (view.kind === "done") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7478
|
-
className:
|
|
7478
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
7479
7479
|
children: [
|
|
7480
7480
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7481
|
-
className:
|
|
7481
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7482
7482
|
"data-shop-uninstall-done": true,
|
|
7483
7483
|
children: view.needsRestart ? t("uninstalledRestartNotice") : t("uninstalledLiveNotice")
|
|
7484
7484
|
}),
|
|
@@ -7487,28 +7487,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7487
7487
|
restart
|
|
7488
7488
|
}),
|
|
7489
7489
|
view.needsRestart && !restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7490
|
-
className:
|
|
7490
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7491
7491
|
"data-shop-restart-disabled": true,
|
|
7492
7492
|
children: t("restartDisabledNotice")
|
|
7493
7493
|
})
|
|
7494
7494
|
]
|
|
7495
7495
|
});
|
|
7496
7496
|
if (view.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7497
|
-
className:
|
|
7497
|
+
className: _dsh_plugin_shop_css_26093961_default.installPanel,
|
|
7498
7498
|
children: [
|
|
7499
7499
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7500
|
-
className:
|
|
7500
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
7501
7501
|
children: t("uninstallFailed")
|
|
7502
7502
|
}),
|
|
7503
7503
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7504
|
-
className:
|
|
7504
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
7505
7505
|
children: view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7506
|
-
className:
|
|
7506
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
7507
7507
|
children: line
|
|
7508
7508
|
}, index))
|
|
7509
7509
|
}),
|
|
7510
7510
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7511
|
-
className:
|
|
7511
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
7512
7512
|
children: view.detail === "" ? t("uninstallTransportFailed") : view.detail
|
|
7513
7513
|
})
|
|
7514
7514
|
]
|
|
@@ -7516,7 +7516,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7516
7516
|
if (view.kind !== "idle") return null;
|
|
7517
7517
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7518
7518
|
type: "button",
|
|
7519
|
-
className:
|
|
7519
|
+
className: _dsh_plugin_shop_css_26093961_default.uninstallButton,
|
|
7520
7520
|
"data-shop-uninstall": true,
|
|
7521
7521
|
onClick: () => void start({ name }),
|
|
7522
7522
|
children: t("uninstall")
|
|
@@ -7578,37 +7578,37 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7578
7578
|
return () => clearInterval(timer);
|
|
7579
7579
|
}, [state, t]);
|
|
7580
7580
|
if (state.kind === "restarting") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7581
|
-
className:
|
|
7581
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7582
7582
|
"data-shop-restarting": true,
|
|
7583
7583
|
children: t("restarting")
|
|
7584
7584
|
});
|
|
7585
7585
|
if (state.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7586
|
-
className:
|
|
7586
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
7587
7587
|
"data-shop-restart-error": true,
|
|
7588
7588
|
children: state.detail
|
|
7589
7589
|
});
|
|
7590
7590
|
if (gateOpen) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7591
|
-
className:
|
|
7591
|
+
className: _dsh_plugin_shop_css_26093961_default.gate,
|
|
7592
7592
|
children: [
|
|
7593
7593
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7594
|
-
className:
|
|
7594
|
+
className: _dsh_plugin_shop_css_26093961_default.gateTitle,
|
|
7595
7595
|
children: t("restartTitle")
|
|
7596
7596
|
}),
|
|
7597
7597
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7598
|
-
className:
|
|
7598
|
+
className: _dsh_plugin_shop_css_26093961_default.gateBody,
|
|
7599
7599
|
children: t("restartBody")
|
|
7600
7600
|
}),
|
|
7601
7601
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7602
|
-
className:
|
|
7602
|
+
className: _dsh_plugin_shop_css_26093961_default.gateActions,
|
|
7603
7603
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7604
7604
|
type: "button",
|
|
7605
|
-
className:
|
|
7605
|
+
className: _dsh_plugin_shop_css_26093961_default.confirmButton,
|
|
7606
7606
|
"data-shop-restart-confirm": true,
|
|
7607
7607
|
onClick: () => void onConfirm(),
|
|
7608
7608
|
children: t("restartConfirm")
|
|
7609
7609
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7610
7610
|
type: "button",
|
|
7611
|
-
className:
|
|
7611
|
+
className: _dsh_plugin_shop_css_26093961_default.cancelButton,
|
|
7612
7612
|
onClick: () => setGateOpen(false),
|
|
7613
7613
|
children: t("cancel")
|
|
7614
7614
|
})]
|
|
@@ -7618,7 +7618,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7618
7618
|
if (gate !== void 0) return null;
|
|
7619
7619
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7620
7620
|
type: "button",
|
|
7621
|
-
className:
|
|
7621
|
+
className: _dsh_plugin_shop_css_26093961_default.restartButton,
|
|
7622
7622
|
"data-shop-restart": true,
|
|
7623
7623
|
onClick: () => setGateOpen(true),
|
|
7624
7624
|
children: t("restart")
|
|
@@ -7658,7 +7658,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7658
7658
|
}
|
|
7659
7659
|
};
|
|
7660
7660
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7661
|
-
className:
|
|
7661
|
+
className: _dsh_plugin_shop_css_26093961_default.switchWrap,
|
|
7662
7662
|
"data-shop-enabled-switch": row.name,
|
|
7663
7663
|
children: [
|
|
7664
7664
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -7667,18 +7667,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7667
7667
|
"aria-checked": enabled,
|
|
7668
7668
|
"aria-label": t("enabledSwitch"),
|
|
7669
7669
|
"data-shop-toggle": true,
|
|
7670
|
-
className: `${
|
|
7670
|
+
className: `${_dsh_plugin_shop_css_26093961_default.switch} ${enabled ? _dsh_plugin_shop_css_26093961_default.switchOn : ""}`,
|
|
7671
7671
|
onClick: () => void onToggle(),
|
|
7672
7672
|
disabled: toggle.kind === "saving",
|
|
7673
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
7673
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.switchKnob })
|
|
7674
7674
|
}),
|
|
7675
7675
|
toggle.kind === "saved" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7676
|
-
className:
|
|
7676
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
7677
7677
|
"data-shop-hot-apply": true,
|
|
7678
7678
|
children: t("hotApplyNote")
|
|
7679
7679
|
}),
|
|
7680
7680
|
toggle.kind === "error" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7681
|
-
className:
|
|
7681
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
7682
7682
|
"data-shop-toggle-error": true,
|
|
7683
7683
|
children: toggle.detail
|
|
7684
7684
|
})
|
|
@@ -7690,19 +7690,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7690
7690
|
* install flow for `name@latest`, reusing `InstallPanel`). */
|
|
7691
7691
|
function OutdatedRow({ row, tier, missing, t, setEnabled, flowFor, restart, restartSupported }) {
|
|
7692
7692
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7693
|
-
className:
|
|
7693
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedRow,
|
|
7694
7694
|
"data-shop-outdated-entry": row.name,
|
|
7695
7695
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7696
|
-
className:
|
|
7696
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedInfo,
|
|
7697
7697
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7698
|
-
className:
|
|
7698
|
+
className: _dsh_plugin_shop_css_26093961_default.name,
|
|
7699
7699
|
children: row.name
|
|
7700
7700
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
7701
|
-
className:
|
|
7701
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedVersions,
|
|
7702
7702
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("installedVersion", { version: row.source === "github" ? row.installed.slice(0, 7) : row.installed }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("latestVersion", { version: row.latest }) })]
|
|
7703
7703
|
})]
|
|
7704
7704
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7705
|
-
className:
|
|
7705
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedActions,
|
|
7706
7706
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(EnabledSwitch, {
|
|
7707
7707
|
row,
|
|
7708
7708
|
t,
|
|
@@ -7737,20 +7737,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7737
7737
|
function OutdatedSection({ state, entriesByKey, missingByKey, t, setEnabled, flowFor, restart, restartSupported }) {
|
|
7738
7738
|
if (state.kind === "loading") return null;
|
|
7739
7739
|
if (state.kind === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7740
|
-
className:
|
|
7740
|
+
className: _dsh_plugin_shop_css_26093961_default.stateLine,
|
|
7741
7741
|
"data-shop-outdated-error": true,
|
|
7742
7742
|
children: t("error")
|
|
7743
7743
|
});
|
|
7744
7744
|
const outdated = state.entries.filter((entry) => entry.outdated);
|
|
7745
7745
|
if (outdated.length === 0) return null;
|
|
7746
7746
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
7747
|
-
className:
|
|
7747
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedSection,
|
|
7748
7748
|
"data-shop-outdated": true,
|
|
7749
7749
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
7750
|
-
className:
|
|
7750
|
+
className: _dsh_plugin_shop_css_26093961_default.catalogHeading,
|
|
7751
7751
|
children: t("installedSection")
|
|
7752
7752
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
7753
|
-
className:
|
|
7753
|
+
className: _dsh_plugin_shop_css_26093961_default.outdatedList,
|
|
7754
7754
|
children: outdated.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OutdatedRow, {
|
|
7755
7755
|
row,
|
|
7756
7756
|
tier: entriesByKey.get(identityKey(row))?.tier ?? "community",
|
|
@@ -7953,50 +7953,50 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7953
7953
|
return map;
|
|
7954
7954
|
}, [catalogState, specs]);
|
|
7955
7955
|
if (catalogState.kind === "loading") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7956
|
-
className:
|
|
7956
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
7957
7957
|
"data-shop-tab": true,
|
|
7958
7958
|
"aria-busy": "true",
|
|
7959
7959
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7960
|
-
className:
|
|
7960
|
+
className: _dsh_plugin_shop_css_26093961_default.srOnly,
|
|
7961
7961
|
children: t("loading")
|
|
7962
7962
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7963
|
-
className:
|
|
7963
|
+
className: _dsh_plugin_shop_css_26093961_default.skeletonGrid,
|
|
7964
7964
|
"data-shop-skeleton": true,
|
|
7965
7965
|
"aria-hidden": "true",
|
|
7966
7966
|
children: Array.from({ length: 8 }, (_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7967
|
-
className:
|
|
7967
|
+
className: _dsh_plugin_shop_css_26093961_default.skeletonCard,
|
|
7968
7968
|
children: [
|
|
7969
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
7970
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
7971
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
7972
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className:
|
|
7969
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonName }),
|
|
7970
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonSummary }),
|
|
7971
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonSummaryShort }),
|
|
7972
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: _dsh_plugin_shop_css_26093961_default.skeletonActions })
|
|
7973
7973
|
]
|
|
7974
7974
|
}, i))
|
|
7975
7975
|
})]
|
|
7976
7976
|
});
|
|
7977
7977
|
if (catalogState.kind === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7978
|
-
className:
|
|
7978
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
7979
7979
|
"data-shop-tab": true,
|
|
7980
7980
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7981
|
-
className:
|
|
7981
|
+
className: _dsh_plugin_shop_css_26093961_default.stateLine,
|
|
7982
7982
|
children: t("error")
|
|
7983
7983
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
7984
7984
|
type: "button",
|
|
7985
|
-
className:
|
|
7985
|
+
className: _dsh_plugin_shop_css_26093961_default.actionButton,
|
|
7986
7986
|
onClick: () => setRequest({ kind: "retry" }),
|
|
7987
7987
|
children: t("retry")
|
|
7988
7988
|
})]
|
|
7989
7989
|
});
|
|
7990
7990
|
const { result } = catalogState;
|
|
7991
7991
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7992
|
-
className:
|
|
7992
|
+
className: _dsh_plugin_shop_css_26093961_default.panel,
|
|
7993
7993
|
"data-shop-tab": true,
|
|
7994
7994
|
children: [
|
|
7995
7995
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7996
|
-
className:
|
|
7996
|
+
className: _dsh_plugin_shop_css_26093961_default.toolbar,
|
|
7997
7997
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
7998
7998
|
type: "search",
|
|
7999
|
-
className:
|
|
7999
|
+
className: _dsh_plugin_shop_css_26093961_default.searchInput,
|
|
8000
8000
|
"aria-label": t("search"),
|
|
8001
8001
|
placeholder: t("search"),
|
|
8002
8002
|
value: query,
|
|
@@ -8005,27 +8005,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8005
8005
|
setVisibleCount(48);
|
|
8006
8006
|
}
|
|
8007
8007
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8008
|
-
className:
|
|
8008
|
+
className: _dsh_plugin_shop_css_26093961_default.toolbarRight,
|
|
8009
8009
|
children: [
|
|
8010
8010
|
result.stale && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8011
|
-
className:
|
|
8011
|
+
className: _dsh_plugin_shop_css_26093961_default.staleBadge,
|
|
8012
8012
|
children: t("staleLabel", { date: result.builtAt.slice(0, 10) })
|
|
8013
8013
|
}),
|
|
8014
8014
|
selfVersion !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8015
|
-
className:
|
|
8015
|
+
className: _dsh_plugin_shop_css_26093961_default.versionBlock,
|
|
8016
8016
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
8017
|
-
className:
|
|
8017
|
+
className: _dsh_plugin_shop_css_26093961_default.versionText,
|
|
8018
8018
|
"data-shop-version": true,
|
|
8019
8019
|
children: ["v", selfVersion.installed]
|
|
8020
8020
|
}), selfUpdate.view.kind === "done" && restartSupported ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8021
8021
|
type: "button",
|
|
8022
|
-
className:
|
|
8022
|
+
className: _dsh_plugin_shop_css_26093961_default.restartSelfButton,
|
|
8023
8023
|
"data-shop-restart": true,
|
|
8024
8024
|
onClick: () => setSelfRestartGate(true),
|
|
8025
8025
|
children: t("restart")
|
|
8026
8026
|
}) : selfVersion.outdated && selfVersion.latest !== null && selfUpdate.view.kind === "idle" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8027
8027
|
type: "button",
|
|
8028
|
-
className:
|
|
8028
|
+
className: _dsh_plugin_shop_css_26093961_default.updateSelfButton,
|
|
8029
8029
|
"data-shop-update-self": true,
|
|
8030
8030
|
onClick: () => {
|
|
8031
8031
|
if (selfVersion.latest !== null) selfUpdate.start({ version: selfVersion.latest });
|
|
@@ -8033,7 +8033,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8033
8033
|
children: t("update")
|
|
8034
8034
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8035
8035
|
type: "button",
|
|
8036
|
-
className:
|
|
8036
|
+
className: _dsh_plugin_shop_css_26093961_default.checkUpdateButton,
|
|
8037
8037
|
"data-shop-check-update": true,
|
|
8038
8038
|
title: t("checkUpdateTitle"),
|
|
8039
8039
|
disabled: checkState !== "idle",
|
|
@@ -8042,7 +8042,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8042
8042
|
})]
|
|
8043
8043
|
}),
|
|
8044
8044
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
8045
|
-
className:
|
|
8045
|
+
className: _dsh_plugin_shop_css_26093961_default.githubLink,
|
|
8046
8046
|
href: SHOP_REPO_URL,
|
|
8047
8047
|
target: "_blank",
|
|
8048
8048
|
rel: "noopener noreferrer",
|
|
@@ -8061,27 +8061,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8061
8061
|
})]
|
|
8062
8062
|
}),
|
|
8063
8063
|
selfUpdate.view.kind === "running" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8064
|
-
className:
|
|
8064
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
8065
8065
|
"data-shop-self-updating": true,
|
|
8066
8066
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8067
|
-
className:
|
|
8067
|
+
className: _dsh_plugin_shop_css_26093961_default.installing,
|
|
8068
8068
|
children: t("installing")
|
|
8069
8069
|
}), selfUpdate.view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8070
|
-
className:
|
|
8070
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
8071
8071
|
children: selfUpdate.view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8072
|
-
className:
|
|
8072
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
8073
8073
|
children: line
|
|
8074
8074
|
}, index))
|
|
8075
8075
|
})]
|
|
8076
8076
|
}),
|
|
8077
8077
|
selfUpdate.view.kind === "done" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8078
|
-
className:
|
|
8078
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
8079
8079
|
"data-shop-self-update-done": true,
|
|
8080
8080
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8081
|
-
className:
|
|
8081
|
+
className: _dsh_plugin_shop_css_26093961_default.installedActions,
|
|
8082
8082
|
children: [
|
|
8083
8083
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8084
|
-
className:
|
|
8084
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
8085
8085
|
children: t("installedRestartNotice")
|
|
8086
8086
|
}),
|
|
8087
8087
|
restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RestartPanel, {
|
|
@@ -8093,7 +8093,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8093
8093
|
}
|
|
8094
8094
|
}),
|
|
8095
8095
|
!restartSupported && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8096
|
-
className:
|
|
8096
|
+
className: _dsh_plugin_shop_css_26093961_default.notice,
|
|
8097
8097
|
"data-shop-restart-disabled": true,
|
|
8098
8098
|
children: t("restartDisabledNotice")
|
|
8099
8099
|
})
|
|
@@ -8101,34 +8101,34 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8101
8101
|
})
|
|
8102
8102
|
}),
|
|
8103
8103
|
selfUpdate.view.kind === "failed" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8104
|
-
className:
|
|
8104
|
+
className: _dsh_plugin_shop_css_26093961_default.selfUpdatePanel,
|
|
8105
8105
|
"data-shop-self-update-failed": true,
|
|
8106
8106
|
children: [
|
|
8107
8107
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8108
|
-
className:
|
|
8108
|
+
className: _dsh_plugin_shop_css_26093961_default.failedHeading,
|
|
8109
8109
|
children: t("updateFailed")
|
|
8110
8110
|
}),
|
|
8111
8111
|
selfUpdate.view.log.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8112
|
-
className:
|
|
8112
|
+
className: _dsh_plugin_shop_css_26093961_default.log,
|
|
8113
8113
|
children: selfUpdate.view.log.map((line, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8114
|
-
className:
|
|
8114
|
+
className: _dsh_plugin_shop_css_26093961_default.logLine,
|
|
8115
8115
|
children: line
|
|
8116
8116
|
}, index))
|
|
8117
8117
|
}),
|
|
8118
8118
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8119
|
-
className:
|
|
8119
|
+
className: _dsh_plugin_shop_css_26093961_default.failedDetail,
|
|
8120
8120
|
children: selfUpdate.view.detail === "" ? t("updateTransportFailed") : selfUpdate.view.detail
|
|
8121
8121
|
})
|
|
8122
8122
|
]
|
|
8123
8123
|
}),
|
|
8124
8124
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8125
|
-
className:
|
|
8125
|
+
className: _dsh_plugin_shop_css_26093961_default.categoryBar,
|
|
8126
8126
|
role: "group",
|
|
8127
8127
|
"aria-label": t("catalog"),
|
|
8128
8128
|
children: [
|
|
8129
8129
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8130
8130
|
type: "button",
|
|
8131
|
-
className: category === null ? `${
|
|
8131
|
+
className: category === null ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
8132
8132
|
"aria-pressed": category === null,
|
|
8133
8133
|
onClick: () => {
|
|
8134
8134
|
setCategory(null);
|
|
@@ -8143,7 +8143,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8143
8143
|
}),
|
|
8144
8144
|
CATEGORY_ORDER.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8145
8145
|
type: "button",
|
|
8146
|
-
className: category === key ? `${
|
|
8146
|
+
className: category === key ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
8147
8147
|
"aria-pressed": category === key,
|
|
8148
8148
|
onClick: () => {
|
|
8149
8149
|
setCategory(key);
|
|
@@ -8157,7 +8157,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8157
8157
|
}, key)),
|
|
8158
8158
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8159
8159
|
type: "button",
|
|
8160
|
-
className: category === "installed" ? `${
|
|
8160
|
+
className: category === "installed" ? `${_dsh_plugin_shop_css_26093961_default.categoryButton} ${_dsh_plugin_shop_css_26093961_default.categoryButtonOn}` : _dsh_plugin_shop_css_26093961_default.categoryButton,
|
|
8161
8161
|
"aria-pressed": category === "installed",
|
|
8162
8162
|
onClick: () => {
|
|
8163
8163
|
setCategory("installed");
|
|
@@ -8172,10 +8172,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8172
8172
|
]
|
|
8173
8173
|
}),
|
|
8174
8174
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8175
|
-
className:
|
|
8175
|
+
className: _dsh_plugin_shop_css_26093961_default.catalogStatsRow,
|
|
8176
8176
|
children: [
|
|
8177
8177
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8178
|
-
className:
|
|
8178
|
+
className: _dsh_plugin_shop_css_26093961_default.catalogStats,
|
|
8179
8179
|
"data-shop-catalog-stats": true,
|
|
8180
8180
|
children: t("catalogStats", {
|
|
8181
8181
|
count: String(browsable.length),
|
|
@@ -8184,7 +8184,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8184
8184
|
}),
|
|
8185
8185
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8186
8186
|
type: "button",
|
|
8187
|
-
className:
|
|
8187
|
+
className: _dsh_plugin_shop_css_26093961_default.reloadButton,
|
|
8188
8188
|
"data-shop-reload": true,
|
|
8189
8189
|
disabled: reloading,
|
|
8190
8190
|
onClick: () => {
|
|
@@ -8195,20 +8195,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8195
8195
|
children: reloading ? t("refreshing") : t("refresh")
|
|
8196
8196
|
}),
|
|
8197
8197
|
reloadFailed && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8198
|
-
className:
|
|
8198
|
+
className: _dsh_plugin_shop_css_26093961_default.reloadFailed,
|
|
8199
8199
|
"data-shop-reload-failed": true,
|
|
8200
8200
|
children: t("refreshFailed")
|
|
8201
8201
|
})
|
|
8202
8202
|
]
|
|
8203
8203
|
}),
|
|
8204
8204
|
result.plugins.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8205
|
-
className:
|
|
8205
|
+
className: _dsh_plugin_shop_css_26093961_default.emptyLine,
|
|
8206
8206
|
children: t("empty")
|
|
8207
8207
|
}) : filtered.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8208
|
-
className:
|
|
8208
|
+
className: _dsh_plugin_shop_css_26093961_default.emptyLine,
|
|
8209
8209
|
children: t("emptySearch")
|
|
8210
8210
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
|
|
8211
|
-
className:
|
|
8211
|
+
className: _dsh_plugin_shop_css_26093961_default.cards,
|
|
8212
8212
|
children: [visible.map((entry) => {
|
|
8213
8213
|
const key = entryKey(entry);
|
|
8214
8214
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EntryCard, {
|
|
@@ -8228,12 +8228,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8228
8228
|
}) }, key);
|
|
8229
8229
|
}), incremental && visibleCount < filtered.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
8230
8230
|
ref: sentinelRef,
|
|
8231
|
-
className:
|
|
8231
|
+
className: _dsh_plugin_shop_css_26093961_default.cardsSentry,
|
|
8232
8232
|
"data-shop-sentry": true,
|
|
8233
8233
|
"aria-hidden": "true"
|
|
8234
8234
|
})]
|
|
8235
8235
|
}), incremental && visibleCount < filtered.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8236
|
-
className:
|
|
8236
|
+
className: _dsh_plugin_shop_css_26093961_default.showingLine,
|
|
8237
8237
|
"aria-live": "polite",
|
|
8238
8238
|
children: t("showing", {
|
|
8239
8239
|
shown: String(visibleCount),
|
package/package.json
CHANGED