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