@meddleware/ui 0.1.20 → 0.1.22

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}.copyright-line[data-v-1f9a5da9]{display:inherit;white-space:nowrap;text-align:center}.symbol-link[data-v-1f9a5da9]{color:inherit;vertical-align:text-top;align-items:center;padding:0 .1rem;text-decoration:none;display:inline-flex}.symbol-link[data-v-1f9a5da9]:hover{text-decoration:underline}.kopimi-symbol[data-v-1f9a5da9]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-1f9a5da9]{vertical-align:-.15em;display:inline}.text-content[data-v-1f9a5da9]{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)}
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}.sidebar-group--l1+.sidebar-group--l1[data-v-c8f6c8b2]{margin-block-start:var(--space-2xs)}.sidebar-group__label[data-v-c8f6c8b2]{padding:var(--space-3xs) var(--space-xs);font-size:var(--font-size-xs);color:var(--muted);-webkit-user-select:none;user-select:none;font-weight:600}.sidebar-group--l1>.sidebar-group__label[data-v-c8f6c8b2]{text-transform:uppercase;letter-spacing:var(--tracking-wide);opacity:.75}.sidebar-group--l2>.sidebar-group__label[data-v-c8f6c8b2]{opacity:.6;padding-inline-start:calc(var(--space-xs) + var(--space-3xs))}.sidebar-group--l2>.sidebar-group__items[data-v-c8f6c8b2]{padding-inline-start:var(--space-3xs)}.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-1f9a5da9]{display:inherit;white-space:nowrap;text-align:center}.symbol-link[data-v-1f9a5da9]{color:inherit;vertical-align:text-top;align-items:center;padding:0 .1rem;text-decoration:none;display:inline-flex}.symbol-link[data-v-1f9a5da9]:hover{text-decoration:underline}.kopimi-symbol[data-v-1f9a5da9]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-1f9a5da9]{vertical-align:-.15em;display:inline}.text-content[data-v-1f9a5da9]{display:inline}.ui-stepper[data-v-33717fc3]{margin:0 0 var(--space-md,1.5rem);padding:0;list-style:none;display:flex}.ui-stepper__step[data-v-33717fc3]{flex-direction:column;flex:1 1 0;align-items:center;gap:.4rem;min-width:0;display:flex;position:relative}.ui-stepper__step[data-v-33717fc3]:not(:first-child):before{content:"";background:var(--border);z-index:0;height:2px;position:absolute;top:1rem;left:-50%;right:50%}.ui-stepper__step.is-done[data-v-33717fc3]:before,.ui-stepper__step.is-active[data-v-33717fc3]:before{background:var(--accent)}.ui-stepper__badge[data-v-33717fc3]{z-index:1;border:2px solid var(--border);background:var(--surface);width:2rem;height:2rem;color:var(--muted);cursor:default;transition:background-color var(--transition-base,.2s), border-color var(--transition-base,.2s);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.8rem;font-weight:600;line-height:1;display:flex;position:relative}button.ui-stepper__badge[data-v-33717fc3]{cursor:pointer}button.ui-stepper__badge[data-v-33717fc3]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.is-done .ui-stepper__badge[data-v-33717fc3]{background:var(--accent);border-color:var(--accent);color:#fff}.is-active .ui-stepper__badge[data-v-33717fc3]{background:color-mix(in srgb, var(--accent) 12%, var(--surface));border-color:var(--accent);color:var(--accent)}.ui-stepper__label[data-v-33717fc3]{text-align:center;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:.78rem;line-height:1.2;overflow:hidden}.is-done .ui-stepper__label[data-v-33717fc3],.is-active .ui-stepper__label[data-v-33717fc3]{color:var(--text)}.is-active .ui-stepper__label[data-v-33717fc3]{font-weight:600}.mw-field-hint[data-v-4d63aaa4]{margin-left:var(--space-3xs,.35rem);vertical-align:middle;display:inline-block;position:relative}.mw-field-hint__btn[data-v-4d63aaa4]{border:1px solid var(--muted);width:1.1em;height:1.1em;color:var(--muted);cursor:help;background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.75rem;font-weight:700;line-height:1;display:inline-flex}.mw-field-hint__btn[data-v-4d63aaa4]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-field-hint__tip[data-v-4d63aaa4]{z-index:10;min-width:200px;max-width:min(300px,90vw);padding:var(--space-2xs,.6rem) var(--space-xs,.75rem);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:var(--font-size-sm,.85rem);color:var(--text);visibility:hidden;opacity:0;transition:opacity var(--transition-base,.15s ease), visibility var(--transition-base,.15s ease);pointer-events:none;font-weight:400;line-height:1.5;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001f}.mw-field-hint:hover .mw-field-hint__tip[data-v-4d63aaa4],.mw-field-hint:focus-within .mw-field-hint__tip[data-v-4d63aaa4]{visibility:visible;opacity:1;pointer-events:auto}.mw-form-field label[data-v-c22333c7]{margin:.9rem 0 .3rem;font-weight:600;display:block}.mw-form-field__hint[data-v-c22333c7]{color:var(--muted);font-size:var(--font-size-sm,.9rem);margin:.25rem 0 0;font-weight:400}.mw-form-field__error[data-v-c22333c7]{color:var(--danger);font-size:var(--font-size-sm,.88rem);margin:.25rem 0 0}.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,63 @@
1
+ /**
2
+ * SidebarGroup — accessible section-header wrapper for sidebar navigation.
3
+ *
4
+ * Renders a visible group label and wraps its children in a WAI-ARIA `group` so
5
+ * assistive technology announces the category before reading the contained items.
6
+ * The visible label element carries `aria-hidden="true"` — its content is already
7
+ * conveyed by `aria-label` on the group container, preventing double-announcement.
8
+ *
9
+ * Two visual levels are supported via the {@link SidebarGroupProps.level} prop:
10
+ * - `1` — top-level category label (e.g. "Blockchain"): uppercase, wide tracking,
11
+ * subtle opacity, section gap above when following a sibling.
12
+ * - `2` — sub-group label within a category (e.g. "Sui"): normal case, slightly
13
+ * more muted, items indented by `--space-3xs` to show nesting.
14
+ *
15
+ * Nest a level-2 group inside a level-1 group to build a two-tier hierarchy:
16
+ *
17
+ * @example
18
+ * ```vue
19
+ * <SidebarGroup label="Blockchain" :level="1">
20
+ * <SidebarGroup label="Sui" :level="2">
21
+ * <SidebarItem label="DAO" icon="🏛" :active="isDao" @click="navigate" />
22
+ * <SidebarItem label="Token Deployer" icon="🪙" :active="isToken" @click="navigate" />
23
+ * </SidebarGroup>
24
+ * </SidebarGroup>
25
+ * ```
26
+ *
27
+ * Screen-reader output for the above (abbreviated):
28
+ * > "Blockchain, group; Sui, group; DAO, button, current page; Token Deployer, button"
29
+ */
30
+ type __VLS_Props = {
31
+ /**
32
+ * Human-readable group name. Used as both the `aria-label` on the group
33
+ * container and the rendered visible section header.
34
+ */
35
+ label: string;
36
+ /**
37
+ * Visual hierarchy level.
38
+ *
39
+ * `1` — Top-level category. Rendered as an uppercase, wide-tracked, muted
40
+ * micro-label. Adds a top gap when preceded by another sibling group.
41
+ *
42
+ * `2` — Sub-group within a category. Rendered in normal case with a slight
43
+ * left indent; items inside gain `--space-3xs` of left padding.
44
+ *
45
+ * @default 1
46
+ */
47
+ level?: 1 | 2;
48
+ };
49
+ declare var __VLS_1: {};
50
+ type __VLS_Slots = {} & {
51
+ default?: (props: typeof __VLS_1) => any;
52
+ };
53
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
54
+ level: 1 | 2;
55
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
56
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
57
+ declare const _default: typeof __VLS_export;
58
+ export default _default;
59
+ type __VLS_WithSlots<T, S> = T & {
60
+ new (): {
61
+ $slots: S;
62
+ };
63
+ };
@@ -0,0 +1,16 @@
1
+ type __VLS_Props = {
2
+ fieldId: string;
3
+ };
4
+ declare var __VLS_1: {};
5
+ type __VLS_Slots = {} & {
6
+ default?: (props: typeof __VLS_1) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
12
+ type __VLS_WithSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
@@ -0,0 +1,27 @@
1
+ type __VLS_Props = {
2
+ id: string;
3
+ label: string;
4
+ error?: string | null;
5
+ hint?: string;
6
+ };
7
+ declare var __VLS_1: {}, __VLS_3: {
8
+ attrs: {
9
+ id: string;
10
+ 'aria-invalid': true | undefined;
11
+ 'aria-describedby': string | undefined;
12
+ };
13
+ };
14
+ type __VLS_Slots = {} & {
15
+ 'label-suffix'?: (props: typeof __VLS_1) => any;
16
+ } & {
17
+ default?: (props: typeof __VLS_3) => any;
18
+ };
19
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,15 @@
1
+ export interface StepperStep {
2
+ id: string;
3
+ label: string;
4
+ }
5
+ type __VLS_Props = {
6
+ steps: StepperStep[];
7
+ modelValue: number;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ "update:modelValue": (index: number) => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ "onUpdate:modelValue"?: ((index: number) => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
package/dist/index.d.ts CHANGED
@@ -8,11 +8,16 @@ export { default as UiCard } from './components/UiCard.vue';
8
8
  export { default as UiSelect } from './components/UiSelect.vue';
9
9
  export { default as UiNotice } from './components/UiNotice.vue';
10
10
  export { default as SidebarItem } from './components/SidebarItem.vue';
11
+ export { default as SidebarGroup } from './components/SidebarGroup.vue';
11
12
  export { default as AppTabNav } from './components/AppTabNav.vue';
12
13
  export type { AppTab } from './components/AppTabNav.vue';
13
14
  export { default as CopyableAddress } from './components/CopyableAddress.vue';
14
15
  export { default as ExplorerLink } from './components/ExplorerLink.vue';
15
16
  export { default as CopyrightLine } from './components/CopyrightLine.vue';
17
+ export { default as UiStepper } from './components/UiStepper.vue';
18
+ export type { StepperStep } from './components/UiStepper.vue';
19
+ export { default as UiFieldHint } from './components/UiFieldHint.vue';
20
+ export { default as UiFormField } from './components/UiFormField.vue';
16
21
  export { default as StatusWidget } from './components/StatusWidget.vue';
17
22
  export { suiExplorerUrl } from './explorer.js';
18
23
  export type { SuiNetwork, SuiExplorerKind } from './explorer.js';
package/dist/ui.js CHANGED
@@ -1,4 +1,4 @@
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";
1
+ import { Fragment as e, computed as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, defineComponent as s, mergeProps as c, normalizeClass as l, normalizeStyle as u, onMounted as ee, onUnmounted as d, openBlock as f, ref as p, renderList as m, renderSlot as h, resolveDynamicComponent as te, toDisplayString as g, unref as _, useModel as ne, vModelSelect as re, watch as ie, withCtx as ae, withDirectives as oe } from "vue";
2
2
  //#region src/internal/panel.ts
3
3
  function v(e, t) {
4
4
  let n;
@@ -24,7 +24,7 @@ function v(e, t) {
24
24
  }
25
25
  //#endregion
26
26
  //#region src/components/AppHeader.vue?vue&type=script&setup=true&lang.ts
27
- var ie = { class: "mw-header__brand" }, ae = { class: "mw-header__center" }, oe = { class: "mw-header__actions" }, se = /*@__PURE__*/ o({
27
+ var se = { class: "mw-header__brand" }, ce = { class: "mw-header__center" }, le = { class: "mw-header__actions" }, ue = /*@__PURE__*/ s({
28
28
  __name: "AppHeader",
29
29
  props: {
30
30
  variant: { default: "dark" },
@@ -35,33 +35,33 @@ var ie = { class: "mw-header__brand" }, ae = { class: "mw-header__center" }, oe
35
35
  }
36
36
  },
37
37
  setup(e) {
38
- let n = e, a = t(() => v(n.variant, n.colors));
39
- return (t, n) => (d(), r("header", {
40
- class: c(["mw-header", [`mw-header--${e.variant}`, { "mw-header--sticky": e.sticky }]]),
41
- style: l(a.value)
38
+ let n = e, r = t(() => v(n.variant, n.colors));
39
+ return (t, n) => (f(), i("header", {
40
+ class: l(["mw-header", [`mw-header--${e.variant}`, { "mw-header--sticky": e.sticky }]]),
41
+ style: u(r.value)
42
42
  }, [
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)])
43
+ a("div", se, [h(t.$slots, "brand", {}, void 0, !0)]),
44
+ a("div", ce, [h(t.$slots, "default", {}, void 0, !0)]),
45
+ a("div", le, [h(t.$slots, "actions", {}, void 0, !0)])
46
46
  ], 6));
47
47
  }
48
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
- }, ce = /*#__PURE__*/ y(se, [["__scopeId", "data-v-9b9826d5"]]), le = {
52
+ }, de = /*#__PURE__*/ y(ue, [["__scopeId", "data-v-9b9826d5"]]), b = {
53
53
  key: 0,
54
54
  class: "mw-sidebar__head"
55
- }, ue = {
55
+ }, x = {
56
56
  class: "mw-sidebar__nav",
57
57
  "aria-label": "Primary"
58
- }, de = {
58
+ }, S = {
59
59
  key: 1,
60
60
  class: "mw-sidebar__body"
61
- }, b = {
61
+ }, C = {
62
62
  key: 2,
63
63
  class: "mw-sidebar__foot"
64
- }, x = /*#__PURE__*/ y(/* @__PURE__ */ o({
64
+ }, w = /*#__PURE__*/ y(/* @__PURE__ */ s({
65
65
  __name: "AppSidebar",
66
66
  props: {
67
67
  variant: { default: "dark" },
@@ -69,24 +69,24 @@ var ie = { class: "mw-header__brand" }, ae = { class: "mw-header__center" }, oe
69
69
  width: {}
70
70
  },
71
71
  setup(e) {
72
- let a = e, o = t(() => {
73
- let e = v(a.variant, a.colors);
74
- return a.width && (e["--mw-sidebar-width"] = a.width), e;
72
+ let n = e, o = t(() => {
73
+ let e = v(n.variant, n.colors);
74
+ return n.width && (e["--mw-sidebar-width"] = n.width), e;
75
75
  });
76
- return (t, a) => (d(), r("aside", {
77
- class: c(["mw-sidebar", `mw-sidebar--${e.variant}`]),
78
- style: l(o.value)
76
+ return (t, n) => (f(), i("aside", {
77
+ class: l(["mw-sidebar", `mw-sidebar--${e.variant}`]),
78
+ style: u(o.value)
79
79
  }, [
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)
80
+ t.$slots.head ? (f(), i("div", b, [h(t.$slots, "head", {}, void 0, !0)])) : r("", !0),
81
+ a("nav", x, [h(t.$slots, "default", {}, void 0, !0)]),
82
+ t.$slots.body ? (f(), i("div", S, [h(t.$slots, "body", {}, void 0, !0)])) : r("", !0),
83
+ t.$slots.foot ? (f(), i("div", C, [h(t.$slots, "foot", {}, void 0, !0)])) : r("", !0)
84
84
  ], 6));
85
85
  }
86
86
  }), [["__scopeId", "data-v-a2b8405c"]]);
87
87
  //#endregion
88
88
  //#region src/safe-href.ts
89
- function S(e) {
89
+ function T(e) {
90
90
  if (e) try {
91
91
  let t = new URL(e);
92
92
  if (t.protocol === "https:" || t.protocol === "http:" && (t.hostname === "localhost" || t.hostname === "127.0.0.1")) return e;
@@ -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__*/ y(/* @__PURE__ */ o({
97
+ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = { class: "mw-footer__end" }, k = ["href"], A = ["href"], j = /*#__PURE__*/ y(/* @__PURE__ */ s({
98
98
  __name: "AppFooter",
99
99
  props: {
100
100
  variant: { default: "transparent" },
@@ -103,42 +103,42 @@ 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(() => v(a.variant, a.colors));
107
- return (t, a) => (d(), r("footer", {
108
- class: c(["mw-footer", `mw-footer--${e.variant}`]),
109
- style: l(o.value)
106
+ let n = e, o = t(() => v(n.variant, n.colors));
107
+ return (t, n) => (f(), i("footer", {
108
+ class: l(["mw-footer", `mw-footer--${e.variant}`]),
109
+ style: u(o.value)
110
110
  }, [
111
- i("div", C, [m(t.$slots, "start", {}, void 0, !0)]),
112
- i("div", w, [m(t.$slots, "default", {}, void 0, !0)]),
113
- i("div", T, [
114
- m(t.$slots, "end", {}, void 0, !0),
115
- e.docsUrl ? (d(), r("a", {
111
+ a("div", E, [h(t.$slots, "start", {}, void 0, !0)]),
112
+ a("div", D, [h(t.$slots, "default", {}, void 0, !0)]),
113
+ a("div", O, [
114
+ h(t.$slots, "end", {}, void 0, !0),
115
+ e.docsUrl ? (f(), i("a", {
116
116
  key: 0,
117
- href: g(S)(e.docsUrl),
117
+ href: _(T)(e.docsUrl),
118
118
  target: "_blank",
119
119
  rel: "noopener noreferrer",
120
120
  class: "mw-footer__docs-link"
121
- }, "Documentation", 8, E)) : n("", !0),
122
- e.devUrl ? (d(), r("a", {
121
+ }, "Documentation", 8, k)) : r("", !0),
122
+ e.devUrl ? (f(), i("a", {
123
123
  key: 1,
124
- href: g(S)(e.devUrl),
124
+ href: _(T)(e.devUrl),
125
125
  target: "_blank",
126
126
  rel: "noopener noreferrer",
127
127
  "aria-label": "Developer documentation",
128
128
  class: "mw-footer__docs-link"
129
- }, "Developer docs", 8, D)) : n("", !0)
129
+ }, "Developer docs", 8, A)) : r("", !0)
130
130
  ])
131
131
  ], 6));
132
132
  }
133
- }), [["__scopeId", "data-v-979579a9"]]), k = {
133
+ }), [["__scopeId", "data-v-979579a9"]]), M = {
134
134
  class: "mw-mode",
135
135
  role: "group",
136
136
  "aria-label": "Colour mode"
137
- }, A = [
137
+ }, N = [
138
138
  "aria-pressed",
139
139
  "title",
140
140
  "onClick"
141
- ], j = { "aria-hidden": "true" }, M = { class: "mw-mode__label" }, N = /*#__PURE__*/ y(/* @__PURE__ */ o({
141
+ ], P = { "aria-hidden": "true" }, F = { class: "mw-mode__label" }, I = /*#__PURE__*/ y(/* @__PURE__ */ s({
142
142
  __name: "ColorModeControl",
143
143
  props: {
144
144
  modelValue: {},
@@ -154,21 +154,21 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
154
154
  light: "Light",
155
155
  dark: "Dark",
156
156
  system: "System"
157
- }, a = {
157
+ }, r = {
158
158
  light: "☀",
159
159
  dark: "☾",
160
160
  system: "🖵"
161
161
  };
162
- return (o, s) => (d(), r("div", k, [(d(!0), r(e, null, p(t.modes, (e) => (d(), r("button", {
162
+ return (o, s) => (f(), i("div", M, [(f(!0), i(e, null, m(t.modes, (e) => (f(), i("button", {
163
163
  key: e,
164
164
  type: "button",
165
- class: c(["mw-mode__btn", { "is-active": t.modelValue === e }]),
165
+ class: l(["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, h(a[e]), 1), i("span", M, h(n[e]), 1)], 10, A))), 128))]));
169
+ }, [a("span", P, g(r[e]), 1), a("span", F, g(n[e]), 1)], 10, N))), 128))]));
170
170
  }
171
- }), [["__scopeId", "data-v-e2ea0d79"]]), P = ["type", "disabled"], F = /*#__PURE__*/ y(/* @__PURE__ */ o({
171
+ }), [["__scopeId", "data-v-e2ea0d79"]]), L = ["type", "disabled"], R = /*#__PURE__*/ y(/* @__PURE__ */ s({
172
172
  __name: "UiButton",
173
173
  props: {
174
174
  variant: { default: "primary" },
@@ -179,29 +179,29 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
179
179
  }
180
180
  },
181
181
  setup(e) {
182
- return (t, n) => (d(), r("button", {
182
+ return (t, n) => (f(), i("button", {
183
183
  type: e.type,
184
184
  disabled: e.disabled,
185
- class: c(["mw-btn", `mw-btn--${e.variant}`])
186
- }, [m(t.$slots, "default", {}, void 0, !0)], 10, P));
185
+ class: l(["mw-btn", `mw-btn--${e.variant}`])
186
+ }, [h(t.$slots, "default", {}, void 0, !0)], 10, L));
187
187
  }
188
- }), [["__scopeId", "data-v-bc33cc23"]]), I = { class: "mw-card" }, L = {
188
+ }), [["__scopeId", "data-v-bc33cc23"]]), z = { class: "mw-card" }, B = {
189
189
  key: 0,
190
190
  class: "mw-card__header"
191
- }, R = { class: "mw-card__title" }, z = { class: "mw-card__body" }, B = {
191
+ }, V = { class: "mw-card__title" }, H = { class: "mw-card__body" }, fe = {
192
192
  key: 1,
193
193
  class: "mw-card__footer"
194
- }, V = /*#__PURE__*/ y(/* @__PURE__ */ o({
194
+ }, pe = /*#__PURE__*/ y(/* @__PURE__ */ s({
195
195
  __name: "UiCard",
196
196
  props: { title: {} },
197
197
  setup(e) {
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)
198
+ return (t, n) => (f(), i("section", z, [
199
+ e.title || t.$slots.header ? (f(), i("header", B, [h(t.$slots, "header", {}, () => [a("h3", V, g(e.title), 1)], !0)])) : r("", !0),
200
+ a("div", H, [h(t.$slots, "default", {}, void 0, !0)]),
201
+ t.$slots.footer ? (f(), i("footer", fe, [h(t.$slots, "footer", {}, void 0, !0)])) : r("", !0)
202
202
  ]));
203
203
  }
204
- }), [["__scopeId", "data-v-883f87f5"]]), H = { class: "mw-select" }, fe = /*#__PURE__*/ y(/* @__PURE__ */ o({
204
+ }), [["__scopeId", "data-v-883f87f5"]]), me = { class: "mw-select" }, he = /*#__PURE__*/ y(/* @__PURE__ */ s({
205
205
  inheritAttrs: !1,
206
206
  __name: "UiSelect",
207
207
  props: {
@@ -210,34 +210,34 @@ 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 = 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", {
213
+ let t = ne(e, "modelValue");
214
+ return (e, n) => (f(), i("div", me, [oe(a("select", c(e.$attrs, { "onUpdate:modelValue": n[0] ||= (e) => t.value = e }), [h(e.$slots, "default", {}, void 0, !0)], 16), [[re, t.value]]), n[1] ||= a("svg", {
215
215
  class: "mw-select__chevron",
216
216
  xmlns: "http://www.w3.org/2000/svg",
217
217
  width: "12",
218
218
  height: "8",
219
219
  viewBox: "0 0 12 8",
220
220
  "aria-hidden": "true"
221
- }, [i("path", { d: "M1 1l5 5 5-5" })], -1)]));
221
+ }, [a("path", { d: "M1 1l5 5 5-5" })], -1)]));
222
222
  }
223
- }), [["__scopeId", "data-v-7e206184"]]), pe = ["role"], me = /*#__PURE__*/ y(/* @__PURE__ */ o({
223
+ }), [["__scopeId", "data-v-7e206184"]]), ge = ["role"], _e = /*#__PURE__*/ y(/* @__PURE__ */ s({
224
224
  __name: "UiNotice",
225
225
  props: { type: {} },
226
226
  setup(e) {
227
- let n = e, i = t(() => {
227
+ let n = e, r = t(() => {
228
228
  if (n.type === "error") return "alert";
229
229
  if (n.type === "ok") return "status";
230
230
  });
231
- return (t, n) => (d(), r("p", {
232
- class: c(["mw-notice", e.type && e.type !== "info" ? `mw-notice--${e.type}` : ""]),
233
- role: i.value
234
- }, [m(t.$slots, "default", {}, void 0, !0)], 10, pe));
231
+ return (t, n) => (f(), i("p", {
232
+ class: l(["mw-notice", e.type && e.type !== "info" ? `mw-notice--${e.type}` : ""]),
233
+ role: r.value
234
+ }, [h(t.$slots, "default", {}, void 0, !0)], 10, ge));
235
235
  }
236
- }), [["__scopeId", "data-v-ee7fffb1"]]), he = ["disabled", "aria-current"], ge = {
236
+ }), [["__scopeId", "data-v-ee7fffb1"]]), ve = ["disabled", "aria-current"], ye = {
237
237
  key: 0,
238
238
  class: "sidebar-item__icon",
239
239
  "aria-hidden": "true"
240
- }, _e = { class: "sidebar-item__label" }, ve = /*#__PURE__*/ y(/* @__PURE__ */ o({
240
+ }, be = { class: "sidebar-item__label" }, xe = /*#__PURE__*/ y(/* @__PURE__ */ s({
241
241
  __name: "SidebarItem",
242
242
  props: {
243
243
  label: {},
@@ -252,14 +252,30 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
252
252
  }
253
253
  },
254
254
  setup(e) {
255
- return (t, a) => (d(), r("button", {
255
+ return (t, n) => (f(), i("button", {
256
256
  type: "button",
257
- class: c(["sidebar-item", { "is-active": e.active }]),
257
+ class: l(["sidebar-item", { "is-active": e.active }]),
258
258
  disabled: e.disabled,
259
259
  "aria-current": e.active ? "page" : void 0
260
- }, [e.icon ? (d(), r("span", ge, h(e.icon), 1)) : n("", !0), i("span", _e, h(e.label), 1)], 10, he));
260
+ }, [e.icon ? (f(), i("span", ye, g(e.icon), 1)) : r("", !0), a("span", be, g(e.label), 1)], 10, ve));
261
261
  }
262
- }), [["__scopeId", "data-v-8da2d583"]]), ye = ["aria-label"], be = ["aria-current", "onClick"], U = /*#__PURE__*/ y(/* @__PURE__ */ o({
262
+ }), [["__scopeId", "data-v-8da2d583"]]), Se = ["aria-label"], Ce = {
263
+ class: "sidebar-group__label",
264
+ "aria-hidden": "true"
265
+ }, we = { class: "sidebar-group__items" }, Te = /*#__PURE__*/ y(/* @__PURE__ */ s({
266
+ __name: "SidebarGroup",
267
+ props: {
268
+ label: {},
269
+ level: { default: 1 }
270
+ },
271
+ setup(e) {
272
+ return (t, n) => (f(), i("div", {
273
+ class: l(["sidebar-group", `sidebar-group--l${e.level}`]),
274
+ role: "group",
275
+ "aria-label": e.label
276
+ }, [a("div", Ce, g(e.label), 1), a("div", we, [h(t.$slots, "default", {}, void 0, !0)])], 10, Se));
277
+ }
278
+ }), [["__scopeId", "data-v-c8f6c8b2"]]), Ee = ["aria-label"], De = ["aria-current", "onClick"], Oe = /*#__PURE__*/ y(/* @__PURE__ */ s({
263
279
  __name: "AppTabNav",
264
280
  props: {
265
281
  tabs: {},
@@ -268,19 +284,19 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
268
284
  },
269
285
  emits: ["update:modelValue"],
270
286
  setup(t, { emit: n }) {
271
- let i = n;
272
- return (n, a) => (d(), r("nav", {
287
+ let r = n;
288
+ return (n, a) => (f(), i("nav", {
273
289
  class: "mw-tab-nav",
274
290
  "aria-label": t.ariaLabel
275
- }, [(d(!0), r(e, null, p(t.tabs, (e) => (d(), r("button", {
291
+ }, [(f(!0), i(e, null, m(t.tabs, (e) => (f(), i("button", {
276
292
  key: e.id,
277
293
  type: "button",
278
- class: c(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
294
+ class: l(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
279
295
  "aria-current": t.modelValue === e.id ? "page" : void 0,
280
- onClick: (t) => i("update:modelValue", e.id)
281
- }, h(e.label), 11, be))), 128))], 8, ye));
296
+ onClick: (t) => r("update:modelValue", e.id)
297
+ }, g(e.label), 11, De))), 128))], 8, Ee));
282
298
  }
283
- }), [["__scopeId", "data-v-97d31503"]]), xe = { class: "ca-root" }, Se = ["title"], Ce = ["title", "aria-label"], we = {
299
+ }), [["__scopeId", "data-v-97d31503"]]), ke = { class: "ca-root" }, Ae = ["title"], je = ["title", "aria-label"], Me = {
284
300
  key: 0,
285
301
  class: "ca-icon",
286
302
  viewBox: "0 0 24 24",
@@ -292,7 +308,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
292
308
  "stroke-linecap": "round",
293
309
  "stroke-linejoin": "round",
294
310
  "aria-hidden": "true"
295
- }, Te = {
311
+ }, U = {
296
312
  key: 1,
297
313
  class: "ca-icon",
298
314
  viewBox: "0 0 24 24",
@@ -304,7 +320,7 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
304
320
  "stroke-linecap": "round",
305
321
  "stroke-linejoin": "round",
306
322
  "aria-hidden": "true"
307
- }, Ee = /*#__PURE__*/ y(/* @__PURE__ */ o({
323
+ }, Ne = /*#__PURE__*/ y(/* @__PURE__ */ s({
308
324
  __name: "CopyableAddress",
309
325
  props: {
310
326
  address: {},
@@ -316,35 +332,35 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
316
332
  label: { default: "Copy" }
317
333
  },
318
334
  setup(e) {
319
- let n = e, o = f(!1), s = t(() => {
335
+ let n = e, r = p(!1), s = t(() => {
320
336
  if (!n.truncate) return n.address;
321
337
  let [e, t] = n.chars;
322
338
  return `${n.address.slice(0, e)}…${n.address.slice(-t)}`;
323
339
  });
324
- async function l() {
325
- await navigator.clipboard.writeText(n.address), o.value = !0, setTimeout(() => {
326
- o.value = !1;
340
+ async function c() {
341
+ await navigator.clipboard.writeText(n.address), r.value = !0, setTimeout(() => {
342
+ r.value = !1;
327
343
  }, 1500);
328
344
  }
329
- return (t, n) => (d(), r("span", xe, [i("span", {
345
+ return (t, n) => (f(), i("span", ke, [a("span", {
330
346
  class: "ca-value",
331
347
  title: e.address
332
- }, [m(t.$slots, "default", {}, () => [a(h(s.value), 1)], !0)], 8, Se), i("button", {
348
+ }, [h(t.$slots, "default", {}, () => [o(g(s.value), 1)], !0)], 8, Ae), a("button", {
333
349
  type: "button",
334
- class: c(["ca-copy", { "ca-copy--copied": o.value }]),
335
- title: o.value ? "Copied!" : e.label,
336
- "aria-label": o.value ? "Copied" : e.label,
337
- onClick: l
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", {
350
+ class: l(["ca-copy", { "ca-copy--copied": r.value }]),
351
+ title: r.value ? "Copied!" : e.label,
352
+ "aria-label": r.value ? "Copied" : e.label,
353
+ onClick: c
354
+ }, [r.value ? (f(), i("svg", Me, [...n[0] ||= [a("polyline", { points: "20 6 9 17 4 12" }, null, -1)]])) : (f(), i("svg", U, [...n[1] ||= [a("rect", {
339
355
  x: "9",
340
356
  y: "9",
341
357
  width: "13",
342
358
  height: "13",
343
359
  rx: "2",
344
360
  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, Ce)]));
361
+ }, null, -1), a("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, je)]));
346
362
  }
347
- }), [["__scopeId", "data-v-b43dabdd"]]), De = ["href", "title"], Oe = /*#__PURE__*/ y(/* @__PURE__ */ o({
363
+ }), [["__scopeId", "data-v-b43dabdd"]]), Pe = ["href", "title"], Fe = /*#__PURE__*/ y(/* @__PURE__ */ s({
348
364
  __name: "ExplorerLink",
349
365
  props: {
350
366
  href: {},
@@ -356,24 +372,24 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
356
372
  chars: { default: () => [6, 4] }
357
373
  },
358
374
  setup(e) {
359
- let n = e, i = t(() => {
375
+ let n = e, r = t(() => {
360
376
  if (!n.value) return "";
361
377
  if (!n.truncate) return n.value;
362
378
  let [e, t] = n.chars;
363
379
  return `${n.value.slice(0, e)}…${n.value.slice(-t)}`;
364
380
  });
365
- return (t, n) => (d(), r("a", {
381
+ return (t, n) => (f(), i("a", {
366
382
  class: "el-root",
367
- href: g(S)(e.href),
383
+ href: _(T)(e.href),
368
384
  target: "_blank",
369
385
  rel: "noopener noreferrer",
370
386
  title: e.value
371
- }, [m(t.$slots, "default", {}, () => [a(h(i.value), 1)], !0)], 8, De));
387
+ }, [h(t.$slots, "default", {}, () => [o(g(r.value), 1)], !0)], 8, Pe));
372
388
  }
373
- }), [["__scopeId", "data-v-073d1bbe"]]), ke = { class: "copyright-line" }, Ae = ["href", "aria-label"], je = { key: 0 }, Me = { key: 1 }, Ne = {
389
+ }), [["__scopeId", "data-v-073d1bbe"]]), Ie = { class: "copyright-line" }, Le = ["href", "aria-label"], Re = { key: 0 }, ze = { key: 1 }, Be = {
374
390
  key: 2,
375
391
  class: "kopimi-symbol"
376
- }, Pe = { class: "text-content" }, Fe = { key: 0 }, Ie = /*#__PURE__*/ y(/* @__PURE__ */ o({
392
+ }, Ve = { class: "text-content" }, He = { key: 0 }, Ue = /*#__PURE__*/ y(/* @__PURE__ */ s({
377
393
  __name: "CopyrightLine",
378
394
  props: {
379
395
  organisationName: {},
@@ -384,26 +400,26 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
384
400
  symbolLabel: {}
385
401
  },
386
402
  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", {
403
+ let n = e, s = t(() => n.symbolVariant), c = t(() => n.symbolHref || (s.value === "kopimi" ? "/legal/powr.broccoli-kopimi.pdf" : s.value === "copyleft" ? "/legal/copyleft.html" : "/legal/copyright.html")), l = t(() => n.symbolLabel || (s.value === "kopimi" ? "Kopimi legal notice" : s.value === "copyleft" ? "Copyleft legal notice" : "Copyright legal notice")), u = t(() => n.rightsStatement === "" ? "" : n.rightsStatement === "none" ? "No rights reserved." : n.rightsStatement === "all" || !n.rightsStatement ? "All rights reserved." : n.rightsStatement === "jam" ? "All jams preserved." : n.rightsStatement);
404
+ return (t, n) => (f(), i("small", Ie, [a("a", {
389
405
  href: c.value,
390
406
  class: "symbol-link",
391
407
  target: "_blank",
392
408
  rel: "noopener noreferrer",
393
409
  "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", {
410
+ }, [s.value === "copyright" ? (f(), i("span", Re, "©")) : s.value === "copyleft" ? (f(), i("span", ze, "🄯")) : s.value === "kopimi" ? (f(), i("span", Be, [...n[0] ||= [a("svg", {
395
411
  viewBox: "0 0 24 24",
396
412
  width: "1em",
397
413
  height: "1em",
398
414
  "aria-hidden": "true",
399
415
  focusable: "false",
400
416
  class: "kopimi-mark"
401
- }, [i("path", {
417
+ }, [a("path", {
402
418
  d: "M12 4L22 23H2Z",
403
419
  fill: "none",
404
420
  stroke: "currentColor",
405
421
  "stroke-width": "1.5"
406
- }), i("text", {
422
+ }), a("text", {
407
423
  x: "12",
408
424
  y: "18",
409
425
  "text-anchor": "middle",
@@ -411,17 +427,107 @@ var C = { class: "mw-footer__start" }, w = { class: "mw-footer__center" }, T = {
411
427
  "font-family": "system-ui, sans-serif",
412
428
  "font-size": "11",
413
429
  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(`
415
- ${u.value}`), 1)) : n("", !0)])]));
430
+ }, " C ")], -1)]])) : r("", !0)], 8, Le), a("span", Ve, [o(g(e.year) + " " + g(e.organisationName) + ".", 1), u.value ? (f(), i("span", He, g(`
431
+ ${u.value}`), 1)) : r("", !0)])]));
432
+ }
433
+ }), [["__scopeId", "data-v-1f9a5da9"]]), We = {
434
+ class: "ui-stepper",
435
+ role: "list"
436
+ }, Ge = {
437
+ key: 0,
438
+ "aria-hidden": "true"
439
+ }, Ke = {
440
+ key: 1,
441
+ "aria-hidden": "true"
442
+ }, qe = { class: "ui-stepper__label" }, Je = /*#__PURE__*/ y(/* @__PURE__ */ s({
443
+ __name: "UiStepper",
444
+ props: {
445
+ steps: {},
446
+ modelValue: {}
447
+ },
448
+ emits: ["update:modelValue"],
449
+ setup(t, { emit: r }) {
450
+ let o = t, s = r;
451
+ function c(e) {
452
+ return e < o.modelValue ? "done" : e === o.modelValue ? "active" : "upcoming";
453
+ }
454
+ function u(e) {
455
+ e < o.modelValue && s("update:modelValue", e);
456
+ }
457
+ return (r, o) => (f(), i("ol", We, [(f(!0), i(e, null, m(t.steps, (e, t) => (f(), i("li", {
458
+ key: e.id,
459
+ class: l(["ui-stepper__step", `is-${c(t)}`])
460
+ }, [(f(), n(te(c(t) === "done" ? "button" : "span"), {
461
+ class: "ui-stepper__badge",
462
+ type: c(t) === "done" ? "button" : void 0,
463
+ "aria-label": c(t) === "done" ? `Back to ${e.label}` : void 0,
464
+ "aria-current": c(t) === "active" ? "step" : void 0,
465
+ onClick: (e) => c(t) === "done" && u(t)
466
+ }, {
467
+ default: ae(() => [c(t) === "done" ? (f(), i("span", Ge, "✓")) : (f(), i("span", Ke, g(t + 1), 1))]),
468
+ _: 2
469
+ }, 1032, [
470
+ "type",
471
+ "aria-label",
472
+ "aria-current",
473
+ "onClick"
474
+ ])), a("span", qe, g(e.label), 1)], 2))), 128))]));
475
+ }
476
+ }), [["__scopeId", "data-v-33717fc3"]]), Ye = { class: "mw-field-hint" }, Xe = ["aria-describedby"], Ze = ["id"], Qe = /*#__PURE__*/ y(/* @__PURE__ */ s({
477
+ __name: "UiFieldHint",
478
+ props: { fieldId: {} },
479
+ setup(e) {
480
+ function t(e) {
481
+ e.key === "Escape" && e.currentTarget.blur();
482
+ }
483
+ return (n, r) => (f(), i("span", Ye, [a("button", {
484
+ type: "button",
485
+ class: "mw-field-hint__btn",
486
+ "aria-describedby": `${e.fieldId}-hint`,
487
+ "aria-label": "Help",
488
+ onKeydown: t
489
+ }, "?", 40, Xe), a("span", {
490
+ id: `${e.fieldId}-hint`,
491
+ role: "tooltip",
492
+ class: "mw-field-hint__tip"
493
+ }, [h(n.$slots, "default", {}, void 0, !0)], 8, Ze)]));
494
+ }
495
+ }), [["__scopeId", "data-v-4d63aaa4"]]), $e = { class: "mw-form-field" }, et = ["for"], tt = {
496
+ key: 0,
497
+ class: "mw-form-field__hint"
498
+ }, nt = ["id"], rt = /*#__PURE__*/ y(/* @__PURE__ */ s({
499
+ __name: "UiFormField",
500
+ props: {
501
+ id: {},
502
+ label: {},
503
+ error: {},
504
+ hint: {}
505
+ },
506
+ setup(e) {
507
+ let n = e, s = t(() => `${n.id}-err`), c = t(() => ({
508
+ id: n.id,
509
+ "aria-invalid": n.error ? !0 : void 0,
510
+ "aria-describedby": n.error ? s.value : void 0
511
+ }));
512
+ return (t, n) => (f(), i("div", $e, [
513
+ a("label", { for: e.id }, [o(g(e.label), 1), h(t.$slots, "label-suffix", {}, void 0, !0)], 8, et),
514
+ h(t.$slots, "default", { attrs: c.value }, void 0, !0),
515
+ e.hint && !e.error ? (f(), i("p", tt, g(e.hint), 1)) : r("", !0),
516
+ e.error ? (f(), i("p", {
517
+ key: 1,
518
+ id: s.value,
519
+ class: "mw-form-field__error"
520
+ }, g(e.error), 9, nt)) : r("", !0)
521
+ ]));
416
522
  }
417
- }), [["__scopeId", "data-v-1f9a5da9"]]), Le = /* @__PURE__ */ new Set([
523
+ }), [["__scopeId", "data-v-c22333c7"]]), it = /* @__PURE__ */ new Set([
418
524
  "operational",
419
525
  "degraded",
420
526
  "down",
421
527
  "unknown"
422
528
  ]);
423
529
  function W(e) {
424
- return typeof e == "string" && Le.has(e);
530
+ return typeof e == "string" && it.has(e);
425
531
  }
426
532
  function G(e) {
427
533
  return W(e) ? e : "unknown";
@@ -429,7 +535,7 @@ function G(e) {
429
535
  function K(e) {
430
536
  return typeof e != "string" || e.trim() === "" ? "" : e.replace(/[<>&"]/g, "");
431
537
  }
432
- function Re(e) {
538
+ function at(e) {
433
539
  if (typeof e != "object" || !e) return null;
434
540
  let t = e, n = K(t.name);
435
541
  return n ? {
@@ -437,11 +543,11 @@ function Re(e) {
437
543
  status: G(t.status)
438
544
  } : null;
439
545
  }
440
- function ze(e) {
546
+ function ot(e) {
441
547
  if (typeof e != "object" || !e) return null;
442
548
  let t = e, n = K(t.name);
443
549
  if (!n) return null;
444
- let r = Array.isArray(t.components) ? t.components.map(Re).filter((e) => e !== null) : [];
550
+ let r = Array.isArray(t.components) ? t.components.map(at).filter((e) => e !== null) : [];
445
551
  return {
446
552
  name: n,
447
553
  status: G(t.status),
@@ -452,7 +558,7 @@ function q(e) {
452
558
  if (typeof e != "object" || !e) return null;
453
559
  let t = e;
454
560
  if (!W(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
455
- let n = t.groups.map(ze).filter((e) => e !== null);
561
+ let n = t.groups.map(ot).filter((e) => e !== null);
456
562
  return {
457
563
  generated_at: t.generated_at,
458
564
  overall: t.overall,
@@ -461,7 +567,7 @@ function q(e) {
461
567
  }
462
568
  //#endregion
463
569
  //#region src/components/StatusWidget.vue?vue&type=script&setup=true&lang.ts
464
- var Be = ["href", "title"], Ve = { class: "status-widget__label" }, He = /*#__PURE__*/ y(/* @__PURE__ */ o({
570
+ var st = ["href", "title"], ct = { class: "status-widget__label" }, lt = /*#__PURE__*/ y(/* @__PURE__ */ s({
465
571
  __name: "StatusWidget",
466
572
  props: {
467
573
  apiUrl: { default: "https://status.meddleware.co.uk/api/status" },
@@ -474,59 +580,59 @@ var Be = ["href", "title"], Ve = { class: "status-widget__label" }, He = /*#__PU
474
580
  degraded: "degraded",
475
581
  down: "error",
476
582
  unknown: "degraded"
477
- }, a = {
583
+ }, r = {
478
584
  operational: "All systems operational",
479
585
  degraded: "Degraded",
480
586
  down: "Major outage",
481
587
  unknown: "Status unknown"
482
- }, o = f("ok"), s = f("All systems operational"), l = null;
483
- async function p() {
588
+ }, o = p("ok"), s = p("All systems operational"), c = null;
589
+ async function u() {
484
590
  try {
485
591
  let e = await fetch(t.apiUrl);
486
592
  if (!e.ok) throw Error(`HTTP ${e.status}`);
487
- let r = q(await e.json());
488
- if (!r) throw Error("unexpected response shape");
489
- o.value = n[r.overall], s.value = a[r.overall];
593
+ let i = q(await e.json());
594
+ if (!i) throw Error("unexpected response shape");
595
+ o.value = n[i.overall], s.value = r[i.overall];
490
596
  } catch {
491
597
  o.value = "error", s.value = "Status unavailable";
492
598
  }
493
599
  }
494
- return u(() => {
495
- p(), l = setInterval(p, t.pollInterval);
496
- }), ee(() => {
497
- l !== null && clearInterval(l);
498
- }), (t, n) => (d(), r("a", {
499
- href: g(S)(e.href),
600
+ return ee(() => {
601
+ u(), c = setInterval(u, t.pollInterval);
602
+ }), d(() => {
603
+ c !== null && clearInterval(c);
604
+ }), (t, n) => (f(), i("a", {
605
+ href: _(T)(e.href),
500
606
  target: "_blank",
501
607
  rel: "noopener noreferrer",
502
- class: c(["status-widget", `status-widget--${o.value}`]),
608
+ class: l(["status-widget", `status-widget--${o.value}`]),
503
609
  title: `Platform status: ${s.value}`
504
- }, [n[0] ||= i("span", {
610
+ }, [n[0] ||= a("span", {
505
611
  class: "status-widget__dot",
506
612
  "aria-hidden": "true"
507
- }, null, -1), i("span", Ve, h(s.value), 1)], 10, Be));
613
+ }, null, -1), a("span", ct, g(s.value), 1)], 10, st));
508
614
  }
509
615
  }), [["__scopeId", "data-v-6436368e"]]), J = {
510
616
  mainnet: "https://suivision.xyz",
511
617
  testnet: "https://testnet.suivision.xyz",
512
618
  devnet: "https://devnet.suivision.xyz"
513
619
  };
514
- function Ue(e, t, n = "testnet") {
620
+ function ut(e, t, n = "testnet") {
515
621
  return `${J[n] ?? J.testnet}/${e}/${t}`;
516
622
  }
517
623
  //#endregion
518
624
  //#region src/composables/useColorMode.ts
519
- var Y = "mw-color-mode", X = f("system"), Z = !1;
520
- function We() {
625
+ var Y = "mw-color-mode", X = p("system"), Z = !1;
626
+ function dt() {
521
627
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
522
628
  }
523
629
  function Q(e) {
524
- return e === "dark" || e === "system" && We();
630
+ return e === "dark" || e === "system" && dt();
525
631
  }
526
632
  function $(e) {
527
633
  typeof document < "u" && document.documentElement.setAttribute("data-theme", Q(e) ? "dark" : "light");
528
634
  }
529
- function Ge(e = "system") {
635
+ function ft(e = "system") {
530
636
  if (!Z) {
531
637
  Z = !0;
532
638
  let t = null;
@@ -535,7 +641,7 @@ function Ge(e = "system") {
535
641
  } catch {}
536
642
  X.value = t ?? e, $(X.value), typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
537
643
  X.value === "system" && $("system");
538
- }), ne(X, (e) => {
644
+ }), ie(X, (e) => {
539
645
  $(e);
540
646
  try {
541
647
  typeof localStorage < "u" && localStorage.setItem(Y, e);
@@ -557,10 +663,10 @@ function Ge(e = "system") {
557
663
  }
558
664
  //#endregion
559
665
  //#region src/composables/useSeason.ts
560
- function Ke() {
666
+ function pt() {
561
667
  if (typeof document > "u") return;
562
668
  let e = (/* @__PURE__ */ new Date()).getMonth(), t = e >= 2 && e <= 4 ? "spring" : e >= 5 && e <= 7 ? "summer" : e >= 8 && e <= 10 ? "autumn" : "winter";
563
669
  document.documentElement.dataset.season = t;
564
670
  }
565
671
  //#endregion
566
- 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 };
672
+ export { j as AppFooter, de as AppHeader, w as AppSidebar, Oe as AppTabNav, I as ColorModeControl, Ne as CopyableAddress, Ue as CopyrightLine, Fe as ExplorerLink, Te as SidebarGroup, xe as SidebarItem, lt as StatusWidget, R as UiButton, pe as UiCard, Qe as UiFieldHint, rt as UiFormField, _e as UiNotice, he as UiSelect, Je as UiStepper, W as isStatusLevel, q as parseSnapshot, T as safeHref, ut as suiExplorerUrl, ft as useColorMode, pt as useSeason };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meddleware/ui",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
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",