@meddleware/ui 0.1.15 → 0.1.17

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/dist/base.css CHANGED
@@ -1,2 +1,2 @@
1
- *,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--mw-font-sans);font-size:var(--font-size-base);line-height:var(--leading-normal);letter-spacing:var(--tracking-normal);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}:where(ul,ol):where([role=list],[role=listitem]){margin:0;padding:0;list-style:none}:where(img,svg,video,canvas){max-width:100%;display:block}:where(fieldset){border:0;margin:0;padding:0}a{color:var(--accent);transition:color var(--transition-base);text-decoration:none}a:hover{text-decoration:underline}:where(button,input,select,textarea){font-family:inherit}:where(a,button,input,select,textarea):focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-mono{font-family:var(--mw-font-mono)}.mw-noise{isolation:isolate;position:relative}.mw-noise:before{content:"";z-index:-1;background-image:var(--noise-overlay);opacity:var(--noise-opacity);pointer-events:none;background-repeat:repeat;position:absolute;inset:0}.mw-hand-drawn{display:inline-flex;position:relative}.mw-spinner{width:var(--space-sm);height:var(--space-sm);border:2px solid var(--border);border-top-color:var(--accent);animation:mw-spin var(--transition-slow) linear infinite;border-radius:50%;display:inline-block}@keyframes mw-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}.mw-spinner{border-top-color:var(--accent);animation:none}}.mw-header[data-v-9b9826d5]{align-items:center;gap:var(--space-sm);height:var(--mw-header-height,56px);padding:0 var(--space-sm);background:var(--_bg);color:var(--_text);border-bottom:1px solid var(--_border);font-family:var(--mw-font-sans);display:flex}.mw-header--sticky[data-v-9b9826d5]{z-index:50;position:sticky;top:0}.mw-header__brand[data-v-9b9826d5]{align-items:center;gap:var(--space-2xs);letter-spacing:var(--tracking-wide);white-space:nowrap;font-weight:650;display:flex}.mw-header__center[data-v-9b9826d5]{flex:auto;min-width:0}.mw-header__actions[data-v-9b9826d5]{align-items:center;gap:var(--space-2xs);margin-left:auto;display:flex}.mw-sidebar[data-v-a2b8405c]{height:100%;width:var(--mw-sidebar-width,240px);background:var(--_bg);color:var(--_text);border-right:1px solid var(--_border);font-family:var(--mw-font-sans);flex-direction:column;display:flex}.mw-sidebar__head[data-v-a2b8405c]{padding:var(--space-sm);border-bottom:1px solid var(--_border)}.mw-sidebar__nav[data-v-a2b8405c]{gap:var(--space-3xs);padding:var(--space-xs);flex-direction:column;flex:auto;display:flex;overflow-y:auto}.mw-sidebar__body[data-v-a2b8405c]{flex-shrink:0}.mw-sidebar__foot[data-v-a2b8405c]{padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--_border);color:var(--_muted);font-size:var(--font-size-sm)}.mw-footer[data-v-979579a9]{align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);background:var(--_bg);color:var(--_muted);border-top:1px solid var(--_border);font-family:var(--mw-font-sans);font-size:var(--font-size-sm);flex-wrap:wrap;display:flex}.mw-footer--transparent[data-v-979579a9]{border-top:1px solid var(--border)}.mw-footer__center[data-v-979579a9]{flex:auto;min-width:0}.mw-footer__end[data-v-979579a9]{align-items:center;gap:var(--space-sm);margin-left:auto;display:flex}.mw-footer__docs-link[data-v-979579a9]{color:inherit;text-underline-offset:2px;opacity:.7;text-decoration:underline}.mw-footer__docs-link[data-v-979579a9]:hover{opacity:1}.mw-mode[data-v-e2ea0d79]{border:1px solid var(--_border,var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--_text,var(--text)) 6%, transparent);gap:2px;padding:2px;display:inline-flex}.mw-mode__btn[data-v-e2ea0d79]{align-items:center;gap:var(--space-3xs);padding:var(--space-3xs) var(--space-2xs);border-radius:calc(var(--radius) - 3px);color:var(--_text,var(--text));font:inherit;font-size:var(--font-size-sm);cursor:pointer;opacity:.7;transition:opacity var(--transition-base), background var(--transition-base);background:0 0;border:0;display:inline-flex}.mw-mode__btn[data-v-e2ea0d79]:hover{opacity:1}.mw-mode__btn.is-active[data-v-e2ea0d79]{opacity:1;background:color-mix(in srgb, var(--_text,var(--text)) 14%, transparent)}.mw-mode__btn[data-v-e2ea0d79]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}@media (width<=640px){.mw-mode__label[data-v-e2ea0d79]{display:none}}.mw-btn[data-v-bc33cc23]{justify-content:center;align-items:center;gap:var(--space-2xs);padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);font:inherit;cursor:pointer;transition:filter var(--transition-base), background var(--transition-base);border:1px solid #0000;font-weight:550;display:inline-flex}.mw-btn[data-v-bc33cc23]:disabled{opacity:.55;cursor:not-allowed}.mw-btn[data-v-bc33cc23]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-btn--primary[data-v-bc33cc23]{background:var(--accent);color:var(--accent-contrast)}.mw-btn--primary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--secondary[data-v-bc33cc23]{background:var(--secondary);color:var(--secondary-contrast)}.mw-btn--secondary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--ghost[data-v-bc33cc23]{color:var(--text);border-color:var(--border);background:0 0}.mw-btn--ghost[data-v-bc33cc23]:not(:disabled):hover{background:var(--lift)}.mw-btn--danger[data-v-bc33cc23]{background:var(--danger);color:var(--accent-contrast)}.mw-btn--danger[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-card[data-v-883f87f5]{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);overflow:hidden}.mw-card__header[data-v-883f87f5]{padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.mw-card__title[data-v-883f87f5]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-card__body[data-v-883f87f5]{padding:var(--space-sm)}.mw-card__footer[data-v-883f87f5]{padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--border);background:var(--lift)}.mw-select[data-v-7e206184]{position:relative}.mw-select select[data-v-7e206184]{appearance:none;width:100%;padding:var(--space-2xs) calc(var(--space-md) + var(--space-2xs)) var(--space-2xs) var(--space-xs);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit}.mw-select select[data-v-7e206184]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-select__chevron[data-v-7e206184]{right:var(--space-xs);pointer-events:none;stroke:var(--muted);stroke-width:1.5px;fill:none;position:absolute;top:50%;transform:translateY(-50%)}.mw-notice[data-v-ee7fffb1]{padding:var(--space-2xs) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius);background:var(--lift);color:var(--text);font-size:var(--font-size-sm);border-left-width:3px;margin:0}.mw-notice--error[data-v-ee7fffb1]{border-left-color:var(--danger);color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent)}.mw-notice--ok[data-v-ee7fffb1]{border-left-color:var(--ok);color:var(--ok);background:color-mix(in srgb, var(--ok) 8%, transparent)}.sidebar-item[data-v-8da2d583]{align-items:center;gap:var(--space-2xs);width:100%;padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);color:inherit;font:inherit;text-align:left;cursor:pointer;opacity:.85;transition:background var(--transition-base), opacity var(--transition-base);background:0 0;border:0;display:flex}.sidebar-item[data-v-8da2d583]:hover:not(:disabled){background:color-mix(in srgb, currentColor 10%, transparent);opacity:1}.sidebar-item.is-active[data-v-8da2d583]{background:color-mix(in srgb, var(--accent) 26%, transparent);opacity:1}.sidebar-item[data-v-8da2d583]:disabled{cursor:default}.sidebar-item[data-v-8da2d583]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.sidebar-item__icon[data-v-8da2d583]{text-align:center;width:1.1rem}.mw-tab-nav[data-v-97d31503]{gap:var(--space-3xs);border-bottom:2px solid var(--border);display:flex}.mw-tab-nav__tab[data-v-97d31503]{appearance:none;padding:var(--space-2xs) var(--space-sm);cursor:pointer;font-size:var(--font-size-base);color:var(--muted);transition:color var(--transition-base), border-color var(--transition-base);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px}.mw-tab-nav__tab[data-v-97d31503]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-97d31503]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.ca-root[data-v-b43dabdd]{align-items:center;gap:.35em;display:inline-flex}.ca-value[data-v-b43dabdd]{font-family:var(--mw-font-mono,monospace);font-size:inherit}.ca-copy[data-v-b43dabdd]{color:var(--muted,#888);cursor:pointer;transition:color var(--transition-base);background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.ca-copy[data-v-b43dabdd]:hover{color:var(--text,#f0f0f0)}.ca-copy--copied[data-v-b43dabdd]{color:var(--accent,#6366f1)}.ca-icon[data-v-b43dabdd]{display:block}.el-root[data-v-073d1bbe]{font-family:monospace;font-size:inherit;color:var(--accent,#6366f1);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;transition:color .15s}.el-root[data-v-073d1bbe]:hover{color:var(--text,#f0f0f0);text-decoration-style:solid}.status-widget[data-v-6436368e]{align-items:center;gap:var(--space-2xs);color:inherit;font-size:var(--font-size-sm);opacity:.85;transition:opacity var(--transition-base);text-decoration:none;display:inline-flex}.status-widget[data-v-6436368e]:hover{opacity:1}.status-widget__dot[data-v-6436368e]{width:var(--space-2xs);height:var(--space-2xs);border-radius:50%;flex-shrink:0}.status-widget--ok .status-widget__dot[data-v-6436368e]{background:var(--ok)}.status-widget--degraded .status-widget__dot[data-v-6436368e]{background:var(--warning)}.status-widget--error .status-widget__dot[data-v-6436368e]{background:var(--danger)}
1
+ *,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--mw-font-sans);font-size:var(--font-size-base);line-height:var(--leading-normal);letter-spacing:var(--tracking-normal);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}:where(ul,ol):where([role=list],[role=listitem]){margin:0;padding:0;list-style:none}:where(img,svg,video,canvas){max-width:100%;display:block}:where(fieldset){border:0;margin:0;padding:0}a{color:var(--accent);transition:color var(--transition-base);text-decoration:none}a:hover{text-decoration:underline}:where(button,input,select,textarea){font-family:inherit}:where(a,button,input,select,textarea):focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-mono{font-family:var(--mw-font-mono)}.mw-noise{isolation:isolate;position:relative}.mw-noise:before{content:"";z-index:-1;background-image:var(--noise-overlay);opacity:var(--noise-opacity);pointer-events:none;background-repeat:repeat;position:absolute;inset:0}.mw-hand-drawn{display:inline-flex;position:relative}.mw-spinner{width:var(--space-sm);height:var(--space-sm);border:2px solid var(--border);border-top-color:var(--accent);animation:mw-spin var(--transition-slow) linear infinite;border-radius:50%;display:inline-block}@keyframes mw-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}.mw-spinner{border-top-color:var(--accent);animation:none}}.mw-header[data-v-9b9826d5]{align-items:center;gap:var(--space-sm);height:var(--mw-header-height,56px);padding:0 var(--space-sm);background:var(--_bg);color:var(--_text);border-bottom:1px solid var(--_border);font-family:var(--mw-font-sans);display:flex}.mw-header--sticky[data-v-9b9826d5]{z-index:50;position:sticky;top:0}.mw-header__brand[data-v-9b9826d5]{align-items:center;gap:var(--space-2xs);letter-spacing:var(--tracking-wide);white-space:nowrap;font-weight:650;display:flex}.mw-header__center[data-v-9b9826d5]{flex:auto;min-width:0}.mw-header__actions[data-v-9b9826d5]{align-items:center;gap:var(--space-2xs);margin-left:auto;display:flex}.mw-sidebar[data-v-a2b8405c]{height:100%;width:var(--mw-sidebar-width,240px);background:var(--_bg);color:var(--_text);border-right:1px solid var(--_border);font-family:var(--mw-font-sans);flex-direction:column;display:flex}.mw-sidebar__head[data-v-a2b8405c]{padding:var(--space-sm);border-bottom:1px solid var(--_border)}.mw-sidebar__nav[data-v-a2b8405c]{gap:var(--space-3xs);padding:var(--space-xs);flex-direction:column;flex:auto;display:flex;overflow-y:auto}.mw-sidebar__body[data-v-a2b8405c]{flex-shrink:0}.mw-sidebar__foot[data-v-a2b8405c]{padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--_border);color:var(--_muted);font-size:var(--font-size-sm)}.mw-footer[data-v-979579a9]{align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);background:var(--_bg);color:var(--_muted);border-top:1px solid var(--_border);font-family:var(--mw-font-sans);font-size:var(--font-size-sm);flex-wrap:wrap;display:flex}.mw-footer--transparent[data-v-979579a9]{border-top:1px solid var(--border)}.mw-footer__center[data-v-979579a9]{flex:auto;min-width:0}.mw-footer__end[data-v-979579a9]{align-items:center;gap:var(--space-sm);margin-left:auto;display:flex}.mw-footer__docs-link[data-v-979579a9]{color:inherit;text-underline-offset:2px;opacity:.7;text-decoration:underline}.mw-footer__docs-link[data-v-979579a9]:hover{opacity:1}.mw-mode[data-v-e2ea0d79]{border:1px solid var(--_border,var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--_text,var(--text)) 6%, transparent);gap:2px;padding:2px;display:inline-flex}.mw-mode__btn[data-v-e2ea0d79]{align-items:center;gap:var(--space-3xs);padding:var(--space-3xs) var(--space-2xs);border-radius:calc(var(--radius) - 3px);color:var(--_text,var(--text));font:inherit;font-size:var(--font-size-sm);cursor:pointer;opacity:.7;transition:opacity var(--transition-base), background var(--transition-base);background:0 0;border:0;display:inline-flex}.mw-mode__btn[data-v-e2ea0d79]:hover{opacity:1}.mw-mode__btn.is-active[data-v-e2ea0d79]{opacity:1;background:color-mix(in srgb, var(--_text,var(--text)) 14%, transparent)}.mw-mode__btn[data-v-e2ea0d79]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}@media (width<=640px){.mw-mode__label[data-v-e2ea0d79]{display:none}}.mw-btn[data-v-bc33cc23]{justify-content:center;align-items:center;gap:var(--space-2xs);padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);font:inherit;cursor:pointer;transition:filter var(--transition-base), background var(--transition-base);border:1px solid #0000;font-weight:550;display:inline-flex}.mw-btn[data-v-bc33cc23]:disabled{opacity:.55;cursor:not-allowed}.mw-btn[data-v-bc33cc23]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-btn--primary[data-v-bc33cc23]{background:var(--accent);color:var(--accent-contrast)}.mw-btn--primary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--secondary[data-v-bc33cc23]{background:var(--secondary);color:var(--secondary-contrast)}.mw-btn--secondary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--ghost[data-v-bc33cc23]{color:var(--text);border-color:var(--border);background:0 0}.mw-btn--ghost[data-v-bc33cc23]:not(:disabled):hover{background:var(--lift)}.mw-btn--danger[data-v-bc33cc23]{background:var(--danger);color:var(--accent-contrast)}.mw-btn--danger[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-card[data-v-883f87f5]{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);overflow:hidden}.mw-card__header[data-v-883f87f5]{padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.mw-card__title[data-v-883f87f5]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-card__body[data-v-883f87f5]{padding:var(--space-sm)}.mw-card__footer[data-v-883f87f5]{padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--border);background:var(--lift)}.mw-select[data-v-7e206184]{position:relative}.mw-select select[data-v-7e206184]{appearance:none;width:100%;padding:var(--space-2xs) calc(var(--space-md) + var(--space-2xs)) var(--space-2xs) var(--space-xs);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit}.mw-select select[data-v-7e206184]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-select__chevron[data-v-7e206184]{right:var(--space-xs);pointer-events:none;stroke:var(--muted);stroke-width:1.5px;fill:none;position:absolute;top:50%;transform:translateY(-50%)}.mw-notice[data-v-ee7fffb1]{padding:var(--space-2xs) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius);background:var(--lift);color:var(--text);font-size:var(--font-size-sm);border-left-width:3px;margin:0}.mw-notice--error[data-v-ee7fffb1]{border-left-color:var(--danger);color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent)}.mw-notice--ok[data-v-ee7fffb1]{border-left-color:var(--ok);color:var(--ok);background:color-mix(in srgb, var(--ok) 8%, transparent)}.sidebar-item[data-v-8da2d583]{align-items:center;gap:var(--space-2xs);width:100%;padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);color:inherit;font:inherit;text-align:left;cursor:pointer;opacity:.85;transition:background var(--transition-base), opacity var(--transition-base);background:0 0;border:0;display:flex}.sidebar-item[data-v-8da2d583]:hover:not(:disabled){background:color-mix(in srgb, currentColor 10%, transparent);opacity:1}.sidebar-item.is-active[data-v-8da2d583]{background:color-mix(in srgb, var(--accent) 26%, transparent);opacity:1}.sidebar-item[data-v-8da2d583]:disabled{cursor:default}.sidebar-item[data-v-8da2d583]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.sidebar-item__icon[data-v-8da2d583]{text-align:center;width:1.1rem}.mw-tab-nav[data-v-97d31503]{gap:var(--space-3xs);border-bottom:2px solid var(--border);display:flex}.mw-tab-nav__tab[data-v-97d31503]{appearance:none;padding:var(--space-2xs) var(--space-sm);cursor:pointer;font-size:var(--font-size-base);color:var(--muted);transition:color var(--transition-base), border-color var(--transition-base);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px}.mw-tab-nav__tab[data-v-97d31503]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-97d31503]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.ca-root[data-v-b43dabdd]{align-items:center;gap:.35em;display:inline-flex}.ca-value[data-v-b43dabdd]{font-family:var(--mw-font-mono,monospace);font-size:inherit}.ca-copy[data-v-b43dabdd]{color:var(--muted,#888);cursor:pointer;transition:color var(--transition-base);background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.ca-copy[data-v-b43dabdd]:hover{color:var(--text,#f0f0f0)}.ca-copy--copied[data-v-b43dabdd]{color:var(--accent,#6366f1)}.ca-icon[data-v-b43dabdd]{display:block}.el-root[data-v-073d1bbe]{font-family:monospace;font-size:inherit;color:var(--accent,#6366f1);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;transition:color .15s}.el-root[data-v-073d1bbe]:hover{color:var(--text,#f0f0f0);text-decoration-style:solid}.copyright-line[data-v-8e4db6fe]{white-space:nowrap;display:inline}.symbol-link[data-v-8e4db6fe]{color:inherit;vertical-align:middle;align-items:center;text-decoration:none;display:inline-flex}.symbol-link[data-v-8e4db6fe]:hover{text-decoration:underline}.kopimi-symbol[data-v-8e4db6fe]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-8e4db6fe]{vertical-align:-.15em;display:inline}.text-content[data-v-8e4db6fe]{display:inline}.status-widget[data-v-6436368e]{align-items:center;gap:var(--space-2xs);color:inherit;font-size:var(--font-size-sm);opacity:.85;transition:opacity var(--transition-base);text-decoration:none;display:inline-flex}.status-widget[data-v-6436368e]:hover{opacity:1}.status-widget__dot[data-v-6436368e]{width:var(--space-2xs);height:var(--space-2xs);border-radius:50%;flex-shrink:0}.status-widget--ok .status-widget__dot[data-v-6436368e]{background:var(--ok)}.status-widget--degraded .status-widget__dot[data-v-6436368e]{background:var(--warning)}.status-widget--error .status-widget__dot[data-v-6436368e]{background:var(--danger)}
2
2
  /*$vite$:1*/
