@meddleware/ui 0.1.21 → 0.1.23

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}.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)}
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-3f874e32]{gap:var(--space-3xs);border-bottom:2px solid var(--border);display:flex}.mw-tab-nav__tab[data-v-3f874e32]{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;border-radius:0;margin-bottom:-2px}.mw-tab-nav__tab[data-v-3f874e32]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-3f874e32]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.mw-tab-nav--raised[data-v-3f874e32]{border-bottom:1px solid var(--border);background:var(--surface);scrollbar-width:none;flex-shrink:0;align-items:flex-end;gap:2px;padding:4px 4px 0;overflow-x:auto}.mw-tab-nav--raised[data-v-3f874e32]::-webkit-scrollbar{display:none}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-3f874e32]{border-bottom:1px solid var(--border);color:var(--muted);background:var(--lift);letter-spacing:.01em;white-space:nowrap;transition:color var(--transition-base), background var(--transition-base), border-color var(--transition-base);border-top:2px solid #0000;border-left:1px solid #0000;border-right:1px solid #0000;margin-bottom:-1px;padding:5px 14px 6px;font-size:.8rem;font-weight:500}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-3f874e32]:hover:not(.mw-tab-nav__tab--active){color:var(--text);background:var(--surface)}.mw-tab-nav--raised .mw-tab-nav__tab--active[data-v-3f874e32]{color:var(--text);background:var(--bg);border-top-color:var(--accent);border-left-color:var(--border);border-right-color:var(--border);border-bottom-color:var(--bg);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-seg[data-v-11f45a0a]{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.mw-seg__item[data-v-11f45a0a]{height:2rem;padding:0 var(--space-sm);border-right:1px solid var(--border);cursor:pointer;font-size:var(--font-size-sm);color:var(--muted);transition:background var(--transition-base), color var(--transition-base);-webkit-user-select:none;user-select:none;white-space:nowrap;background:0 0;justify-content:center;align-items:center;display:flex}.mw-seg__item[data-v-11f45a0a]:last-child{border-right:none}.mw-seg__item--active[data-v-11f45a0a]{background:var(--accent);color:var(--accent-contrast)}.mw-seg__item--disabled[data-v-11f45a0a]{opacity:.5;pointer-events:none;cursor:not-allowed}.mw-seg__item input[type=radio][data-v-11f45a0a]{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.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*/
@@ -6,11 +6,14 @@ type __VLS_Props = {
6
6
  tabs: AppTab[];
7
7
  modelValue: string;
8
8
  ariaLabel?: string;
9
+ variant?: 'underline' | 'raised';
9
10
  };
10
11
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
12
  "update:modelValue": (id: string) => any;
12
13
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
13
14
  "onUpdate:modelValue"?: ((id: string) => any) | undefined;
14
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ }>, {
16
+ variant: "underline" | "raised";
17
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
18
  declare const _default: typeof __VLS_export;
16
19
  export default _default;
@@ -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,18 @@
1
+ export interface SegmentedOption {
2
+ id: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ title?: string;
6
+ }
7
+ type __VLS_Props = {
8
+ options: SegmentedOption[];
9
+ modelValue: string;
10
+ ariaLabel?: string;
11
+ };
12
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ "update:modelValue": (id: string) => any;
14
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
+ "onUpdate:modelValue"?: ((id: string) => any) | undefined;
16
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
+ declare const _default: typeof __VLS_export;
18
+ export default _default;
package/dist/index.d.ts CHANGED
@@ -16,6 +16,10 @@ export { default as ExplorerLink } from './components/ExplorerLink.vue';
16
16
  export { default as CopyrightLine } from './components/CopyrightLine.vue';
17
17
  export { default as UiStepper } from './components/UiStepper.vue';
18
18
  export type { StepperStep } from './components/UiStepper.vue';
19
+ export { default as UiSegmentedControl } from './components/UiSegmentedControl.vue';
20
+ export type { SegmentedOption } from './components/UiSegmentedControl.vue';
21
+ export { default as UiFieldHint } from './components/UiFieldHint.vue';
22
+ export { default as UiFormField } from './components/UiFormField.vue';
19
23
  export { default as StatusWidget } from './components/StatusWidget.vue';
20
24
  export { suiExplorerUrl } from './explorer.js';
21
25
  export type { SuiNetwork, SuiExplorerKind } from './explorer.js';
package/dist/ui.js CHANGED
@@ -280,13 +280,14 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
280
280
  props: {
281
281
  tabs: {},
282
282
  modelValue: {},
283
- ariaLabel: {}
283
+ ariaLabel: {},
284
+ variant: { default: "underline" }
284
285
  },
285
286
  emits: ["update:modelValue"],
286
287
  setup(t, { emit: n }) {
287
288
  let r = n;
288
289
  return (n, a) => (f(), i("nav", {
289
- class: "mw-tab-nav",
290
+ class: l(["mw-tab-nav", { "mw-tab-nav--raised": t.variant === "raised" }]),
290
291
  "aria-label": t.ariaLabel
291
292
  }, [(f(!0), i(e, null, m(t.tabs, (e) => (f(), i("button", {
292
293
  key: e.id,
@@ -294,9 +295,9 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
294
295
  class: l(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
295
296
  "aria-current": t.modelValue === e.id ? "page" : void 0,
296
297
  onClick: (t) => r("update:modelValue", e.id)
297
- }, g(e.label), 11, De))), 128))], 8, Ee));
298
+ }, g(e.label), 11, De))), 128))], 10, Ee));
298
299
  }
