rizzo-css 0.0.49 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/rizzo-css.js +4 -4
- package/dist/rizzo.min.css +1 -1
- package/dist/sfx/click.wav +0 -0
- package/package.json +1 -1
- package/scaffold/astro/CopyToClipboard.astro +20 -5
- package/scaffold/astro-core/.astro/content-assets.mjs +1 -0
- package/scaffold/astro-core/.astro/content-modules.mjs +1 -0
- package/scaffold/astro-core/.astro/content.d.ts +199 -0
- package/scaffold/astro-core/.astro/types.d.ts +2 -0
- package/scaffold/astro-core/dist/.gitkeep +0 -0
- package/scaffold/astro-core/dist/_noop-middleware.mjs +3 -0
- package/scaffold/astro-core/dist/chunks/astro/server_9Mzx7luy.mjs +6023 -0
- package/scaffold/astro-core/dist/chunks/astro_BOYUKg7r.mjs +1 -0
- package/scaffold/astro-core/dist/favicon.svg +18 -0
- package/scaffold/astro-core/dist/manifest_DXpJmqSX.mjs +154 -0
- package/scaffold/astro-core/dist/noop-entrypoint.mjs +3 -0
- package/scaffold/astro-core/dist/pages/index.astro.mjs +87 -0
- package/scaffold/astro-core/dist/renderers.mjs +3 -0
- package/scaffold/astro-core/node_modules/.astro/data-store.json +1 -0
- package/scaffold/astro-core/node_modules/.vite/deps/_metadata.json +31 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___aria-query.js +6776 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___aria-query.js.map +7 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___axobject-query.js +3754 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___axobject-query.js.map +7 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___cssesc.js +99 -0
- package/scaffold/astro-core/node_modules/.vite/deps/astro___cssesc.js.map +7 -0
- package/scaffold/astro-core/node_modules/.vite/deps/chunk-BUSYA2B4.js +8 -0
- package/scaffold/astro-core/node_modules/.vite/deps/chunk-BUSYA2B4.js.map +7 -0
- package/scaffold/astro-core/node_modules/.vite/deps/package.json +3 -0
- package/scaffold/astro-core/src/components/rizzo/CopyToClipboard.astro +157 -0
- package/scaffold/astro-core/src/components/rizzo/icons/Check.astro +29 -0
- package/scaffold/astro-core/src/components/rizzo/icons/Copy.astro +30 -0
- package/scaffold/astro-core/src/pages/index.astro +3 -15
- package/scaffold/shared/sound-effects-inline.js +3 -3
- package/scaffold/svelte/CopyToClipboard.svelte +12 -5
- package/scaffold/svelte/theme.ts +16 -2
- package/scaffold/svelte-core/src/routes/+page.svelte +2 -9
- package/scaffold/utils/theme.ts +16 -2
- package/scaffold/vanilla/README-RIZZO.md +2 -2
- package/scaffold/vanilla/components/accordion.html +22 -0
- package/scaffold/vanilla/components/alert.html +22 -0
- package/scaffold/vanilla/components/avatar.html +22 -0
- package/scaffold/vanilla/components/badge.html +22 -0
- package/scaffold/vanilla/components/breadcrumb.html +22 -0
- package/scaffold/vanilla/components/button.html +22 -0
- package/scaffold/vanilla/components/cards.html +22 -0
- package/scaffold/vanilla/components/copy-to-clipboard.html +22 -0
- package/scaffold/vanilla/components/divider.html +22 -0
- package/scaffold/vanilla/components/docs-sidebar.html +22 -0
- package/scaffold/vanilla/components/dropdown.html +22 -0
- package/scaffold/vanilla/components/font-switcher.html +22 -0
- package/scaffold/vanilla/components/footer.html +22 -0
- package/scaffold/vanilla/components/forms.html +22 -0
- package/scaffold/vanilla/components/icons.html +22 -0
- package/scaffold/vanilla/components/index.html +22 -0
- package/scaffold/vanilla/components/modal.html +22 -0
- package/scaffold/vanilla/components/navbar.html +22 -0
- package/scaffold/vanilla/components/pagination.html +22 -0
- package/scaffold/vanilla/components/progress-bar.html +22 -0
- package/scaffold/vanilla/components/search.html +22 -0
- package/scaffold/vanilla/components/settings.html +22 -0
- package/scaffold/vanilla/components/sound-effects.html +22 -0
- package/scaffold/vanilla/components/spinner.html +22 -0
- package/scaffold/vanilla/components/table.html +22 -0
- package/scaffold/vanilla/components/tabs.html +22 -0
- package/scaffold/vanilla/components/theme-switcher.html +22 -0
- package/scaffold/vanilla/components/toast.html +22 -0
- package/scaffold/vanilla/components/tooltip.html +22 -0
- package/scaffold/vanilla/index.html +30 -4
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ import 'rizzo-css';
|
|
|
63
63
|
**Without a bundler (plain HTML):** Use a CDN. Both unpkg and jsDelivr resolve the package root to the built CSS (via the `unpkg` / `jsdelivr` fields in this package). For reliability or to pin a version, use the explicit path:
|
|
64
64
|
|
|
65
65
|
```html
|
|
66
|
-
<!-- unpkg (pin version: replace @latest with @0.0.
|
|
66
|
+
<!-- unpkg (pin version: replace @latest with @0.0.51 or any version) -->
|
|
67
67
|
<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />
|
|
68
68
|
|
|
69
69
|
<!-- or jsDelivr -->
|
package/bin/rizzo-css.js
CHANGED
|
@@ -225,7 +225,7 @@ function copyRizzoFonts(cssTargetDir) {
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
/** Copy package dist/sfx (click.mp3
|
|
228
|
+
/** Copy package dist/sfx (click.mp3 or click.wav) into projectDir/assets/sfx so sound-effects-inline.js can play the click sound. Used for Vanilla init and add. */
|
|
229
229
|
function copyRizzoSfx(projectDir) {
|
|
230
230
|
const sfxSrc = join(getPackageRoot(), 'dist', 'sfx');
|
|
231
231
|
if (!existsSync(sfxSrc)) return;
|
|
@@ -233,7 +233,7 @@ function copyRizzoSfx(projectDir) {
|
|
|
233
233
|
mkdirSync(dest, { recursive: true });
|
|
234
234
|
const entries = readdirSync(sfxSrc, { withFileTypes: true });
|
|
235
235
|
for (const e of entries) {
|
|
236
|
-
if (!e.isDirectory() && /\.mp3$/i.test(e.name)) {
|
|
236
|
+
if (!e.isDirectory() && (/\.mp3$/i.test(e.name) || /\.wav$/i.test(e.name))) {
|
|
237
237
|
copyFileSync(join(sfxSrc, e.name), join(dest, e.name));
|
|
238
238
|
}
|
|
239
239
|
}
|
|
@@ -266,7 +266,7 @@ function copyRizzoCssAndFontsForAstro(projectDir, cssSource) {
|
|
|
266
266
|
if (existsSync(sfxSrc)) {
|
|
267
267
|
const entries = readdirSync(sfxSrc, { withFileTypes: true });
|
|
268
268
|
for (const e of entries) {
|
|
269
|
-
if (!e.isDirectory() && /\.mp3$/i.test(e.name)) {
|
|
269
|
+
if (!e.isDirectory() && (/\.mp3$/i.test(e.name) || /\.wav$/i.test(e.name))) {
|
|
270
270
|
copyFileSync(join(sfxSrc, e.name), join(sfxDest, e.name));
|
|
271
271
|
}
|
|
272
272
|
}
|
|
@@ -300,7 +300,7 @@ function copyRizzoCssAndFontsForSvelte(projectDir, cssSource) {
|
|
|
300
300
|
if (existsSync(sfxSrc)) {
|
|
301
301
|
const entries = readdirSync(sfxSrc, { withFileTypes: true });
|
|
302
302
|
for (const e of entries) {
|
|
303
|
-
if (!e.isDirectory() && /\.mp3$/i.test(e.name)) {
|
|
303
|
+
if (!e.isDirectory() && (/\.mp3$/i.test(e.name) || /\.wav$/i.test(e.name))) {
|
|
304
304
|
copyFileSync(join(sfxSrc, e.name), join(sfxDest, e.name));
|
|
305
305
|
}
|
|
306
306
|
}
|
package/dist/rizzo.min.css
CHANGED
|
@@ -114,7 +114,7 @@ div.navbar__link{background:none;border:none;cursor:pointer;font:inherit;text-al
|
|
|
114
114
|
.font-switcher__option--active:hover{background-color:var(--background);border-left:var(--border-width-accent) solid var(--accent);border-radius:var(--radius);color:var(--text);font-weight:var(--font-weight-medium);padding-left:calc(var(--spacing-4) - var(--border-width-accent))}.font-switcher__option--active:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}@media (width <= 768px){.font-switcher,.font-switcher__menu{max-width:100%;width:100%}.font-switcher__menu{box-sizing:border-box;left:0;min-width:0;right:auto}}.settings__control .font-switcher{max-width:100%;width:100%}.settings__control .font-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings{inset:0;pointer-events:none;position:fixed;z-index:var(--z-settings)}.settings[aria-hidden="true"]{display:none}.settings__overlay{backdrop-filter:blur(var(--blur-sm));background-color:var(--overlay);inset:0;opacity:0;pointer-events:all;position:absolute;transition:opacity var(--transition-ease-out)}.settings[aria-hidden="false"] .settings__overlay[aria-hidden="false"],.settings__overlay[aria-hidden="false"]{opacity:1}.settings__panel{background-color:var(--background-alt);border-left:var(--border-width) solid var(--border);box-shadow:calc(var(--spacing-1)*-1) 0 var(--spacing-3) calc(var(--spacing-0-125)*-1) oklch(from var(--shadow-color) l c h/15%);display:flex;flex-direction:column;height:100%;max-width:var(--spacing-105);overflow-y:auto;pointer-events:all;position:absolute;right:0;top:0;transform:translateX(100%);transition:transform var(--transition-ease-out);width:100%}.settings__panel[data-open="true"]{transform:translateX(0)}.settings[aria-hidden="false"] .settings__panel:not([data-open]){transform:translateX(100%)}@media (prefers-reduced-motion:reduce){.settings__overlay,.settings__panel{transition:none}}.settings__header{align-items:center;background-color:var(--background-alt);border-bottom:var(--border-width) solid var(--border);display:flex;justify-content:space-between;padding:var(--spacing-6);position:sticky;top:0;z-index:var(--z-dropdown)}.settings__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin:0}.settings__close{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;height:var(--spacing-8);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0;transition:background-color var(--transition-base),color var(--transition-base),border-color var(--transition-base);width:var(--spacing-8)}.settings__close:hover{background-color:var(--background-alt);border-color:var(--accent);color:var(--accent)}.settings__close:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__content{background-color:var(--background);display:flex;flex:1;flex-direction:column;gap:var(--spacing-8);padding:var(--spacing-6)}.settings__section{display:flex;flex-direction:column;gap:var(--spacing-4)}.settings__section-title{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4)}.settings__control{display:flex;flex-direction:column;gap:var(--spacing-3)}.settings__control .theme-switcher{max-width:100%;width:100%}.settings__control .theme-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings__label{align-items:center;color:var(--text);display:flex;font-weight:var(--font-weight-medium);justify-content:space-between;margin-bottom:var(--spacing-3)}.settings__label-text{font-size:var(--font-size-base)}.settings__label-value{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.settings__slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);cursor:pointer;height:var(--spacing-2);outline:none;width:100%}.settings__slider::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-moz-range-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);margin-top:calc(var(--spacing-2)*-1);-webkit-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-webkit-slider-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider::-moz-range-thumb{background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);-moz-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-moz-range-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__slider-labels{color:var(--text-dim);display:flex;font-size:var(--font-size-xs);justify-content:space-between;margin-top:var(--spacing-1)}.settings__checkbox-label{align-items:center;color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-3);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__checkbox-label:hover{color:var(--accent)}.settings__checkbox{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__radio-group{display:flex;flex-direction:column;gap:var(--spacing-2)}.settings__radio-label{align-items:center;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-normal);gap:var(--spacing-2);padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__radio-label:hover{background-color:var(--background-alt);color:var(--accent)}.settings__radio{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__help-text{color:var(--text-dim);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0}@media (width <= 640px){.settings__panel{max-width:100%;width:100%}}.modal__overlay{backdrop-filter:blur(var(--blur-sm));background-color:oklch(from var(--shadow-color) l c h/60%);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--transition-slow) ease;z-index:var(--z-modal-backdrop)}.modal__overlay[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;left:50%;max-height:var(--vh-90);max-width:var(--max-height-modal);opacity:0;pointer-events:none;position:fixed;top:50%;transform:translate(-50%,-50%);transition:opacity var(--transition-slow) ease,transform var(--transition-slow) ease;width:100%;z-index:var(--z-modal)}.modal[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal__header{align-items:center;border-bottom:var(--border-width) solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-6)}.modal__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.modal__close{align-items:center;background:none;border:none;border-radius:var(--radius);color:var(--text-dim);cursor:pointer;display:flex;flex-shrink:0;justify-content:center;padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base)}.modal__close:hover{background-color:var(--background-alt);color:var(--text)}.modal__close:focus{box-shadow:0 0 0 3px oklch(from var(--accent) l c h/10%);outline:none}.modal__body{flex:1;min-height:0;overflow-y:auto;padding:var(--spacing-6)}.modal__footer{border-top:var(--border-width) solid var(--border);display:flex;flex-shrink:0;gap:var(--spacing-3);justify-content:flex-end;padding:var(--spacing-6)}.modal__footer:empty{display:none}.modal--sm{max-width:var(--spacing-96)}.modal--md{max-width:var(--max-height-modal)}.modal--lg{max-width:var(--max-width-modal-lg)}
|
|
115
115
|
.reduced-motion .modal,.reduced-motion .modal__overlay{transition:none}@media (width <= 640px){.modal{bottom:auto;left:auto;margin:var(--spacing-4);max-height:95vh;max-width:95vw;right:auto;top:auto}.modal,.modal[aria-hidden="false"]{transform:none}
|
|
116
116
|
.modal__body,
|
|
117
|
-
.modal__footer,.modal__header{padding:var(--spacing-4)}}.copy-to-clipboard{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font-family:var(--font-family-mono);font-size:var(--font-size-sm);gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);position:relative;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.copy-to-clipboard:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent)}.copy-to-clipboard:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.copy-to-clipboard__text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-to-clipboard__icon{align-items:center;color:var(--icon);display:flex;flex-shrink:0;height:var(--spacing-4);justify-content:center;transition:opacity var(--transition-base),transform var(--transition-base);width:var(--spacing-4)}.copy-to-clipboard__icon--check{opacity:0;position:absolute;right:var(--spacing-3);transform:scale(var(--scale-80))}.copy-to-clipboard__icon--check:not(.copy-to-clipboard__icon--hidden){opacity:1;transform:scale(var(--scale-100))}.copy-to-clipboard__icon--copy.copy-to-clipboard__icon--hidden{opacity:0;transform:scale(var(--scale-80))}.copy-to-clipboard__feedback{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.alert{align-items:flex-start;background-color:var(--alert-bg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-3);padding:var(--spacing-4) var(--spacing-5);position:relative;transition:opacity var(--transition-base),transform var(--transition-base)}.alert:last-child{margin-bottom:0}.alert__content{flex:1;min-width:0}.alert__close{align-items:center;background:none;border:1px solid transparent;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;fill:none;flex-shrink:0;height:var(--spacing-6);justify-content:center;margin:calc(var(--spacing-1)*-1) calc(var(--spacing-2)*-1) calc(var(--spacing-1)*-1) 0;opacity:var(--opacity-80);padding:0;stroke:currentcolor;transition:opacity var(--transition-base),background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base);width:var(--spacing-6)}.alert__close:hover{background-color:oklch(from var(--background) l c h/25%);border-color:var(--border);color:var(--text);opacity:1}.alert__close:focus-visible{opacity:1;outline:var(--outline-width) solid currentcolor;outline-offset:var(--outline-offset)}.alert--success{background-color:var(--alert-success-bg);border-color:var(--success);color:var(--success-text)}.alert--error{background-color:var(--alert-error-bg);border-color:var(--error);color:var(--error-text)}.alert--warning{background-color:var(--alert-warning-bg);border-color:var(--warning)}.alert--warning,.alert--warning .alert__content,
|
|
117
|
+
.modal__footer,.modal__header{padding:var(--spacing-4)}}.copy-to-clipboard{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:inline-flex;font-family:var(--font-family-mono);font-size:var(--font-size-sm);gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);position:relative;transition:background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base)}.copy-to-clipboard:hover{background-color:var(--background);border-color:var(--accent);color:var(--accent)}.copy-to-clipboard:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.copy-to-clipboard__text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-to-clipboard__icon{align-items:center;color:var(--icon);display:flex;flex-shrink:0;height:var(--spacing-4);justify-content:center;transition:opacity var(--transition-base),transform var(--transition-base);width:var(--spacing-4)}.copy-to-clipboard__icon--check{opacity:0;position:absolute;right:var(--spacing-3);transform:scale(var(--scale-80))}.copy-to-clipboard__icon--check:not(.copy-to-clipboard__icon--hidden){opacity:1;transform:scale(var(--scale-100))}.copy-to-clipboard__icon--copy.copy-to-clipboard__icon--hidden{opacity:0;transform:scale(var(--scale-80))}.copy-to-clipboard__feedback{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only{padding:var(--spacing-2)}.copy-to-clipboard--icon-only .copy-to-clipboard__text{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.copy-to-clipboard--icon-only .copy-to-clipboard__icon--check{right:var(--spacing-2)}.alert{align-items:flex-start;background-color:var(--alert-bg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);color:var(--text);display:flex;gap:var(--spacing-3);margin-bottom:var(--spacing-3);padding:var(--spacing-4) var(--spacing-5);position:relative;transition:opacity var(--transition-base),transform var(--transition-base)}.alert:last-child{margin-bottom:0}.alert__content{flex:1;min-width:0}.alert__close{align-items:center;background:none;border:1px solid transparent;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;fill:none;flex-shrink:0;height:var(--spacing-6);justify-content:center;margin:calc(var(--spacing-1)*-1) calc(var(--spacing-2)*-1) calc(var(--spacing-1)*-1) 0;opacity:var(--opacity-80);padding:0;stroke:currentcolor;transition:opacity var(--transition-base),background-color var(--transition-base),border-color var(--transition-base),color var(--transition-base);width:var(--spacing-6)}.alert__close:hover{background-color:oklch(from var(--background) l c h/25%);border-color:var(--border);color:var(--text);opacity:1}.alert__close:focus-visible{opacity:1;outline:var(--outline-width) solid currentcolor;outline-offset:var(--outline-offset)}.alert--success{background-color:var(--alert-success-bg);border-color:var(--success);color:var(--success-text)}.alert--error{background-color:var(--alert-error-bg);border-color:var(--error);color:var(--error-text)}.alert--warning{background-color:var(--alert-warning-bg);border-color:var(--warning)}.alert--warning,.alert--warning .alert__content,
|
|
118
118
|
.alert--warning .alert__content strong{color:var(--warning-text)}.alert--warning .alert__close{color:var(--warning-text);opacity:.9}.alert--warning .alert__close:hover{color:var(--text)}.alert--info{background-color:var(--alert-info-bg);border-color:var(--info);color:var(--info-text)}.alert-examples-container{align-items:stretch;display:flex;flex-direction:column;justify-content:center;min-height:8rem}.toast{max-width:var(--spacing-96);pointer-events:none;position:fixed;width:100%;z-index:var(--z-toast)}.toast .alert{box-shadow:var(--shadow-lg);margin-bottom:var(--spacing-2);pointer-events:auto}
|
|
119
119
|
.toast--bottom-right .alert,.toast--top-right .alert{animation:toast-slide-in-right var(--transition-slow) ease-out}
|
|
120
120
|
.toast--bottom-left .alert,.toast--top-left .alert{animation:toast-slide-in-left var(--transition-slow) ease-out}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -6,6 +6,10 @@ interface Props {
|
|
|
6
6
|
value: string;
|
|
7
7
|
label?: string;
|
|
8
8
|
format?: string;
|
|
9
|
+
/** When true, only the copy/check icons are shown (e.g. in code blocks). */
|
|
10
|
+
iconOnly?: boolean;
|
|
11
|
+
/** For icon-only: accessible label for the hidden text (e.g. "Copy code"). */
|
|
12
|
+
buttonLabel?: string;
|
|
9
13
|
class?: string;
|
|
10
14
|
id?: string;
|
|
11
15
|
}
|
|
@@ -14,24 +18,31 @@ const {
|
|
|
14
18
|
value,
|
|
15
19
|
label,
|
|
16
20
|
format,
|
|
21
|
+
iconOnly = false,
|
|
22
|
+
buttonLabel,
|
|
17
23
|
class: className = '',
|
|
18
24
|
id,
|
|
19
25
|
} = Astro.props;
|
|
20
26
|
|
|
21
27
|
const buttonId = id || `copy-btn-${Math.random().toString(36).substr(2, 9)}`;
|
|
22
|
-
const defaultTooltip = label || 'Copy to clipboard';
|
|
28
|
+
const defaultTooltip = label || (iconOnly ? (buttonLabel || 'Copy') : 'Copy to clipboard');
|
|
29
|
+
const ariaLabel = label || (iconOnly ? (buttonLabel || 'Copy to clipboard') : `Copy ${value} to clipboard`);
|
|
30
|
+
const displayText = iconOnly ? (buttonLabel || 'Copy') : value;
|
|
31
|
+
const buttonClass = ['copy-to-clipboard', iconOnly ? 'copy-to-clipboard--icon-only' : '', className].filter(Boolean).join(' ').trim();
|
|
23
32
|
---
|
|
24
33
|
|
|
25
34
|
<span class="tooltip-host" data-tooltip={defaultTooltip}>
|
|
26
35
|
<button
|
|
27
36
|
type="button"
|
|
28
|
-
class={
|
|
37
|
+
class={buttonClass}
|
|
29
38
|
data-copy-value={value}
|
|
30
39
|
data-copy-format={format}
|
|
31
|
-
aria-label={
|
|
40
|
+
aria-label={ariaLabel}
|
|
32
41
|
id={buttonId}
|
|
42
|
+
data-copy-icon-only={iconOnly ? 'true' : undefined}
|
|
43
|
+
data-copy-button-label={iconOnly ? (buttonLabel || 'Copy') : undefined}
|
|
33
44
|
>
|
|
34
|
-
<span class="copy-to-clipboard__text">{
|
|
45
|
+
<span class="copy-to-clipboard__text">{displayText}</span>
|
|
35
46
|
<span class="copy-to-clipboard__icon copy-to-clipboard__icon--copy" aria-hidden="true">
|
|
36
47
|
<Copy width={16} height={16} />
|
|
37
48
|
</span>
|
|
@@ -67,8 +78,12 @@ const defaultTooltip = label || 'Copy to clipboard';
|
|
|
67
78
|
const checkIcon = button.querySelector('.copy-to-clipboard__icon--check');
|
|
68
79
|
const textSpan = button.querySelector('.copy-to-clipboard__text');
|
|
69
80
|
|
|
70
|
-
// Update text span with current value
|
|
81
|
+
// Update text span with current value (or fixed label when icon-only)
|
|
71
82
|
const updateDisplay = () => {
|
|
83
|
+
if (button.hasAttribute('data-copy-icon-only')) {
|
|
84
|
+
if (textSpan) textSpan.textContent = button.getAttribute('data-copy-button-label') || 'Copy';
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
72
87
|
const value = getValue();
|
|
73
88
|
if (textSpan) {
|
|
74
89
|
textSpan.textContent = value || '';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default new Map();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default new Map();
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
declare module 'astro:content' {
|
|
2
|
+
export interface RenderResult {
|
|
3
|
+
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
|
4
|
+
headings: import('astro').MarkdownHeading[];
|
|
5
|
+
remarkPluginFrontmatter: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
interface Render {
|
|
8
|
+
'.md': Promise<RenderResult>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface RenderedContent {
|
|
12
|
+
html: string;
|
|
13
|
+
metadata?: {
|
|
14
|
+
imagePaths: Array<string>;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare module 'astro:content' {
|
|
21
|
+
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
|
22
|
+
|
|
23
|
+
export type CollectionKey = keyof AnyEntryMap;
|
|
24
|
+
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
|
|
25
|
+
|
|
26
|
+
export type ContentCollectionKey = keyof ContentEntryMap;
|
|
27
|
+
export type DataCollectionKey = keyof DataEntryMap;
|
|
28
|
+
|
|
29
|
+
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
|
30
|
+
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
|
|
31
|
+
ContentEntryMap[C]
|
|
32
|
+
>['slug'];
|
|
33
|
+
|
|
34
|
+
export type ReferenceDataEntry<
|
|
35
|
+
C extends CollectionKey,
|
|
36
|
+
E extends keyof DataEntryMap[C] = string,
|
|
37
|
+
> = {
|
|
38
|
+
collection: C;
|
|
39
|
+
id: E;
|
|
40
|
+
};
|
|
41
|
+
export type ReferenceContentEntry<
|
|
42
|
+
C extends keyof ContentEntryMap,
|
|
43
|
+
E extends ValidContentEntrySlug<C> | (string & {}) = string,
|
|
44
|
+
> = {
|
|
45
|
+
collection: C;
|
|
46
|
+
slug: E;
|
|
47
|
+
};
|
|
48
|
+
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
|
49
|
+
collection: C;
|
|
50
|
+
id: string;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/** @deprecated Use `getEntry` instead. */
|
|
54
|
+
export function getEntryBySlug<
|
|
55
|
+
C extends keyof ContentEntryMap,
|
|
56
|
+
E extends ValidContentEntrySlug<C> | (string & {}),
|
|
57
|
+
>(
|
|
58
|
+
collection: C,
|
|
59
|
+
// Note that this has to accept a regular string too, for SSR
|
|
60
|
+
entrySlug: E,
|
|
61
|
+
): E extends ValidContentEntrySlug<C>
|
|
62
|
+
? Promise<CollectionEntry<C>>
|
|
63
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
64
|
+
|
|
65
|
+
/** @deprecated Use `getEntry` instead. */
|
|
66
|
+
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
|
|
67
|
+
collection: C,
|
|
68
|
+
entryId: E,
|
|
69
|
+
): Promise<CollectionEntry<C>>;
|
|
70
|
+
|
|
71
|
+
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
|
|
72
|
+
collection: C,
|
|
73
|
+
filter?: (entry: CollectionEntry<C>) => entry is E,
|
|
74
|
+
): Promise<E[]>;
|
|
75
|
+
export function getCollection<C extends keyof AnyEntryMap>(
|
|
76
|
+
collection: C,
|
|
77
|
+
filter?: (entry: CollectionEntry<C>) => unknown,
|
|
78
|
+
): Promise<CollectionEntry<C>[]>;
|
|
79
|
+
|
|
80
|
+
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
|
81
|
+
collection: C,
|
|
82
|
+
filter?: LiveLoaderCollectionFilterType<C>,
|
|
83
|
+
): Promise<
|
|
84
|
+
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
|
85
|
+
>;
|
|
86
|
+
|
|
87
|
+
export function getEntry<
|
|
88
|
+
C extends keyof ContentEntryMap,
|
|
89
|
+
E extends ValidContentEntrySlug<C> | (string & {}),
|
|
90
|
+
>(
|
|
91
|
+
entry: ReferenceContentEntry<C, E>,
|
|
92
|
+
): E extends ValidContentEntrySlug<C>
|
|
93
|
+
? Promise<CollectionEntry<C>>
|
|
94
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
95
|
+
export function getEntry<
|
|
96
|
+
C extends keyof DataEntryMap,
|
|
97
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
98
|
+
>(
|
|
99
|
+
entry: ReferenceDataEntry<C, E>,
|
|
100
|
+
): E extends keyof DataEntryMap[C]
|
|
101
|
+
? Promise<DataEntryMap[C][E]>
|
|
102
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
103
|
+
export function getEntry<
|
|
104
|
+
C extends keyof ContentEntryMap,
|
|
105
|
+
E extends ValidContentEntrySlug<C> | (string & {}),
|
|
106
|
+
>(
|
|
107
|
+
collection: C,
|
|
108
|
+
slug: E,
|
|
109
|
+
): E extends ValidContentEntrySlug<C>
|
|
110
|
+
? Promise<CollectionEntry<C>>
|
|
111
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
112
|
+
export function getEntry<
|
|
113
|
+
C extends keyof DataEntryMap,
|
|
114
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
115
|
+
>(
|
|
116
|
+
collection: C,
|
|
117
|
+
id: E,
|
|
118
|
+
): E extends keyof DataEntryMap[C]
|
|
119
|
+
? string extends keyof DataEntryMap[C]
|
|
120
|
+
? Promise<DataEntryMap[C][E]> | undefined
|
|
121
|
+
: Promise<DataEntryMap[C][E]>
|
|
122
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
123
|
+
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
|
124
|
+
collection: C,
|
|
125
|
+
filter: string | LiveLoaderEntryFilterType<C>,
|
|
126
|
+
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
|
127
|
+
|
|
128
|
+
/** Resolve an array of entry references from the same collection */
|
|
129
|
+
export function getEntries<C extends keyof ContentEntryMap>(
|
|
130
|
+
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
|
|
131
|
+
): Promise<CollectionEntry<C>[]>;
|
|
132
|
+
export function getEntries<C extends keyof DataEntryMap>(
|
|
133
|
+
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
|
134
|
+
): Promise<CollectionEntry<C>[]>;
|
|
135
|
+
|
|
136
|
+
export function render<C extends keyof AnyEntryMap>(
|
|
137
|
+
entry: AnyEntryMap[C][string],
|
|
138
|
+
): Promise<RenderResult>;
|
|
139
|
+
|
|
140
|
+
export function reference<C extends keyof AnyEntryMap>(
|
|
141
|
+
collection: C,
|
|
142
|
+
): import('astro/zod').ZodEffects<
|
|
143
|
+
import('astro/zod').ZodString,
|
|
144
|
+
C extends keyof ContentEntryMap
|
|
145
|
+
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
|
|
146
|
+
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
|
|
147
|
+
>;
|
|
148
|
+
// Allow generic `string` to avoid excessive type errors in the config
|
|
149
|
+
// if `dev` is not running to update as you edit.
|
|
150
|
+
// Invalid collection names will be caught at build time.
|
|
151
|
+
export function reference<C extends string>(
|
|
152
|
+
collection: C,
|
|
153
|
+
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
|
|
154
|
+
|
|
155
|
+
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
156
|
+
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
|
|
157
|
+
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
|
158
|
+
>;
|
|
159
|
+
|
|
160
|
+
type ContentEntryMap = {
|
|
161
|
+
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
type DataEntryMap = {
|
|
165
|
+
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
type AnyEntryMap = ContentEntryMap & DataEntryMap;
|
|
169
|
+
|
|
170
|
+
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
|
171
|
+
infer TData,
|
|
172
|
+
infer TEntryFilter,
|
|
173
|
+
infer TCollectionFilter,
|
|
174
|
+
infer TError
|
|
175
|
+
>
|
|
176
|
+
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
|
177
|
+
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
|
178
|
+
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
|
179
|
+
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
|
180
|
+
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
|
181
|
+
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
|
182
|
+
|
|
183
|
+
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
|
184
|
+
LiveContentConfig['collections'][C]['schema'] extends undefined
|
|
185
|
+
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
|
186
|
+
: import('astro/zod').infer<
|
|
187
|
+
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
|
188
|
+
>;
|
|
189
|
+
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
190
|
+
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
191
|
+
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
192
|
+
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
193
|
+
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
|
194
|
+
LiveContentConfig['collections'][C]['loader']
|
|
195
|
+
>;
|
|
196
|
+
|
|
197
|
+
export type ContentConfig = typeof import("../src/content.config.mjs");
|
|
198
|
+
export type LiveContentConfig = never;
|
|
199
|
+
}
|
|
File without changes
|