@meddleware/ui 0.1.20 → 0.1.21

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}.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,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,14 @@ 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';
16
19
  export { default as StatusWidget } from './components/StatusWidget.vue';
17
20
  export { suiExplorerUrl } from './explorer.js';
18
21
  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
+ }, Ne = {
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
+ }, Pe = /*#__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", Ne, [...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"]]), Fe = ["href", "title"], Ie = /*#__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, Fe));
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"]]), Le = { class: "copyright-line" }, Re = ["href", "aria-label"], ze = { key: 0 }, Be = { key: 1 }, Ve = {
374
390
  key: 2,
375
391
  class: "kopimi-symbol"
376
- }, Pe = { class: "text-content" }, Fe = { key: 0 }, Ie = /*#__PURE__*/ y(/* @__PURE__ */ o({
392
+ }, He = { class: "text-content" }, Ue = { key: 0 }, We = /*#__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", Le, [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", ze, "©")) : s.value === "copyleft" ? (f(), i("span", Be, "🄯")) : s.value === "kopimi" ? (f(), i("span", Ve, [...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,48 +427,91 @@ 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, Re), a("span", He, [o(g(e.year) + " " + g(e.organisationName) + ".", 1), u.value ? (f(), i("span", Ue, g(`
431
+ ${u.value}`), 1)) : r("", !0)])]));
416
432
  }
417
- }), [["__scopeId", "data-v-1f9a5da9"]]), Le = /* @__PURE__ */ new Set([
433
+ }), [["__scopeId", "data-v-1f9a5da9"]]), Ge = {
434
+ class: "ui-stepper",
435
+ role: "list"
436
+ }, Ke = {
437
+ key: 0,
438
+ "aria-hidden": "true"
439
+ }, qe = {
440
+ key: 1,
441
+ "aria-hidden": "true"
442
+ }, Je = { class: "ui-stepper__label" }, Ye = /*#__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", Ge, [(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", Ke, "✓")) : (f(), i("span", qe, g(t + 1), 1))]),
468
+ _: 2
469
+ }, 1032, [
470
+ "type",
471
+ "aria-label",
472
+ "aria-current",
473
+ "onClick"
474
+ ])), a("span", Je, g(e.label), 1)], 2))), 128))]));
475
+ }
476
+ }), [["__scopeId", "data-v-33717fc3"]]), Xe = /* @__PURE__ */ new Set([
418
477
  "operational",
419
478
  "degraded",
420
479
  "down",
421
480
  "unknown"
422
481
  ]);
482
+ function U(e) {
483
+ return typeof e == "string" && Xe.has(e);
484
+ }
423
485
  function W(e) {
424
- return typeof e == "string" && Le.has(e);
486
+ return U(e) ? e : "unknown";
425
487
  }
426
488
  function G(e) {
427
- return W(e) ? e : "unknown";
428
- }
429
- function K(e) {
430
489
  return typeof e != "string" || e.trim() === "" ? "" : e.replace(/[<>&"]/g, "");
431
490
  }
432
- function Re(e) {
491
+ function Ze(e) {
433
492
  if (typeof e != "object" || !e) return null;
434
- let t = e, n = K(t.name);
493
+ let t = e, n = G(t.name);
435
494
  return n ? {
436
495
  name: n,
437
- status: G(t.status)
496
+ status: W(t.status)
438
497
  } : null;
439
498
  }
440
- function ze(e) {
499
+ function Qe(e) {
441
500
  if (typeof e != "object" || !e) return null;
442
- let t = e, n = K(t.name);
501
+ let t = e, n = G(t.name);
443
502
  if (!n) return null;
444
- let r = Array.isArray(t.components) ? t.components.map(Re).filter((e) => e !== null) : [];
503
+ let r = Array.isArray(t.components) ? t.components.map(Ze).filter((e) => e !== null) : [];
445
504
  return {
446
505
  name: n,
447
- status: G(t.status),
506
+ status: W(t.status),
448
507
  components: r
449
508
  };
450
509
  }
451
- function q(e) {
510
+ function K(e) {
452
511
  if (typeof e != "object" || !e) return null;
453
512
  let t = e;
454
- 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);
513
+ if (!U(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
514
+ let n = t.groups.map(Qe).filter((e) => e !== null);
456
515
  return {
457
516
  generated_at: t.generated_at,
458
517
  overall: t.overall,
@@ -461,7 +520,7 @@ function q(e) {
461
520
  }
462
521
  //#endregion
463
522
  //#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({
523
+ var $e = ["href", "title"], et = { class: "status-widget__label" }, q = /*#__PURE__*/ y(/* @__PURE__ */ s({
465
524
  __name: "StatusWidget",
466
525
  props: {
467
526
  apiUrl: { default: "https://status.meddleware.co.uk/api/status" },
@@ -474,59 +533,59 @@ var Be = ["href", "title"], Ve = { class: "status-widget__label" }, He = /*#__PU
474
533
  degraded: "degraded",
475
534
  down: "error",
476
535
  unknown: "degraded"
477
- }, a = {
536
+ }, r = {
478
537
  operational: "All systems operational",
479
538
  degraded: "Degraded",
480
539
  down: "Major outage",
481
540
  unknown: "Status unknown"
482
- }, o = f("ok"), s = f("All systems operational"), l = null;
483
- async function p() {
541
+ }, o = p("ok"), s = p("All systems operational"), c = null;
542
+ async function u() {
484
543
  try {
485
544
  let e = await fetch(t.apiUrl);
486
545
  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];
546
+ let i = K(await e.json());
547
+ if (!i) throw Error("unexpected response shape");
548
+ o.value = n[i.overall], s.value = r[i.overall];
490
549
  } catch {
491
550
  o.value = "error", s.value = "Status unavailable";
492
551
  }
493
552
  }
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),
553
+ return ee(() => {
554
+ u(), c = setInterval(u, t.pollInterval);
555
+ }), d(() => {
556
+ c !== null && clearInterval(c);
557
+ }), (t, n) => (f(), i("a", {
558
+ href: _(T)(e.href),
500
559
  target: "_blank",
501
560
  rel: "noopener noreferrer",
502
- class: c(["status-widget", `status-widget--${o.value}`]),
561
+ class: l(["status-widget", `status-widget--${o.value}`]),
503
562
  title: `Platform status: ${s.value}`
504
- }, [n[0] ||= i("span", {
563
+ }, [n[0] ||= a("span", {
505
564
  class: "status-widget__dot",
506
565
  "aria-hidden": "true"
507
- }, null, -1), i("span", Ve, h(s.value), 1)], 10, Be));
566
+ }, null, -1), a("span", et, g(s.value), 1)], 10, $e));
508
567
  }
509
568
  }), [["__scopeId", "data-v-6436368e"]]), J = {
510
569
  mainnet: "https://suivision.xyz",
511
570
  testnet: "https://testnet.suivision.xyz",
512
571
  devnet: "https://devnet.suivision.xyz"
513
572
  };
514
- function Ue(e, t, n = "testnet") {
573
+ function tt(e, t, n = "testnet") {
515
574
  return `${J[n] ?? J.testnet}/${e}/${t}`;
516
575
  }
517
576
  //#endregion
518
577
  //#region src/composables/useColorMode.ts
519
- var Y = "mw-color-mode", X = f("system"), Z = !1;
520
- function We() {
578
+ var Y = "mw-color-mode", X = p("system"), Z = !1;
579
+ function nt() {
521
580
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
522
581
  }
523
582
  function Q(e) {
524
- return e === "dark" || e === "system" && We();
583
+ return e === "dark" || e === "system" && nt();
525
584
  }
526
585
  function $(e) {
527
586
  typeof document < "u" && document.documentElement.setAttribute("data-theme", Q(e) ? "dark" : "light");
528
587
  }
529
- function Ge(e = "system") {
588
+ function rt(e = "system") {
530
589
  if (!Z) {
531
590
  Z = !0;
532
591
  let t = null;
@@ -535,7 +594,7 @@ function Ge(e = "system") {
535
594
  } catch {}
536
595
  X.value = t ?? e, $(X.value), typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
537
596
  X.value === "system" && $("system");
538
- }), ne(X, (e) => {
597
+ }), ie(X, (e) => {
539
598
  $(e);
540
599
  try {
541
600
  typeof localStorage < "u" && localStorage.setItem(Y, e);
@@ -557,10 +616,10 @@ function Ge(e = "system") {
557
616
  }
558
617
  //#endregion
559
618
  //#region src/composables/useSeason.ts
560
- function Ke() {
619
+ function it() {
561
620
  if (typeof document > "u") return;
562
621
  let e = (/* @__PURE__ */ new Date()).getMonth(), t = e >= 2 && e <= 4 ? "spring" : e >= 5 && e <= 7 ? "summer" : e >= 8 && e <= 10 ? "autumn" : "winter";
563
622
  document.documentElement.dataset.season = t;
564
623
  }
565
624
  //#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 };
625
+ export { j as AppFooter, de as AppHeader, w as AppSidebar, Oe as AppTabNav, I as ColorModeControl, Pe as CopyableAddress, We as CopyrightLine, Ie as ExplorerLink, Te as SidebarGroup, xe as SidebarItem, q as StatusWidget, R as UiButton, pe as UiCard, _e as UiNotice, he as UiSelect, Ye as UiStepper, U as isStatusLevel, K as parseSnapshot, T as safeHref, tt as suiExplorerUrl, rt as useColorMode, it 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.21",
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",