299
- }), [["__scopeId", "data-v-97d31503"]]), ke = { class: "ca-root" }, Ae = ["title"], je = ["title", "aria-label"], Me = {
300
+ }), [["__scopeId", "data-v-3f874e32"]]), ke = { class: "ca-root" }, Ae = ["title"], je = ["title", "aria-label"], Me = {
300
301
  key: 0,
301
302
  class: "ca-icon",
302
303
  viewBox: "0 0 24 24",
@@ -308,7 +309,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
308
309
  "stroke-linecap": "round",
309
310
  "stroke-linejoin": "round",
310
311
  "aria-hidden": "true"
311
- }, Ne = {
312
+ }, U = {
312
313
  key: 1,
313
314
  class: "ca-icon",
314
315
  viewBox: "0 0 24 24",
@@ -320,7 +321,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
320
321
  "stroke-linecap": "round",
321
322
  "stroke-linejoin": "round",
322
323
  "aria-hidden": "true"
323
- }, Pe = /*#__PURE__*/ y(/* @__PURE__ */ s({
324
+ }, Ne = /*#__PURE__*/ y(/* @__PURE__ */ s({
324
325
  __name: "CopyableAddress",
325
326
  props: {
326
327
  address: {},
@@ -351,7 +352,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
351
352
  title: r.value ? "Copied!" : e.label,
352
353
  "aria-label": r.value ? "Copied" : e.label,
353
354
  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", {
355
+ }, [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", {
355
356
  x: "9",
356
357
  y: "9",
357
358
  width: "13",
@@ -360,7 +361,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
360
361
  ry: "2"
361
362
  }, 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)]));
362
363
  }
363
- }), [["__scopeId", "data-v-b43dabdd"]]), Fe = ["href", "title"], Ie = /*#__PURE__*/ y(/* @__PURE__ */ s({
364
+ }), [["__scopeId", "data-v-b43dabdd"]]), Pe = ["href", "title"], Fe = /*#__PURE__*/ y(/* @__PURE__ */ s({
364
365
  __name: "ExplorerLink",
365
366
  props: {
366
367
  href: {},
@@ -384,12 +385,12 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
384
385
  target: "_blank",
385
386
  rel: "noopener noreferrer",
386
387
  title: e.value
387
- }, [h(t.$slots, "default", {}, () => [o(g(r.value), 1)], !0)], 8, Fe));
388
+ }, [h(t.$slots, "default", {}, () => [o(g(r.value), 1)], !0)], 8, Pe));
388
389
  }
