@meddleware/ui 0.1.24 → 0.1.27

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-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-0dacb6ea]{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.mw-seg__item[data-v-0dacb6ea]{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;margin:0;display:flex}.mw-seg__item[data-v-0dacb6ea]:last-child{border-right:none}.mw-seg__item--active[data-v-0dacb6ea]{background:var(--accent);color:var(--accent-contrast)}.mw-seg__item--disabled[data-v-0dacb6ea]{opacity:.5;pointer-events:none;cursor:not-allowed}.mw-seg__item input[type=radio][data-v-0dacb6ea]{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)}
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;-moz-osx-font-smoothing:grayscale;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-a7df94dc]{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);transition:background var(--transition-base), backdrop-filter var(--transition-base), border-color var(--transition-base), box-shadow var(--transition-base);display:flex}.mw-header--sticky[data-v-a7df94dc]{z-index:50;position:sticky;top:0}.mw-header--scrolled[data-v-a7df94dc]{background:color-mix(in srgb, var(--_bg-solid,var(--bg)) 82%, transparent);-webkit-backdrop-filter:blur(10px);border-bottom-color:var(--border);box-shadow:0 1px 0 color-mix(in srgb, var(--border) 60%, transparent)}.mw-header__brand[data-v-a7df94dc]{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-a7df94dc]{flex:auto;min-width:0}.mw-header__actions[data-v-a7df94dc]{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-345f2b04]{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-345f2b04]{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-345f2b04]:hover{opacity:1}.mw-mode__btn.is-active[data-v-345f2b04]{opacity:1;background:color-mix(in srgb, var(--_text,var(--text)) 14%, transparent)}.mw-mode__btn[data-v-345f2b04]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}@media (width<=640px){.mw-mode__label[data-v-345f2b04]{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-3096db80]{position:relative}.mw-select select[data-v-3096db80]{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-3096db80]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-select__chevron[data-v-3096db80]{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-00b3c666]{gap:var(--space-3xs);border-bottom:2px solid var(--border);display:flex}.mw-tab-nav__tab[data-v-00b3c666]{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-00b3c666]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-00b3c666]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.mw-tab-nav--raised[data-v-00b3c666]{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-00b3c666]::-webkit-scrollbar{display:none}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-00b3c666]{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-00b3c666]:hover:not(.mw-tab-nav__tab--active){color:var(--text);background:var(--surface)}.mw-tab-nav--raised .mw-tab-nav__tab--active[data-v-00b3c666]{color:var(--text);background:var(--bg);border-color:var(--accent) var(--border) var(--bg) var(--border);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-44b327f4]{white-space:nowrap;text-align:center;display:inline-block}.symbol-link[data-v-44b327f4]{color:inherit;vertical-align:text-top;align-items:center;padding:0 .1rem;text-decoration:none;display:inline-flex}.symbol-link[data-v-44b327f4]:hover{text-decoration:underline}.kopimi-symbol[data-v-44b327f4]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-44b327f4]{vertical-align:-.15em;display:inline}.text-content[data-v-44b327f4]{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-0dacb6ea]{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.mw-seg__item[data-v-0dacb6ea]{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;margin:0;display:flex}.mw-seg__item[data-v-0dacb6ea]:last-child{border-right:none}.mw-seg__item--active[data-v-0dacb6ea]{background:var(--accent);color:var(--accent-contrast)}.mw-seg__item--disabled[data-v-0dacb6ea]{opacity:.5;pointer-events:none;cursor:not-allowed}.mw-seg__item input[type=radio][data-v-0dacb6ea]{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.mw-field-hint[data-v-29d9a629]{margin-left:var(--space-3xs,.35rem);vertical-align:middle;display:inline-block;position:relative}.mw-field-hint__btn[data-v-29d9a629]{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-29d9a629]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-field-hint__tip[data-v-29d9a629]{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-29d9a629],.mw-field-hint:focus-within .mw-field-hint__tip[data-v-29d9a629]{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}.mw-panel[data-v-d112e62d]{border:1px solid var(--border);background:var(--surface);border-radius:2px;overflow:hidden}.mw-panel__head[data-v-d112e62d]{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--lift);border-bottom:1px solid var(--border);padding:5px 10px;font-size:.72rem;font-weight:600}.mw-panel__body[data-v-d112e62d]{padding:10px}.mw-badge[data-v-5aa44ef5]{letter-spacing:.04em;text-transform:uppercase;border-radius:2px;padding:1px 6px;font-size:.7rem;font-weight:600;display:inline-block}.mw-badge--active[data-v-5aa44ef5]{background:color-mix(in srgb, var(--ok) 20%, transparent);color:var(--ok)}.mw-badge--closed[data-v-5aa44ef5]{background:color-mix(in srgb, var(--muted) 20%, transparent);color:var(--muted)}.mw-badge--pending[data-v-5aa44ef5]{background:color-mix(in srgb, var(--warning) 20%, transparent);color:var(--warning)}.mw-badge--neutral[data-v-5aa44ef5]{background:var(--lift);color:var(--muted)}.mw-toolbar[data-v-827466de]{border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:4px;padding:4px 8px;display:flex}.mw-toolbar-btn[data-v-d5f19134]{background:var(--lift);border:1px solid var(--border);height:26px;color:var(--text);cursor:pointer;white-space:nowrap;border-radius:2px;align-items:center;gap:5px;padding:3px 10px;font-size:.8rem;transition:background .1s,border-color .1s;display:inline-flex}.mw-toolbar-btn[data-v-d5f19134]:hover:not(:disabled){background:var(--surface);border-color:var(--accent)}.mw-toolbar-btn[data-v-d5f19134]:disabled{opacity:.5;cursor:not-allowed}.mw-toolbar-btn[data-v-d5f19134]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-stat-grid[data-v-f481948b]{grid-template-columns:auto 1fr;gap:3px 12px;font-size:.8rem;display:grid}.mw-stat-grid__label[data-v-4c872fab]{color:var(--muted);white-space:nowrap}.mw-stat-grid__value[data-v-4c872fab]{font-family:var(--mw-font-mono);color:var(--text);text-align:right}.mw-stat-grid__value--left[data-v-4c872fab]{text-align:left}.mw-data-table-wrap[data-v-fc20cb49]{overflow-x:auto}.mw-data-table[data-v-fc20cb49]{border-collapse:collapse;width:100%;font-size:.8rem}.mw-data-table[data-v-fc20cb49] th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);white-space:nowrap;padding:5px 8px;font-size:.7rem;font-weight:600}.mw-data-table[data-v-fc20cb49] td{border-bottom:1px solid var(--border);vertical-align:middle;padding:5px 8px}.mw-data-table[data-v-fc20cb49] tbody tr:last-child td{border-bottom:none}.mw-data-table[data-v-fc20cb49] tbody tr:nth-child(2n) td{background:var(--lift)}.mw-data-table__empty[data-v-fc20cb49]{text-align:center;color:var(--muted);padding:24px 16px;font-size:.8rem}.mw-statusbar[data-v-890bec3f]{color:var(--muted);background:var(--surface);border-top:1px solid var(--border);font-size:.72rem;font-family:var(--mw-font-mono);z-index:1;flex-shrink:0;align-items:center;gap:16px;padding:3px 12px;display:flex;position:sticky;bottom:0}.mw-statusbar[data-v-890bec3f] .mw-statusbar__item{align-items:center;display:flex}.mw-statusbar[data-v-890bec3f] .mw-statusbar__sep{color:var(--border)}.mw-status-dot[data-v-62e9a7cc]{border-radius:50%;flex-shrink:0;width:7px;height:7px;margin-right:4px;display:inline-block}.mw-status-dot--ok[data-v-62e9a7cc]{background:var(--ok)}.mw-status-dot--warn[data-v-62e9a7cc]{background:var(--warning)}.mw-status-dot--error[data-v-62e9a7cc]{background:var(--danger)}.mw-feed[data-v-9e578c9d]{margin:0;padding:0;font-size:.78rem;list-style:none}.mw-feed__item[data-v-f662c634]{border-bottom:1px solid var(--border);color:var(--muted);align-items:flex-start;gap:8px;padding:4px 0;display:flex}.mw-feed__item[data-v-f662c634]:last-child{border-bottom:none}.mw-feed__dot[data-v-f662c634]{background:var(--accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-top:4px}.mw-feed__type[data-v-f662c634]{color:var(--text);white-space:nowrap;font-weight:500}.mw-feed__time[data-v-f662c634]{white-space:nowrap;font-family:var(--mw-font-mono);margin-left:auto;font-size:.72rem}.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,6 +6,12 @@ type __VLS_Props = {
6
6
  colors?: PanelColors;
7
7
  /** Stick to the top of the viewport (full-width shells). */
8
8
  sticky?: boolean;
9
+ /**
10
+ * Solidify a transparent header on scroll: while at the top the header stays
11
+ * see-through (e.g. over a hero); once the page scrolls it fades in a frosted
12
+ * background so the brand/nav stay legible. No-op unless the header scrolls.
13
+ */
14
+ solidifyOnScroll?: boolean;
9
15
  };
10
16
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
11
17
  type __VLS_Slots = {} & {
@@ -18,6 +24,7 @@ type __VLS_Slots = {} & {
18
24
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
19
25
  variant: PanelVariant;
20
26
  sticky: boolean;
27
+ solidifyOnScroll: boolean;
21
28
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
29
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
23
30
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ type?: string;
3
+ time?: string;
4
+ };
5
+ declare var __VLS_1: {}, __VLS_3: {};
6
+ type __VLS_Slots = {} & {
7
+ type?: (props: typeof __VLS_1) => any;
8
+ } & {
9
+ time?: (props: typeof __VLS_3) => any;
10
+ };
11
+ 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>;
12
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ type __VLS_WithSlots<T, S> = T & {
16
+ new (): {
17
+ $slots: S;
18
+ };
19
+ };
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ variant?: 'active' | 'closed' | 'pending' | 'neutral';
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<{}>, {
9
+ variant: "active" | "closed" | "pending" | "neutral";
10
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,16 @@
1
+ type __VLS_Props = {
2
+ empty?: string;
3
+ };
4
+ type __VLS_Slots = {
5
+ head(): unknown;
6
+ default(): unknown;
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,18 @@
1
+ type __VLS_Props = {
2
+ title?: string;
3
+ };
4
+ declare var __VLS_1: {}, __VLS_3: {};
5
+ type __VLS_Slots = {} & {
6
+ head?: (props: typeof __VLS_1) => any;
7
+ } & {
8
+ default?: (props: typeof __VLS_3) => any;
9
+ };
10
+ 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>;
11
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ label: string;
3
+ align?: 'left' | 'right';
4
+ };
5
+ declare var __VLS_1: {};
6
+ type __VLS_Slots = {} & {
7
+ default?: (props: typeof __VLS_1) => any;
8
+ };
9
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
10
+ align: "left" | "right";
11
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ type __VLS_WithSlots<T, S> = T & {
16
+ new (): {
17
+ $slots: S;
18
+ };
19
+ };
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,8 @@
1
+ type __VLS_Props = {
2
+ status?: 'ok' | 'warn' | 'error';
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
5
+ status: "ok" | "warn" | "error";
6
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
package/dist/index.d.ts CHANGED
@@ -20,6 +20,17 @@ export { default as UiSegmentedControl } from './components/UiSegmentedControl.v
20
20
  export type { SegmentedOption } from './components/UiSegmentedControl.vue';
21
21
  export { default as UiFieldHint } from './components/UiFieldHint.vue';
22
22
  export { default as UiFormField } from './components/UiFormField.vue';
23
+ export { default as UiPanel } from './components/UiPanel.vue';
24
+ export { default as UiBadge } from './components/UiBadge.vue';
25
+ export { default as UiToolbar } from './components/UiToolbar.vue';
26
+ export { default as UiToolbarButton } from './components/UiToolbarButton.vue';
27
+ export { default as UiStatGrid } from './components/UiStatGrid.vue';
28
+ export { default as UiStatRow } from './components/UiStatRow.vue';
29
+ export { default as UiDataTable } from './components/UiDataTable.vue';
30
+ export { default as UiStatusBar } from './components/UiStatusBar.vue';
31
+ export { default as UiStatusDot } from './components/UiStatusDot.vue';
32
+ export { default as UiActivityFeed } from './components/UiActivityFeed.vue';
33
+ export { default as UiActivityItem } from './components/UiActivityItem.vue';
23
34
  export { default as StatusWidget } from './components/StatusWidget.vue';
24
35
  export { suiExplorerUrl } from './explorer.js';
25
36
  export type { SuiNetwork, SuiExplorerKind } from './explorer.js';
package/dist/ui.js CHANGED
@@ -1,6 +1,6 @@
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";
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, onBeforeUnmount as ee, onMounted as d, onUnmounted as f, openBlock as p, ref as m, renderList as h, renderSlot as g, resolveDynamicComponent as te, toDisplayString as _, unref as v, useModel as ne, useSlots as re, vModelSelect as ie, watch as ae, withCtx as oe, withDirectives as se } from "vue";
2
2
  //#region src/internal/panel.ts
3
- function v(e, t) {
3
+ function y(e, t) {
4
4
  let n;
5
5
  return n = e === "transparent" ? {
6
6
  "--_bg": "transparent",
@@ -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 se = { class: "mw-header__brand" }, ce = { class: "mw-header__center" }, le = { class: "mw-header__actions" }, ue = /*@__PURE__*/ s({
27
+ var ce = { class: "mw-header__brand" }, le = { class: "mw-header__center" }, ue = { class: "mw-header__actions" }, de = /*@__PURE__*/ s({
28
28
  __name: "AppHeader",
29
29
  props: {
30
30
  variant: { default: "dark" },
@@ -32,36 +32,49 @@ var se = { class: "mw-header__brand" }, ce = { class: "mw-header__center" }, le
32
32
  sticky: {
33
33
  type: Boolean,
34
34
  default: !0
35
+ },
36
+ solidifyOnScroll: {
37
+ type: Boolean,
38
+ default: !1
35
39
  }
36
40
  },
37
41
  setup(e) {
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 }]]),
42
+ let n = e, r = t(() => y(n.variant, n.colors)), o = m(!1), s = null;
43
+ return d(() => {
44
+ n.solidifyOnScroll && typeof window < "u" && (s = () => {
45
+ o.value = window.scrollY > 8;
46
+ }, s(), window.addEventListener("scroll", s, { passive: !0 }));
47
+ }), ee(() => {
48
+ s && window.removeEventListener("scroll", s);
49
+ }), (t, n) => (p(), i("header", {
50
+ class: l(["mw-header", [`mw-header--${e.variant}`, {
51
+ "mw-header--sticky": e.sticky,
52
+ "mw-header--scrolled": e.solidifyOnScroll && o.value
53
+ }]]),
41
54
  style: u(r.value)
42
55
  }, [
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)])
56
+ a("div", ce, [g(t.$slots, "brand", {}, void 0, !0)]),
57
+ a("div", le, [g(t.$slots, "default", {}, void 0, !0)]),
58
+ a("div", ue, [g(t.$slots, "actions", {}, void 0, !0)])
46
59
  ], 6));
47
60
  }
48
- }), y = (e, t) => {
61
+ }), b = (e, t) => {
49
62
  let n = e.__vccOpts || e;
50
63
  for (let [e, r] of t) n[e] = r;
51
64
  return n;
52
- }, de = /*#__PURE__*/ y(ue, [["__scopeId", "data-v-9b9826d5"]]), b = {
65
+ }, x = /*#__PURE__*/ b(de, [["__scopeId", "data-v-a7df94dc"]]), S = {
53
66
  key: 0,
54
67
  class: "mw-sidebar__head"
55
- }, x = {
68
+ }, C = {
56
69
  class: "mw-sidebar__nav",
57
70
  "aria-label": "Primary"
58
- }, S = {
71
+ }, w = {
59
72
  key: 1,
60
73
  class: "mw-sidebar__body"
61
- }, C = {
74
+ }, T = {
62
75
  key: 2,
63
76
  class: "mw-sidebar__foot"
64
- }, w = /*#__PURE__*/ y(/* @__PURE__ */ s({
77
+ }, E = /*#__PURE__*/ b(/* @__PURE__ */ s({
65
78
  __name: "AppSidebar",
66
79
  props: {
67
80
  variant: { default: "dark" },
@@ -70,23 +83,23 @@ var se = { class: "mw-header__brand" }, ce = { class: "mw-header__center" }, le
70
83
  },
71
84
  setup(e) {
72
85
  let n = e, o = t(() => {
73
- let e = v(n.variant, n.colors);
86
+ let e = y(n.variant, n.colors);
74
87
  return n.width && (e["--mw-sidebar-width"] = n.width), e;
75
88
  });
76
- return (t, n) => (f(), i("aside", {
89
+ return (t, n) => (p(), i("aside", {
77
90
  class: l(["mw-sidebar", `mw-sidebar--${e.variant}`]),
78
91
  style: u(o.value)
79
92
  }, [
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)
93
+ t.$slots.head ? (p(), i("div", S, [g(t.$slots, "head", {}, void 0, !0)])) : r("", !0),
94
+ a("nav", C, [g(t.$slots, "default", {}, void 0, !0)]),
95
+ t.$slots.body ? (p(), i("div", w, [g(t.$slots, "body", {}, void 0, !0)])) : r("", !0),
96
+ t.$slots.foot ? (p(), i("div", T, [g(t.$slots, "foot", {}, void 0, !0)])) : r("", !0)
84
97
  ], 6));
85
98
  }
86
99
  }), [["__scopeId", "data-v-a2b8405c"]]);
87
100
  //#endregion
88
101
  //#region src/safe-href.ts
89
- function T(e) {
102
+ function D(e) {
90
103
  if (e) try {
91
104
  let t = new URL(e);
92
105
  if (t.protocol === "https:" || t.protocol === "http:" && (t.hostname === "localhost" || t.hostname === "127.0.0.1")) return e;
@@ -94,7 +107,7 @@ function T(e) {
94
107
  }
95
108
  //#endregion
96
109
  //#region src/components/AppFooter.vue?vue&type=script&setup=true&lang.ts
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({
110
+ var O = { class: "mw-footer__start" }, k = { class: "mw-footer__center" }, A = { class: "mw-footer__end" }, j = ["href"], M = ["href"], N = /*#__PURE__*/ b(/* @__PURE__ */ s({
98
111
  __name: "AppFooter",
99
112
  props: {
100
113
  variant: { default: "transparent" },
@@ -103,42 +116,42 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
103
116
  devUrl: {}
104
117
  },
105
118
  setup(e) {
106
- let n = e, o = t(() => v(n.variant, n.colors));
107
- return (t, n) => (f(), i("footer", {
119
+ let n = e, o = t(() => y(n.variant, n.colors));
120
+ return (t, n) => (p(), i("footer", {
108
121
  class: l(["mw-footer", `mw-footer--${e.variant}`]),
109
122
  style: u(o.value)
110
123
  }, [
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", {
124
+ a("div", O, [g(t.$slots, "start", {}, void 0, !0)]),
125
+ a("div", k, [g(t.$slots, "default", {}, void 0, !0)]),
126
+ a("div", A, [
127
+ g(t.$slots, "end", {}, void 0, !0),
128
+ e.docsUrl ? (p(), i("a", {
116
129
  key: 0,
117
- href: _(T)(e.docsUrl),
130
+ href: v(D)(e.docsUrl),
118
131
  target: "_blank",
119
132
  rel: "noopener noreferrer",
120
133
  class: "mw-footer__docs-link"
121
- }, "Documentation", 8, k)) : r("", !0),
122
- e.devUrl ? (f(), i("a", {
134
+ }, "Documentation", 8, j)) : r("", !0),
135
+ e.devUrl ? (p(), i("a", {
123
136
  key: 1,
124
- href: _(T)(e.devUrl),
137
+ href: v(D)(e.devUrl),
125
138
  target: "_blank",
126
139
  rel: "noopener noreferrer",
127
140
  "aria-label": "Developer documentation",
128
141
  class: "mw-footer__docs-link"
129
- }, "Developer docs", 8, A)) : r("", !0)
142
+ }, "Developer docs", 8, M)) : r("", !0)
130
143
  ])
131
144
  ], 6));
132
145
  }
133
- }), [["__scopeId", "data-v-979579a9"]]), M = {
146
+ }), [["__scopeId", "data-v-979579a9"]]), P = {
134
147
  class: "mw-mode",
135
148
  role: "group",
136
149
  "aria-label": "Colour mode"
137
- }, N = [
150
+ }, F = [
138
151
  "aria-pressed",
139
152
  "title",
140
153
  "onClick"
141
- ], P = { "aria-hidden": "true" }, F = { class: "mw-mode__label" }, I = /*#__PURE__*/ y(/* @__PURE__ */ s({
154
+ ], I = { "aria-hidden": "true" }, L = { class: "mw-mode__label" }, R = /*#__PURE__*/ b(/* @__PURE__ */ s({
142
155
  __name: "ColorModeControl",
143
156
  props: {
144
157
  modelValue: {},
@@ -159,16 +172,16 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
159
172
  dark: "☾",
160
173
  system: "🖵"
161
174
  };
162
- return (o, s) => (f(), i("div", M, [(f(!0), i(e, null, m(t.modes, (e) => (f(), i("button", {
175
+ return (o, s) => (p(), i("div", P, [(p(!0), i(e, null, h(t.modes, (e) => (p(), i("button", {
163
176
  key: e,
164
177
  type: "button",
165
178
  class: l(["mw-mode__btn", { "is-active": t.modelValue === e }]),
166
179
  "aria-pressed": t.modelValue === e,
167
180
  title: n[e],
168
181
  onClick: (t) => o.$emit("update:modelValue", e)
169
- }, [a("span", P, g(r[e]), 1), a("span", F, g(n[e]), 1)], 10, N))), 128))]));
182
+ }, [a("span", I, _(r[e]), 1), a("span", L, _(n[e]), 1)], 10, F))), 128))]));
170
183
  }
171
- }), [["__scopeId", "data-v-e2ea0d79"]]), L = ["type", "disabled"], R = /*#__PURE__*/ y(/* @__PURE__ */ s({
184
+ }), [["__scopeId", "data-v-345f2b04"]]), z = ["type", "disabled"], B = /*#__PURE__*/ b(/* @__PURE__ */ s({
172
185
  __name: "UiButton",
173
186
  props: {
174
187
  variant: { default: "primary" },
@@ -179,29 +192,29 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
179
192
  }
180
193
  },
181
194
  setup(e) {
182
- return (t, n) => (f(), i("button", {
195
+ return (t, n) => (p(), i("button", {
183
196
  type: e.type,
184
197
  disabled: e.disabled,
185
198
  class: l(["mw-btn", `mw-btn--${e.variant}`])
186
- }, [h(t.$slots, "default", {}, void 0, !0)], 10, L));
199
+ }, [g(t.$slots, "default", {}, void 0, !0)], 10, z));
187
200
  }
188
- }), [["__scopeId", "data-v-bc33cc23"]]), z = { class: "mw-card" }, B = {
201
+ }), [["__scopeId", "data-v-bc33cc23"]]), V = { class: "mw-card" }, H = {
189
202
  key: 0,
190
203
  class: "mw-card__header"
191
- }, V = { class: "mw-card__title" }, H = { class: "mw-card__body" }, fe = {
204
+ }, fe = { class: "mw-card__title" }, pe = { class: "mw-card__body" }, me = {
192
205
  key: 1,
193
206
  class: "mw-card__footer"
194
- }, pe = /*#__PURE__*/ y(/* @__PURE__ */ s({
207
+ }, he = /*#__PURE__*/ b(/* @__PURE__ */ s({
195
208
  __name: "UiCard",
196
209
  props: { title: {} },
197
210
  setup(e) {
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)
211
+ return (t, n) => (p(), i("section", V, [
212
+ e.title || t.$slots.header ? (p(), i("header", H, [g(t.$slots, "header", {}, () => [a("h3", fe, _(e.title), 1)], !0)])) : r("", !0),
213
+ a("div", pe, [g(t.$slots, "default", {}, void 0, !0)]),
214
+ t.$slots.footer ? (p(), i("footer", me, [g(t.$slots, "footer", {}, void 0, !0)])) : r("", !0)
202
215
  ]));
203
216
  }
204
- }), [["__scopeId", "data-v-883f87f5"]]), me = { class: "mw-select" }, he = /*#__PURE__*/ y(/* @__PURE__ */ s({
217
+ }), [["__scopeId", "data-v-883f87f5"]]), ge = { class: "mw-select" }, _e = /*#__PURE__*/ b(/* @__PURE__ */ s({
205
218
  inheritAttrs: !1,
206
219
  __name: "UiSelect",
207
220
  props: {
@@ -211,7 +224,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
211
224
  emits: ["update:modelValue"],
212
225
  setup(e) {
213
226
  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", {
227
+ return (e, n) => (p(), i("div", ge, [se(a("select", c(e.$attrs, { "onUpdate:modelValue": n[0] ||= (e) => t.value = e }), [g(e.$slots, "default", {}, void 0, !0)], 16), [[ie, t.value]]), n[1] ||= a("svg", {
215
228
  class: "mw-select__chevron",
216
229
  xmlns: "http://www.w3.org/2000/svg",
217
230
  width: "12",
@@ -220,7 +233,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
220
233
  "aria-hidden": "true"
221
234
  }, [a("path", { d: "M1 1l5 5 5-5" })], -1)]));
222
235
  }
223
- }), [["__scopeId", "data-v-7e206184"]]), ge = ["role"], _e = /*#__PURE__*/ y(/* @__PURE__ */ s({
236
+ }), [["__scopeId", "data-v-3096db80"]]), ve = ["role"], ye = /*#__PURE__*/ b(/* @__PURE__ */ s({
224
237
  __name: "UiNotice",
225
238
  props: { type: {} },
226
239
  setup(e) {
@@ -228,16 +241,16 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
228
241
  if (n.type === "error") return "alert";
229
242
  if (n.type === "ok") return "status";
230
243
  });
231
- return (t, n) => (f(), i("p", {
244
+ return (t, n) => (p(), i("p", {
232
245
  class: l(["mw-notice", e.type && e.type !== "info" ? `mw-notice--${e.type}` : ""]),
233
246
  role: r.value
234
- }, [h(t.$slots, "default", {}, void 0, !0)], 10, ge));
247
+ }, [g(t.$slots, "default", {}, void 0, !0)], 10, ve));
235
248
  }
236
- }), [["__scopeId", "data-v-ee7fffb1"]]), ve = ["disabled", "aria-current"], ye = {
249
+ }), [["__scopeId", "data-v-ee7fffb1"]]), be = ["disabled", "aria-current"], xe = {
237
250
  key: 0,
238
251
  class: "sidebar-item__icon",
239
252
  "aria-hidden": "true"
240
- }, be = { class: "sidebar-item__label" }, xe = /*#__PURE__*/ y(/* @__PURE__ */ s({
253
+ }, Se = { class: "sidebar-item__label" }, Ce = /*#__PURE__*/ b(/* @__PURE__ */ s({
241
254
  __name: "SidebarItem",
242
255
  props: {
243
256
  label: {},
@@ -252,30 +265,30 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
252
265
  }
253
266
  },
254
267
  setup(e) {
255
- return (t, n) => (f(), i("button", {
268
+ return (t, n) => (p(), i("button", {
256
269
  type: "button",
257
270
  class: l(["sidebar-item", { "is-active": e.active }]),
258
271
  disabled: e.disabled,
259
272
  "aria-current": e.active ? "page" : void 0
260
- }, [e.icon ? (f(), i("span", ye, g(e.icon), 1)) : r("", !0), a("span", be, g(e.label), 1)], 10, ve));
273
+ }, [e.icon ? (p(), i("span", xe, _(e.icon), 1)) : r("", !0), a("span", Se, _(e.label), 1)], 10, be));
261
274
  }
262
- }), [["__scopeId", "data-v-8da2d583"]]), Se = ["aria-label"], Ce = {
275
+ }), [["__scopeId", "data-v-8da2d583"]]), we = ["aria-label"], Te = {
263
276
  class: "sidebar-group__label",
264
277
  "aria-hidden": "true"
265
- }, we = { class: "sidebar-group__items" }, Te = /*#__PURE__*/ y(/* @__PURE__ */ s({
278
+ }, Ee = { class: "sidebar-group__items" }, De = /*#__PURE__*/ b(/* @__PURE__ */ s({
266
279
  __name: "SidebarGroup",
267
280
  props: {
268
281
  label: {},
269
282
  level: { default: 1 }
270
283
  },
271
284
  setup(e) {
272
- return (t, n) => (f(), i("div", {
285
+ return (t, n) => (p(), i("div", {
273
286
  class: l(["sidebar-group", `sidebar-group--l${e.level}`]),
274
287
  role: "group",
275
288
  "aria-label": e.label
276
- }, [a("div", Ce, g(e.label), 1), a("div", we, [h(t.$slots, "default", {}, void 0, !0)])], 10, Se));
289
+ }, [a("div", Te, _(e.label), 1), a("div", Ee, [g(t.$slots, "default", {}, void 0, !0)])], 10, we));
277
290
  }
278
- }), [["__scopeId", "data-v-c8f6c8b2"]]), Ee = ["aria-label"], De = ["aria-current", "onClick"], Oe = /*#__PURE__*/ y(/* @__PURE__ */ s({
291
+ }), [["__scopeId", "data-v-c8f6c8b2"]]), Oe = ["aria-label"], ke = ["aria-current", "onClick"], Ae = /*#__PURE__*/ b(/* @__PURE__ */ s({
279
292
  __name: "AppTabNav",
280
293
  props: {
281
294
  tabs: {},
@@ -286,18 +299,18 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
286
299
  emits: ["update:modelValue"],
287
300
  setup(t, { emit: n }) {
288
301
  let r = n;
289
- return (n, a) => (f(), i("nav", {
302
+ return (n, a) => (p(), i("nav", {
290
303
  class: l(["mw-tab-nav", { "mw-tab-nav--raised": t.variant === "raised" }]),
291
304
  "aria-label": t.ariaLabel
292
- }, [(f(!0), i(e, null, m(t.tabs, (e) => (f(), i("button", {
305
+ }, [(p(!0), i(e, null, h(t.tabs, (e) => (p(), i("button", {
293
306
  key: e.id,
294
307
  type: "button",
295
308
  class: l(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
296
309
  "aria-current": t.modelValue === e.id ? "page" : void 0,
297
310
  onClick: (t) => r("update:modelValue", e.id)
298
- }, g(e.label), 11, De))), 128))], 10, Ee));
311
+ }, _(e.label), 11, ke))), 128))], 10, Oe));
299
312
  }
300
- }), [["__scopeId", "data-v-3f874e32"]]), ke = { class: "ca-root" }, Ae = ["title"], je = ["title", "aria-label"], Me = {
313
+ }), [["__scopeId", "data-v-00b3c666"]]), je = { class: "ca-root" }, Me = ["title"], Ne = ["title", "aria-label"], Pe = {
301
314
  key: 0,
302
315
  class: "ca-icon",
303
316
  viewBox: "0 0 24 24",
@@ -309,7 +322,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
309
322
  "stroke-linecap": "round",
310
323
  "stroke-linejoin": "round",
311
324
  "aria-hidden": "true"
312
- }, U = {
325
+ }, Fe = {
313
326
  key: 1,
314
327
  class: "ca-icon",
315
328
  viewBox: "0 0 24 24",
@@ -321,7 +334,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
321
334
  "stroke-linecap": "round",
322
335
  "stroke-linejoin": "round",
323
336
  "aria-hidden": "true"
324
- }, Ne = /*#__PURE__*/ y(/* @__PURE__ */ s({
337
+ }, Ie = /*#__PURE__*/ b(/* @__PURE__ */ s({
325
338
  __name: "CopyableAddress",
326
339
  props: {
327
340
  address: {},
@@ -333,7 +346,7 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
333
346
  label: { default: "Copy" }
334
347
  },
335
348
  setup(e) {
336
- let n = e, r = p(!1), s = t(() => {
349
+ let n = e, r = m(!1), s = t(() => {
337
350
  if (!n.truncate) return n.address;
338
351
  let [e, t] = n.chars;
339
352
  return `${n.address.slice(0, e)}…${n.address.slice(-t)}`;
@@ -343,25 +356,25 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
343
356
  r.value = !1;
344
357
  }, 1500);
345
358
  }
346
- return (t, n) => (f(), i("span", ke, [a("span", {
359
+ return (t, n) => (p(), i("span", je, [a("span", {
347
360
  class: "ca-value",
348
361
  title: e.address
349
- }, [h(t.$slots, "default", {}, () => [o(g(s.value), 1)], !0)], 8, Ae), a("button", {
362
+ }, [g(t.$slots, "default", {}, () => [o(_(s.value), 1)], !0)], 8, Me), a("button", {
350
363
  type: "button",
351
364
  class: l(["ca-copy", { "ca-copy--copied": r.value }]),
352
365
  title: r.value ? "Copied!" : e.label,
353
366
  "aria-label": r.value ? "Copied" : e.label,
354
367
  onClick: c
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", {
368
+ }, [r.value ? (p(), i("svg", Pe, [...n[0] ||= [a("polyline", { points: "20 6 9 17 4 12" }, null, -1)]])) : (p(), i("svg", Fe, [...n[1] ||= [a("rect", {
356
369
  x: "9",
357
370
  y: "9",
358
371
  width: "13",
359
372
  height: "13",
360
373
  rx: "2",
361
374
  ry: "2"
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)]));
375
+ }, 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, Ne)]));
363
376
  }
364
- }), [["__scopeId", "data-v-b43dabdd"]]), Pe = ["href", "title"], Fe = /*#__PURE__*/ y(/* @__PURE__ */ s({
377
+ }), [["__scopeId", "data-v-b43dabdd"]]), Le = ["href", "title"], Re = /*#__PURE__*/ b(/* @__PURE__ */ s({
365
378
  __name: "ExplorerLink",
366
379
  props: {
367
380
  href: {},
@@ -379,18 +392,18 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
379
392
  let [e, t] = n.chars;
380
393
  return `${n.value.slice(0, e)}…${n.value.slice(-t)}`;
381
394
  });
382
- return (t, n) => (f(), i("a", {
395
+ return (t, n) => (p(), i("a", {
383
396
  class: "el-root",
384
- href: _(T)(e.href),
397
+ href: v(D)(e.href),
385
398
  target: "_blank",
386
399
  rel: "noopener noreferrer",
387
400
  title: e.value
388
- }, [h(t.$slots, "default", {}, () => [o(g(r.value), 1)], !0)], 8, Pe));
401
+ }, [g(t.$slots, "default", {}, () => [o(_(r.value), 1)], !0)], 8, Le));
389
402
  }
390
- }), [["__scopeId", "data-v-073d1bbe"]]), Ie = { class: "copyright-line" }, Le = ["href", "aria-label"], Re = { key: 0 }, ze = { key: 1 }, Be = {
403
+ }), [["__scopeId", "data-v-073d1bbe"]]), ze = { class: "copyright-line" }, Be = ["href", "aria-label"], Ve = { key: 0 }, He = { key: 1 }, Ue = {
391
404
  key: 2,
392
405
  class: "kopimi-symbol"
393
- }, Ve = { class: "text-content" }, He = { key: 0 }, Ue = /*#__PURE__*/ y(/* @__PURE__ */ s({
406
+ }, We = { class: "text-content" }, Ge = { key: 0 }, Ke = /*#__PURE__*/ b(/* @__PURE__ */ s({
394
407
  __name: "CopyrightLine",
395
408
  props: {
396
409
  organisationName: {},
@@ -402,13 +415,13 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
402
415
  },
403
416
  setup(e) {
404
417
  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);
405
- return (t, n) => (f(), i("small", Ie, [a("a", {
418
+ return (t, n) => (p(), i("small", ze, [a("a", {
406
419
  href: c.value,
407
420
  class: "symbol-link",
408
421
  target: "_blank",
409
422
  rel: "noopener noreferrer",
410
423
  "aria-label": l.value
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", {
424
+ }, [s.value === "copyright" ? (p(), i("span", Ve, "©")) : s.value === "copyleft" ? (p(), i("span", He, "🄯")) : s.value === "kopimi" ? (p(), i("span", Ue, [...n[0] ||= [a("svg", {
412
425
  viewBox: "0 0 24 24",
413
426
  width: "1em",
414
427
  height: "1em",
@@ -428,19 +441,19 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
428
441
  "font-family": "system-ui, sans-serif",
429
442
  "font-size": "11",
430
443
  fill: "currentColor"
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(`
444
+ }, " C ")], -1)]])) : r("", !0)], 8, Be), a("span", We, [o(_(e.year) + " " + _(e.organisationName) + ".", 1), u.value ? (p(), i("span", Ge, _(`
432
445
  ${u.value}`), 1)) : r("", !0)])]));
433
446
  }
434
- }), [["__scopeId", "data-v-1f9a5da9"]]), We = {
447
+ }), [["__scopeId", "data-v-44b327f4"]]), qe = {
435
448
  class: "ui-stepper",
436
449
  role: "list"
437
- }, Ge = {
450
+ }, Je = {
438
451
  key: 0,
439
452
  "aria-hidden": "true"
440
- }, Ke = {
453
+ }, Ye = {
441
454
  key: 1,
442
455
  "aria-hidden": "true"
443
- }, qe = { class: "ui-stepper__label" }, Je = /*#__PURE__*/ y(/* @__PURE__ */ s({
456
+ }, Xe = { class: "ui-stepper__label" }, Ze = /*#__PURE__*/ b(/* @__PURE__ */ s({
444
457
  __name: "UiStepper",
445
458
  props: {
446
459
  steps: {},
@@ -455,31 +468,31 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
455
468
  function u(e) {
456
469
  e < o.modelValue && s("update:modelValue", e);
457
470
  }
458
- return (r, o) => (f(), i("ol", We, [(f(!0), i(e, null, m(t.steps, (e, t) => (f(), i("li", {
471
+ return (r, o) => (p(), i("ol", qe, [(p(!0), i(e, null, h(t.steps, (e, t) => (p(), i("li", {
459
472
  key: e.id,
460
473
  class: l(["ui-stepper__step", `is-${c(t)}`])
461
- }, [(f(), n(te(c(t) === "done" ? "button" : "span"), {
474
+ }, [(p(), n(te(c(t) === "done" ? "button" : "span"), {
462
475
  class: "ui-stepper__badge",
463
476
  type: c(t) === "done" ? "button" : void 0,
464
477
  "aria-label": c(t) === "done" ? `Back to ${e.label}` : void 0,
465
478
  "aria-current": c(t) === "active" ? "step" : void 0,
466
479
  onClick: (e) => c(t) === "done" && u(t)
467
480
  }, {
468
- default: ae(() => [c(t) === "done" ? (f(), i("span", Ge, "✓")) : (f(), i("span", Ke, g(t + 1), 1))]),
481
+ default: oe(() => [c(t) === "done" ? (p(), i("span", Je, "✓")) : (p(), i("span", Ye, _(t + 1), 1))]),
469
482
  _: 2
470
483
  }, 1032, [
471
484
  "type",
472
485
  "aria-label",
473
486
  "aria-current",
474
487
  "onClick"
475
- ])), a("span", qe, g(e.label), 1)], 2))), 128))]));
488
+ ])), a("span", Xe, _(e.label), 1)], 2))), 128))]));
476
489
  }
477
- }), [["__scopeId", "data-v-33717fc3"]]), Ye = ["aria-label"], Xe = ["title"], Ze = [
490
+ }), [["__scopeId", "data-v-33717fc3"]]), Qe = ["aria-label"], $e = ["title"], et = [
478
491
  "value",
479
492
  "checked",
480
493
  "disabled",
481
494
  "onChange"
482
- ], Qe = /*#__PURE__*/ y(/* @__PURE__ */ s({
495
+ ], tt = /*#__PURE__*/ b(/* @__PURE__ */ s({
483
496
  __name: "UiSegmentedControl",
484
497
  props: {
485
498
  options: {},
@@ -489,11 +502,11 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
489
502
  emits: ["update:modelValue"],
490
503
  setup(t, { emit: n }) {
491
504
  let r = n;
492
- return (n, s) => (f(), i("div", {
505
+ return (n, s) => (p(), i("div", {
493
506
  class: "mw-seg",
494
507
  role: "group",
495
508
  "aria-label": t.ariaLabel
496
- }, [(f(!0), i(e, null, m(t.options, (e) => (f(), i("label", {
509
+ }, [(p(!0), i(e, null, h(t.options, (e) => (p(), i("label", {
497
510
  key: e.id,
498
511
  class: l(["mw-seg__item", {
499
512
  "mw-seg__item--active": t.modelValue === e.id,
@@ -506,31 +519,31 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
506
519
  checked: t.modelValue === e.id,
507
520
  disabled: e.disabled,
508
521
  onChange: (t) => r("update:modelValue", e.id)
509
- }, null, 40, Ze), o(" " + g(e.label), 1)], 10, Xe))), 128))], 8, Ye));
522
+ }, null, 40, et), o(" " + _(e.label), 1)], 10, $e))), 128))], 8, Qe));
510
523
  }
511
- }), [["__scopeId", "data-v-0dacb6ea"]]), $e = { class: "mw-field-hint" }, et = ["aria-describedby"], tt = ["id"], nt = /*#__PURE__*/ y(/* @__PURE__ */ s({
524
+ }), [["__scopeId", "data-v-0dacb6ea"]]), nt = { class: "mw-field-hint" }, rt = ["aria-describedby"], it = ["id"], at = /*#__PURE__*/ b(/* @__PURE__ */ s({
512
525
  __name: "UiFieldHint",
513
526
  props: { fieldId: {} },
514
527
  setup(e) {
515
528
  function t(e) {
516
529
  e.key === "Escape" && e.currentTarget.blur();
517
530
  }
518
- return (n, r) => (f(), i("span", $e, [a("button", {
531
+ return (n, r) => (p(), i("span", nt, [a("button", {
519
532
  type: "button",
520
533
  class: "mw-field-hint__btn",
521
534
  "aria-describedby": `${e.fieldId}-hint`,
522
535
  "aria-label": "Help",
523
536
  onKeydown: t
524
- }, "?", 40, et), a("span", {
537
+ }, "?", 40, rt), a("span", {
525
538
  id: `${e.fieldId}-hint`,
526
539
  role: "tooltip",
527
540
  class: "mw-field-hint__tip"
528
- }, [h(n.$slots, "default", {}, void 0, !0)], 8, tt)]));
541
+ }, [g(n.$slots, "default", {}, void 0, !0)], 8, it)]));
529
542
  }
530
- }), [["__scopeId", "data-v-4d63aaa4"]]), rt = { class: "mw-form-field" }, it = ["for"], at = {
543
+ }), [["__scopeId", "data-v-29d9a629"]]), ot = { class: "mw-form-field" }, st = ["for"], ct = {
531
544
  key: 0,
532
545
  class: "mw-form-field__hint"
533
- }, ot = ["id"], st = /*#__PURE__*/ y(/* @__PURE__ */ s({
546
+ }, lt = ["id"], ut = /*#__PURE__*/ b(/* @__PURE__ */ s({
534
547
  __name: "UiFormField",
535
548
  props: {
536
549
  id: {},
@@ -544,56 +557,146 @@ var E = { class: "mw-footer__start" }, D = { class: "mw-footer__center" }, O = {
544
557
  "aria-invalid": n.error ? !0 : void 0,
545
558
  "aria-describedby": n.error ? s.value : void 0
546
559
  }));
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", {
560
+ return (t, n) => (p(), i("div", ot, [
561
+ a("label", { for: e.id }, [o(_(e.label), 1), g(t.$slots, "label-suffix", {}, void 0, !0)], 8, st),
562
+ g(t.$slots, "default", { attrs: c.value }, void 0, !0),
563
+ e.hint && !e.error ? (p(), i("p", ct, _(e.hint), 1)) : r("", !0),
564
+ e.error ? (p(), i("p", {
552
565
  key: 1,
553
566
  id: s.value,
554
567
  class: "mw-form-field__error"
555
- }, g(e.error), 9, ot)) : r("", !0)
568
+ }, _(e.error), 9, lt)) : r("", !0)
569
+ ]));
570
+ }
571
+ }), [["__scopeId", "data-v-c22333c7"]]), dt = { class: "mw-panel" }, ft = {
572
+ key: 0,
573
+ class: "mw-panel__head"
574
+ }, pt = { class: "mw-panel__body" }, mt = /*#__PURE__*/ b(/* @__PURE__ */ s({
575
+ __name: "UiPanel",
576
+ props: { title: {} },
577
+ setup(e) {
578
+ return (t, n) => (p(), i("div", dt, [e.title || t.$slots.head ? (p(), i("div", ft, [g(t.$slots, "head", {}, () => [o(_(e.title), 1)], !0)])) : r("", !0), a("div", pt, [g(t.$slots, "default", {}, void 0, !0)])]));
579
+ }
580
+ }), [["__scopeId", "data-v-d112e62d"]]), ht = /*#__PURE__*/ b(/* @__PURE__ */ s({
581
+ __name: "UiBadge",
582
+ props: { variant: { default: "neutral" } },
583
+ setup(e) {
584
+ return (t, n) => (p(), i("span", { class: l(["mw-badge", `mw-badge--${e.variant}`]) }, [g(t.$slots, "default", {}, void 0, !0)], 2));
585
+ }
586
+ }), [["__scopeId", "data-v-5aa44ef5"]]), gt = { class: "mw-toolbar" }, _t = /*#__PURE__*/ b(/* @__PURE__ */ s({
587
+ __name: "UiToolbar",
588
+ setup(e) {
589
+ return (e, t) => (p(), i("div", gt, [g(e.$slots, "default", {}, void 0, !0)]));
590
+ }
591
+ }), [["__scopeId", "data-v-827466de"]]), vt = {
592
+ type: "button",
593
+ class: "mw-toolbar-btn"
594
+ }, yt = /*#__PURE__*/ b(/* @__PURE__ */ s({
595
+ __name: "UiToolbarButton",
596
+ setup(e) {
597
+ return (e, t) => (p(), i("button", vt, [g(e.$slots, "default", {}, void 0, !0)]));
598
+ }
599
+ }), [["__scopeId", "data-v-d5f19134"]]), bt = { class: "mw-stat-grid" }, xt = /*#__PURE__*/ b(/* @__PURE__ */ s({
600
+ __name: "UiStatGrid",
601
+ setup(e) {
602
+ return (e, t) => (p(), i("div", bt, [g(e.$slots, "default", {}, void 0, !0)]));
603
+ }
604
+ }), [["__scopeId", "data-v-f481948b"]]), St = { class: "mw-stat-grid__label" }, Ct = /*#__PURE__*/ b(/* @__PURE__ */ s({
605
+ __name: "UiStatRow",
606
+ props: {
607
+ label: {},
608
+ align: { default: "right" }
609
+ },
610
+ setup(t) {
611
+ return (n, r) => (p(), i(e, null, [a("span", St, _(t.label), 1), a("span", { class: l(["mw-stat-grid__value", { "mw-stat-grid__value--left": t.align === "left" }]) }, [g(n.$slots, "default", {}, void 0, !0)], 2)], 64));
612
+ }
613
+ }), [["__scopeId", "data-v-4c872fab"]]), wt = { class: "mw-data-table-wrap" }, Tt = { class: "mw-data-table" }, Et = {
614
+ key: 0,
615
+ class: "mw-data-table__empty"
616
+ }, Dt = /*#__PURE__*/ b(/* @__PURE__ */ s({
617
+ __name: "UiDataTable",
618
+ props: { empty: {} },
619
+ setup(e) {
620
+ let t = re();
621
+ return (n, o) => (p(), i("div", wt, [a("table", Tt, [a("thead", null, [a("tr", null, [g(n.$slots, "head", {}, void 0, !0)])]), a("tbody", null, [g(n.$slots, "default", {}, void 0, !0)])]), e.empty && !t.default ? (p(), i("p", Et, _(e.empty), 1)) : r("", !0)]));
622
+ }
623
+ }), [["__scopeId", "data-v-fc20cb49"]]), Ot = { class: "mw-statusbar" }, kt = /*#__PURE__*/ b(/* @__PURE__ */ s({
624
+ __name: "UiStatusBar",
625
+ setup(e) {
626
+ return (e, t) => (p(), i("footer", Ot, [g(e.$slots, "default", {}, void 0, !0)]));
627
+ }
628
+ }), [["__scopeId", "data-v-890bec3f"]]), At = /*#__PURE__*/ b(/* @__PURE__ */ s({
629
+ __name: "UiStatusDot",
630
+ props: { status: { default: "ok" } },
631
+ setup(e) {
632
+ return (t, n) => (p(), i("span", {
633
+ class: l(["mw-status-dot", `mw-status-dot--${e.status}`]),
634
+ "aria-hidden": "true"
635
+ }, null, 2));
636
+ }
637
+ }), [["__scopeId", "data-v-62e9a7cc"]]), jt = {
638
+ class: "mw-feed",
639
+ role: "list"
640
+ }, Mt = /*#__PURE__*/ b(/* @__PURE__ */ s({
641
+ __name: "UiActivityFeed",
642
+ setup(e) {
643
+ return (e, t) => (p(), i("ul", jt, [g(e.$slots, "default", {}, void 0, !0)]));
644
+ }
645
+ }), [["__scopeId", "data-v-9e578c9d"]]), Nt = { class: "mw-feed__item" }, Pt = { class: "mw-feed__type" }, Ft = { class: "mw-feed__time" }, It = /*#__PURE__*/ b(/* @__PURE__ */ s({
646
+ __name: "UiActivityItem",
647
+ props: {
648
+ type: {},
649
+ time: {}
650
+ },
651
+ setup(e) {
652
+ return (t, n) => (p(), i("li", Nt, [
653
+ n[0] ||= a("span", {
654
+ class: "mw-feed__dot",
655
+ "aria-hidden": "true"
656
+ }, null, -1),
657
+ a("span", Pt, [g(t.$slots, "type", {}, () => [o(_(e.type), 1)], !0)]),
658
+ a("span", Ft, [g(t.$slots, "time", {}, () => [o(_(e.time), 1)], !0)])
556
659
  ]));
557
660
  }
558
- }), [["__scopeId", "data-v-c22333c7"]]), ct = /* @__PURE__ */ new Set([
661
+ }), [["__scopeId", "data-v-f662c634"]]), Lt = /* @__PURE__ */ new Set([
559
662
  "operational",
560
663
  "degraded",
561
664
  "down",
562
665
  "unknown"
563
666
  ]);
667
+ function U(e) {
668
+ return typeof e == "string" && Lt.has(e);
669
+ }
564
670
  function W(e) {
565
- return typeof e == "string" && ct.has(e);
671
+ return U(e) ? e : "unknown";
566
672
  }
567
673
  function G(e) {
568
- return W(e) ? e : "unknown";
569
- }
570
- function K(e) {
571
674
  return typeof e != "string" || e.trim() === "" ? "" : e.replace(/[<>&"]/g, "");
572
675
  }
573
- function lt(e) {
676
+ function Rt(e) {
574
677
  if (typeof e != "object" || !e) return null;
575
- let t = e, n = K(t.name);
678
+ let t = e, n = G(t.name);
576
679
  return n ? {
577
680
  name: n,
578
- status: G(t.status)
681
+ status: W(t.status)
579
682
  } : null;
580
683
  }
581
- function ut(e) {
684
+ function zt(e) {
582
685
  if (typeof e != "object" || !e) return null;
583
- let t = e, n = K(t.name);
686
+ let t = e, n = G(t.name);
584
687
  if (!n) return null;
585
- let r = Array.isArray(t.components) ? t.components.map(lt).filter((e) => e !== null) : [];
688
+ let r = Array.isArray(t.components) ? t.components.map(Rt).filter((e) => e !== null) : [];
586
689
  return {
587
690
  name: n,
588
- status: G(t.status),
691
+ status: W(t.status),
589
692
  components: r
590
693
  };
591
694
  }
592
- function q(e) {
695
+ function K(e) {
593
696
  if (typeof e != "object" || !e) return null;
594
697
  let t = e;
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);
698
+ if (!U(t.overall) || typeof t.generated_at != "string" || !Array.isArray(t.groups)) return null;
699
+ let n = t.groups.map(zt).filter((e) => e !== null);
597
700
  return {
598
701
  generated_at: t.generated_at,
599
702
  overall: t.overall,
@@ -602,7 +705,7 @@ function q(e) {
602
705
  }
603
706
  //#endregion
604
707
  //#region src/components/StatusWidget.vue?vue&type=script&setup=true&lang.ts
605
- var dt = ["href", "title"], ft = { class: "status-widget__label" }, pt = /*#__PURE__*/ y(/* @__PURE__ */ s({
708
+ var q = ["href", "title"], Bt = { class: "status-widget__label" }, Vt = /*#__PURE__*/ b(/* @__PURE__ */ s({
606
709
  __name: "StatusWidget",
607
710
  props: {
608
711
  apiUrl: { default: "https://status.meddleware.co.uk/api/status" },
@@ -620,24 +723,24 @@ var dt = ["href", "title"], ft = { class: "status-widget__label" }, pt = /*#__PU
620
723
  degraded: "Degraded",
621
724
  down: "Major outage",
622
725
  unknown: "Status unknown"
623
- }, o = p("ok"), s = p("All systems operational"), c = null;
726
+ }, o = m("ok"), s = m("All systems operational"), c = null;
624
727
  async function u() {
625
728
  try {
626
729
  let e = await fetch(t.apiUrl);
627
730
  if (!e.ok) throw Error(`HTTP ${e.status}`);
628
- let i = q(await e.json());
731
+ let i = K(await e.json());
629
732
  if (!i) throw Error("unexpected response shape");
630
733
  o.value = n[i.overall], s.value = r[i.overall];
631
734
  } catch {
632
735
  o.value = "error", s.value = "Status unavailable";
633
736
  }
634
737
  }
635
- return ee(() => {
738
+ return d(() => {
636
739
  u(), c = setInterval(u, t.pollInterval);
637
- }), d(() => {
740
+ }), f(() => {
638
741
  c !== null && clearInterval(c);
639
- }), (t, n) => (f(), i("a", {
640
- href: _(T)(e.href),
742
+ }), (t, n) => (p(), i("a", {
743
+ href: v(D)(e.href),
641
744
  target: "_blank",
642
745
  rel: "noopener noreferrer",
643
746
  class: l(["status-widget", `status-widget--${o.value}`]),
@@ -645,29 +748,29 @@ var dt = ["href", "title"], ft = { class: "status-widget__label" }, pt = /*#__PU
645
748
  }, [n[0] ||= a("span", {
646
749
  class: "status-widget__dot",
647
750
  "aria-hidden": "true"
648
- }, null, -1), a("span", ft, g(s.value), 1)], 10, dt));
751
+ }, null, -1), a("span", Bt, _(s.value), 1)], 10, q));
649
752
  }
650
753
  }), [["__scopeId", "data-v-6436368e"]]), J = {
651
754
  mainnet: "https://suivision.xyz",
652
755
  testnet: "https://testnet.suivision.xyz",
653
756
  devnet: "https://devnet.suivision.xyz"
654
757
  };
655
- function mt(e, t, n = "testnet") {
758
+ function Ht(e, t, n = "testnet") {
656
759
  return `${J[n] ?? J.testnet}/${e}/${t}`;
657
760
  }
658
761
  //#endregion
659
762
  //#region src/composables/useColorMode.ts
660
- var Y = "mw-color-mode", X = p("system"), Z = !1;
661
- function ht() {
763
+ var Y = "mw-color-mode", X = m("system"), Z = !1;
764
+ function Ut() {
662
765
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
663
766
  }
664
767
  function Q(e) {
665
- return e === "dark" || e === "system" && ht();
768
+ return e === "dark" || e === "system" && Ut();
666
769
  }
667
770
  function $(e) {
668
771
  typeof document < "u" && document.documentElement.setAttribute("data-theme", Q(e) ? "dark" : "light");
669
772
  }
670
- function gt(e = "system") {
773
+ function Wt(e = "system") {
671
774
  if (!Z) {
672
775
  Z = !0;
673
776
  let t = null;
@@ -676,7 +779,7 @@ function gt(e = "system") {
676
779
  } catch {}
677
780
  X.value = t ?? e, $(X.value), typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
678
781
  X.value === "system" && $("system");
679
- }), ie(X, (e) => {
782
+ }), ae(X, (e) => {
680
783
  $(e);
681
784
  try {
682
785
  typeof localStorage < "u" && localStorage.setItem(Y, e);
@@ -698,10 +801,10 @@ function gt(e = "system") {
698
801
  }
699
802
  //#endregion
700
803
  //#region src/composables/useSeason.ts
701
- function _t() {
804
+ function Gt() {
702
805
  if (typeof document > "u") return;
703
806
  let e = (/* @__PURE__ */ new Date()).getMonth(), t = e >= 2 && e <= 4 ? "spring" : e >= 5 && e <= 7 ? "summer" : e >= 8 && e <= 10 ? "autumn" : "winter";
704
807
  document.documentElement.dataset.season = t;
705
808
  }
706
809
  //#endregion
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 };
810
+ export { N as AppFooter, x as AppHeader, E as AppSidebar, Ae as AppTabNav, R as ColorModeControl, Ie as CopyableAddress, Ke as CopyrightLine, Re as ExplorerLink, De as SidebarGroup, Ce as SidebarItem, Vt as StatusWidget, Mt as UiActivityFeed, It as UiActivityItem, ht as UiBadge, B as UiButton, he as UiCard, Dt as UiDataTable, at as UiFieldHint, ut as UiFormField, ye as UiNotice, mt as UiPanel, tt as UiSegmentedControl, _e as UiSelect, xt as UiStatGrid, Ct as UiStatRow, kt as UiStatusBar, At as UiStatusDot, Ze as UiStepper, _t as UiToolbar, yt as UiToolbarButton, U as isStatusLevel, K as parseSnapshot, D as safeHref, Ht as suiExplorerUrl, Wt as useColorMode, Gt as useSeason };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meddleware/ui",
3
- "version": "0.1.24",
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.",
3
+ "version": "0.1.27",
4
+ "description": "Shared Vue 3 component library for @meddleware UIs — 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",
7
7
  "type": "module",
@@ -25,23 +25,45 @@
25
25
  "scripts": {
26
26
  "build": "rm -rf dist && vue-tsc -p tsconfig.build.json && vite build",
27
27
  "type-check": "vue-tsc --noEmit",
28
+ "lint:css": "stylelint \"src/**/*.{css,vue}\"",
29
+ "lint:js": "eslint .",
30
+ "lint": "npm run lint:css && npm run lint:js",
28
31
  "test": "vitest run"
29
32
  },
30
33
  "peerDependencies": {
31
34
  "vue": "^3.5.0"
32
35
  },
33
36
  "dependencies": {
34
- "@meddleware/design-tokens": "^0.1.5"
37
+ "@meddleware/design-tokens": "^0.1.6"
35
38
  },
36
39
  "devDependencies": {
37
40
  "@vitejs/plugin-vue": "^6.0.9",
41
+ "@vue/eslint-config-typescript": "^14.9.0",
42
+ "@vue/test-utils": "^2.5.1",
43
+ "autoprefixer": "^10.4.20",
44
+ "eslint": "^10.11.0",
45
+ "eslint-plugin-vue": "^10.11.1",
46
+ "eslint-plugin-vuejs-accessibility": "^2.6.0",
47
+ "jiti": "^2.7.0",
48
+ "jsdom": "^29.1.1",
49
+ "postcss": "^8.4.49",
50
+ "postcss-html": "^2.0.0",
51
+ "stylelint": "^17.15.0",
52
+ "stylelint-config-standard": "^40.0.0",
38
53
  "typescript": "^6.0.0",
39
54
  "vite": "^8.3.0",
40
55
  "vitest": "~5.0.1",
56
+ "vitest-axe": "^0.1.0",
41
57
  "vue": "^3.5.43",
58
+ "vue-eslint-parser": "^10.4.1",
42
59
  "vue-tsc": "~3.3.11"
43
60
  },
61
+ "browserslist": [
62
+ "> 0.5%",
63
+ "last 2 versions",
64
+ "not dead"
65
+ ],
44
66
  "publishConfig": {
45
67
  "access": "public"
46
68
  }
47
- }
69
+ }