@@ -0,0 +1,19 @@
1
+ type RightsStatementVariant = 'all' | 'none' | 'jam' | 'custom';
2
+ type SymbolVariant = 'copyright' | 'copyleft' | 'kopimi';
3
+ type __VLS_Props = {
4
+ organisationName: string;
5
+ year?: number;
6
+ rightsStatement?: RightsStatementVariant | string;
7
+ symbolVariant?: SymbolVariant;
8
+ /** Optional override for the symbol link href. Defaults based on symbolVariant. */
9
+ symbolHref?: string;
10
+ /** Optional override for the symbol link aria-label. Defaults based on symbolVariant. */
11
+ symbolLabel?: string;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
14
+ year: number;
15
+ rightsStatement: RightsStatementVariant | string;
16
+ symbolVariant: SymbolVariant;
17
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export { default as AppTabNav } from './components/AppTabNav.vue';
12
12
  export type { AppTab } from './components/AppTabNav.vue';
13
13
  export { default as CopyableAddress } from './components/CopyableAddress.vue';
14
14
  export { default as ExplorerLink } from './components/ExplorerLink.vue';
15
+ export { default as CopyrightLine } from './components/CopyrightLine.vue';
15
16
  export { default as StatusWidget } from './components/StatusWidget.vue';
16
17
  export { suiExplorerUrl } from './explorer.js';
17
18
  export type { SuiNetwork, SuiExplorerKind } from './explorer.js';
@@ -0,0 +1,48 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Copyleft Notice</title>
7
+ <style>
8
+ :root {
9
+ color-scheme: light dark;
10
+ font-family:
11
+ system-ui,
12
+ -apple-system,
13
+ BlinkMacSystemFont,
14
+ "Segoe UI",
15
+ sans-serif;
16
+ }
17
+ body {
18
+ margin: 0;
19
+ padding: 2rem;
20
+ line-height: 1.6;
21
+ max-width: 48rem;
22
+ }
23
+ h1 {
24
+ margin-top: 0;
25
+ font-size: 1.5rem;
26
+ }
27
+ code {
28
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
29
+ }
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <h1>Copyleft Notice</h1>
34
+ <p>
35
+ This page is reserved for works distributed under a copyleft-style
36
+ permission structure.
37
+ </p>
38
+ <p>
39
+ Copyleft generally means that derivatives and redistributions must
40
+ preserve the same or compatible licensing terms, depending on the specific
41
+ licence in force.
42
+ </p>
43
+ <p>
44
+ The exact legal meaning depends on the licence or notice that accompanies
45
+ the relevant work.
46
+ </p>
47
+ </body>
48
+ </html>
@@ -0,0 +1,48 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Copyright Notice</title>
7
+ <style>
8
+ :root {
9
+ color-scheme: light dark;
10
+ font-family:
11
+ system-ui,
12
+ -apple-system,
13
+ BlinkMacSystemFont,
14
+ "Segoe UI",
15
+ sans-serif;
16
+ }
17
+ body {
18
+ margin: 0;
19
+ padding: 2rem;
20
+ line-height: 1.6;
21
+ max-width: 48rem;
22
+ }
23
+ h1 {
24
+ margin-top: 0;
25
+ font-size: 1.5rem;
26
+ }
27
+ code {
28
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
29
+ }
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <h1>Copyright Notice</h1>
34
+ <p>
35
+ Unless otherwise stated, the content and code in this application are
36
+ protected by copyright.
37
+ </p>
38
+ <p>
39
+ Copyright in the relevant work is retained by the applicable rights holder
40
+ and used under the permissions, licences, or agreements associated with
41
+ that work.
42
+ </p>
43
+ <p>
44
+ For the full application footer, see the main interface. This page exists
45
+ as a static legal reference.
46
+ </p>
47
+ </body>
48
+ </html>
package/dist/ui.js CHANGED
@@ -1,6 +1,6 @@
1
- import { Fragment as e, computed as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, defineComponent as o, mergeProps as s, normalizeClass as c, normalizeStyle as l, onMounted as ee, onUnmounted as te, openBlock as u, ref as d, renderList as f, renderSlot as p, toDisplayString as m, unref as h, useModel as g, vModelSelect as ne, watch as re, withDirectives as ie } from "vue";
1
+ import { Fragment as e, computed as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, defineComponent as o, mergeProps as s, normalizeClass as c, normalizeStyle as l, onMounted as u, onUnmounted as ee, openBlock as d, ref as f, renderList as p, renderSlot as m, toDisplayString as h, unref as g, useModel as te, vModelSelect as _, watch as ne, withDirectives as re } from "vue";
2
2
  //#region src/internal/panel.ts
3
- function _(e, t) {
3
+ function v(e, t) {
4
4
  let n;
5
5
  return n = e === "transparent" ? {
6
6
  "--_bg": "transparent",
@@ -24,7 +24,7 @@ function _(e, t) {
24
24
  }
25
25
  //#endregion
26
26
  //#region src/components/AppHeader.vue?vue&type=script&setup=true&lang.ts
27
- var ae = { class: "mw-header__brand" }, oe = { class: "mw-header__center" }, se = { class: "mw-header__actions" }, ce = /*@__PURE__*/ o({
27
+ var ie = { class: "mw-header__brand" }, ae = { class: "mw-header__center" }, oe = { class: "mw-header__actions" }, se = /*@__PURE__*/ o({
28
28
  __name: "AppHeader",
29
29
  props: {
30
30
  variant: { default: "dark" },
@@ -35,33 +35,33 @@ var ae = { class: "mw-header__brand" }, oe = { class: "mw-header__center" }, se
35
35
  }
36
36
  },
37
37
  setup(e) {
38
- let n = e, a = t(() => _(n.variant, n.colors));
39
- return (t, n) => (u(), r("header", {
38
+ let n = e, a = t(() => v(n.variant, n.colors));
39
+ return (t, n) => (d(), r("header", {
40
40
  class: c(["mw-header", [`mw-header--${e.variant}`, { "mw-header--sticky": e.sticky }]]),
41
41
  style: l(a.value)
42
42
  }, [
43
- i("div", ae, [p(t.$slots, "brand", {}, void 0, !0)]),
44
- i("div", oe, [p(t.$slots, "default", {}, void 0, !0)]),
45
- i("div", se, [p(t.$slots, "actions", {}, void 0, !0)])
43
+ i("div", ie, [m(t.$slots, "brand", {}, void 0, !0)]),
44
+ i("div", ae, [m(t.$slots, "default", {}, void 0, !0)]),
45
+ i("div", oe, [m(t.$slots, "actions", {}, void 0, !0)])
46
46
  ], 6));
47
47
  }
48
- }), v = (e, t) => {
48
+ }), y = (e, t) => {
49
49
  let n = e.__vccOpts || e;
50
50
  for (let [e, r] of t) n[e] = r;
51
51
  return n;
52
- }, le = /*#__PURE__*/ v(ce, [["__scopeId", "data-v-9b9826d5"]]), ue = {
52
+ }, ce = /*#__PURE__*/ y(se, [["__scopeId", "data-v-9b9826d5"]]), le = {
53
53
  key: 0,
54
54
  class: "mw-sidebar__head"
55
- }, de = {
55
+ }, ue = {
56
56
  class: "mw-sidebar__nav",
57
57
  "aria-label": "Primary"
58
- }, y = {
58
+ }, de = {
59
59
  key: 1,
60
60
  class: "mw-sidebar__body"
61
61
  }, b = {
62
62
  key: 2,
63
63
  class: "mw-sidebar__foot"
64
- }, x = /*#__PURE__*/ v(/* @__PURE__ */ o({
64
+ }, x = /*#__PURE__*/ y(/* @__PURE__ */ o({
65
65
  __name: "AppSidebar",
66
66
  props: {
67
67
  variant: { default: "dark" },
@@ -70,17 +70,17 @@ var ae = { class: "mw-header__brand" }, oe = { class: "mw-header__center" }, se
70
70
  },
71
71
  setup(e) {
72
72
  let a = e, o = t(() => {
73
- let e = _(a.variant, a.colors);
73
+ let e = v(a.variant, a.colors);
74
74
  return a.width && (e["--mw-sidebar-width"] = a.width), e;
75
75
  });
76
- return (t, a) => (u(), r("aside", {
76
+ return (t, a) => (d(), r("aside", {
77
77
  class: c(["mw-sidebar", `mw-sidebar--${e.variant}`]),
78
78
  style: l(o.value)
79
79
  }, [
80
- t.$slots.head ? (u(), r("div", ue, [p(t.$slots, "head", {}, void 0, !0)])) : n("", !0),
81
- i("nav", de, [p(t.$slots, "default", {}, void 0, !0)]),
82
- t.$slots.body ? (u(), r("div", y, [p(t.$slots, "body", {}, void 0, !0)])) : n("", !0),
83
- t.$slots.foot ? (u(), r("div", b, [p(t.$slots, "foot", {}, void 0, !0)])) : n("", !0)
80
+ t.$slots.head ? (d(), r("div", le, [m(t.$slots, "head", {}, void 0, !0)])) : n("", !0),
81
+ i("nav", ue, [m(t.$slots, "default", {}, void 0, !0)]),
82
+ t.$slots.body ? (d(), r("div", de, [m(t.$slots, "body", {}, void 0, !0)])) : n("", !0),
83
+ t.$slots.foot ? (d(), r("div", b, [m(t.$slots, "foot", {}, void 0, !0)])) : n("", !0)
84
84
  ], 6));
85
85
  }
86
86
  }), [["__scopeId", "data-v-a2b8405c"]]);
@@ -94,7 +94,7 @@ function S(e) {
94
94
  }
95
95
  //#endregion
96
96
  //#region src/components/AppFooter.vue?vue&type=script&setup=true&lang.ts
97
- var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = { class: "mw-footer__end" }, E = ["href"], D = ["href"], O = /*#__PURE__*/ v(/* @__PURE__ */ o({
97
+ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = { class: "mw-footer__end" }, E = ["href"], D = ["href"], O = /*#__PURE__*/ y(/* @__PURE__ */ o({
98
98
  __name: "AppFooter",
99
99
  props: {
100
100
  variant: { default: "transparent" },
@@ -103,25 +103,25 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
103
103
  devUrl: {}
104
104
  },
105
105
  setup(e) {
106
- let a = e, o = t(() => _(a.variant, a.colors));
107
- return (t, a) => (u(), r("footer", {
106
+ let a = e, o = t(() => v(a.variant, a.colors));
107
+ return (t, a) => (d(), r("footer", {
108
108
  class: c(["mw-footer", `mw-footer--${e.variant}`]),
109
109
  style: l(o.value)
110
110
  }, [
111
- i("div", C, [p(t.$slots, "start", {}, void 0, !0)]),
112
- i("div", w, [p(t.$slots, "default", {}, void 0, !0)]),
111
+ i("div", C, [m(t.$slots, "start", {}, void 0, !0)]),
112
+ i("div", w, [m(t.$slots, "default", {}, void 0, !0)]),
113
113
  i("div", T, [
114
- p(t.$slots, "end", {}, void 0, !0),
115
- e.docsUrl ? (u(), r("a", {
114
+ m(t.$slots, "end", {}, void 0, !0),
115
+ e.docsUrl ? (d(), r("a", {
116
116
  key: 0,
117
- href: h(S)(e.docsUrl),
117
+ href: g(S)(e.docsUrl),
118
118
  target: "_blank",
119
119
  rel: "noopener noreferrer",
120
120
  class: "mw-footer__docs-link"
121
121
  }, "Documentation", 8, E)) : n("", !0),
122
- e.devUrl ? (u(), r("a", {
122
+ e.devUrl ? (d(), r("a", {
123
123
  key: 1,
124
- href: h(S)(e.devUrl),
124
+ href: g(S)(e.devUrl),
125
125
  target: "_blank",
126
126
  rel: "noopener noreferrer",
127
127
  "aria-label": "Developer documentation",
@@ -138,7 +138,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
138
138
  "aria-pressed",
139
139
  "title",
140
140
  "onClick"
141
- ], j = { "aria-hidden": "true" }, M = { class: "mw-mode__label" }, N = /*#__PURE__*/ v(/* @__PURE__ */ o({
141
+ ], j = { "aria-hidden": "true" }, M = { class: "mw-mode__label" }, N = /*#__PURE__*/ y(/* @__PURE__ */ o({
142
142
  __name: "ColorModeControl",
143
143
  props: {
144
144
  modelValue: {},
@@ -159,16 +159,16 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
159
159
  dark: "☾",
160
160
  system: "🖵"
161
161
  };
162
- return (o, s) => (u(), r("div", k, [(u(!0), r(e, null, f(t.modes, (e) => (u(), r("button", {
162
+ return (o, s) => (d(), r("div", k, [(d(!0), r(e, null, p(t.modes, (e) => (d(), r("button", {
163
163
  key: e,
164
164
  type: "button",
165
165
  class: c(["mw-mode__btn", { "is-active": t.modelValue === e }]),
166
166
  "aria-pressed": t.modelValue === e,
167
167
  title: n[e],
168
168
  onClick: (t) => o.$emit("update:modelValue", e)
169
- }, [i("span", j, m(a[e]), 1), i("span", M, m(n[e]), 1)], 10, A))), 128))]));
169
+ }, [i("span", j, h(a[e]), 1), i("span", M, h(n[e]), 1)], 10, A))), 128))]));
170
170
  }
171
- }), [["__scopeId", "data-v-e2ea0d79"]]), P = ["type", "disabled"], F = /*#__PURE__*/ v(/* @__PURE__ */ o({
171
+ }), [["__scopeId", "data-v-e2ea0d79"]]), P = ["type", "disabled"], F = /*#__PURE__*/ y(/* @__PURE__ */ o({
172
172
  __name: "UiButton",
173
173
  props: {
174
174
  variant: { default: "primary" },
@@ -179,11 +179,11 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
179
179
  }
180
180
  },
181
181
  setup(e) {
182
- return (t, n) => (u(), r("button", {
182
+ return (t, n) => (d(), r("button", {
183
183
  type: e.type,
184
184
  disabled: e.disabled,
185
185
  class: c(["mw-btn", `mw-btn--${e.variant}`])
186
- }, [p(t.$slots, "default", {}, void 0, !0)], 10, P));
186
+ }, [m(t.$slots, "default", {}, void 0, !0)], 10, P));
187
187
  }
188
188
  }), [["__scopeId", "data-v-bc33cc23"]]), I = { class: "mw-card" }, L = {
189
189
  key: 0,
@@ -191,17 +191,17 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
191
191
  }, R = { class: "mw-card__title" }, z = { class: "mw-card__body" }, B = {
192
192
  key: 1,
193
193
  class: "mw-card__footer"
194
- }, V = /*#__PURE__*/ v(/* @__PURE__ */ o({
194
+ }, V = /*#__PURE__*/ y(/* @__PURE__ */ o({
195
195
  __name: "UiCard",
196
196
  props: { title: {} },
197
197
  setup(e) {
198
- return (t, a) => (u(), r("section", I, [
199
- e.title || t.$slots.header ? (u(), r("header", L, [p(t.$slots, "header", {}, () => [i("h3", R, m(e.title), 1)], !0)])) : n("", !0),
200
- i("div", z, [p(t.$slots, "default", {}, void 0, !0)]),
201
- t.$slots.footer ? (u(), r("footer", B, [p(t.$slots, "footer", {}, void 0, !0)])) : n("", !0)
198
+ return (t, a) => (d(), r("section", I, [
199
+ e.title || t.$slots.header ? (d(), r("header", L, [m(t.$slots, "header", {}, () => [i("h3", R, h(e.title), 1)], !0)])) : n("", !0),
200
+ i("div", z, [m(t.$slots, "default", {}, void 0, !0)]),
201
+ t.$slots.footer ? (d(), r("footer", B, [m(t.$slots, "footer", {}, void 0, !0)])) : n("", !0)
202
202
  ]));
203
203
  }
204
- }), [["__scopeId", "data-v-883f87f5"]]), H = { class: "mw-select" }, fe = /*#__PURE__*/ v(/* @__PURE__ */ o({
204
+ }), [["__scopeId", "data-v-883f87f5"]]), H = { class: "mw-select" }, fe = /*#__PURE__*/ y(/* @__PURE__ */ o({
205
205
  inheritAttrs: !1,
206
206
  __name: "UiSelect",
207
207
  props: {
@@ -210,8 +210,8 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
210
210
  },
211
211
  emits: ["update:modelValue"],
212
212
  setup(e) {
213
- let t = g(e, "modelValue");
214
- return (e, n) => (u(), r("div", H, [ie(i("select", s(e.$attrs, { "onUpdate:modelValue": n[0] ||= (e) => t.value = e }), [p(e.$slots, "default", {}, void 0, !0)], 16), [[ne, t.value]]), n[1] ||= i("svg", {
213
+ let t = te(e, "modelValue");
214
+ return (e, n) => (d(), r("div", H, [re(i("select", s(e.$attrs, { "onUpdate:modelValue": n[0] ||= (e) => t.value = e }), [m(e.$slots, "default", {}, void 0, !0)], 16), [[_, t.value]]), n[1] ||= i("svg", {
215
215
  class: "mw-select__chevron",
216
216
  xmlns: "http://www.w3.org/2000/svg",
217
217
  width: "12",
@@ -220,7 +220,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
220
220
  "aria-hidden": "true"
221
221
  }, [i("path", { d: "M1 1l5 5 5-5" })], -1)]));
222
222
  }
223
- }), [["__scopeId", "data-v-7e206184"]]), pe = ["role"], me = /*#__PURE__*/ v(/* @__PURE__ */ o({
223
+ }), [["__scopeId", "data-v-7e206184"]]), pe = ["role"], me = /*#__PURE__*/ y(/* @__PURE__ */ o({
224
224
  __name: "UiNotice",
225
225
  props: { type: {} },
226
226
  setup(e) {
@@ -228,16 +228,16 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
228
228
  if (n.type === "error") return "alert";
229
229
  if (n.type === "ok") return "status";
230
230
  });
231
- return (t, n) => (u(), r("p", {
231
+ return (t, n) => (d(), r("p", {
232
232
  class: c(["mw-notice", e.type && e.type !== "info" ? `mw-notice--${e.type}` : ""]),
233
233
  role: i.value
234
- }, [p(t.$slots, "default", {}, void 0, !0)], 10, pe));
234
+ }, [m(t.$slots, "default", {}, void 0, !0)], 10, pe));
235
235
  }
236
236
  }), [["__scopeId", "data-v-ee7fffb1"]]), he = ["disabled", "aria-current"], ge = {
237
237
  key: 0,
238
238
  class: "sidebar-item__icon",
239
239
  "aria-hidden": "true"
240
- }, _e = { class: "sidebar-item__label" }, ve = /*#__PURE__*/ v(/* @__PURE__ */ o({
240
+ }, _e = { class: "sidebar-item__label" }, ve = /*#__PURE__*/ y(/* @__PURE__ */ o({
241
241
  __name: "SidebarItem",
242
242
  props: {
243
243
  label: {},
@@ -252,14 +252,14 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
252
252
  }
253
253
  },
254
254
  setup(e) {
255
- return (t, a) => (u(), r("button", {
255
+ return (t, a) => (d(), r("button", {
256
256
  type: "button",
257
257
  class: c(["sidebar-item", { "is-active": e.active }]),
258
258
  disabled: e.disabled,
259
259
  "aria-current": e.active ? "page" : void 0
260
- }, [e.icon ? (u(), r("span", ge, m(e.icon), 1)) : n("", !0), i("span", _e, m(e.label), 1)], 10, he));
260
+ }, [e.icon ? (d(), r("span", ge, h(e.icon), 1)) : n("", !0), i("span", _e, h(e.label), 1)], 10, he));
261
261
  }
262
- }), [["__scopeId", "data-v-8da2d583"]]), ye = ["aria-label"], be = ["aria-current", "onClick"], xe = /*#__PURE__*/ v(/* @__PURE__ */ o({
262
+ }), [["__scopeId", "data-v-8da2d583"]]), ye = ["aria-label"], be = ["aria-current", "onClick"], U = /*#__PURE__*/ y(/* @__PURE__ */ o({
263
263
  __name: "AppTabNav",
264
264
  props: {
265
265
  tabs: {},
@@ -269,18 +269,18 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
269
269
  emits: ["update:modelValue"],
270
270
  setup(t, { emit: n }) {
271
271
  let i = n;
272
- return (n, a) => (u(), r("nav", {
272
+ return (n, a) => (d(), r("nav", {
273
273
  class: "mw-tab-nav",
274
274
  "aria-label": t.ariaLabel
275
- }, [(u(!0), r(e, null, f(t.tabs, (e) => (u(), r("button", {
275
+ }, [(d(!0), r(e, null, p(t.tabs, (e) => (d(), r("button", {
276
276
  key: e.id,
277
277
  type: "button",
278
278
  class: c(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
279
279
  "aria-current": t.modelValue === e.id ? "page" : void 0,
280
280
  onClick: (t) => i("update:modelValue", e.id)
281
- }, m(e.label), 11, be))), 128))], 8, ye));
281
+ }, h(e.label), 11, be))), 128))], 8, ye));
282
282
  }
283
- }), [["__scopeId", "data-v-97d31503"]]), Se = { class: "ca-root" }, Ce = ["title"], we = ["title", "aria-label"], Te = {
283
+ }), [["__scopeId", "data-v-97d31503"]]), xe = { class: "ca-root" }, Se = ["title"], Ce = ["title", "aria-label"], we = {
284
284
  key: 0,
285
285
  class: "ca-icon",
286
286
  viewBox: "0 0 24 24",
@@ -292,7 +292,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
292
292
  "stroke-linecap": "round",
293
293
  "stroke-linejoin": "round",
294
294
  "aria-hidden": "true"
295
- }, Ee = {
295
+ }, Te = {
296
296
  key: 1,
297
297
  class: "ca-icon",
298
298
  viewBox: "0 0 24 24",
@@ -304,7 +304,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
304
304
  "stroke-linecap": "round",
305
305
  "stroke-linejoin": "round",
306
306
  "aria-hidden": "true"
307
- }, De = /*#__PURE__*/ v(/* @__PURE__ */ o({
307
+ }, Ee = /*#__PURE__*/ y(/* @__PURE__ */ o({
308
308
  __name: "CopyableAddress",
309
309
  props: {
310
310
  address: {},
@@ -316,7 +316,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
316
316
  label: { default: "Copy" }
317
317
  },
318
318
  setup(e) {
319
- let n = e, o = d(!1), s = t(() => {
319
+ let n = e, o = f(!1), s = t(() => {
320
320
  if (!n.truncate) return n.address;
321
321
  let [e, t] = n.chars;
322
322
  return `${n.address.slice(0, e)}…${n.address.slice(-t)}`;
@@ -326,25 +326,25 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
326
326
  o.value = !1;
327
327
  }, 1500);
328
328
  }
329
- return (t, n) => (u(), r("span", Se, [i("span", {
329
+ return (t, n) => (d(), r("span", xe, [i("span", {
330
330
  class: "ca-value",
331
331
  title: e.address
332
- }, [p(t.$slots, "default", {}, () => [a(m(s.value), 1)], !0)], 8, Ce), i("button", {
332
+ }, [m(t.$slots, "default", {}, () => [a(h(s.value), 1)], !0)], 8, Se), i("button", {
333
333
  type: "button",
334
334
  class: c(["ca-copy", { "ca-copy--copied": o.value }]),
335
335
  title: o.value ? "Copied!" : e.label,
336
336
  "aria-label": o.value ? "Copied" : e.label,
337
337
  onClick: l
338
- }, [o.value ? (u(), r("svg", Te, [...n[0] ||= [i("polyline", { points: "20 6 9 17 4 12" }, null, -1)]])) : (u(), r("svg", Ee, [...n[1] ||= [i("rect", {
338
+ }, [o.value ? (d(), r("svg", we, [...n[0] ||= [i("polyline", { points: "20 6 9 17 4 12" }, null, -1)]])) : (d(), r("svg", Te, [...n[1] ||= [i("rect", {
339
339
  x: "9",
340
340
  y: "9",
341
341
  width: "13",
342
342
  height: "13",
343
343
  rx: "2",
344
344
  ry: "2"
345
- }, null, -1), i("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" }, null, -1)]]))], 10, we)]));
345
+ }, null, -1), i("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" }, null, -1)]]))], 10, Ce)]));
346
346
  }
347
- }), [["__scopeId", "data-v-b43dabdd"]]), Oe = ["href", "title"], ke = /*#__PURE__*/ v(/* @__PURE__ */ o({
347
+ }), [["__scopeId", "data-v-b43dabdd"]]), De = ["href", "title"], Oe = /*#__PURE__*/ y(/* @__PURE__ */ o({
348
348
  __name: "ExplorerLink",
349
349
  props: {
350
350
  href: {},
@@ -362,53 +362,96 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
362
362
  let [e, t] = n.chars;
363
363
  return `${n.value.slice(0, e)}…${n.value.slice(-t)}`;
364
364
  });
365
- return (t, n) => (u(), r("a", {
365
+ return (t, n) => (d(), r("a", {
366
366
  class: "el-root",
367
- href: h(S)(e.href),
367
+ href: g(S)(e.href),
368
368
  target: "_blank",
369
369
  rel: "noopener noreferrer",
370
370
  title: e.value
371
- }, [p(t.$slots, "default", {}, () => [a(m(i.value), 1)], !0)], 8, Oe));
371
+ }, [m(t.$slots, "default", {}, () => [a(h(i.value), 1)], !0)], 8, De));
372
372
  }
373
- }), [["__scopeId", "data-v-073d1bbe"]]), Ae = /* @__PURE__ */ new Set([
373
+ }), [["__scopeId", "data-v-073d1bbe"]]), ke = { class: "copyright-line" }, Ae = ["href", "aria-label"], je = { key: 0 }, Me = { key: 1 }, Ne = {
374
+ key: 2,
375
+ class: "kopimi-symbol"
376
+ }, Pe = { class: "text-content" }, Fe = { key: 0 }, Ie = /*#__PURE__*/ y(/* @__PURE__ */ o({
377
+ __name: "CopyrightLine",
378
+ props: {
379
+ organisationName: {},
380
+ year: { default: () => (/* @__PURE__ */ new Date()).getFullYear() },
381
+ rightsStatement: { default: "all" },
382
+ symbolVariant: { default: "copyright" },
383
+ symbolHref: {},
384
+ symbolLabel: {}
385
+ },
386
+ setup(e) {
387
+ let o = e, s = t(() => o.symbolVariant), c = t(() => o.symbolHref || (s.value === "kopimi" ? "/legal/powr.broccoli-kopimi.pdf" : s.value === "copyleft" ? "/legal/copyleft.html" : "/legal/copyright.html")), l = t(() => o.symbolLabel || (s.value === "kopimi" ? "Kopimi legal notice" : s.value === "copyleft" ? "Copyleft legal notice" : "Copyright legal notice")), u = t(() => o.rightsStatement === "" ? "" : o.rightsStatement === "none" ? "No rights reserved." : o.rightsStatement === "all" || !o.rightsStatement ? "All rights reserved." : o.rightsStatement === "jam" ? "All jams preserved." : o.rightsStatement);
388
+ return (t, o) => (d(), r("small", ke, [i("a", {
389
+ href: c.value,
390
+ class: "symbol-link",
391
+ target: "_blank",
392
+ rel: "noopener noreferrer",
393
+ "aria-label": l.value
394
+ }, [s.value === "copyright" ? (d(), r("span", je, "©")) : s.value === "copyleft" ? (d(), r("span", Me, "🄯")) : s.value === "kopimi" ? (d(), r("span", Ne, [...o[0] ||= [i("svg", {
395
+ viewBox: "0 0 24 24",
396
+ width: "1em",
397
+ height: "1em",
398
+ "aria-hidden": "true",
399
+ focusable: "false",
400
+ class: "kopimi-mark"
401
+ }, [i("path", {
402
+ d: "M12 4L22 23H2Z",
403
+ fill: "none",
404
+ stroke: "currentColor",
405
+ "stroke-width": "1.5"
406
+ }), i("text", {
407
+ x: "12",
408
+ y: "18",
409
+ "text-anchor": "middle",
410
+ "dominant-baseline": "middle",
411
+ "font-family": "system-ui, sans-serif",
412
+ "font-size": "11",
413
+ fill: "currentColor"
414
+ }, " C ")], -1)]])) : n("", !0)], 8, Ae), i("span", Pe, [a(h(e.year) + " " + h(e.organisationName) + ".", 1), u.value ? (d(), r("span", Fe, h(` ${u.value}`), 1)) : n("", !0)])]));
415
+ }
416
+ }), [["__scopeId", "data-v-8e4db6fe"]]), Le = /* @__PURE__ */ new Set([
374
417
  "operational",
375
418
  "degraded",
376
419
  "down",
377
420
  "unknown"
378
421
  ]);
379
- function U(e) {
380
- return typeof e == "string" && Ae.has(e);
381
- }
382
422
  function W(e) {
383
- return U(e) ? e : "unknown";
423
+ return typeof e == "string" && Le.has(e);
384
424
  }
385
425
  function G(e) {
426
+ return W(e) ? e : "unknown";
427
+ }
428
+ function K(e) {
386
429
  return typeof e != "string" || e.trim() === "" ? "" : e.replace(/[<>&"]/g, "");
387
430
  }
388
- function je(e) {
431
+ function Re(e) {
389
432
  if (typeof e != "object" || !e) return null;
390
- let t = e, n = G(t.name);
433
+ let t = e, n = K(t.name);
391
434
  return n ? {
392
435
  name: n,
393
- status: W(t.status)
436
+ status: G(t.status)
394
437
  } : null;
395
438
  }
396
- function Me(e) {
439
+ function ze(e) {
397
440
  if (typeof e != "object" || !e) return null;
398
- let t = e, n = G(t.name);
441
+ let t = e, n = K(t.name);
399
442
  if (!n) return null;
400
- let r = Array.isArray(t.components) ? t.components.map(je).filter((e) => e !== null) : [];
443
+ let r = Array.isArray(t.components) ? t.components.map(Re).filter((e) => e !== null) : [];
401
444
  return {
402
445
  name: n,
403
- status: W(t.status),
446
+ status: G(t.status),
404
447
  components: r
405
448
  };
406
449
  }
407
- function K(e) {
450
+ function q(e) {
408
451
  if (typeof e != "object" || !e) return null;
409
452
  let t = e;
410
- if (!U(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
411
- let n = t.groups.map(Me).filter((e) => e !== null);
453
+ if (!W(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
454
+ let n = t.groups.map(ze).filter((e) => e !== null);
412
455
  return {
413
456
  generated_at: t.generated_at,
414
457
  overall: t.overall,
@@ -417,7 +460,7 @@ function K(e) {
417
460
  }
418
461
  //#endregion
419
462
  //#region src/components/StatusWidget.vue?vue&type=script&setup=true&lang.ts
420
- var Ne = ["href", "title"], q = { class: "status-widget__label" }, Pe = /*#__PURE__*/ v(/* @__PURE__ */ o({
463
+ var Be = ["href", "title"], Ve = { class: "status-widget__label" }, He = /*#__PURE__*/ y(/* @__PURE__ */ o({
421
464
  __name: "StatusWidget",
422
465
  props: {
423
466
  apiUrl: { default: "https://status.meddleware.co.uk/api/status" },
@@ -435,24 +478,24 @@ var Ne = ["href", "title"], q = { class: "status-widget__label" }, Pe = /*#__PUR
435
478
  degraded: "Degraded",
436
479
  down: "Major outage",
437
480
  unknown: "Status unknown"
438
- }, o = d("ok"), s = d("All systems operational"), l = null;
439
- async function f() {
481
+ }, o = f("ok"), s = f("All systems operational"), l = null;
482
+ async function p() {
440
483
  try {
441
484
  let e = await fetch(t.apiUrl);
442
485
  if (!e.ok) throw Error(`HTTP ${e.status}`);
443
- let r = K(await e.json());
486
+ let r = q(await e.json());
444
487
  if (!r) throw Error("unexpected response shape");
445
488
  o.value = n[r.overall], s.value = a[r.overall];
446
489
  } catch {
447
490
  o.value = "error", s.value = "Status unavailable";
448
491
  }
449
492
  }
450
- return ee(() => {
451
- f(), l = setInterval(f, t.pollInterval);
452
- }), te(() => {
493
+ return u(() => {
494
+ p(), l = setInterval(p, t.pollInterval);
495
+ }), ee(() => {
453
496
  l !== null && clearInterval(l);
454
- }), (t, n) => (u(), r("a", {
455
- href: h(S)(e.href),
497
+ }), (t, n) => (d(), r("a", {
498
+ href: g(S)(e.href),
456
499
  target: "_blank",
457
500
  rel: "noopener noreferrer",
458
501
  class: c(["status-widget", `status-widget--${o.value}`]),
@@ -460,29 +503,29 @@ var Ne = ["href", "title"], q = { class: "status-widget__label" }, Pe = /*#__PUR
460
503
  }, [n[0] ||= i("span", {
461
504
  class: "status-widget__dot",
462
505
  "aria-hidden": "true"
463
- }, null, -1), i("span", q, m(s.value), 1)], 10, Ne));
506
+ }, null, -1), i("span", Ve, h(s.value), 1)], 10, Be));
464
507
  }
465
508
  }), [["__scopeId", "data-v-6436368e"]]), J = {
466
509
  mainnet: "https://suivision.xyz",
467
510
  testnet: "https://testnet.suivision.xyz",
468
511
  devnet: "https://devnet.suivision.xyz"
469
512
  };
470
- function Fe(e, t, n = "testnet") {
513
+ function Ue(e, t, n = "testnet") {
471
514
  return `${J[n] ?? J.testnet}/${e}/${t}`;
472
515
  }
473
516
  //#endregion
474
517
  //#region src/composables/useColorMode.ts
475
- var Y = "mw-color-mode", X = d("system"), Z = !1;
476
- function Ie() {
518
+ var Y = "mw-color-mode", X = f("system"), Z = !1;
519
+ function We() {
477
520
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
478
521
  }
479
522
  function Q(e) {
480
- return e === "dark" || e === "system" && Ie();
523
+ return e === "dark" || e === "system" && We();
481
524
  }
482
525
  function $(e) {
483
526
  typeof document < "u" && document.documentElement.setAttribute("data-theme", Q(e) ? "dark" : "light");
484
527
  }
485
- function Le(e = "system") {
528
+ function Ge(e = "system") {
486
529
  if (!Z) {
487
530
  Z = !0;
488
531
  let t = null;
@@ -491,7 +534,7 @@ function Le(e = "system") {
491
534
  } catch {}
492
535
  X.value = t ?? e, $(X.value), typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
493
536
  X.value === "system" && $("system");
494
- }), re(X, (e) => {
537
+ }), ne(X, (e) => {
495
538
  $(e);
496
539
  try {
497
540
  typeof localStorage < "u" && localStorage.setItem(Y, e);
@@ -513,10 +556,10 @@ function Le(e = "system") {
513
556
  }
514
557
  //#endregion
515
558
  //#region src/composables/useSeason.ts
516
- function Re() {
559
+ function Ke() {
517
560
  if (typeof document > "u") return;
518
561
  let e = (/* @__PURE__ */ new Date()).getMonth(), t = e >= 2 && e <= 4 ? "spring" : e >= 5 && e <= 7 ? "summer" : e >= 8 && e <= 10 ? "autumn" : "winter";
519
562
  document.documentElement.dataset.season = t;
520
563
  }
521
564
  //#endregion
522
- export { O as AppFooter, le as AppHeader, x as AppSidebar, xe as AppTabNav, N as ColorModeControl, De as CopyableAddress, ke as ExplorerLink, ve as SidebarItem, Pe as StatusWidget, F as UiButton, V as UiCard, me as UiNotice, fe as UiSelect, U as isStatusLevel, K as parseSnapshot, S as safeHref, Fe as suiExplorerUrl, Le as useColorMode, Re as useSeason };
565
+ export { O as AppFooter, ce as AppHeader, x as AppSidebar, U as AppTabNav, N as ColorModeControl, Ee as CopyableAddress, Ie as CopyrightLine, Oe as ExplorerLink, ve as SidebarItem, He as StatusWidget, F as UiButton, V as UiCard, me as UiNotice, fe as UiSelect, W as isStatusLevel, q as parseSnapshot, S as safeHref, Ue as suiExplorerUrl, Ge as useColorMode, Ke as useSeason };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meddleware/ui",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "Shared Vue 3 component library for @meddleware UIs \u2014 layout shell (header/sidebar/footer), colour-mode control, and primitives. Built on @meddleware/design-tokens.",
5
5
  "homepage": "https://docs.meddleware.co.uk/",
6
6
  "license": "0BSD",