389
- }), [["__scopeId", "data-v-073d1bbe"]]), Le = { class: "copyright-line" }, Re = ["href", "aria-label"], ze = { key: 0 }, Be = { key: 1 }, Ve = {
390
+ }), [["__scopeId", "data-v-073d1bbe"]]), Ie = { class: "copyright-line" }, Le = ["href", "aria-label"], Re = { key: 0 }, ze = { key: 1 }, Be = {
390
391
  key: 2,
391
392
  class: "kopimi-symbol"
392
- }, He = { class: "text-content" }, Ue = { key: 0 }, We = /*#__PURE__*/ y(/* @__PURE__ */ s({
393
+ }, Ve = { class: "text-content" }, He = { key: 0 }, Ue = /*#__PURE__*/ y(/* @__PURE__ */ s({
393
394
  __name: "CopyrightLine",
394
395
  props: {
395
396
  organisationName: {},
@@ -401,13 +402,13 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
401
402
  },
402
403
  setup(e) {
403
404
  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", {
405
+ return (t, n) => (f(), i("small", Ie, [a("a", {
405
406
  href: c.value,
406
407
  class: "symbol-link",
407
408
  target: "_blank",
408
409
  rel: "noopener noreferrer",
409
410
  "aria-label": l.value
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", {
411
+ }, [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", {
411
412
  viewBox: "0 0 24 24",
412
413
  width: "1em",
413
414
  height: "1em",
@@ -427,19 +428,19 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
427
428
  "font-family": "system-ui, sans-serif",
428
429
  "font-size": "11",
429
430
  fill: "currentColor"
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
+ }, " 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
432
  ${u.value}`), 1)) : r("", !0)])]));
432
433
  }
433
- }), [["__scopeId", "data-v-1f9a5da9"]]), Ge = {
434
+ }), [["__scopeId", "data-v-1f9a5da9"]]), We = {
434
435
  class: "ui-stepper",
435
436
  role: "list"
436
- }, Ke = {
437
+ }, Ge = {
437
438
  key: 0,
438
439
  "aria-hidden": "true"
439
- }, qe = {
440
+ }, Ke = {
440
441
  key: 1,
441
442
  "aria-hidden": "true"
442
- }, Je = { class: "ui-stepper__label" }, Ye = /*#__PURE__*/ y(/* @__PURE__ */ s({
443
+ }, qe = { class: "ui-stepper__label" }, Je = /*#__PURE__*/ y(/* @__PURE__ */ s({
443
444
  __name: "UiStepper",
444
445
  props: {
445
446
  steps: {},
@@ -454,7 +455,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
454
455
  function u(e) {
455
456
  e < o.modelValue && s("update:modelValue", e);
456
457
  }
457
- return (r, o) => (f(), i("ol", Ge, [(f(!0), i(e, null, m(t.steps, (e, t) => (f(), i("li", {
458
+ return (r, o) => (f(), i("ol", We, [(f(!0), i(e, null, m(t.steps, (e, t) => (f(), i("li", {
458
459
  key: e.id,
459
460
  class: l(["ui-stepper__step", `is-${c(t)}`])
460
461
  }, [(f(), n(te(c(t) === "done" ? "button" : "span"), {
@@ -464,54 +465,135 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
464
465
  "aria-current": c(t) === "active" ? "step" : void 0,
465
466
  onClick: (e) => c(t) === "done" && u(t)
466
467
  }, {
467
- default: ae(() => [c(t) === "done" ? (f(), i("span", Ke, "✓")) : (f(), i("span", qe, g(t + 1), 1))]),
468
+ default: ae(() => [c(t) === "done" ? (f(), i("span", Ge, "✓")) : (f(), i("span", Ke, g(t + 1), 1))]),
468
469
  _: 2
469
470
  }, 1032, [
470
471
  "type",
471
472
  "aria-label",
472
473
  "aria-current",
473
474
  "onClick"
474
- ])), a("span", Je, g(e.label), 1)], 2))), 128))]));
475
+ ])), a("span", qe, g(e.label), 1)], 2))), 128))]));
476
+ }
477
+ }), [["__scopeId", "data-v-33717fc3"]]), Ye = ["aria-label"], Xe = ["title"], Ze = [
478
+ "value",
479
+ "checked",
480
+ "disabled",
481
+ "onChange"
482
+ ], Qe = /*#__PURE__*/ y(/* @__PURE__ */ s({
483
+ __name: "UiSegmentedControl",
484
+ props: {
485
+ options: {},
486
+ modelValue: {},
487
+ ariaLabel: {}
488
+ },
489
+ emits: ["update:modelValue"],
490
+ setup(t, { emit: n }) {
491
+ let r = n;
492
+ return (n, s) => (f(), i("div", {
493
+ class: "mw-seg",
494
+ role: "group",
495
+ "aria-label": t.ariaLabel
496
+ }, [(f(!0), i(e, null, m(t.options, (e) => (f(), i("label", {
497
+ key: e.id,
498
+ class: l(["mw-seg__item", {
499
+ "mw-seg__item--active": t.modelValue === e.id,
500
+ "mw-seg__item--disabled": e.disabled
501
+ }]),
502
+ title: e.title
503
+ }, [a("input", {
504
+ type: "radio",
505
+ value: e.id,
506
+ checked: t.modelValue === e.id,
507
+ disabled: e.disabled,
508
+ onChange: (t) => r("update:modelValue", e.id)
509
+ }, null, 40, Ze), o(" " + g(e.label), 1)], 10, Xe))), 128))], 8, Ye));
475
510
  }
476
- }), [["__scopeId", "data-v-33717fc3"]]), Xe = /* @__PURE__ */ new Set([
511
+ }), [["__scopeId", "data-v-11f45a0a"]]), $e = { class: "mw-field-hint" }, et = ["aria-describedby"], tt = ["id"], nt = /*#__PURE__*/ y(/* @__PURE__ */ s({
512
+ __name: "UiFieldHint",
513
+ props: { fieldId: {} },
514
+ setup(e) {
515
+ function t(e) {
516
+ e.key === "Escape" && e.currentTarget.blur();
517
+ }
518
+ return (n, r) => (f(), i("span", $e, [a("button", {
519
+ type: "button",
520
+ class: "mw-field-hint__btn",
521
+ "aria-describedby": `${e.fieldId}-hint`,
522
+ "aria-label": "Help",
523
+ onKeydown: t
524
+ }, "?", 40, et), a("span", {
525
+ id: `${e.fieldId}-hint`,
526
+ role: "tooltip",
527
+ class: "mw-field-hint__tip"
528
+ }, [h(n.$slots, "default", {}, void 0, !0)], 8, tt)]));
529
+ }
530
+ }), [["__scopeId", "data-v-4d63aaa4"]]), rt = { class: "mw-form-field" }, it = ["for"], at = {
531
+ key: 0,
532
+ class: "mw-form-field__hint"
533
+ }, ot = ["id"], st = /*#__PURE__*/ y(/* @__PURE__ */ s({
534
+ __name: "UiFormField",
535
+ props: {
536
+ id: {},
537
+ label: {},
538
+ error: {},
539
+ hint: {}
540
+ },
541
+ setup(e) {
542
+ let n = e, s = t(() => `${n.id}-err`), c = t(() => ({
543
+ id: n.id,
544
+ "aria-invalid": n.error ? !0 : void 0,
545
+ "aria-describedby": n.error ? s.value : void 0
546
+ }));
547
+ return (t, n) => (f(), i("div", rt, [
548
+ a("label", { for: e.id }, [o(g(e.label), 1), h(t.$slots, "label-suffix", {}, void 0, !0)], 8, it),
549
+ h(t.$slots, "default", { attrs: c.value }, void 0, !0),
550
+ e.hint && !e.error ? (f(), i("p", at, g(e.hint), 1)) : r("", !0),
551
+ e.error ? (f(), i("p", {
552
+ key: 1,
553
+ id: s.value,
554
+ class: "mw-form-field__error"
555
+ }, g(e.error), 9, ot)) : r("", !0)
556
+ ]));
557
+ }
558
+ }), [["__scopeId", "data-v-c22333c7"]]), ct = /* @__PURE__ */ new Set([
477
559
  "operational",
478
560
  "degraded",
479
561
  "down",
480
562
  "unknown"
481
563
  ]);
482
- function U(e) {
483
- return typeof e == "string" && Xe.has(e);
484
- }
485
564
  function W(e) {
486
- return U(e) ? e : "unknown";
565
+ return typeof e == "string" && ct.has(e);
487
566
  }
488
567
  function G(e) {
568
+ return W(e) ? e : "unknown";
569
+ }
570
+ function K(e) {
489
571
  return typeof e != "string" || e.trim() === "" ? "" : e.replace(/[<>&"]/g, "");
490
572
  }
491
- function Ze(e) {
573
+ function lt(e) {
492
574
  if (typeof e != "object" || !e) return null;
493
- let t = e, n = G(t.name);
575
+ let t = e, n = K(t.name);
494
576
  return n ? {
495
577
  name: n,
496
- status: W(t.status)
578
+ status: G(t.status)
497
579
  } : null;
498
580
  }
499
- function Qe(e) {
581
+ function ut(e) {
500
582
  if (typeof e != "object" || !e) return null;
501
- let t = e, n = G(t.name);
583
+ let t = e, n = K(t.name);
502
584
  if (!n) return null;
503
- let r = Array.isArray(t.components) ? t.components.map(Ze).filter((e) => e !== null) : [];
585
+ let r = Array.isArray(t.components) ? t.components.map(lt).filter((e) => e !== null) : [];
504
586
  return {
505
587
  name: n,
506
- status: W(t.status),
588
+ status: G(t.status),
507
589
  components: r
508
590
  };
509
591
  }
510
- function K(e) {
592
+ function q(e) {
511
593
  if (typeof e != "object" || !e) return null;
512
594
  let t = e;
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);
595
+ if (!W(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
596
+ let n = t.groups.map(ut).filter((e) => e !== null);
515
597
  return {
516
598
  generated_at: t.generated_at,
517
599
  overall: t.overall,
@@ -520,7 +602,7 @@ function K(e) {
520
602
  }
521
603
  //#endregion
522
604
  //#region src/components/StatusWidget.vue?vue&type=script&setup=true&lang.ts
523
- var $e = ["href", "title"], et = { class: "status-widget__label" }, q = /*#__PURE__*/ y(/* @__PURE__ */ s({
605
+ var dt = ["href", "title"], ft = { class: "status-widget__label" }, pt = /*#__PURE__*/ y(/* @__PURE__ */ s({
524
606
  __name: "StatusWidget",
525
607
  props: {
526
608
  apiUrl: { default: "https://status.meddleware.co.uk/api/status" },
@@ -543,7 +625,7 @@ var $e = ["href", "title"], et = { class: "status-widget__label" }, q = /*#__PUR
543
625
  try {
544
626
  let e = await fetch(t.apiUrl);
545
627
  if (!e.ok) throw Error(`HTTP ${e.status}`);
546
- let i = K(await e.json());
628
+ let i = q(await e.json());
547
629
  if (!i) throw Error("unexpected response shape");
548
630
  o.value = n[i.overall], s.value = r[i.overall];
549
631
  } catch {
@@ -563,29 +645,29 @@ var $e = ["href", "title"], et = { class: "status-widget__label" }, q = /*#__PUR
563
645
  }, [n[0] ||= a("span", {
564
646
  class: "status-widget__dot",
565
647
  "aria-hidden": "true"
566
- }, null, -1), a("span", et, g(s.value), 1)], 10, $e));
648
+ }, null, -1), a("span", ft, g(s.value), 1)], 10, dt));
567
649
  }
568
650
  }), [["__scopeId", "data-v-6436368e"]]), J = {
569
651
  mainnet: "https://suivision.xyz",
570
652
  testnet: "https://testnet.suivision.xyz",
571
653
  devnet: "https://devnet.suivision.xyz"
572
654
  };
573
- function tt(e, t, n = "testnet") {
655
+ function mt(e, t, n = "testnet") {
574
656
  return `${J[n] ?? J.testnet}/${e}/${t}`;
575
657
  }
576
658
  //#endregion
577
659
  //#region src/composables/useColorMode.ts
578
660
  var Y = "mw-color-mode", X = p("system"), Z = !1;
579
- function nt() {
661
+ function ht() {
580
662
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
581
663
  }
582
664
  function Q(e) {
583
- return e === "dark" || e === "system" && nt();
665
+ return e === "dark" || e === "system" && ht();
584
666
  }
585
667
  function $(e) {
586
668
  typeof document < "u" && document.documentElement.setAttribute("data-theme", Q(e) ? "dark" : "light");
587
669
  }
588
- function rt(e = "system") {
670
+ function gt(e = "system") {
589
671
  if (!Z) {
590
672
  Z = !0;
591
673
  let t = null;
@@ -616,10 +698,10 @@ function rt(e = "system") {
616
698
  }
617
699
  //#endregion
618
700
  //#region src/composables/useSeason.ts
619
- function it() {
701
+ function _t() {
620
702
  if (typeof document > "u") return;
621
703
  let e = (/* @__PURE__ */ new Date()).getMonth(), t = e >= 2 && e <= 4 ? "spring" : e >= 5 && e <= 7 ? "summer" : e >= 8 && e <= 10 ? "autumn" : "winter";
622
704
  document.documentElement.dataset.season = t;
623
705
  }
624
706
  //#endregion
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 };
707
+ 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, pt as StatusWidget, R as UiButton, pe as UiCard, nt as UiFieldHint, st as UiFormField, _e as UiNotice, Qe as UiSegmentedControl, he as UiSelect, Je as UiStepper, W as isStatusLevel, q as parseSnapshot, T as safeHref, mt as suiExplorerUrl, gt as useColorMode, _t as useSeason };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meddleware/ui",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
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",