@leef-l/macos-ui-kit 0.0.0-stage → 0.1.0

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.
Files changed (45) hide show
  1. package/README.md +215 -2
  2. package/dist/assets/Inter Font License.txt +93 -0
  3. package/dist/assets/Inter-Medium.ttf +0 -0
  4. package/dist/component.d.ts +47 -0
  5. package/dist/controls/badge.d.ts +27 -0
  6. package/dist/controls/button.d.ts +41 -0
  7. package/dist/controls/checkbox.d.ts +40 -0
  8. package/dist/controls/combobox.d.ts +105 -0
  9. package/dist/controls/datepicker.d.ts +42 -0
  10. package/dist/controls/disclosure.d.ts +40 -0
  11. package/dist/controls/numberfield.d.ts +60 -0
  12. package/dist/controls/progress.d.ts +33 -0
  13. package/dist/controls/segmented.d.ts +64 -0
  14. package/dist/controls/select.d.ts +42 -0
  15. package/dist/controls/slider.d.ts +49 -0
  16. package/dist/controls/spinner.d.ts +24 -0
  17. package/dist/controls/splitview.d.ts +76 -0
  18. package/dist/controls/switch.d.ts +47 -0
  19. package/dist/controls/table.d.ts +103 -0
  20. package/dist/controls/textarea.d.ts +49 -0
  21. package/dist/controls/textfield.d.ts +63 -0
  22. package/dist/dom.d.ts +35 -0
  23. package/dist/index.d.ts +85 -0
  24. package/dist/index.js +2053 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/layout/sidebar.d.ts +47 -0
  27. package/dist/layout/statusbar.d.ts +30 -0
  28. package/dist/layout/tabview.d.ts +74 -0
  29. package/dist/layout/titlebar.d.ts +49 -0
  30. package/dist/layout/toolbar.d.ts +54 -0
  31. package/dist/layout/traffic-lights.d.ts +37 -0
  32. package/dist/macos-ui-kit.css +2 -0
  33. package/dist/macos-ui-kit.iife.js +2 -0
  34. package/dist/macos-ui-kit.iife.js.map +1 -0
  35. package/dist/mobile/shell.d.ts +59 -0
  36. package/dist/overlay.d.ts +41 -0
  37. package/dist/overlays/dialog.d.ts +46 -0
  38. package/dist/overlays/menu.d.ts +58 -0
  39. package/dist/overlays/popover.d.ts +90 -0
  40. package/dist/overlays/sheet.d.ts +56 -0
  41. package/dist/overlays/toast.d.ts +37 -0
  42. package/dist/overlays/tooltip.d.ts +48 -0
  43. package/dist/style.css.d.ts +2 -0
  44. package/dist/theme.d.ts +100 -0
  45. package/package.json +55 -4
@@ -0,0 +1,47 @@
1
+ import { Component } from "../component";
2
+ import "./sidebar.css";
3
+ export interface SidebarItem {
4
+ /** Stable key used to identify the item. */
5
+ id: string;
6
+ /** Visible text. */
7
+ label: string;
8
+ /** Optional leading SVG path data. */
9
+ icon?: string;
10
+ /** Optional trailing count badge. */
11
+ count?: number;
12
+ disabled?: boolean;
13
+ }
14
+ export interface SidebarOptions {
15
+ /** Grouped items; each group renders as a block with optional heading. */
16
+ groups: Array<{
17
+ heading?: string;
18
+ items: SidebarItem[];
19
+ }>;
20
+ /** Initially selected item id. */
21
+ selected?: string;
22
+ /** Fires when the selection changes. */
23
+ onSelect?: (id: string) => void;
24
+ }
25
+ /**
26
+ * A macOS source list.
27
+ *
28
+ * Rows are `<button>` elements so each one is natively focusable and announces
29
+ * its state; a single delegated listener on the container handles activation,
30
+ * which keeps the listener count constant no matter how many rows exist.
31
+ */
32
+ export declare class Sidebar extends Component<HTMLElement> {
33
+ protected readonly root: HTMLElement;
34
+ private selectedId;
35
+ private readonly onSelect?;
36
+ constructor(options: SidebarOptions);
37
+ /** Build one row. */
38
+ private makeItem;
39
+ /** Select an item by id and optionally notify the caller. */
40
+ setSelected(id: string, notify?: boolean): void;
41
+ /** The currently selected item id. */
42
+ get selected(): string | null;
43
+ /** Collapse or expand the sidebar. */
44
+ setCollapsed(collapsed: boolean): void;
45
+ /** True when the sidebar is collapsed. */
46
+ get collapsed(): boolean;
47
+ }
@@ -0,0 +1,30 @@
1
+ import { Component } from "../component";
2
+ import "./statusbar.css";
3
+ export type StatusDotState = "ok" | "warning" | "error" | "idle";
4
+ export interface StatusBarOptions {
5
+ /** Leading status text. */
6
+ text?: string;
7
+ /** Colour of the leading dot. */
8
+ state?: StatusDotState;
9
+ /** Trailing text, typically a clock. */
10
+ trailing?: string;
11
+ }
12
+ /**
13
+ * The thin bar along the bottom of the window.
14
+ *
15
+ * Both texts update independently, so a ticking clock never forces a layout of
16
+ * the leading status and vice versa.
17
+ */
18
+ export declare class StatusBar extends Component<HTMLElement> {
19
+ protected readonly root: HTMLElement;
20
+ private readonly dot;
21
+ private readonly textNode;
22
+ private readonly trailingNode;
23
+ constructor(options?: StatusBarOptions);
24
+ /** Update the leading text. */
25
+ setText(text: string): void;
26
+ /** Update the dot colour. */
27
+ setState(state: StatusDotState): void;
28
+ /** Update the trailing text. */
29
+ setTrailing(text: string): void;
30
+ }
@@ -0,0 +1,74 @@
1
+ import { Component } from "../component";
2
+ import "./tabview.css";
3
+ export interface TabItem {
4
+ /** Stable key; also the value passed to `onSelect`, `select` and `addPanel`. */
5
+ id: string;
6
+ /** Visible text on the tab. */
7
+ label: string;
8
+ /** Leading SVG path data. */
9
+ icon?: string;
10
+ /** Disabled tabs stay visible but are skipped by the keyboard. */
11
+ disabled?: boolean;
12
+ }
13
+ export interface TabViewOptions {
14
+ tabs: TabItem[];
15
+ /** Initially selected tab. Defaults to the first enabled tab. */
16
+ selected?: string;
17
+ /** Fires when the user changes the tab (not on programmatic `select`). */
18
+ onSelect?: (id: string) => void;
19
+ /** Accessible name for the tab list. */
20
+ ariaLabel?: string;
21
+ }
22
+ /**
23
+ * A macOS tab view.
24
+ *
25
+ * The ARIA tabs pattern has three parts and all three are wired here, because a
26
+ * tab strip that only *looks* right is unusable with a screen reader:
27
+ *
28
+ * 1. `role="tablist"` on the strip; `role="tab"` + `aria-selected` +
29
+ * `aria-controls` on each tab; `role="tabpanel"` + `aria-labelledby` on each
30
+ * panel. The panel is created with its tab, so `aria-controls` always
31
+ * resolves to a real element even before the host injects content.
32
+ * 2. **Roving tabindex**: exactly one tab is tabbable — the selected one. Tab
33
+ * then leaves the strip instead of walking through every tab, which is what
34
+ * a native NSTabView does.
35
+ * 3. Arrow keys move the selection *and* focus together (automatic activation),
36
+ * Home/End jump to the ends, and disabled tabs are stepped over rather than
37
+ * focused-and-swallowed.
38
+ *
39
+ * Panels are injected as nodes, so the view owns no content and a panel can be
40
+ * swapped without touching the strip. Panels are never detached: inactive ones
41
+ * are `hidden`, which preserves scroll position and any focus inside them —
42
+ * detaching would silently reset each pane on every switch.
43
+ */
44
+ export declare class TabView extends Component<HTMLDivElement> {
45
+ protected readonly root: HTMLDivElement;
46
+ private readonly tabs;
47
+ private readonly onSelect?;
48
+ private readonly listNode;
49
+ private readonly panelHost;
50
+ /** Tab id → its button in the strip. */
51
+ private readonly tabButtons;
52
+ /** Tab id → its panel element. Both are created together in the constructor. */
53
+ private readonly panels;
54
+ private selectedId;
55
+ constructor(options: TabViewOptions);
56
+ /**
57
+ * Attach content to a tab.
58
+ *
59
+ * Replacing the panel's children keeps repeated calls idempotent instead of
60
+ * stacking content. An unknown id is ignored: the panel set is fixed when
61
+ * the view is constructed, so a typo must not create an orphan panel that
62
+ * no tab can ever reveal.
63
+ */
64
+ addPanel(id: string, node: Node): void;
65
+ /** Select a tab programmatically. Does not fire `onSelect`. */
66
+ setSelected(id: string): void;
67
+ /** The selected tab id, or an empty string when no tab is selectable. */
68
+ get selected(): string;
69
+ /** Write the selection: state, ARIA, roving tabindex and the visible panel. */
70
+ private apply;
71
+ /** Arrow keys, Home and End: move selection and focus as one gesture. */
72
+ private onKeyDown;
73
+ destroy(): void;
74
+ }
@@ -0,0 +1,49 @@
1
+ import { Component } from "../component";
2
+ import { type Child } from "../dom";
3
+ import { TrafficLights, type TrafficLightsOptions } from "./traffic-lights";
4
+ import "./titlebar.css";
5
+ export interface TitleBarOptions {
6
+ /** Centred window title. */
7
+ title?: string;
8
+ /** Show the macOS traffic lights at the leading edge. Default true. */
9
+ trafficLights?: boolean;
10
+ /** Callbacks forwarded to the traffic lights. */
11
+ onClose?: TrafficLightsOptions["onClose"];
12
+ onMinimise?: TrafficLightsOptions["onMinimise"];
13
+ onZoom?: TrafficLightsOptions["onZoom"];
14
+ /** Nodes placed at the trailing edge (search field, toolbar buttons). */
15
+ trailing?: Child[];
16
+ /** Nodes placed between the lights and the title (rarely needed). */
17
+ leading?: Child[];
18
+ /**
19
+ * Double-clicking the empty part of the title bar zooms the window.
20
+ *
21
+ * Wails only wires this up on macOS: its runtime checks `IsMac()` before
22
+ * sending `wails:drag:doubleclick` (see internal/runtime/.../drag.ts), so on
23
+ * Windows and Linux the gesture reaches the page as an ordinary dblclick and
24
+ * does nothing. The kit handles it itself so the behaviour is the same
25
+ * everywhere.
26
+ */
27
+ onDoubleClick?: () => void;
28
+ }
29
+ /**
30
+ * The window's title bar.
31
+ *
32
+ * It carries the `--wails-draggable: drag` custom property, which is what lets
33
+ * the user move a frameless window: Wails' runtime reads that property off the
34
+ * event target and starts a native drag. Interactive children declare
35
+ * `--wails-draggable: no-drag` in their own stylesheets so they stay clickable.
36
+ */
37
+ export declare class TitleBar extends Component<HTMLElement> {
38
+ protected readonly root: HTMLElement;
39
+ private readonly titleNode;
40
+ private readonly lights;
41
+ constructor(options?: TitleBarOptions);
42
+ /** The traffic lights, or null when they were disabled. */
43
+ get trafficLights(): TrafficLights | null;
44
+ /** Update the centred title. */
45
+ setTitle(title: string): void;
46
+ /** Add a node to the trailing toolbar cluster. */
47
+ addTrailing(node: HTMLElement): void;
48
+ destroy(): void;
49
+ }
@@ -0,0 +1,54 @@
1
+ import { Component } from "../component";
2
+ import { type Child } from "../dom";
3
+ import "./toolbar.css";
4
+ export interface ToolbarOptions {
5
+ /** Cluster pinned to the left edge. */
6
+ leading?: Child[];
7
+ /** Cluster centred in the bar. */
8
+ center?: Child[];
9
+ /** Cluster pinned to the right edge. */
10
+ trailing?: Child[];
11
+ /** Which window edge the bar sits against; drives the separator side. */
12
+ position?: "top" | "bottom";
13
+ /** Draw the hairline separator. Defaults to true. */
14
+ bordered?: boolean;
15
+ /** Accessible name for the bar, e.g. "编辑器工具栏". */
16
+ ariaLabel?: string;
17
+ }
18
+ /**
19
+ * A macOS window toolbar.
20
+ *
21
+ * Three slots, not a fixed layout: leading, centre and trailing. The centre slot
22
+ * is positioned against the bar's own midpoint, so a wide leading cluster cannot
23
+ * push it off centre — with `margin: auto` alone that is exactly what happens,
24
+ * and it is the usual failure of a flexbox toolbar.
25
+ *
26
+ * The bar handles no keys itself. Everything placed in it is a real control with
27
+ * its own keyboard behaviour, and a container that swallowed arrow keys would
28
+ * break the text fields that toolbars normally carry. `role="toolbar"` is kept
29
+ * because it names the grouping correctly; the rotation keys the ARIA pattern
30
+ * mentions remain the children's own responsibility by design.
31
+ */
32
+ export declare class Toolbar extends Component<HTMLElement> {
33
+ protected readonly root: HTMLElement;
34
+ private readonly leadingSlot;
35
+ private readonly centerSlot;
36
+ private readonly trailingSlot;
37
+ constructor(options?: ToolbarOptions);
38
+ /** Append a control to the right-hand cluster. */
39
+ addTrailing(node: Child): void;
40
+ /** Append a control to the left-hand cluster. */
41
+ addLeading(node: Child): void;
42
+ /** Append a control to the centred cluster. */
43
+ addCenter(node: Child): void;
44
+ /** Show or hide the separator without rebuilding the bar. */
45
+ setBordered(bordered: boolean): void;
46
+ /** True when the separator is drawn. */
47
+ get bordered(): boolean;
48
+ /** The three slot elements, for callers that mount their own children. */
49
+ get slots(): {
50
+ leading: HTMLElement;
51
+ center: HTMLElement;
52
+ trailing: HTMLElement;
53
+ };
54
+ }
@@ -0,0 +1,37 @@
1
+ import { Component } from "../component";
2
+ import "./traffic-lights.css";
3
+ export interface TrafficLightsOptions {
4
+ /** Red light: close the window. */
5
+ onClose?: () => void;
6
+ /** Yellow light: minimise the window. */
7
+ onMinimise?: () => void;
8
+ /** Green light: zoom (or fullscreen while Alt is held). */
9
+ onZoom?: (event: MouseEvent) => void;
10
+ }
11
+ /**
12
+ * The three macOS window buttons.
13
+ *
14
+ * The component owns presentation only: what "close" means is the host app's
15
+ * business, so behaviour arrives as callbacks. That keeps this file free of any
16
+ * Wails dependency and testable in a plain browser.
17
+ *
18
+ * Glyph paths are drawn inline rather than imported so the exact macOS shapes
19
+ * (the ×, the −, and the two opposing zoom triangles) stay under our control.
20
+ */
21
+ export declare class TrafficLights extends Component<HTMLDivElement> {
22
+ protected readonly root: HTMLDivElement;
23
+ private readonly closeButton;
24
+ private readonly minimiseButton;
25
+ private readonly zoomButton;
26
+ constructor(options?: TrafficLightsOptions);
27
+ /** Create one coloured button. */
28
+ private makeLight;
29
+ /** Append a stroked path glyph to a light. */
30
+ private addGlyph;
31
+ /** Append a zoom glyph made of two filled triangles. */
32
+ private addTriangle;
33
+ /** Reflect whether the window is zoomed (swaps the green glyph and title). */
34
+ setZoomed(zoomed: boolean): void;
35
+ /** Dim the lights when the window is not the active window. */
36
+ setFocused(focused: boolean): void;
37
+ }
@@ -0,0 +1,2 @@
1
+ :root{--mac-base-gray-950:#1e1e20;--mac-base-gray-900:#252528;--mac-base-gray-850:#2b2b2e;--mac-base-gray-800:#333337;--mac-base-gray-700:#3a3a3e;--mac-base-gray-500:#8e8e93;--mac-base-gray-300:#d4d4d8;--mac-base-gray-200:#e4e4e8;--mac-base-gray-150:#ececee;--mac-base-gray-100:#f2f2f5;--mac-base-white:#fff;--mac-base-black:#000;--mac-base-blue-D:#0a84ff;--mac-base-blue-L:#007aff;--mac-base-green-D:#32d74b;--mac-base-green-L:#34c759;--mac-base-red-D:#ff453a;--mac-base-red-L:#ff3b30;--mac-base-orange-D:#ff9f0a;--mac-base-orange-L:#ff9500;--mac-base-yellow-D:#ffd60a;--mac-base-yellow-L:#fc0;--mac-base-purple-D:#bf5af2;--mac-base-purple-L:#af52de;--mac-base-pink-D:#ff375f;--mac-base-pink-L:#ff2d55;--mac-base-teal-D:#64d2ff;--mac-base-teal-L:#30b0c7;--mac-base-traffic-close:#ff5f57;--mac-base-traffic-minimise:#febc2e;--mac-base-traffic-zoom:#28c840;--mac-base-traffic-idle-D:#4a4a4d;--mac-base-traffic-idle-L:#d4d4d8;--mac-base-alpha-white-06:#ffffff0f;--mac-base-alpha-white-08:#ffffff14;--mac-base-alpha-white-10:#ffffff1a;--mac-base-alpha-white-14:#ffffff24;--mac-base-alpha-white-16:#ffffff29;--mac-base-alpha-white-22:#ffffff38;--mac-base-alpha-white-34:#ffffff57;--mac-base-alpha-white-46:#ffffff75;--mac-base-alpha-black-06:#0000000f;--mac-base-alpha-black-10:#0000001a;--mac-base-alpha-black-16:#00000029;--mac-base-alpha-black-24:#0000003d;--mac-base-alpha-black-28:#00000047;--mac-base-alpha-black-38:#00000061;--mac-base-alpha-black-50:#00000080;--mac-base-alpha-black-62:#0000009e;--mac-base-text-dark-primary:#fffffff0;--mac-base-text-dark-secondary:#ebebf59e;--mac-base-text-dark-tertiary:#ebebf566;--mac-base-text-light-primary:#000000e0;--mac-base-text-light-secondary:#3c3c439e;--mac-base-text-light-tertiary:#3c3c4366;--mac-scale:1;--mac-base-font-size-xl:calc(22px * var(--mac-scale));--mac-base-font-size-lg:calc(15px * var(--mac-scale));--mac-base-font-size-md:calc(13px * var(--mac-scale));--mac-base-font-size-sm:calc(11px * var(--mac-scale));--mac-base-line-height-tight:1.15;--mac-base-line-height-normal:1.45;--mac-base-line-height-loose:1.55;--mac-base-tracking-xl:-.015em;--mac-base-tracking-lg:-.005em;--mac-base-tracking-md:0;--mac-base-tracking-sm:.006em;--mac-base-weight-regular:400;--mac-base-weight-medium:500;--mac-base-weight-semibold:600;--mac-base-weight-bold:700;--mac-base-font-family:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter Fallback", "Segoe UI", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--mac-base-font-family-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--mac-base-space-1:calc(4px * var(--mac-scale));--mac-base-space-2:calc(8px * var(--mac-scale));--mac-base-space-3:calc(12px * var(--mac-scale));--mac-base-space-4:calc(16px * var(--mac-scale));--mac-base-space-5:calc(20px * var(--mac-scale));--mac-base-space-6:calc(24px * var(--mac-scale));--mac-base-space-8:calc(32px * var(--mac-scale));--mac-base-radius-s:calc(5px * var(--mac-scale));--mac-base-radius-m:calc(7px * var(--mac-scale));--mac-base-radius-l:calc(10px * var(--mac-scale));--mac-base-radius-xl:calc(12px * var(--mac-scale));--mac-base-control-h-s:calc(22px * var(--mac-scale));--mac-base-control-h-m:calc(28px * var(--mac-scale));--mac-base-control-h-l:calc(34px * var(--mac-scale));--mac-base-control-h-touch:44px;--mac-base-icon-xs:calc(12px * var(--mac-scale));--mac-base-icon-sm:calc(14px * var(--mac-scale));--mac-base-icon-md:calc(16px * var(--mac-scale));--mac-base-icon-lg:calc(22px * var(--mac-scale));--mac-base-row-h:calc(30px * var(--mac-scale));--mac-base-dot-size:calc(7px * var(--mac-scale));--mac-base-traffic-size:calc(12px * var(--mac-scale));--mac-base-tabbar-h:calc(50px * var(--mac-scale));--mac-base-track-thin:4px;--mac-base-track-thick:6px;--mac-base-font-size-2xs:calc(10px * var(--mac-scale));--mac-base-hairline:1px;--mac-base-titlebar-h:calc(52px * var(--mac-scale));--mac-base-statusbar-h:calc(26px * var(--mac-scale));--mac-base-sidebar-w:calc(208px * var(--mac-scale));--mac-base-duration-fast:.12s;--mac-base-duration:.18s;--mac-base-duration-slow:.26s;--mac-base-ease:cubic-bezier(.32, .72, 0, 1);--mac-base-ease-out:cubic-bezier(.22, .61, .36, 1)}:root,:root[data-appearance=dark]{--mac-bg-window:var(--mac-base-gray-950);--mac-bg-titlebar:var(--mac-base-gray-850);--mac-bg-sidebar:var(--mac-base-gray-900);--mac-bg-content:var(--mac-base-gray-950);--mac-bg-elevated:var(--mac-base-gray-800);--mac-bg-input:var(--mac-base-alpha-white-08);--mac-bg-hover:var(--mac-base-alpha-white-08);--mac-bg-active:var(--mac-base-alpha-white-14);--mac-bg-selected:var(--mac-base-blue-D);--mac-bg-overlay:var(--mac-base-gray-700);--mac-border:var(--mac-base-alpha-white-10);--mac-border-strong:var(--mac-base-alpha-white-16);--mac-separator:var(--mac-base-alpha-white-08);--mac-text-primary:var(--mac-base-text-dark-primary);--mac-text-secondary:var(--mac-base-text-dark-secondary);--mac-text-tertiary:var(--mac-base-text-dark-tertiary);--mac-text-on-accent:var(--mac-base-white);--mac-accent:var(--mac-base-blue-D);--mac-accent-soft:#0a84ff38;--mac-success:var(--mac-base-green-D);--mac-warning:var(--mac-base-orange-D);--mac-danger:var(--mac-base-red-D);--mac-traffic-close:var(--mac-base-traffic-close);--mac-traffic-minimise:var(--mac-base-traffic-minimise);--mac-traffic-zoom:var(--mac-base-traffic-zoom);--mac-traffic-idle:var(--mac-base-traffic-idle-D);--mac-traffic-glyph:var(--mac-base-alpha-black-62);--mac-focus-ring:#0a84ffd9;--mac-shadow-popover:0 10px 34px #00000075, 0 0 0 1px var(--mac-base-alpha-white-06);--mac-shadow-sheet:0 26px 70px #00000094;--mac-shadow-control:0 1px 3px var(--mac-base-alpha-black-24);--mac-scrim:var(--mac-base-alpha-black-28);--mac-scroll-thumb:var(--mac-base-alpha-white-22);--mac-scroll-thumb-hover:var(--mac-base-alpha-white-34);--mac-scroll-thumb-active:var(--mac-base-alpha-white-46);--mac-font:var(--mac-base-font-family);--mac-font-mono:var(--mac-base-font-family-mono);--mac-text-xl:var(--mac-base-font-size-xl);--mac-text-lg:var(--mac-base-font-size-lg);--mac-text-md:var(--mac-base-font-size-md);--mac-text-sm:var(--mac-base-font-size-sm);--mac-text-2xs:var(--mac-base-font-size-2xs);--mac-text-large:var(--mac-text-xl);--mac-text-title:var(--mac-text-lg);--mac-text-body:var(--mac-text-md);--mac-text-small:var(--mac-text-sm);--mac-text:var(--mac-text-primary);--mac-weight-regular:var(--mac-base-weight-regular);--mac-weight-medium:var(--mac-base-weight-medium);--mac-weight-semibold:var(--mac-base-weight-semibold);--mac-weight-bold:var(--mac-base-weight-bold);--mac-space-1:var(--mac-base-space-1);--mac-space-2:var(--mac-base-space-2);--mac-space-3:var(--mac-base-space-3);--mac-space-4:var(--mac-base-space-4);--mac-space-5:var(--mac-base-space-5);--mac-space-6:var(--mac-base-space-6);--mac-space-8:var(--mac-base-space-8);--mac-radius-s:var(--mac-base-radius-s);--mac-radius-m:var(--mac-base-radius-m);--mac-radius-l:var(--mac-base-radius-l);--mac-radius-xl:var(--mac-base-radius-xl);--mac-control-height-s:var(--mac-base-control-h-s);--mac-control-height:var(--mac-base-control-h-m);--mac-control-height-l:var(--mac-base-control-h-l);--mac-icon-xs:var(--mac-base-icon-xs);--mac-icon-sm:var(--mac-base-icon-sm);--mac-icon-md:var(--mac-base-icon-md);--mac-icon-lg:var(--mac-base-icon-lg);--mac-hairline:var(--mac-base-hairline);--mac-row-height:var(--mac-base-row-h);--mac-dot-size:var(--mac-base-dot-size);--mac-traffic-size:var(--mac-base-traffic-size);--mac-tabbar-height:var(--mac-base-tabbar-h);--mac-track-thin:var(--mac-base-track-thin);--mac-track-thick:var(--mac-base-track-thick);--mac-titlebar-height:var(--mac-base-titlebar-h);--mac-statusbar-height:var(--mac-base-statusbar-h);--mac-sidebar-width:var(--mac-base-sidebar-w);--mac-duration-fast:var(--mac-base-duration-fast);--mac-duration:var(--mac-base-duration);--mac-duration-slow:var(--mac-base-duration-slow);--mac-ease:var(--mac-base-ease);--mac-ease-out:var(--mac-base-ease-out);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-appearance=light]{--mac-bg-window:var(--mac-base-gray-150);--mac-bg-titlebar:var(--mac-base-gray-100);--mac-bg-sidebar:var(--mac-base-gray-200);--mac-bg-content:var(--mac-base-white);--mac-bg-elevated:var(--mac-base-white);--mac-bg-input:#0000000d;--mac-bg-hover:#0000000e;--mac-bg-active:#0000001a;--mac-bg-selected:var(--mac-base-blue-L);--mac-bg-overlay:#fafafcfc;--mac-border:var(--mac-base-alpha-black-10);--mac-border-strong:var(--mac-base-alpha-black-16);--mac-separator:#00000014;--mac-text-primary:var(--mac-base-text-light-primary);--mac-text-secondary:var(--mac-base-text-light-secondary);--mac-text-tertiary:var(--mac-base-text-light-tertiary);--mac-text-on-accent:var(--mac-base-white);--mac-accent:var(--mac-base-blue-L);--mac-accent-soft:#007aff29;--mac-success:var(--mac-base-green-L);--mac-warning:var(--mac-base-orange-L);--mac-danger:var(--mac-base-red-L);--mac-traffic-close:var(--mac-base-traffic-close);--mac-traffic-minimise:var(--mac-base-traffic-minimise);--mac-traffic-zoom:var(--mac-base-traffic-zoom);--mac-traffic-idle:var(--mac-base-traffic-idle-L);--mac-traffic-glyph:var(--mac-base-alpha-black-62);--mac-focus-ring:#007affcc;--mac-shadow-popover:0 10px 34px #00000029, 0 0 0 1px var(--mac-base-alpha-black-06);--mac-shadow-sheet:0 26px 70px #00000038;--mac-shadow-control:0 1px 3px var(--mac-base-alpha-black-16);--mac-scrim:var(--mac-base-alpha-black-16);--mac-scroll-thumb:var(--mac-base-alpha-black-24);--mac-scroll-thumb-hover:var(--mac-base-alpha-black-38);--mac-scroll-thumb-active:var(--mac-base-alpha-black-50);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=hc-dark]{--mac-border:#ffffff57;--mac-border-strong:#ffffff85;--mac-separator:#ffffff47;--mac-text-secondary:#ffffffd6;--mac-text-tertiary:#ffffff9e;--mac-focus-ring:#78beff}:root[data-theme=hc-light]{--mac-border:#00000061;--mac-border-strong:#00000094;--mac-separator:#0000004d;--mac-text-secondary:#000000d1;--mac-text-tertiary:#00000094;--mac-focus-ring:#005ac8}:root[data-density=compact]{--mac-scale:.92}:root[data-density=comfortable]{--mac-scale:1}:root[data-density=touch]{--mac-scale:1.2}@media (pointer:coarse){:root:not([data-density]){--mac-scale:1.15}}@media (prefers-reduced-motion:reduce){:root{--mac-duration-fast:0s;--mac-duration:0s;--mac-duration-slow:0s}}:root,:root[data-appearance=dark]{--mac-blue:var(--mac-accent);--mac-green:var(--mac-success);--mac-red:var(--mac-danger);--mac-orange:var(--mac-warning);--mac-yellow:var(--mac-base-yellow-D);--mac-purple:var(--mac-base-purple-D);--mac-pink:var(--mac-base-pink-D);--mac-teal:var(--mac-base-teal-D);--mac-gray:var(--mac-text-tertiary)}:root[data-appearance=light]{--mac-yellow:var(--mac-base-yellow-L);--mac-purple:var(--mac-base-purple-L);--mac-pink:var(--mac-base-pink-L);--mac-teal:var(--mac-base-teal-L)}[hidden]{display:none!important}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@font-face{font-family:Inter Fallback;src:local(Inter Medium),local(Inter),url(./assets/Inter-Medium.ttf)format("truetype");font-weight:400 600;font-style:normal;font-display:swap}:root{--mac-font:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter Fallback", "Segoe UI", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--mac-letter-spacing:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}@supports (-webkit-touch-callout:none){:root{--mac-letter-spacing:.006em}}*{scrollbar-width:thin;scrollbar-color:var(--mac-scroll-thumb) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--mac-scroll-thumb);background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--mac-scroll-thumb-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--mac-scroll-thumb-active)}::-webkit-scrollbar-corner{background:0 0}@supports (-webkit-touch-callout:none){*{scrollbar-width:auto}}@media (hover:none){.mac-button:hover:not(:disabled){background:var(--mac-bg-elevated)}.mac-button--primary:hover:not(:disabled),.mac-button--destructive:hover:not(:disabled){filter:none}.mac-button--plain:hover:not(:disabled){background:0 0}.mac-sidebar__item:hover:not(.is-selected):not(:disabled){color:var(--mac-text-secondary);background:0 0}.mac-menu__item:hover:not(:disabled){color:var(--mac-text);background:0 0}.mac-select__control:hover:not(:disabled),.mac-textarea__control:hover .mac-textarea__input,.mac-textfield__control:hover .mac-textfield__input{border-color:var(--mac-border);background:var(--mac-bg-input)}.mac-disclosure__header:hover:not(:disabled){background:0 0}.mac-tabview__tab:hover:not(.is-selected):not(:disabled){color:var(--mac-text-secondary)}.mac-button:active:not(:disabled),.mac-sidebar__item:active:not(:disabled),.mac-menu__item:active:not(:disabled),.mac-disclosure__header:active:not(:disabled){background:var(--mac-bg-active)}}.mac-button{justify-content:center;align-items:center;gap:var(--mac-space-1);height:var(--mac-control-height);padding:0 var(--mac-space-3);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-elevated);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);font-weight:var(--mac-weight-medium);white-space:nowrap;cursor:default;-webkit-user-select:none;user-select:none;transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease), transform var(--mac-duration-fast) var(--mac-ease);line-height:1;display:inline-flex}.mac-button:hover:not(:disabled){background:var(--mac-bg-hover)}.mac-button:active:not(:disabled){background:var(--mac-bg-active);transform:scale(.98)}.mac-button:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-button:disabled{opacity:.45;cursor:default}.mac-button--primary{background:var(--mac-accent);color:var(--mac-text-on-accent);border-color:#0000}.mac-button--primary:hover:not(:disabled){filter:brightness(1.08)}.mac-button--primary:active:not(:disabled){filter:brightness(.94)}.mac-button--destructive{background:var(--mac-danger);color:var(--mac-text-on-accent);border-color:#0000}.mac-button--destructive:hover:not(:disabled){filter:brightness(1.08)}.mac-button--plain{background:0 0;border-color:#0000}.mac-button--small{height:var(--mac-control-height-s);padding:0 calc(var(--mac-space-2) + var(--mac-space-1) / 4);font-size:var(--mac-text-small)}.mac-button--large{height:var(--mac-control-height-l);padding:0 calc(var(--mac-space-4) + var(--mac-space-1) / 2);font-size:var(--mac-text-title)}.mac-button--block{width:100%}.mac-button__icon{width:var(--mac-icon-sm);height:var(--mac-icon-sm);flex:none;display:inline-flex}.mac-textfield{gap:var(--mac-space-1);font-family:var(--mac-font);font-size:var(--mac-text-body);flex-direction:column;display:flex}.mac-textfield__label{font-size:var(--mac-text-small);font-weight:var(--mac-weight-medium);color:var(--mac-text-secondary)}.mac-textfield__control{align-items:center;gap:var(--mac-space-2);height:var(--mac-control-height);padding:0 var(--mac-space-2);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease);display:flex}.mac-textfield__control:hover{border-color:var(--mac-border-strong)}.mac-textfield__control:focus-within{border-color:var(--mac-accent)}.mac-textfield__control:has(:focus-visible){outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-textfield__input{min-width:0;height:100%;color:var(--mac-text);font-family:inherit;font-size:var(--mac-text-body);background:0 0;border:none;outline:none;flex:auto;padding:0;line-height:1}.mac-textfield__input::placeholder{color:var(--mac-text-tertiary)}.mac-textfield__input:read-only{color:var(--mac-text-secondary)}.mac-textfield__icon{width:var(--mac-icon-sm);height:var(--mac-icon-sm);color:var(--mac-text-tertiary);flex:none;display:inline-flex}.mac-textfield__clear{width:var(--mac-icon-md);height:var(--mac-icon-md);background:var(--mac-bg-active);color:var(--mac-text-secondary);cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease), color var(--mac-duration-fast) var(--mac-ease);border:none;border-radius:50%;flex:none;place-items:center;padding:0;display:grid}.mac-textfield__clear[hidden]{display:none}.mac-textfield__clear:hover{background:var(--mac-bg-hover);color:var(--mac-text)}.mac-textfield__clear:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-textfield.is-disabled .mac-textfield__control{opacity:.45}.mac-textfield.is-disabled .mac-textfield__label{opacity:.6}.mac-numberfield{gap:var(--mac-space-1);font-family:var(--mac-font);font-size:var(--mac-text-body);flex-direction:column;display:flex}.mac-numberfield__label{font-size:var(--mac-text-small);font-weight:var(--mac-weight-medium);color:var(--mac-text-secondary)}.mac-numberfield__control{height:var(--mac-control-height);padding:0 calc(var(--mac-space-1) / 2) 0 var(--mac-space-2);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease);align-items:stretch;display:flex}.mac-numberfield__control:hover{border-color:var(--mac-border-strong)}.mac-numberfield__control:focus-within{border-color:var(--mac-accent)}.mac-numberfield__control:has(:focus-visible){outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-numberfield__input{min-width:0;color:var(--mac-text);font-family:inherit;font-size:var(--mac-text-body);appearance:textfield;background:0 0;border:none;outline:none;flex:auto;padding:0;line-height:1}.mac-numberfield__input::-webkit-outer-spin-button{appearance:none;margin:0}.mac-numberfield__input::-webkit-inner-spin-button{appearance:none;margin:0}.mac-numberfield__stepper{width:var(--mac-icon-md);opacity:0;transition:opacity var(--mac-duration-fast) var(--mac-ease);flex-direction:column;flex:none;justify-content:center;display:flex}.mac-numberfield__control:hover .mac-numberfield__stepper,.mac-numberfield__control:focus-within .mac-numberfield__stepper{opacity:1}.mac-numberfield__step{border-radius:var(--mac-radius-s);min-height:0;color:var(--mac-text-secondary);cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease);background:0 0;border:none;flex:1 1 0;place-items:center;padding:0;display:grid}.mac-numberfield__step:hover:not(:disabled){background:var(--mac-bg-hover);color:var(--mac-text)}.mac-numberfield__step:active:not(:disabled){background:var(--mac-bg-active)}.mac-numberfield__step:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-numberfield__step:disabled{opacity:.35}.mac-numberfield.is-disabled .mac-numberfield__control{opacity:.45}.mac-numberfield.is-disabled .mac-numberfield__label{opacity:.6}.mac-numberfield.is-disabled .mac-numberfield__stepper{opacity:0}.mac-slider{gap:var(--mac-space-1);font-family:var(--mac-font);font-size:var(--mac-text-body);--mac-slider-value:0%;flex-direction:column;display:flex}.mac-slider__label{font-size:var(--mac-text-small);font-weight:var(--mac-weight-medium);color:var(--mac-text-secondary)}.mac-slider__control{align-items:center;gap:var(--mac-space-2);display:flex}.mac-slider__input{min-width:0;height:calc(var(--mac-space-4) + var(--mac-space-1));border-radius:var(--mac-radius-s);appearance:none;cursor:default;background:0 0;flex:auto;margin:0;padding:0}.mac-slider__input::-webkit-slider-runnable-track{height:var(--mac-track-thin);border-radius:var(--mac-radius-s);background:linear-gradient(to right, var(--mac-accent) 0, var(--mac-accent) var(--mac-slider-value), var(--mac-bg-active) var(--mac-slider-value), var(--mac-bg-active) 100%)}.mac-slider__input::-webkit-slider-thumb{width:var(--mac-icon-sm);height:var(--mac-icon-sm);margin-top:calc((var(--mac-track-thin) - var(--mac-icon-sm)) / 2);background:var(--mac-text-on-accent);box-shadow:var(--mac-shadow-control);appearance:none;transition:transform var(--mac-duration-fast) var(--mac-ease);border:none;border-radius:50%}.mac-slider__input:hover::-webkit-slider-thumb{transform:scale(1.08)}.mac-slider__input:active::-webkit-slider-thumb{transform:scale(.96)}.mac-slider__input::-moz-range-track{height:var(--mac-track-thin);border-radius:var(--mac-radius-s);background:var(--mac-bg-active)}.mac-slider__input::-moz-range-progress{height:var(--mac-track-thin);border-radius:var(--mac-radius-s);background:var(--mac-accent)}.mac-slider__input::-moz-range-thumb{width:var(--mac-icon-sm);height:var(--mac-icon-sm);background:var(--mac-text-on-accent);box-shadow:var(--mac-shadow-control);border:none;border-radius:50%}.mac-slider__input:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:2px}.mac-slider.is-disabled .mac-slider__input{opacity:.45}.mac-slider__value{text-align:right;min-width:3ch;font-size:var(--mac-text-body);font-variant-numeric:tabular-nums;color:var(--mac-text-secondary);flex:none}.mac-progress{width:100%;height:calc(var(--mac-space-1) + var(--mac-hairline) * 2);border-radius:var(--mac-radius-s);background:var(--mac-bg-input);position:relative;overflow:hidden}.mac-progress__fill{transform-origin:0;width:100%;height:100%;transform:scaleX(var(--mac-progress-scale,0));background:var(--mac-accent);transition:transform var(--mac-duration) var(--mac-ease-out)}.mac-progress.is-indeterminate .mac-progress__fill{background:repeating-linear-gradient(90deg, var(--mac-accent) 0, var(--mac-accent) var(--mac-space-2), var(--mac-accent-soft) var(--mac-space-2), var(--mac-accent-soft) var(--mac-space-4));width:40%;animation:1.1s linear infinite mac-progress-sweep;transform:none}@keyframes mac-progress-sweep{0%{transform:translate(-100%)}to{transform:translate(250%)}}@media (prefers-reduced-motion:reduce){.mac-progress.is-indeterminate .mac-progress__fill{animation:none;transform:translate(75%)}}.mac-badge{align-items:center;gap:var(--mac-space-1);height:calc(var(--mac-control-height-s) - var(--mac-space-1));padding:0 var(--mac-space-2);border-radius:var(--mac-radius-s);font-family:var(--mac-font);font-size:var(--mac-text-small);font-weight:var(--mac-weight-medium);white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;line-height:1;display:inline-flex}.mac-badge,.mac-badge--default{background:var(--mac-bg-hover);color:var(--mac-text-secondary)}.mac-badge--accent{background:var(--mac-accent-soft);color:var(--mac-accent)}.mac-badge--success{color:var(--mac-success);background:var(--mac-bg-hover);background:color-mix(in srgb, var(--mac-success) 20%, transparent)}.mac-badge--warning{color:var(--mac-warning);background:var(--mac-bg-hover);background:color-mix(in srgb, var(--mac-warning) 20%, transparent)}.mac-badge--danger{color:var(--mac-danger);background:var(--mac-bg-hover);background:color-mix(in srgb, var(--mac-danger) 20%, transparent)}.mac-switch{width:calc(var(--mac-icon-sm) * 2 + var(--mac-hairline) * 4);height:calc(var(--mac-icon-sm) + var(--mac-hairline) * 4);border-radius:calc((var(--mac-icon-sm) + var(--mac-hairline) * 4) / 2);background:var(--mac-bg-active);vertical-align:middle;cursor:default;transition:background-color var(--mac-duration) var(--mac-ease), opacity var(--mac-duration-fast) var(--mac-ease);border:none;flex:none;padding:0;display:inline-block;position:relative}.mac-switch[aria-checked=true]{background:var(--mac-accent)}.mac-switch__knob{top:calc(var(--mac-hairline) * 2);left:calc(var(--mac-hairline) * 2);width:var(--mac-icon-sm);height:var(--mac-icon-sm);background:var(--mac-text-on-accent);box-shadow:var(--mac-shadow-control);transition:transform var(--mac-duration) var(--mac-ease);border-radius:50%;position:absolute}.mac-switch[aria-checked=true] .mac-switch__knob{transform:translateX(var(--mac-icon-sm))}.mac-switch:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:2px}.mac-switch:disabled{opacity:.45;cursor:default}.mac-checkbox{align-items:center;gap:var(--mac-space-2);font-family:var(--mac-font);font-size:var(--mac-text-body);color:var(--mac-text);vertical-align:middle;cursor:default;-webkit-user-select:none;user-select:none;line-height:1;display:inline-flex}.mac-checkbox__input{width:var(--mac-hairline);height:var(--mac-hairline);clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;appearance:none;border:none;margin:0;padding:0;position:absolute;overflow:hidden}.mac-checkbox__box{width:var(--mac-icon-sm);height:var(--mac-icon-sm);border:var(--mac-hairline) solid var(--mac-border-strong);border-radius:var(--mac-radius-s);background:var(--mac-bg-input);transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease);flex:none;place-items:center;display:grid}.mac-checkbox:hover .mac-checkbox__box{border-color:var(--mac-accent)}.mac-checkbox__input:checked+.mac-checkbox__box,.mac-checkbox__input:indeterminate+.mac-checkbox__box{background:var(--mac-accent);border-color:#0000}.mac-checkbox__tick,.mac-checkbox__dash{color:var(--mac-text-on-accent);opacity:0;transition:opacity var(--mac-duration-fast) var(--mac-ease);grid-area:1/1}.mac-checkbox__input:checked+.mac-checkbox__box .mac-checkbox__tick{opacity:1}.mac-checkbox__input:indeterminate+.mac-checkbox__box .mac-checkbox__tick{opacity:0}.mac-checkbox__input:indeterminate+.mac-checkbox__box .mac-checkbox__dash{opacity:1}.mac-checkbox__input:focus-visible+.mac-checkbox__box{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:1px}.mac-checkbox__label{font-size:var(--mac-text-body);color:var(--mac-text)}.mac-checkbox.is-disabled{opacity:.45;cursor:default}.mac-checkbox.is-disabled .mac-checkbox__box{border-color:var(--mac-border);background:0 0}.mac-checkbox.is-disabled .mac-checkbox__input:checked+.mac-checkbox__box,.mac-checkbox.is-disabled .mac-checkbox__input:indeterminate+.mac-checkbox__box{background:var(--mac-bg-active)}.mac-segmented{padding:calc(var(--mac-space-1) / 2);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);-webkit-user-select:none;user-select:none;--wails-draggable:no-drag;align-items:stretch;display:inline-flex;position:relative}.mac-segmented__thumb{top:calc(var(--mac-space-1) / 2);bottom:calc(var(--mac-space-1) / 2);left:calc(var(--mac-space-1) / 2);width:var(--mac-segmented-thumb-width,0);border-radius:calc(var(--mac-radius-m) - var(--mac-hairline));background:var(--mac-bg-elevated);box-shadow:var(--mac-shadow-control);transform:translateX(var(--mac-segmented-thumb-x,0));transition:transform var(--mac-duration) var(--mac-ease), width var(--mac-duration) var(--mac-ease);pointer-events:none;position:absolute}.mac-segmented__item{z-index:1;justify-content:center;align-items:center;gap:var(--mac-space-1);height:calc(var(--mac-control-height-s) + var(--mac-space-1) / 2);padding:0 var(--mac-space-3);border-radius:calc(var(--mac-radius-m) - var(--mac-hairline));color:var(--mac-text-secondary);font-family:var(--mac-font);font-size:var(--mac-text-body);font-weight:var(--mac-weight-medium);white-space:nowrap;cursor:default;transition:color var(--mac-duration-fast) var(--mac-ease);background:0 0;border:none;flex:1 1 0;display:inline-flex;position:relative}.mac-segmented__item:hover:not(.is-selected):not(:disabled){color:var(--mac-text)}.mac-segmented__item.is-selected{color:var(--mac-text);font-weight:var(--mac-weight-semibold)}.mac-segmented__item:disabled{opacity:.4}.mac-segmented__item:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:-2px}.mac-segmented--block{width:100%;display:flex}.mac-select{min-width:calc(var(--mac-space-5) * 6);--wails-draggable:no-drag;align-items:center;display:inline-flex;position:relative}.mac-select__control{appearance:none;width:100%;height:var(--mac-control-height);padding:0 calc(var(--mac-space-6) + var(--mac-hairline) * 2) 0 calc(var(--mac-space-2) + var(--mac-hairline) * 2);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);cursor:default;transition:border-color var(--mac-duration-fast) var(--mac-ease);line-height:1}.mac-select__control:hover:not(:disabled){background:var(--mac-bg-hover)}.mac-select__control:focus-visible{border-color:var(--mac-accent);box-shadow:0 0 0 calc(var(--mac-hairline) * 3) var(--mac-accent-soft);outline:none}.mac-select__control:disabled{opacity:.45}.mac-select__arrow{right:var(--mac-space-2);width:var(--mac-icon-xs);height:var(--mac-icon-xs);color:var(--mac-text-tertiary);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.mac-select__control option{background:var(--mac-bg-elevated);color:var(--mac-text)}.mac-select--block{width:100%;display:flex}.mac-spinner{justify-content:center;align-items:center;gap:var(--mac-space-2);color:var(--mac-text-secondary);font-family:var(--mac-font);font-size:var(--mac-text-md);display:inline-flex}.mac-spinner__ring{width:var(--mac-spinner-size,var(--mac-icon-md));height:var(--mac-spinner-size,var(--mac-icon-md));border:calc(var(--mac-hairline) * 2) solid var(--mac-border-strong);border-top-color:var(--mac-accent);border-radius:50%;flex:none;animation:.8s linear infinite mac-spinner-rotate}.mac-spinner--large .mac-spinner__ring{--mac-spinner-size:var(--mac-icon-lg);border-width:calc(var(--mac-hairline) * 2)}.mac-spinner--small .mac-spinner__ring{--mac-spinner-size:var(--mac-icon-xs);border-width:calc(var(--mac-hairline) * 2)}.mac-spinner__label{white-space:nowrap;color:var(--mac-text-secondary)}@keyframes mac-spinner-rotate{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.mac-spinner__ring{border-color:var(--mac-accent);opacity:.6;animation:none}}.mac-textarea{gap:var(--mac-space-1);flex-direction:column;display:flex}.mac-textarea__label{font-size:var(--mac-text-sm);font-weight:var(--mac-weight-medium);color:var(--mac-text-secondary)}.mac-textarea__control{min-width:0;display:flex}.mac-textarea__input{width:100%;min-height:calc(var(--mac-control-height) * 3);padding:var(--mac-space-2);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-md);line-height:var(--mac-base-line-height-normal);resize:vertical;transition:border-color var(--mac-duration-fast) var(--mac-ease);outline:none}.mac-textarea__input::placeholder{color:var(--mac-text-tertiary)}.mac-textarea__control:hover:not(.is-disabled) .mac-textarea__input{border-color:var(--mac-border-strong)}.mac-textarea__control:has(.mac-textarea__input:focus-visible) .mac-textarea__input{border-color:var(--mac-accent);outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:calc(var(--mac-hairline) * 2)}.mac-textarea.is-disabled .mac-textarea__input{opacity:.45;cursor:default}.mac-textarea__meta{font-size:var(--mac-text-sm);color:var(--mac-text-tertiary);font-variant-numeric:tabular-nums;justify-content:flex-end;display:flex}.mac-textarea__meta.is-over{color:var(--mac-danger)}.mac-disclosure{border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-l);background:var(--mac-bg-elevated);flex-direction:column;display:flex;overflow:hidden}.mac-disclosure__header{align-items:center;gap:var(--mac-space-2);width:100%;min-height:var(--mac-control-height);padding:var(--mac-space-2) var(--mac-space-3);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-md);font-weight:var(--mac-weight-medium);text-align:left;cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease);background:0 0;border:none;display:flex}.mac-disclosure__header:hover:not(:disabled){background:var(--mac-bg-hover)}.mac-disclosure__header:disabled{opacity:.45}.mac-disclosure__header:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:calc(var(--mac-hairline) * -2)}.mac-disclosure__chevron{width:var(--mac-icon-sm);height:var(--mac-icon-sm);color:var(--mac-text-tertiary);transition:transform var(--mac-duration) var(--mac-ease);flex:none;transform:rotate(0)}.mac-disclosure.is-open .mac-disclosure__chevron{transform:rotate(90deg)}.mac-disclosure__title{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;overflow:hidden}.mac-disclosure__meta{font-size:var(--mac-text-sm);color:var(--mac-text-tertiary);font-variant-numeric:tabular-nums;flex:none}.mac-disclosure__content{padding:0 var(--mac-space-3) var(--mac-space-3);color:var(--mac-text-secondary);font-size:var(--mac-text-md);line-height:var(--mac-base-line-height-normal)}.mac-disclosure__content[hidden]{display:none}.mac-table{border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-content);min-width:0;color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);flex-direction:column;display:flex;overflow:hidden}.mac-table__scroll{-webkit-overflow-scrolling:touch;min-width:0;overflow:auto hidden}.mac-table__table{border-collapse:separate;border-spacing:0;min-width:100%}.mac-table__row{transition:background-color var(--mac-duration-fast) var(--mac-ease)}.mac-table__th{padding:var(--mac-space-1) var(--mac-space-3);border-bottom:var(--mac-hairline) solid var(--mac-border);background:var(--mac-bg-elevated);color:var(--mac-text-secondary);font-size:var(--mac-text-small);font-weight:var(--mac-weight-semibold);text-align:left;white-space:nowrap;-webkit-user-select:none;user-select:none}.mac-table__cell{min-width:calc(var(--mac-space-8) * 2);padding:var(--mac-space-2) var(--mac-space-3);border-bottom:var(--mac-hairline) solid var(--mac-separator);color:var(--mac-text);vertical-align:middle;transition:background-color var(--mac-duration-fast) var(--mac-ease)}.mac-table__row:nth-child(2n) .mac-table__cell{background:var(--mac-bg-hover)}.mac-table__row:hover .mac-table__cell{background:var(--mac-bg-active)}.mac-table--selectable .mac-table__row.is-selected .mac-table__cell,.mac-table--selectable .mac-table__row.is-selected:hover .mac-table__cell{background:var(--mac-accent-soft)}.mac-table__body>tr:last-child>.mac-table__cell{border-bottom:none}.mac-table__align--center{text-align:center}.mac-table__align--right{text-align:right;font-variant-numeric:tabular-nums}.mac-table__col--select,.mac-table__th--select,.mac-table__cell--select{width:calc(var(--mac-space-8) + var(--mac-space-2));padding-left:var(--mac-space-3);padding-right:var(--mac-space-1);text-align:center}.mac-table__checkbox{width:var(--mac-icon-sm);height:var(--mac-icon-sm);accent-color:var(--mac-accent);cursor:default;margin:0 auto;display:block}.mac-table__checkbox:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:var(--mac-hairline)}.mac-table__checkbox:disabled{opacity:.4}.mac-table__empty{padding:var(--mac-space-6) var(--mac-space-3);color:var(--mac-text-tertiary);font-size:var(--mac-text-small);text-align:center}.mac-table__row--empty:hover .mac-table__cell{background:0 0}@media (pointer:coarse){.mac-table__th,.mac-table__cell{padding-top:var(--mac-space-3);padding-bottom:var(--mac-space-3)}.mac-table__checkbox{width:var(--mac-icon-md);height:var(--mac-icon-md)}}@media (hover:none){.mac-table__row:hover .mac-table__cell{background:inherit}.mac-table--selectable .mac-table__row.is-selected .mac-table__cell{background:var(--mac-accent-soft)}}.mac-splitview{--mac-splitview-primary:50%;min-width:0;min-height:0;display:flex}.mac-splitview--horizontal{flex-direction:row}.mac-splitview--vertical{flex-direction:column}.mac-splitview__pane{-webkit-overflow-scrolling:touch;min-width:0;min-height:0;overflow:auto}.mac-splitview__pane--primary{flex:none;flex-basis:var(--mac-splitview-primary)}.mac-splitview__pane--secondary{flex:1 1 0}.mac-splitview__divider{-webkit-user-select:none;user-select:none;touch-action:none;transition:background-color var(--mac-duration-fast) var(--mac-ease);background:0 0;flex:none;position:relative}.mac-splitview--horizontal>.mac-splitview__divider{width:calc(var(--mac-space-2) + var(--mac-hairline) * 3);cursor:col-resize}.mac-splitview--vertical>.mac-splitview__divider{height:calc(var(--mac-space-2) + var(--mac-hairline) * 3);cursor:row-resize}.mac-splitview__divider:before{content:"";background:var(--mac-separator);transition:background-color var(--mac-duration-fast) var(--mac-ease), transform var(--mac-duration-fast) var(--mac-ease);position:absolute}.mac-splitview--horizontal>.mac-splitview__divider:before{width:var(--mac-hairline);top:0;bottom:0;left:50%;transform:translate(-50%)}.mac-splitview--vertical>.mac-splitview__divider:before{height:var(--mac-hairline);top:50%;left:0;right:0;transform:translateY(-50%)}.mac-splitview__divider:hover:before,.mac-splitview.is-dragging .mac-splitview__divider:before{background:var(--mac-accent)}.mac-splitview--horizontal>.mac-splitview__divider:hover:before,.mac-splitview--horizontal.is-dragging .mac-splitview__divider:before{transform:translate(-50%)scaleX(3)}.mac-splitview--vertical>.mac-splitview__divider:hover:before,.mac-splitview--vertical.is-dragging .mac-splitview__divider:before{transform:translateY(-50%)scaleY(3)}.mac-splitview__divider:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:calc(var(--mac-hairline) * -2)}.mac-splitview.is-dragging{-webkit-user-select:none;user-select:none}.mac-splitview.is-dragging .mac-splitview__pane{pointer-events:none}@media (pointer:coarse){.mac-splitview--horizontal>.mac-splitview__divider{width:44px}.mac-splitview--vertical>.mac-splitview__divider{height:44px}}.mac-combobox{border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);min-width:0;color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease), box-shadow var(--mac-duration-fast) var(--mac-ease);align-items:center;display:flex;position:relative}.mac-combobox:hover{border-color:var(--mac-border-strong)}.mac-combobox:focus-within{border-color:var(--mac-accent)}.mac-combobox:has(.mac-combobox__input:focus-visible){outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:var(--mac-hairline)}.mac-combobox:has(.mac-combobox__input[aria-expanded=true]){border-color:var(--mac-accent)}.mac-combobox__input{min-width:0;height:var(--mac-control-height);padding:0 var(--mac-space-2);padding-right:calc(var(--mac-space-5) + var(--mac-space-1));border-radius:var(--mac-radius-m);color:var(--mac-text);font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none;flex:auto;line-height:1}.mac-combobox__input::placeholder{color:var(--mac-text-tertiary)}.mac-combobox__chevron{right:var(--mac-space-2);width:var(--mac-icon-xs);height:var(--mac-icon-xs);color:var(--mac-text-tertiary);pointer-events:none;transition:transform var(--mac-duration-fast) var(--mac-ease);display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.mac-combobox:has(.mac-combobox__input[aria-expanded=true]) .mac-combobox__chevron{transform:translateY(-50%)rotate(180deg)}.mac-combobox__list{top:calc(100% + var(--mac-space-1));z-index:10;max-height:calc(var(--mac-control-height) * 8 + var(--mac-space-1) * 2 + var(--mac-hairline) * 2);padding:var(--mac-space-1);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-elevated);box-shadow:var(--mac-shadow-popover);-webkit-overflow-scrolling:touch;transform-origin:top;animation:mac-combobox-open var(--mac-duration-fast) var(--mac-ease);flex-direction:column;display:flex;position:absolute;left:0;right:0;overflow-y:auto}.mac-combobox__list[hidden]{display:none}@keyframes mac-combobox-open{0%{opacity:0;transform:translateY(calc(var(--mac-space-1) * -1)) scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.mac-combobox__option{padding:var(--mac-space-1) var(--mac-space-2);border-radius:var(--mac-radius-s);color:var(--mac-text);white-space:nowrap;text-overflow:ellipsis;cursor:default;-webkit-user-select:none;user-select:none;flex:none;line-height:1.45;overflow:hidden}.mac-combobox__option.is-active{background:var(--mac-accent-soft)}.mac-combobox__option[aria-selected=true]{color:var(--mac-accent);font-weight:var(--mac-weight-medium)}.mac-combobox__option[aria-selected=true].is-active{color:var(--mac-text)}@media (pointer:coarse){.mac-combobox__input{height:44px}.mac-combobox__option{padding-top:var(--mac-space-2);padding-bottom:var(--mac-space-2);align-items:center;min-height:44px;display:flex}.mac-combobox__input{font-size:max(var(--mac-text-body), 1rem)}}.mac-datepicker{gap:var(--mac-space-1);font-family:var(--mac-font);font-size:var(--mac-text-body);flex-direction:column;display:flex}.mac-datepicker__label{font-size:var(--mac-text-small);font-weight:var(--mac-weight-medium);color:var(--mac-text-secondary)}.mac-datepicker__control{min-width:0;height:var(--mac-control-height);padding:0 var(--mac-space-2);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-m);background:var(--mac-bg-input);transition:background-color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease);align-items:center;display:flex;position:relative}.mac-datepicker__control:hover{border-color:var(--mac-border-strong)}.mac-datepicker__control:focus-within{border-color:var(--mac-accent)}.mac-datepicker__control:has(.mac-datepicker__input:focus-visible){outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:var(--mac-hairline)}.mac-datepicker__input{min-width:0;height:100%;padding:0;padding-right:calc(var(--mac-icon-md) + var(--mac-space-2));color:var(--mac-text);font-family:inherit;font-size:inherit;cursor:default;background:0 0;border:none;outline:none;flex:auto;line-height:1}.mac-datepicker__input::-webkit-calendar-picker-indicator{width:var(--mac-icon-md);height:var(--mac-icon-md);opacity:0;cursor:default;margin:0;padding:0}.mac-datepicker__input::-moz-calendar-picker-indicator{opacity:0}.mac-datepicker__input::-webkit-datetime-edit-text{color:var(--mac-text)}.mac-datepicker__input::-webkit-datetime-edit-year-field{color:var(--mac-text)}.mac-datepicker__input::-webkit-datetime-edit-month-field{color:var(--mac-text)}.mac-datepicker__input::-webkit-datetime-edit-day-field{color:var(--mac-text)}.mac-datepicker__input:disabled{opacity:.45}.mac-datepicker__icon{right:var(--mac-space-2);width:var(--mac-icon-md);height:var(--mac-icon-md);color:var(--mac-text-secondary);pointer-events:none;transition:color var(--mac-duration-fast) var(--mac-ease);display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.mac-datepicker__control:hover .mac-datepicker__icon{color:var(--mac-text)}.mac-datepicker.is-disabled .mac-datepicker__control{opacity:.45}.mac-datepicker.is-disabled .mac-datepicker__label{opacity:.6}.mac-datepicker.is-disabled .mac-datepicker__icon{color:var(--mac-text-tertiary)}@media (pointer:coarse){.mac-datepicker__control{height:44px}.mac-datepicker__input{font-size:max(var(--mac-text-body), 1rem)}}.mac-traffic-lights{align-items:center;gap:var(--mac-space-2);--wails-draggable:no-drag;flex:none;display:flex}.mac-traffic-light{width:var(--mac-traffic-size);height:var(--mac-traffic-size);background:var(--mac-traffic-idle);cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease);border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex;position:relative}.mac-traffic-light--close{background:var(--mac-traffic-close)}.mac-traffic-light--minimise{background:var(--mac-traffic-minimise)}.mac-traffic-light--zoom{background:var(--mac-traffic-zoom)}.mac-traffic-light svg{width:var(--mac-traffic-size);height:var(--mac-traffic-size);opacity:0;pointer-events:none;transition:opacity var(--mac-duration-fast) var(--mac-ease);overflow:visible}.mac-traffic-light svg path{stroke:var(--mac-traffic-glyph);stroke-width:1.35px;stroke-linecap:round;fill:none}.mac-traffic-light--zoom svg path{stroke:none;fill:var(--mac-traffic-glyph)}.mac-traffic-lights:hover .mac-traffic-light svg,.mac-traffic-light:focus-visible svg{opacity:1}.mac-traffic-light:active{filter:brightness(.85)}.mac-traffic-light:focus-visible{outline:2px solid var(--mac-focus-ring);outline-offset:calc(2px * var(--mac-scale))}.mac-traffic-light__glyph--exit,.mac-traffic-lights.is-zoomed .mac-traffic-light__glyph--enter{display:none}.mac-traffic-lights.is-zoomed .mac-traffic-light__glyph--exit{display:block}.mac-traffic-lights.is-unfocused .mac-traffic-light{background:var(--mac-traffic-idle)}.mac-traffic-lights.is-unfocused .mac-traffic-light--close:hover{background:var(--mac-traffic-close)}.mac-traffic-lights.is-unfocused .mac-traffic-light--minimise:hover{background:var(--mac-traffic-minimise)}.mac-traffic-lights.is-unfocused .mac-traffic-light--zoom:hover{background:var(--mac-traffic-zoom)}.mac-titlebar{align-items:center;gap:var(--mac-space-2);height:var(--mac-titlebar-height);padding:0 var(--mac-space-4);background:var(--mac-bg-titlebar);border-bottom:1px solid var(--mac-border);--wails-draggable:drag;flex:none;display:flex;position:relative}.mac-titlebar__leading,.mac-titlebar__trailing{align-items:center;gap:var(--mac-space-2);--wails-draggable:no-drag;flex:none;display:flex}.mac-titlebar__trailing{margin-left:auto}.mac-titlebar__title{white-space:nowrap;text-overflow:ellipsis;max-width:40%;font-size:var(--mac-text-body);font-weight:var(--mac-weight-semibold);letter-spacing:.01em;color:var(--mac-text-secondary);pointer-events:none;position:absolute;left:50%;overflow:hidden;transform:translate(-50%)}@media (width<=680px){.mac-titlebar__title{display:none}}.mac-sidebar{flex-direction:column;flex:0 0 var(--mac-sidebar-width);gap:var(--mac-space-3);padding:var(--mac-space-3) var(--mac-space-2) var(--mac-space-3);background:var(--mac-bg-sidebar);border-right:1px solid var(--mac-border);overscroll-behavior:contain;scrollbar-width:thin;transition:flex-basis var(--mac-duration) var(--mac-ease), opacity var(--mac-duration-fast) var(--mac-ease), padding var(--mac-duration) var(--mac-ease);display:flex;overflow-y:auto}.mac-sidebar.is-collapsed{opacity:0;pointer-events:none;border-right-color:#0000;flex-basis:0;padding-left:0;padding-right:0;overflow:hidden}.mac-sidebar__group{gap:calc(2px * var(--mac-scale));flex-direction:column;display:flex}.mac-sidebar__spacer{min-height:var(--mac-space-2);flex:auto}.mac-sidebar__heading{padding:var(--mac-space-1) var(--mac-space-2);font-size:var(--mac-text-small);font-weight:var(--mac-weight-semibold);letter-spacing:.04em;text-transform:uppercase;color:var(--mac-text-tertiary);-webkit-user-select:none;user-select:none}.mac-sidebar__item{align-items:center;gap:var(--mac-space-2);height:var(--mac-row-height);padding:0 var(--mac-space-2);border-radius:var(--mac-radius-m);color:var(--mac-text-secondary);font-family:var(--mac-font);font-size:var(--mac-text-body);font-weight:var(--mac-weight-medium);text-align:left;cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease), color var(--mac-duration-fast) var(--mac-ease);background:0 0;border:none;display:flex}.mac-sidebar__item svg{width:var(--mac-icon-md);height:var(--mac-icon-md);opacity:.9;flex:none}.mac-sidebar__item span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mac-sidebar__item:hover:not(.is-selected):not(:disabled){background:var(--mac-bg-hover);color:var(--mac-text)}.mac-sidebar__item.is-selected{background:var(--mac-bg-selected);color:var(--mac-text-on-accent)}.mac-sidebar__item.is-selected svg{opacity:1}.mac-sidebar__item:focus-visible{outline:2px solid var(--mac-focus-ring);outline-offset:-1px}.mac-sidebar__item.is-selected:focus-visible{outline-color:var(--mac-text-on-accent)}.mac-sidebar__count{font-size:var(--mac-text-small);color:var(--mac-text-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto}.mac-sidebar__item.is-selected .mac-sidebar__count{color:var(--mac-text-on-accent);opacity:.85}@media (width<=680px){.mac-sidebar{top:var(--mac-titlebar-height);bottom:var(--mac-statusbar-height);z-index:30;box-shadow:var(--mac-shadow-popover);position:absolute;left:0}.mac-sidebar.is-collapsed{box-shadow:none;transform:translate(-100%)}}.mac-statusbar{justify-content:space-between;align-items:center;gap:var(--mac-space-3);height:var(--mac-statusbar-height);padding:0 var(--mac-space-4);background:var(--mac-bg-titlebar);border-top:1px solid var(--mac-border);font-size:var(--mac-text-small);color:var(--mac-text-tertiary);flex:none;display:flex}.mac-statusbar__leading,.mac-statusbar__trailing{align-items:center;gap:var(--mac-space-2);min-width:0;display:flex}.mac-statusbar__dot{width:var(--mac-dot-size);height:var(--mac-dot-size);background:var(--mac-success);box-shadow:0 0 6px var(--mac-success);border-radius:50%;flex:none}.mac-statusbar__dot--warning{background:var(--mac-warning);box-shadow:0 0 6px var(--mac-warning)}.mac-statusbar__dot--error{background:var(--mac-danger);box-shadow:0 0 6px var(--mac-danger)}.mac-statusbar__dot--idle{background:var(--mac-text-tertiary);box-shadow:none}.mac-statusbar__text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mac-statusbar__time{font-variant-numeric:tabular-nums;white-space:nowrap}.mac-toolbar{align-items:center;gap:var(--mac-space-2);min-height:var(--mac-control-height-l);padding:var(--mac-space-1) var(--mac-space-3);background:var(--mac-bg-titlebar);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);--wails-draggable:drag;flex:none;display:flex;position:relative}.mac-toolbar--top{border-bottom:var(--mac-hairline) solid var(--mac-border)}.mac-toolbar--bottom{border-top:var(--mac-hairline) solid var(--mac-border)}.mac-toolbar--borderless{border-top-color:#0000;border-bottom-color:#0000}.mac-toolbar__leading,.mac-toolbar__trailing,.mac-toolbar__center{align-items:center;gap:var(--mac-space-2);--wails-draggable:no-drag;display:flex}.mac-toolbar__leading{flex:0 auto;min-width:0}.mac-toolbar__trailing{flex:none;margin-left:auto}.mac-toolbar__center{white-space:nowrap;text-overflow:ellipsis;max-width:50%;position:absolute;left:50%;overflow:hidden;transform:translate(-50%)}@media (width<=680px){.mac-toolbar__center{display:none}}@media (pointer:coarse){.mac-toolbar{padding:var(--mac-space-2) var(--mac-space-3)}}.mac-tabview{min-height:0;color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);flex-direction:column;display:flex}.mac-tabview__list{align-items:center;gap:var(--mac-space-1);padding:var(--mac-space-1) var(--mac-space-2);border-bottom:var(--mac-hairline) solid var(--mac-border);scrollbar-width:none;flex:none;display:flex;overflow:auto hidden}.mac-tabview__list::-webkit-scrollbar{display:none}.mac-tabview__tab{align-items:center;gap:var(--mac-space-1);height:var(--mac-control-height);padding:0 var(--mac-space-3);border:var(--mac-hairline) solid transparent;border-radius:var(--mac-radius-m);color:var(--mac-text-secondary);font-family:var(--mac-font);font-size:var(--mac-text-body);font-weight:var(--mac-weight-medium);white-space:nowrap;cursor:default;-webkit-user-select:none;user-select:none;transition:background-color var(--mac-duration-fast) var(--mac-ease), color var(--mac-duration-fast) var(--mac-ease), border-color var(--mac-duration-fast) var(--mac-ease);background:0 0;line-height:1;display:inline-flex}.mac-tabview__tab svg{width:var(--mac-icon-sm);height:var(--mac-icon-sm);opacity:.9;flex:none}.mac-tabview__tab:hover:not(.is-selected):not(:disabled){background:var(--mac-bg-hover);color:var(--mac-text)}.mac-tabview__tab.is-selected{background:var(--mac-accent-soft);color:var(--mac-text);border-color:#0000}.mac-tabview__tab:active:not(:disabled){background:var(--mac-bg-active)}.mac-tabview__tab:disabled{opacity:.4;cursor:default}.mac-tabview__tab:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:var(--mac-hairline)}.mac-tabview__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mac-tabview__panels{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.mac-tabview__panel{overscroll-behavior:contain;min-height:0;padding:var(--mac-space-3);flex:auto;overflow:auto}.mac-tabview__panel[hidden]{display:none}.mac-tabview__panel:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:calc(var(--mac-hairline) * -2)}@media (pointer:coarse){.mac-tabview__tab{min-height:var(--mac-control-height-l);padding:0 var(--mac-space-4)}}.mac-menu{z-index:1000;min-width:calc(var(--mac-space-5) * 9);max-height:60vh;padding:var(--mac-space-1);border-radius:var(--mac-radius-l);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-popover);overscroll-behavior:contain;opacity:0;transform-origin:0 0;transition:opacity var(--mac-duration-fast) var(--mac-ease), transform var(--mac-duration-fast) var(--mac-ease);--wails-draggable:no-drag;position:fixed;overflow-y:auto;transform:scale(.97)}.mac-menu.is-open{opacity:1;transform:scale(1)}.mac-menu__item{align-items:center;gap:var(--mac-space-2);width:100%;height:calc(var(--mac-control-height-s) + var(--mac-space-1));padding:0 var(--mac-space-2);border-radius:var(--mac-radius-s);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);text-align:left;cursor:default;transition:background-color var(--mac-duration-fast) var(--mac-ease);background:0 0;border:none;display:flex}.mac-menu__item svg{width:var(--mac-icon-sm);height:var(--mac-icon-sm);color:var(--mac-text-secondary);flex:none}.mac-menu__label{white-space:nowrap;text-overflow:ellipsis;flex:auto;overflow:hidden}.mac-menu__shortcut{margin-left:var(--mac-space-4);color:var(--mac-text-tertiary);font-size:var(--mac-text-small);font-variant-numeric:tabular-nums;flex:none}.mac-menu__item:hover:not(:disabled),.mac-menu__item.is-highlighted{background:var(--mac-accent);color:var(--mac-text-on-accent)}.mac-menu__item:hover:not(:disabled) svg,.mac-menu__item.is-highlighted svg{color:var(--mac-text-on-accent)}.mac-menu__item:hover:not(:disabled) .mac-menu__shortcut,.mac-menu__item.is-highlighted .mac-menu__shortcut{color:var(--mac-text-on-accent);opacity:.8}.mac-menu__item:disabled{opacity:.4}.mac-menu__item:focus-visible{outline:none}.mac-menu__separator{height:var(--mac-hairline);margin:var(--mac-space-1) var(--mac-space-2);background:var(--mac-separator)}.mac-menu__check{width:var(--mac-icon-sm);height:var(--mac-icon-sm);color:var(--mac-accent);flex:none}.mac-menu__item.is-highlighted .mac-menu__check,.mac-menu__item:hover:not(:disabled) .mac-menu__check{color:var(--mac-text-on-accent)}.mac-tooltip{z-index:1200;max-width:calc(var(--mac-space-5) * 13);padding:var(--mac-space-1) var(--mac-space-2);border-radius:var(--mac-radius-s);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-popover);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-small);text-align:center;opacity:0;transform:translateY(calc(var(--mac-hairline) * 2));transition:opacity var(--mac-duration-fast) var(--mac-ease), transform var(--mac-duration-fast) var(--mac-ease);pointer-events:none;--wails-draggable:no-drag;line-height:1.35;position:fixed}.mac-tooltip.is-open{opacity:1;transform:translateY(0)}.mac-dialog__scrim{z-index:1100;padding:var(--mac-space-6);background:var(--mac-scrim);opacity:0;transition:opacity var(--mac-duration) var(--mac-ease);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.mac-dialog__scrim.is-open{opacity:1}.mac-dialog{width:min(420px,100%);max-height:min(80vh,560px);padding:var(--mac-space-5);border-radius:var(--mac-radius-xl);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-sheet);color:var(--mac-text);font-family:var(--mac-font);opacity:0;transition:opacity var(--mac-duration) var(--mac-ease), transform var(--mac-duration) var(--mac-ease);flex-direction:column;display:flex;transform:scale(.94)}.mac-dialog__scrim.is-open .mac-dialog{opacity:1;transform:scale(1)}.mac-dialog__title{margin:0 0 var(--mac-space-2);font-size:var(--mac-text-title);font-weight:var(--mac-weight-semibold);text-align:center;line-height:1.3}.mac-dialog__body{min-height:0;margin-bottom:var(--mac-space-5);color:var(--mac-text-secondary);font-size:var(--mac-text-body);text-align:center;flex:auto;line-height:1.55;overflow-y:auto}.mac-dialog__actions{justify-content:center;gap:var(--mac-space-2);flex:none;display:flex}.mac-dialog__actions .mac-button{flex:1 1 0;min-width:0}@media (height<=480px){.mac-dialog{max-height:92vh}}.mac-popover{z-index:1000;font-family:var(--mac-font);font-size:var(--mac-text-body);pointer-events:none;--wails-draggable:no-drag;position:fixed}.mac-popover.is-open{pointer-events:auto}.mac-popover__surface{max-width:calc(var(--mac-space-8) * 9);padding:var(--mac-space-3);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-l);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-popover);color:var(--mac-text);opacity:0;transition:opacity var(--mac-duration-fast) var(--mac-ease), transform var(--mac-duration-fast) var(--mac-ease);line-height:1.45;position:relative;transform:scale(.97)}.mac-popover.is-open .mac-popover__surface{opacity:1;transform:scale(1)}.mac-popover[data-side=bottom] .mac-popover__surface{transform-origin:top}.mac-popover[data-side=top] .mac-popover__surface{transform-origin:bottom}.mac-popover[data-side=left] .mac-popover__surface{transform-origin:100%}.mac-popover[data-side=right] .mac-popover__surface{transform-origin:0}.mac-popover:focus-visible{outline:calc(var(--mac-hairline) * 2) solid var(--mac-focus-ring);outline-offset:calc(var(--mac-hairline) * 2)}.mac-popover__body{gap:var(--mac-space-2);min-width:0;max-height:calc(70vh - var(--mac-space-3) * 2);overscroll-behavior:contain;flex-direction:column;display:flex;overflow-y:auto}.mac-popover__arrow{width:var(--mac-space-2);height:var(--mac-space-2);background:var(--mac-bg-overlay);border:var(--mac-hairline) solid var(--mac-border);pointer-events:none;position:absolute}.mac-popover[data-side=bottom] .mac-popover__arrow{top:0;left:var(--mac-popover-arrow-x,50%);clip-path:polygon(0 0,100% 0,0 100%);transform:translate(-50%,-50%)rotate(45deg)}.mac-popover[data-side=top] .mac-popover__arrow{bottom:0;left:var(--mac-popover-arrow-x,50%);clip-path:polygon(0 0,100% 0,100% 100%);transform:translate(-50%,50%)rotate(45deg)}.mac-popover[data-side=left] .mac-popover__arrow{right:0;top:var(--mac-popover-arrow-y,50%);clip-path:polygon(0 0,100% 0,0 100%);transform:translate(50%,-50%)rotate(45deg)}.mac-popover[data-side=right] .mac-popover__arrow{left:0;top:var(--mac-popover-arrow-y,50%);clip-path:polygon(0 0,100% 100%,0 100%);transform:translate(-50%,-50%)rotate(45deg)}@media (pointer:coarse){.mac-popover__body .mac-button{min-height:var(--mac-control-height-l)}}.mac-sheet{z-index:1100;pointer-events:none;justify-content:center;align-items:flex-start;display:flex;position:fixed;inset:0}.mac-sheet__scrim{background:var(--mac-scrim);opacity:0;transition:opacity var(--mac-duration) var(--mac-ease);pointer-events:auto;position:absolute;inset:0}.mac-sheet.is-open .mac-sheet__scrim{opacity:1}.mac-sheet__panel{width:min(calc(var(--mac-space-8) * 16), calc(100% - var(--mac-space-8)));max-height:80vh;margin-top:var(--mac-space-8);padding:var(--mac-space-5);border:var(--mac-hairline) solid var(--mac-border);border-radius:var(--mac-radius-xl);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-sheet);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);pointer-events:auto;opacity:0;transform:translateY(calc(-100% - var(--mac-space-8)));transition:transform var(--mac-duration-slow) var(--mac-ease), opacity var(--mac-duration) var(--mac-ease);flex-direction:column;display:flex;position:relative}.mac-sheet.is-open .mac-sheet__panel{opacity:1;transform:translateY(0)}.mac-sheet__title{margin:0 0 var(--mac-space-3);font-size:var(--mac-text-title);font-weight:var(--mac-weight-semibold);text-align:center;line-height:1.3}.mac-sheet__body{overscroll-behavior:contain;min-height:0;margin-bottom:var(--mac-space-4);color:var(--mac-text-secondary);flex:auto;line-height:1.5;overflow-y:auto}.mac-sheet__actions{justify-content:flex-end;gap:var(--mac-space-2);flex:none;display:flex}.mac-sheet__actions .mac-button{min-width:calc(var(--mac-space-6) * 2)}.mac-sheet:focus-visible{outline:none}@media (pointer:coarse){.mac-sheet__panel{width:calc(100% - var(--mac-space-4));padding:var(--mac-space-4)}.mac-sheet__actions .mac-button{min-height:var(--mac-control-height-l)}}@media (height<=480px){.mac-sheet__panel{max-height:92vh}}.mac-toast-stack{top:calc(var(--mac-titlebar-height) + var(--mac-space-2));right:var(--mac-space-4);z-index:1300;gap:var(--mac-space-2);pointer-events:none;--wails-draggable:no-drag;flex-direction:column;align-items:flex-end;display:flex;position:fixed}.mac-toast{gap:calc(2px * var(--mac-scale));min-width:calc(var(--mac-space-5) * 10);max-width:min(70vw,380px);padding:var(--mac-space-2) var(--mac-space-3);border-radius:var(--mac-radius-l);background:var(--mac-bg-overlay);box-shadow:var(--mac-shadow-popover);color:var(--mac-text);font-family:var(--mac-font);font-size:var(--mac-text-body);opacity:0;transition:opacity var(--mac-duration) var(--mac-ease), transform var(--mac-duration) var(--mac-ease);pointer-events:auto;flex-direction:column;line-height:1.45;display:flex;transform:translateY(-8px)scale(.98)}.mac-toast.is-open{opacity:1;transform:none}.mac-toast--success{border-left:3px solid var(--mac-success)}.mac-toast--error{border-left:3px solid var(--mac-danger)}.mac-toast__message{overflow-wrap:anywhere}.mac-toast__detail{font-size:var(--mac-text-small);color:var(--mac-text-secondary);overflow-wrap:anywhere}.mac-mobile{background:var(--mac-bg-window);height:100dvh;color:var(--mac-text);font-family:var(--mac-font);padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);flex-direction:column;display:flex;overflow:hidden}.mac-mobile__navbar{background:var(--mac-bg-titlebar);border-bottom:1px solid var(--mac-border);flex:none;align-items:flex-end;min-height:44px;padding:0 16px 8px;display:flex;position:relative}.mac-mobile__title{font-size:calc(28px * var(--mac-scale));font-weight:var(--mac-weight-bold);letter-spacing:-.02em;color:var(--mac-text);margin:0;line-height:1.15}.mac-mobile__action{align-items:center;gap:var(--mac-space-3);margin-left:auto;display:flex}.mac-mobile__content{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;overflow-y:auto}.mac-mobile__pane{padding:var(--mac-space-4);display:none}.mac-mobile__pane.is-active{display:block}.mac-mobile__tabbar{height:var(--mac-tabbar-height);background:var(--mac-bg-titlebar);border-top:1px solid var(--mac-border);flex:none;align-items:stretch;padding:0 4px;display:flex}.mac-mobile__tab{justify-content:center;align-items:center;gap:calc(2px * var(--mac-scale));min-height:44px;color:var(--mac-text-tertiary);font-family:var(--mac-font);font-size:var(--mac-text-2xs);font-weight:var(--mac-weight-medium);cursor:default;transition:color var(--mac-duration-fast) var(--mac-ease);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-direction:column;flex:1 1 0;display:flex}.mac-mobile__tab svg{width:var(--mac-icon-lg);height:var(--mac-icon-lg);flex:none}.mac-mobile__tab.is-selected{color:var(--mac-accent)}.mac-mobile__tab:active{opacity:.6}.mac-mobile__tab:focus-visible{outline:2px solid var(--mac-focus-ring);outline-offset:-2px;border-radius:var(--mac-radius-s)}@media (pointer:coarse){.mac-button{min-height:44px}.mac-textfield__input,.mac-numberfield__input,.mac-select__control{font-size:16px}}@media (hover:none){.mac-button:hover:not(:disabled),.mac-sidebar__item:hover:not(.is-selected):not(:disabled){background:initial}}
2
+ /*$vite$:1*/
@@ -0,0 +1,2 @@
1
+ var MacUI=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=class{cleanups=[];destroyed=!1;get element(){return this.root}get isDestroyed(){return this.destroyed}listen(e,t,n,r){e.addEventListener(t,n,r),this.cleanups.push(()=>e.removeEventListener(t,n,r))}onDestroy(e){this.cleanups.push(e)}toggleClass(e,t){this.root.classList.contains(e)!==t&&this.root.classList.toggle(e,t)}setAttr(e,t){this.root.getAttribute(e)!==t&&this.root.setAttribute(e,t)}mount(e=document.body){return e.replaceChildren(this.root),this}remove(){this.root.remove(),this.destroy()}destroy(){if(!this.destroyed){this.destroyed=!0;for(let e of this.cleanups.splice(0))try{e()}catch(e){console.error(`mac ui: cleanup failed`,e)}}}};function n(e,t={},...n){let i=document.createElement(e);for(let[e,n]of Object.entries(t))n!=null&&n!==!1&&(e===`class`||e===`className`?i.className=String(n):e===`dataset`?Object.assign(i.dataset,n):e===`style`?Object.assign(i.style,n):e===`text`?i.textContent=String(n):e===`html`?i.innerHTML=String(n):e.startsWith(`on`)&&typeof n==`function`?i.addEventListener(e.slice(2).toLowerCase(),n):e in i?i[e]=n:i.setAttribute(e,String(n)));return r(i,n),i}function r(e,t){for(let n of t)n!=null&&n!==!1&&e.appendChild(typeof n==`string`||typeof n==`number`?document.createTextNode(String(n)):n)}function i(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function a(e,t=16,n=`0 0 24 24`){let r=`http://www.w3.org/2000/svg`,i=document.createElementNS(r,`svg`);i.setAttribute(`viewBox`,n),i.setAttribute(`width`,String(t)),i.setAttribute(`height`,String(t)),i.setAttribute(`fill`,`none`),i.setAttribute(`stroke`,`currentColor`),i.setAttribute(`stroke-width`,`1.8`),i.setAttribute(`stroke-linecap`,`round`),i.setAttribute(`stroke-linejoin`,`round`),i.setAttribute(`aria-hidden`,`true`);let a=document.createElementNS(r,`path`);return a.setAttribute(`d`,e),i.appendChild(a),i}function o(e){let t=!1;return()=>{t||(t=!0,requestAnimationFrame(()=>{t=!1,e()}))}}var s=0;function c(e=`mac`){return s+=1,`${e}-${s}`}var l={top:`bottom`,bottom:`top`,left:`right`,right:`left`};function u(e){let{anchor:t,panel:n,placement:r=`bottom-start`,offset:i=6,padding:a=8,matchWidth:o=!1}=e,s=t.getBoundingClientRect();n.style.position=`fixed`,n.style.visibility=`hidden`,n.style.display=`block`,o&&(n.style.minWidth=`${Math.round(s.width)}px`);let c=n.getBoundingClientRect(),u=document.documentElement.clientWidth,d=document.documentElement.clientHeight,[f,p]=r.split(`-`),m=f,h=d-s.bottom-i,g=s.top-i,_=u-s.right-i,v=s.left-i;f===`bottom`&&c.height>h&&g>h?m=`top`:f===`top`&&c.height>g&&h>g?m=`bottom`:f===`right`&&c.width>_&&v>_?m=`left`:f===`left`&&c.width>v&&_>v?m=`right`:f in l&&c.height>h&&f===`bottom`&&(m=`top`);let y,b;m===`top`||m===`bottom`?(b=m===`bottom`?s.bottom+i:s.top-c.height-i,y=p===`start`?s.left:p===`end`?s.right-c.width:s.left+(s.width-c.width)/2):(y=m===`right`?s.right+i:s.left-c.width-i,b=p===`start`?s.top:p===`end`?s.bottom-c.height:s.top+(s.height-c.height)/2),y=Math.max(a,Math.min(y,u-c.width-a)),b=Math.max(a,Math.min(b,d-c.height-a)),n.style.left=`${Math.round(y)}px`,n.style.top=`${Math.round(b)}px`,n.style.visibility=``,n.dataset.side=m}function d(e){let t=o(()=>u(e));return t(),window.addEventListener(`scroll`,t,!0),window.addEventListener(`resize`,t),()=>{window.removeEventListener(`scroll`,t,!0),window.removeEventListener(`resize`,t)}}var f=1e3;function p(){return f+=1,f}var m=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function h(e){return Array.from(e.querySelectorAll(m)).filter(e=>e.offsetParent!==null||e===document.activeElement)}function g(e){let t=document.activeElement,n=t=>{if(t.key!==`Tab`)return;let n=h(e);if(n.length===0){t.preventDefault();return}let r=n[0],i=n[n.length-1],a=document.activeElement;t.shiftKey&&(a===r||!e.contains(a))?(t.preventDefault(),i.focus()):!t.shiftKey&&a===i&&(t.preventDefault(),r.focus())};return e.addEventListener(`keydown`,n),requestAnimationFrame(()=>{(h(e)[0]??e).focus()}),()=>{e.removeEventListener(`keydown`,n),t?.focus?.()}}var _=[{name:`macos-dark`,appearance:`dark`},{name:`macos-light`,appearance:`light`},{name:`hc-dark`,appearance:`dark`},{name:`hc-light`,appearance:`light`}],v=new Set([`hc-dark`,`hc-light`]);function y(e){return e.startsWith(`--`)?e:`--mac-${e}`}var b=class{root;themes=new Map;applied=[];current;mediaQuery=null;systemListener=null;listeners=new Set;constructor(e=document.documentElement){this.root=e;for(let e of _)this.themes.set(e.name,e);this.current=this.themes.get(`macos-dark`),this.followSystem()}register(e){if(!e.name)throw Error(`mac ui: theme needs a name`);if(e.appearance!==`light`&&e.appearance!==`dark`)throw Error(`mac ui: theme "${e.name}" has an invalid appearance`);this.themes.set(e.name,e)}unregister(e){if(_.some(t=>t.name===e))throw Error(`mac ui: cannot remove the built-in theme "${e}"`);this.themes.delete(e),this.current.name===e&&this.apply(`macos-dark`)}list(){return[...this.themes.keys()]}get active(){return this.current}apply(e){let t=this.themes.get(e);t?(this.stopFollowingSystem(),this.applyDefinition(t)):console.error(`mac ui: unknown theme "${e}"`)}followSystem(){this.stopFollowingSystem(),this.mediaQuery=window.matchMedia(`(prefers-color-scheme: dark)`);let e=()=>{let e=this.mediaQuery?.matches?`macos-dark`:`macos-light`,t=this.themes.get(e);t&&this.applyDefinition(t)};this.systemListener=e,this.mediaQuery.addEventListener(`change`,e),e()}get isFollowingSystem(){return this.systemListener!==null}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}exportActive(){let e=getComputedStyle(this.root),t={};for(let n of this.applied){let r=n.replace(/^--mac-/,``),i=e.getPropertyValue(n).trim();i&&(t[r]=i)}return{...this.current,tokens:{...this.current.tokens,...t}}}destroy(){this.stopFollowingSystem(),this.clearOverrides(),this.listeners.clear()}applyDefinition(e){if(this.clearOverrides(),this.root.setAttribute(`data-appearance`,e.appearance),this.root.setAttribute(`data-theme`,e.name),!v.has(e.name)&&e.tokens)for(let[t,n]of Object.entries(e.tokens)){let e=y(t);this.root.style.setProperty(e,n),this.applied.push(e)}this.current=e;for(let t of this.listeners)try{t(e)}catch(e){console.error(`mac ui: theme listener failed`,e)}}clearOverrides(){for(let e of this.applied.splice(0))this.root.style.removeProperty(e)}stopFollowingSystem(){this.mediaQuery&&this.systemListener&&this.mediaQuery.removeEventListener(`change`,this.systemListener),this.mediaQuery=null,this.systemListener=null}},x=new b;function S(e){e===null?document.documentElement.removeAttribute(`data-density`):document.documentElement.setAttribute(`data-density`,e)}function C(){return document.documentElement.getAttribute(`data-density`)||(window.matchMedia(`(pointer: coarse)`).matches?`touch`:`comfortable`)}var w=class extends t{root;labelNode=null;constructor(e={}){super();let{label:t,icon:i,variant:o=`default`,size:s=`default`,ariaLabel:c,block:l=!1,disabled:u=!1,type:d=`button`,onClick:f}=e,p=[`mac-button`];if(o!=="default"&&p.push(`mac-button--${o}`),s!=="default"&&p.push(`mac-button--${s}`),l&&p.push(`mac-button--block`),this.root=n(`button`,{class:p.join(` `),type:d,disabled:u}),i){let e=n(`span`,{class:`mac-button__icon`});e.appendChild(a(i,14)),this.root.appendChild(e)}t!==void 0&&(this.labelNode=n(`span`,{class:`mac-button__label`}),r(this.labelNode,[t]),this.root.appendChild(this.labelNode));let m=c??(typeof t==`string`?t:void 0);m&&this.root.setAttribute(`aria-label`,m),f&&this.listen(this.root,`click`,f)}setLabel(e){this.labelNode&&(this.labelNode.textContent=e)}setDisabled(e){this.root.disabled!==e&&(this.root.disabled=e)}setPrimary(e){this.root.classList.toggle(`mac-button--primary`,e)}focus(){this.root.focus()}},T=class extends t{root;input;clearButton=null;onInput;onChange;dirty=!1;constructor(e={}){super();let{label:t,placeholder:i=``,icon:o,clearable:s=!1,disabled:l=!1,readOnly:u=!1,value:d=``,onInput:f,onChange:p}=e;this.onInput=f,this.onChange=p,this.root=n(`div`,{class:`mac-textfield`});let m=c(`mac-textfield`);if(t!==void 0){let e=n(`label`,{class:`mac-textfield__label`,for:m});r(e,[t]),this.root.appendChild(e)}let h=n(`div`,{class:`mac-textfield__control`});if(o){let e=n(`span`,{class:`mac-textfield__icon`});e.appendChild(a(o,14)),h.appendChild(e)}if(this.input=n(`input`,{class:`mac-textfield__input`,type:`text`,id:m,placeholder:i,value:d,disabled:l,readOnly:u,autocomplete:`off`}),this.input.spellcheck=!1,h.appendChild(this.input),s&&(this.clearButton=n(`button`,{class:`mac-textfield__clear`,type:`button`,tabindex:-1,"aria-label":`清除`,title:`清除`}),this.clearButton.appendChild(a(`M6 6 L12 12 M12 6 L6 12`,10)),h.appendChild(this.clearButton)),this.root.appendChild(h),this.listen(this.input,`input`,()=>{this.dirty=!0,this.syncClearState(),this.onInput?.(this.input.value)}),this.listen(this.input,`change`,()=>{this.commit()}),this.listen(this.input,`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),this.commit())}),this.clearButton){let e=this.clearButton;this.listen(e,`click`,()=>{this.input.value=``,this.syncClearState(),this.onInput?.(``),this.commit(!0),this.input.focus()})}this.syncClearState()}get value(){return this.input.value}setValue(e){this.input.value!==e&&(this.input.value=e,this.dirty=!1,this.syncClearState())}setDisabled(e){this.input.disabled!==e&&(this.input.disabled=e,this.toggleClass(`is-disabled`,e))}focus(){this.input.focus()}commit(e=!1){(e||this.dirty)&&(this.dirty=!1,this.onChange?.(this.input.value))}syncClearState(){this.clearButton&&(this.clearButton.hidden=this.input.value===``)}},ee=class extends t{root;input;stepUp;stepDown;min;max;step;onChange;committed;constructor(e={}){super();let{label:t,min:i,max:o,step:s,value:l,onChange:u}=e;this.min=i,this.max=o,this.step=s,this.onChange=u,this.committed=this.clamp(l??i??0),this.root=n(`div`,{class:`mac-numberfield`});let d=c(`mac-numberfield`);if(t!==void 0){let e=n(`label`,{class:`mac-numberfield__label`,for:d});r(e,[t]),this.root.appendChild(e)}let f=n(`div`,{class:`mac-numberfield__control`});this.input=n(`input`,{class:`mac-numberfield__input`,type:`number`,id:d,min:i,max:o,step:s,autocomplete:`off`,inputmode:`decimal`}),this.input.value=String(this.committed);let p=n(`div`,{class:`mac-numberfield__stepper`});this.stepUp=n(`button`,{class:`mac-numberfield__step mac-numberfield__step--up`,type:`button`,tabindex:-1,"aria-label":`增加`,title:`增加`}),this.stepUp.appendChild(a(`M6 15 L12 8 L18 15`,10)),this.stepDown=n(`button`,{class:`mac-numberfield__step mac-numberfield__step--down`,type:`button`,tabindex:-1,"aria-label":`减少`,title:`减少`}),this.stepDown.appendChild(a(`M6 9 L12 16 L18 9`,10)),p.append(this.stepUp,this.stepDown),f.append(this.input,p),this.root.appendChild(f),this.listen(this.input,`input`,()=>this.handleInput()),this.listen(this.stepUp,`click`,()=>this.nudge(1)),this.listen(this.stepDown,`click`,()=>this.nudge(-1)),this.listen(this.input,`keydown`,e=>{(e.key===`ArrowUp`||e.key===`ArrowDown`)&&(e.preventDefault(),this.nudge(e.key===`ArrowUp`?1:-1))}),this.syncStepperState()}get value(){return this.committed}setValue(e){if(!Number.isFinite(e))return;let t=this.clamp(e);(t!==this.committed||this.input.value!==String(t))&&(this.committed=t,this.input.value=String(t),this.syncStepperState())}setDisabled(e){this.input.disabled!==e&&(this.input.disabled=e,this.syncStepperState(),this.toggleClass(`is-disabled`,e))}handleInput(){let e=this.input.value.trim();if(e===``)return;let t=Number(e);Number.isFinite(t)&&this.isInRange(t)&&(this.committed=t,this.syncStepperState(),this.onChange?.(t))}nudge(e){let t=this.committed;this.setValue(t+(this.step??1)*e),this.onChange?.(this.committed)}isInRange(e){return!(this.min!==void 0&&e<this.min||this.max!==void 0&&e>this.max)}clamp(e){let t=e;return this.min!==void 0&&t<this.min&&(t=this.min),this.max!==void 0&&t>this.max&&(t=this.max),t}syncStepperState(){let e=this.input.disabled,t=this.min!==void 0&&this.committed<=this.min,n=this.max!==void 0&&this.committed>=this.max;this.stepDown.disabled=e||t,this.stepUp.disabled=e||n}},te=class extends t{root;input;valueNode=null;onChange;min;max;constructor(e={}){super();let{label:t,min:i=0,max:a=100,step:o=1,value:s,showValue:l=!1,onChange:u}=e;this.min=i,this.max=a,this.onChange=u,this.root=n(`div`,{class:`mac-slider`});let d=c(`mac-slider`);if(t!==void 0){let e=n(`label`,{class:`mac-slider__label`,for:d});r(e,[t]),this.root.appendChild(e)}let f=n(`div`,{class:`mac-slider__control`});this.input=n(`input`,{class:`mac-slider__input`,type:`range`,id:d,min:i,max:a,step:o}),this.input.value=String(this.clamp(s??i)),f.appendChild(this.input),l&&(this.valueNode=n(`span`,{class:`mac-slider__value`}),this.valueNode.textContent=this.input.value,f.appendChild(this.valueNode)),this.root.appendChild(f),this.listen(this.input,`input`,()=>{let e=Number(this.input.value);this.syncFill(),this.renderValue(e),this.onChange?.(e)}),this.syncFill()}get value(){return Number(this.input.value)}setValue(e){if(!Number.isFinite(e))return;let t=this.clamp(e);this.input.value!==String(t)&&(this.input.value=String(t),this.syncFill(),this.renderValue(t))}setDisabled(e){this.input.disabled!==e&&(this.input.disabled=e,this.toggleClass(`is-disabled`,e))}syncFill(){let e=Number(this.input.value),t=this.max-this.min,n=t===0?1:(e-this.min)/t,r=Math.min(1,Math.max(0,n))*100;this.root.style.setProperty(`--mac-slider-value`,`${r}%`)}renderValue(e){if(!this.valueNode)return;let t=String(e);this.valueNode.textContent!==t&&(this.valueNode.textContent=t)}clamp(e){return e<this.min?this.min:e>this.max?this.max:e}},ne=class extends t{root;fill;indeterminate;current;constructor(e={}){super();let{value:t=0,indeterminate:r=!1}=e;this.indeterminate=r,this.current=this.constrain(t),this.root=n(`div`,{class:`mac-progress`,role:`progressbar`,"aria-valuemin":`0`,"aria-valuemax":`100`}),this.fill=n(`div`,{class:`mac-progress__fill`}),this.fill.style.setProperty(`--mac-progress-scale`,String(this.current/100)),this.root.appendChild(this.fill),this.syncState()}get value(){return this.current}setValue(e){let t=this.constrain(e);t!==this.current&&(this.current=t,this.fill.style.setProperty(`--mac-progress-scale`,String(t/100)),this.indeterminate||this.root.setAttribute(`aria-valuenow`,String(t)))}setIndeterminate(e){this.indeterminate!==e&&(this.indeterminate=e,this.syncState())}syncState(){this.root.classList.toggle(`is-indeterminate`,this.indeterminate),this.indeterminate?this.root.removeAttribute(`aria-valuenow`):this.root.setAttribute(`aria-valuenow`,String(this.current))}constrain(e){return Number.isFinite(e)?Math.min(100,Math.max(0,e)):0}},E=class extends t{root;text;variant;constructor(e){super();let{variant:t=`default`}=e;this.text=e.text,this.variant=t;let r=[`mac-badge`];t!=="default"&&r.push(`mac-badge--${t}`),this.root=n(`span`,{class:r.join(` `),text:this.text})}setText(e){this.text!==e&&(this.text=e,this.root.textContent=e)}setVariant(e){this.variant!==e&&(this.root.classList.remove(`mac-badge--${this.variant}`),this.variant=e,e!=="default"&&this.root.classList.add(`mac-badge--${e}`))}},D=class extends t{root;onChange;isOn;constructor(e={}){super();let{checked:t=!1,disabled:r=!1,label:i,onChange:a}=e;this.isOn=t,this.onChange=a,this.root=n(`button`,{class:`mac-switch`,type:`button`,role:`switch`,"aria-checked":String(t),"aria-label":i,disabled:r}),this.root.appendChild(n(`span`,{class:`mac-switch__knob`})),this.listen(this.root,`click`,()=>this.toggle()),this.listen(this.root,`keydown`,e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),this.toggle())})}get checked(){return this.isOn}setChecked(e){this.isOn!==e&&(this.isOn=e,this.syncState())}setDisabled(e){this.root.disabled!==e&&(this.root.disabled=e)}focus(){this.root.focus()}toggle(){this.setChecked(!this.isOn),this.onChange?.(this.isOn)}syncState(){this.setAttr(`aria-checked`,String(this.isOn))}},O=class extends t{root;input;onChange;constructor(e={}){super();let{checked:t=!1,indeterminate:i=!1,disabled:o=!1,label:s,onChange:c}=e;this.onChange=c,this.root=n(`label`,{class:`mac-checkbox`}),this.input=n(`input`,{class:`mac-checkbox__input`,type:`checkbox`,checked:t,disabled:o}),this.input.indeterminate=i;let l=n(`span`,{class:`mac-checkbox__box`}),u=a(`M5 12.5 L9.5 17 L19 7`,12);u.setAttribute(`class`,`mac-checkbox__tick`);let d=a(`M7 12 H17`,12);if(d.setAttribute(`class`,`mac-checkbox__dash`),l.append(u,d),this.root.append(this.input,l),s!==void 0){let e=n(`span`,{class:`mac-checkbox__label`});r(e,[s]),this.root.appendChild(e)}this.toggleClass(`is-disabled`,o),this.listen(this.input,`change`,()=>{this.onChange?.(this.input.checked)})}get checked(){return this.input.checked}setChecked(e){this.input.checked!==e&&(this.input.checked=e)}setIndeterminate(e){this.input.indeterminate!==e&&(this.input.indeterminate=e)}setDisabled(e){this.input.disabled!==e&&(this.input.disabled=e,this.toggleClass(`is-disabled`,e))}focus(){this.input.focus()}},k=class extends t{root;thumb;buttons=[];options;onChange;current;constructor(e){super(),this.options=e.options,this.onChange=e.onChange,this.current=e.value??this.options.find(e=>!e.disabled)?.value??``;let t=[`mac-segmented`];e.block&&t.push(`mac-segmented--block`),this.root=n(`div`,{class:t.join(` `),role:`radiogroup`}),this.thumb=n(`div`,{class:`mac-segmented__thumb`,"aria-hidden":`true`}),this.root.appendChild(this.thumb);for(let e of this.options){let t=e.value===this.current,r=n(`button`,{class:`mac-segmented__item${t?` is-selected`:``}`,type:`button`,role:`radio`,"aria-checked":String(t),tabindex:t?0:-1,disabled:e.disabled??!1,dataset:{value:e.value}});e.icon&&r.appendChild(a(e.icon,13)),r.appendChild(n(`span`,{text:e.label})),this.buttons.push(r),this.root.appendChild(r)}if(this.listen(this.root,`click`,e=>{let t=e.target.closest(`.mac-segmented__item`);if(!t||t.disabled)return;let n=t.dataset.value;n&&this.applySelection(n,!0)}),this.listen(this.root,`keydown`,e=>{let t=this.buttons.filter(e=>!e.disabled);if(t.length===0)return;let n=t.findIndex(e=>e.dataset.value===this.current),r=n;if(e.key===`ArrowRight`||e.key===`ArrowDown`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`||e.key===`ArrowUp`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault();let i=t[r],a=i.dataset.value;a&&(this.applySelection(a,!0),i.focus())}),requestAnimationFrame(()=>this.moveThumb(!1)),this.listen(window,`resize`,()=>this.moveThumb(!1)),typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>this.moveThumb(!1));e.observe(this.root),this.onDestroy(()=>e.disconnect())}}applySelection(e,t){if(this.current!==e){this.current=e;for(let t of this.buttons){let n=t.dataset.value===e;t.classList.toggle(`is-selected`,n),t.setAttribute(`aria-checked`,String(n)),t.tabIndex=n?0:-1}this.moveThumb(!0),t&&this.onChange?.(e)}}moveThumb(e){let t=this.buttons.find(e=>e.dataset.value===this.current);if(!t||this.root.offsetWidth===0)return;e||(this.thumb.style.transition=`none`);let n=parseFloat(getComputedStyle(this.root).paddingLeft)||0;this.thumb.style.setProperty(`--mac-segmented-thumb-x`,`${t.offsetLeft-n}px`),this.thumb.style.setProperty(`--mac-segmented-thumb-width`,`${t.offsetWidth}px`),e||(this.thumb.offsetWidth,this.thumb.style.transition=``)}get value(){return this.current}setValue(e){this.applySelection(e,!1)}setDisabled(e){for(let t of this.buttons)t.disabled=e}},A=class extends t{root;control;onChange;constructor(e){super(),this.onChange=e.onChange;let t=[`mac-select`];e.block&&t.push(`mac-select--block`),this.root=n(`div`,{class:t.join(` `)}),this.control=n(`select`,{class:`mac-select__control`,disabled:e.disabled??!1}),e.ariaLabel&&this.control.setAttribute(`aria-label`,e.ariaLabel),this.setOptions(e.options,e.value),this.root.appendChild(this.control),this.root.appendChild(this.makeChevron()),this.listen(this.control,`change`,()=>{this.onChange?.(this.control.value)})}makeChevron(){let e=`http://www.w3.org/2000/svg`,t=document.createElementNS(e,`svg`);t.setAttribute(`viewBox`,`0 0 12 12`),t.setAttribute(`aria-hidden`,`true`),t.classList.add(`mac-select__arrow`);let n=document.createElementNS(e,`path`);return n.setAttribute(`d`,`M2.5 4.5 L6 8 L9.5 4.5`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.6`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),t.appendChild(n),t}setOptions(e,t){let r=document.createDocumentFragment();for(let t of e){let e=n(`option`,{value:t.value,text:t.label,disabled:t.disabled??!1});r.appendChild(e)}this.control.replaceChildren(r);let i=t??e.find(e=>!e.disabled)?.value??``;i&&(this.control.value=i)}get value(){return this.control.value}setValue(e){this.control.value!==e&&(this.control.value=e)}setDisabled(e){this.control.disabled!==e&&(this.control.disabled=e)}},j=class extends t{root;labelNode=null;constructor(e={}){super();let{label:t,size:r=`default`,ariaLabel:i}=e,a=[`mac-spinner`];r!=="default"&&a.push(`mac-spinner--${r}`),this.root=n(`span`,{class:a.join(` `),role:`progressbar`,"aria-busy":`true`,"aria-label":i??t??`正在加载`}),this.root.appendChild(n(`span`,{class:`mac-spinner__ring`})),t&&(this.labelNode=n(`span`,{class:`mac-spinner__label`,text:t}),this.root.appendChild(this.labelNode))}setLabel(e){this.labelNode&&this.labelNode.textContent!==e&&(this.labelNode.textContent=e)}},M=class extends t{root;control;counter=null;maxLength;onChange;constructor(e={}){super();let{label:t,placeholder:r=``,value:i=``,rows:a=4,maxLength:o,disabled:s=!1,readOnly:l=!1,onInput:u,onChange:d}=e;this.maxLength=o,this.onChange=d,this.root=n(`div`,{class:`mac-textarea`});let f=c(`mac-textarea`);if(t!==void 0){let e=n(`label`,{class:`mac-textarea__label`,htmlFor:f});typeof t==`string`||typeof t==`number`?e.textContent=String(t):t instanceof Node&&e.appendChild(t),this.root.appendChild(e)}let p=n(`div`,{class:`mac-textarea__control`});if(this.control=n(`textarea`,{class:`mac-textarea__input`,id:f,rows:a,placeholder:r,disabled:s,readOnly:l}),o!==void 0&&(this.control.maxLength=o),this.control.value=i,p.appendChild(this.control),this.root.appendChild(p),o!==void 0){let e=n(`div`,{class:`mac-textarea__meta`});this.counter=n(`span`,{text:`${i.length}/${o}`}),e.appendChild(this.counter),this.root.appendChild(e),this.updateCounter()}u?this.listen(this.control,`input`,()=>{u(this.control.value),this.updateCounter()}):this.listen(this.control,`input`,()=>this.updateCounter()),this.listen(this.control,`change`,()=>this.onChange?.(this.control.value)),s&&this.root.classList.add(`is-disabled`)}get value(){return this.control.value}setValue(e){this.control.value!==e&&(this.control.value=e,this.updateCounter())}setDisabled(e){this.control.disabled!==e&&(this.control.disabled=e,this.root.classList.toggle(`is-disabled`,e))}focus(){this.control.focus()}updateCounter(){if(!this.counter||this.maxLength===void 0)return;let e=this.control.value.length;this.counter.textContent=`${e}/${this.maxLength}`,this.counter.parentElement?.classList.toggle(`is-over`,e>=this.maxLength)}},N=`M9 6 L15 12 L9 18`,P=class extends t{root;header;content;metaNode;onToggle;open;constructor(e){super();let{title:t,content:r,open:i=!1,meta:o,disabled:s=!1,onToggle:c}=e;this.open=i,this.onToggle=c,this.root=n(`div`,{class:`mac-disclosure${i?` is-open`:``}`}),this.header=n(`button`,{class:`mac-disclosure__header`,type:`button`,"aria-expanded":String(i),disabled:s});let l=a(N,14);l.classList.add(`mac-disclosure__chevron`),this.header.appendChild(l),this.header.appendChild(n(`span`,{class:`mac-disclosure__title`,text:t})),o===void 0?this.metaNode=null:(this.metaNode=n(`span`,{class:`mac-disclosure__meta`,text:o}),this.header.appendChild(this.metaNode)),this.content=n(`div`,{class:`mac-disclosure__content`}),typeof r==`string`||typeof r==`number`?this.content.textContent=String(r):r instanceof Node&&this.content.appendChild(r),this.content.hidden=!i,this.root.append(this.header,this.content),this.listen(this.header,`click`,()=>{this.header.disabled||this.setOpen(!this.open,!0)})}setOpen(e,t=!1){this.open!==e&&(this.open=e,this.root.classList.toggle(`is-open`,e),this.header.setAttribute(`aria-expanded`,String(e)),this.content.hidden=!e,t&&this.onToggle?.(e))}get isOpen(){return this.open}setMeta(e){this.metaNode&&this.metaNode.textContent!==e&&(this.metaNode.textContent=e)}get contentElement(){return this.content}};function F(e,t){let n=e?.id;return String(typeof n==`string`||typeof n==`number`?n:t)}function I(e){return e===`center`?` mac-table__align--center`:e===`right`?` mac-table__align--right`:``}var L=class extends t{root;body;columns;rowKey;selectable;emptyText;onSelectionChange;selected=new Set;headerCheck=null;rowChecks=[];rowKeys=[];rows=[];constructor(e){super(),this.columns=e.columns,this.rows=e.rows??[],this.selectable=e.selectable??!1,this.emptyText=e.emptyText??`暂无数据`,this.rowKey=e.rowKey??F,this.onSelectionChange=e.onSelectionChange;for(let t of e.selectedKeys??[])this.selected.add(t);let t=[`mac-table`];this.selectable&&t.push(`mac-table--selectable`),this.root=n(`div`,{class:t.join(` `)});let r=n(`div`,{class:`mac-table__scroll`}),i=n(`table`,{class:`mac-table__table`}),a=n(`thead`,{class:`mac-table__head`});this.body=n(`tbody`,{class:`mac-table__body`}),i.append(this.makeColGroup(),a,this.body),r.appendChild(i),this.root.appendChild(r),a.appendChild(this.makeHeaderRow()),this.listen(this.body,`change`,e=>this.onBodyChange(e)),this.renderRows()}setRows(e){let t=new Set;e.forEach((e,n)=>t.add(this.rowKey(e,n)));for(let e of Array.from(this.selected))t.has(e)||this.selected.delete(e);this.rows=e,this.renderRows()}get selectedKeys(){return Array.from(this.selected)}clearSelection(){this.selected.size!==0&&(this.selected.clear(),this.syncRowChecks(),this.syncHeaderCheck())}makeColGroup(){let e=n(`colgroup`,{class:`mac-table__cols`});this.selectable&&e.appendChild(n(`col`,{class:`mac-table__col mac-table__col--select`}));for(let t of this.columns){let r=n(`col`,{class:`mac-table__col`});t.width!==void 0&&(r.style.width=`${t.width}px`),e.appendChild(r)}return e}makeHeaderRow(){let e=n(`tr`,{class:`mac-table__row`});if(this.selectable){let t=n(`th`,{class:`mac-table__th mac-table__th--select`,scope:`col`}),r=n(`input`,{class:`mac-table__checkbox`,type:`checkbox`,"aria-label":`全选`});this.headerCheck=r,this.listen(r,`change`,()=>this.toggleAll(r.checked)),t.appendChild(r),e.appendChild(t)}for(let t of this.columns){let r=n(`th`,{class:`mac-table__th${I(t.align)}`,scope:`col`});r.textContent=t.title,e.appendChild(r)}return e}renderRows(){let e=document.createDocumentFragment();this.rowChecks=[],this.rowKeys=[],this.rows.length===0?e.appendChild(this.makeEmptyRow()):this.rows.forEach((t,n)=>{e.appendChild(this.makeRow(t,n))}),this.body.replaceChildren(e),this.syncHeaderCheck()}makeRow(e,t){let r=this.rowKey(e,t);this.rowKeys.push(r);let i=n(`tr`,{class:`mac-table__row${this.selected.has(r)?` is-selected`:``}`,dataset:{key:r}});if(this.selectable){let e=n(`td`,{class:`mac-table__cell mac-table__cell--select`}),t=n(`input`,{class:`mac-table__checkbox`,type:`checkbox`,"aria-label":`选择此行`,checked:this.selected.has(r)});this.rowChecks.push(t),e.appendChild(t),i.appendChild(e)}for(let n of this.columns)i.appendChild(this.makeCell(n,e,t));return i}makeCell(e,t,i){let a=n(`td`,{class:`mac-table__cell${I(e.align)}`}),o=t?.[e.key];return e.render?(r(a,[e.render(o,t,i)]),a):(o!=null&&(a.textContent=String(o)),a)}makeEmptyRow(){let e=n(`tr`,{class:`mac-table__row mac-table__row--empty`}),t=this.columns.length+ +!!this.selectable,r=n(`td`,{class:`mac-table__cell mac-table__empty`,colSpan:Math.max(1,t)});return r.textContent=this.emptyText,e.appendChild(r),e}onBodyChange(e){let t=e.target;if(!(t instanceof HTMLInputElement)||!t.classList.contains(`mac-table__checkbox`))return;let n=t.closest(`.mac-table__row`),r=n?.dataset.key;r!==void 0&&(t.checked?this.selected.add(r):this.selected.delete(r),n?.classList.toggle(`is-selected`,t.checked),this.syncHeaderCheck(),this.emitSelection())}toggleAll(e){if(this.selected.clear(),e)for(let e of this.rowKeys)this.selected.add(e);this.syncRowChecks(),this.syncHeaderCheck(),this.emitSelection()}syncRowChecks(){this.rowChecks.forEach((e,t)=>{let n=this.selected.has(this.rowKeys[t]);e.checked!==n&&(e.checked=n),e.closest(`.mac-table__row`)?.classList.toggle(`is-selected`,n)})}syncHeaderCheck(){let e=this.headerCheck;if(!e)return;let t=this.rowKeys.length,n=0;for(let e of this.rowKeys)this.selected.has(e)&&(n+=1);e.disabled=t===0,e.checked=t>0&&n===t;let r=n>0&&n<t;e.indeterminate!==r&&(e.indeterminate=r)}emitSelection(){this.onSelectionChange?.(Array.from(this.selected))}},R=10,z=class extends t{root;orientation;primaryPane;secondaryPane;divider;minPrimary;minSecondary;onResize;dragging=!1;dragPointer=-1;dragStart=0;dragOrigin=0;constructor(e){super(),this.orientation=e.orientation,this.minPrimary=e.minPrimary??0,this.minSecondary=e.minSecondary??0,this.onResize=e.onResize;let t=this.orientation===`horizontal`;this.root=n(`div`,{class:`mac-splitview mac-splitview--${this.orientation}`}),this.primaryPane=n(`div`,{class:`mac-splitview__pane mac-splitview__pane--primary`}),this.secondaryPane=n(`div`,{class:`mac-splitview__pane mac-splitview__pane--secondary`}),r(this.primaryPane,[e.primary]),r(this.secondaryPane,[e.secondary]),this.primaryPane.id=c(`mac-splitview-pane`),this.secondaryPane.id=c(`mac-splitview-pane`),this.divider=n(`div`,{class:`mac-splitview__divider`,role:`separator`,tabindex:0,"aria-orientation":t?`vertical`:`horizontal`,"aria-label":`调整面板大小`}),this.divider.setAttribute(`aria-controls`,`${this.primaryPane.id} ${this.secondaryPane.id}`),this.root.append(this.primaryPane,this.divider,this.secondaryPane);let i=e.primarySize??`50%`;if(this.writeSize(typeof i==`number`?`${i}px`:i),this.listen(this.divider,`pointerdown`,e=>this.onPointerDown(e)),this.listen(this.divider,`pointermove`,e=>this.onPointerMove(e)),this.listen(this.divider,`pointerup`,e=>this.onPointerUp(e)),this.listen(this.divider,`pointercancel`,e=>this.onPointerUp(e)),this.listen(this.divider,`lostpointercapture`,()=>this.endDrag()),this.listen(this.divider,`keydown`,e=>this.onKeyDown(e)),typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>this.syncAria());e.observe(this.root),this.onDestroy(()=>e.disconnect())}this.syncAria()}setPrimarySize(e){let t=typeof e==`number`?`${this.clampSize(e)}px`:e;this.writeSize(t),this.syncAria()}onPointerDown(e){e.button===0&&(e.preventDefault(),this.dragging=!0,this.dragPointer=e.pointerId,this.dragStart=this.pointerAxis(e),this.dragOrigin=this.paneExtent(this.primaryPane),this.root.classList.add(`is-dragging`),this.divider.setPointerCapture(e.pointerId),this.divider.focus())}onPointerMove(e){if(!this.dragging||e.pointerId!==this.dragPointer)return;let t=this.pointerAxis(e)-this.dragStart;this.applySize(this.dragOrigin+t,!0)}onPointerUp(e){e.pointerId===this.dragPointer&&(this.endDrag(),this.divider.hasPointerCapture(e.pointerId)&&this.divider.releasePointerCapture(e.pointerId))}endDrag(){this.dragging&&(this.dragging=!1,this.dragPointer=-1,this.root.classList.remove(`is-dragging`))}onKeyDown(e){let t=this.orientation===`horizontal`,n=t?`ArrowLeft`:`ArrowUp`,r=t?`ArrowRight`:`ArrowDown`,i;if(e.key===n)i=this.paneExtent(this.primaryPane)-R;else if(e.key===r)i=this.paneExtent(this.primaryPane)+R;else if(e.key===`Home`)i=this.minPrimary;else if(e.key===`End`)i=2**53-1;else return;e.preventDefault(),this.applySize(i,!0)}applySize(e,t){let n=this.clampSize(e);this.writeSize(`${n}px`),this.syncAria(),t&&this.onResize?.(n)}writeSize(e){this.root.style.setProperty(`--mac-splitview-primary`,e)}clampSize(e){let t=this.availableExtent();if(t<=0)return Math.max(0,e);let n=Math.max(0,t-this.minSecondary),r=Math.min(this.minPrimary,n);return Math.min(n,Math.max(r,e))}availableExtent(){return this.paneExtent(this.primaryPane)+this.paneExtent(this.secondaryPane)}paneExtent(e){let t=e.getBoundingClientRect();return this.orientation===`horizontal`?t.width:t.height}pointerAxis(e){return this.orientation===`horizontal`?e.clientX:e.clientY}syncAria(){let e=Math.round(this.paneExtent(this.primaryPane)),t=this.availableExtent(),n=t>0?Math.max(0,Math.round(t-this.minSecondary)):Math.max(0,e),r=Math.min(this.minPrimary,n);this.divider.setAttribute(`aria-valuemin`,String(r)),this.divider.setAttribute(`aria-valuemax`,String(n)),this.divider.setAttribute(`aria-valuenow`,String(Math.min(n,Math.max(r,e))))}},B=class extends t{root;input;list;onChange;onInput;renderOption;listId;options;filtered=[];rows=[];active=-1;selectedValue;constructor(e){super(),this.options=e.options,this.renderOption=e.renderOption,this.onChange=e.onChange,this.onInput=e.onInput,this.selectedValue=e.value??null,this.listId=c(`mac-combobox-list`),this.root=n(`div`,{class:`mac-combobox`}),this.input=n(`input`,{class:`mac-combobox__input`,type:`text`,role:`combobox`,autocomplete:`off`,placeholder:e.placeholder??``,"aria-expanded":`false`,"aria-autocomplete":`list`,"aria-controls":this.listId}),this.input.spellcheck=!1;let t=this.optionFor(this.selectedValue??``);this.input.value=t?t.label:this.selectedValue??``,this.list=n(`div`,{class:`mac-combobox__list`,id:this.listId,role:`listbox`,hidden:!0});let r=n(`span`,{class:`mac-combobox__chevron`,"aria-hidden":`true`});r.appendChild(a(`M2.5 4.5 L6 8 L9.5 4.5`,12,`0 0 12 12`)),this.root.append(this.input,r,this.list),this.listen(this.input,`input`,()=>{this.selectedValue=null,this.filter(this.input.value),this.open(),this.onInput?.(this.input.value)}),this.listen(this.input,`keydown`,e=>this.onKeyDown(e)),this.listen(this.input,`pointerdown`,()=>this.openWithFullList()),this.listen(this.input,`focusin`,()=>this.openWithFullList()),this.listen(this.list,`pointerdown`,e=>e.preventDefault()),this.listen(this.list,`click`,e=>this.onListClick(e)),this.listen(this.input,`blur`,()=>this.close()),this.filter(``)}openWithFullList(){this.filter(``),this.open()}get value(){let e=this.filtered[this.active];return e?e.value:this.selectedValue??this.input.value}setValue(e){this.selectedValue=e;let t=this.optionFor(e);this.input.value=t?t.label:e,this.active=-1,this.close(),this.filter(this.input.value)}setOptions(e){this.options=e,this.filter(this.input.value)}focus(){this.input.focus()}optionFor(e){return this.options.find(t=>t.value===e)}filter(e){let t=e.trim().toLowerCase();this.filtered=t?this.options.filter(e=>e.label.toLowerCase().includes(t)):this.options.slice(),this.active=-1;let r=document.createDocumentFragment();this.rows=[],this.filtered.forEach((e,t)=>{let i=n(`div`,{class:`mac-combobox__option`,id:`${this.listId}-${t}`,role:`option`,"aria-selected":String(e.value===this.selectedValue),dataset:{index:String(t)}});if(this.renderOption){let t=this.renderOption(e);typeof t==`string`?i.textContent=t:i.appendChild(t)}else i.textContent=e.label;this.rows.push(i),r.appendChild(i)}),this.list.replaceChildren(r),this.filtered.length===0?this.close():this.input.getAttribute(`aria-expanded`)===`true`&&this.syncActive()}open(){this.filtered.length===0?this.close():(this.list.hidden=!1,this.input.setAttribute(`aria-expanded`,`true`))}close(){if(this.active=-1,this.input.setAttribute(`aria-expanded`,`false`),this.input.removeAttribute(`aria-activedescendant`),!this.list.hidden){this.list.hidden=!0;for(let e of this.rows)e.classList.remove(`is-active`)}}move(e){if(this.filtered.length===0)return;let t=this.filtered.length,n=(this.active<0?e>0?-1:0:this.active)+e;n<0&&(n=t-1),n>=t&&(n=0),this.active=n,this.open(),this.syncActive(),this.rows[n]?.scrollIntoView({block:`nearest`})}syncActive(){this.rows.forEach((e,t)=>{e.classList.toggle(`is-active`,t===this.active)});let e=this.rows[this.active];e?this.input.setAttribute(`aria-activedescendant`,e.id):this.input.removeAttribute(`aria-activedescendant`)}onKeyDown(e){switch(e.key){case`ArrowDown`:case`ArrowUp`:e.preventDefault(),this.move(e.key===`ArrowDown`?1:-1);return;case`Enter`:this.active>=0&&(e.preventDefault(),this.commit(this.filtered[this.active]));return;case`Escape`:if(this.list.hidden)return;e.preventDefault(),this.close();return;case`Tab`:this.active>=0&&this.commit(this.filtered[this.active]);return;default:return}}onListClick(e){let t=e.target.closest(`.mac-combobox__option`);if(!t)return;let n=this.filtered[Number(t.dataset.index)];n&&this.commit(n)}commit(e){this.selectedValue=e.value,this.input.value=e.label,this.close();for(let[t,n]of this.rows.entries())n.setAttribute(`aria-selected`,String(this.filtered[t]?.value===e.value));this.onChange?.(e.value)}},V=`M7 3 V6 M17 3 V6 M4 9 H20 M5 5 H19 A1 1 0 0 1 20 6 V19 A1 1 0 0 1 19 20 H5 A1 1 0 0 1 4 19 V6 A1 1 0 0 1 5 5 Z`,re=class extends t{root;input;labelNode=null;onChange;constructor(e={}){super();let{value:t,min:i,max:o,disabled:s=!1,label:l,onChange:u}=e;this.onChange=u,this.root=n(`div`,{class:`mac-datepicker`});let d=c(`mac-datepicker`);l!==void 0&&(this.labelNode=n(`label`,{class:`mac-datepicker__label`,for:d}),r(this.labelNode,[l]),this.root.appendChild(this.labelNode));let f=n(`div`,{class:`mac-datepicker__control`});this.input=n(`input`,{class:`mac-datepicker__input`,type:`date`,id:d,disabled:s}),t&&(this.input.value=t),i&&(this.input.min=i),o&&(this.input.max=o);let p=n(`span`,{class:`mac-datepicker__icon`,"aria-hidden":`true`});p.appendChild(a(V,16,`0 0 24 24`)),f.append(this.input,p),this.root.appendChild(f),this.toggleClass(`is-disabled`,s),this.listen(this.input,`change`,()=>{this.onChange?.(this.input.value)})}get value(){return this.input.value}setValue(e){this.input.value!==e&&(this.input.value=e)}setDisabled(e){this.input.disabled!==e&&(this.input.disabled=e,this.toggleClass(`is-disabled`,e))}focus(){this.input.focus()}},H=class extends t{root;closeButton;minimiseButton;zoomButton;constructor(e={}){super(),this.root=n(`div`,{class:`mac-traffic-lights`,role:`group`,"aria-label":`窗口控制`}),this.closeButton=this.makeLight(`close`,`关闭`),this.minimiseButton=this.makeLight(`minimise`,`最小化`),this.zoomButton=this.makeLight(`zoom`,`缩放`),this.addGlyph(this.closeButton,`mac-traffic-light__glyph--close`,`M3.5 3.5 L8.5 8.5 M8.5 3.5 L3.5 8.5`),this.addGlyph(this.minimiseButton,`mac-traffic-light__glyph--minimise`,`M2.6 6 L9.4 6`),this.addTriangle(this.zoomButton,`mac-traffic-light__glyph--enter`,`M3.1 3.1 H5.1 L3.1 5.1 Z`,`M8.9 8.9 H6.9 L8.9 6.9 Z`),this.addTriangle(this.zoomButton,`mac-traffic-light__glyph--exit`,`M5.1 3.1 H3.1 L5.1 5.1 Z`,`M6.9 8.9 H8.9 L6.9 6.9 Z`),this.root.append(this.closeButton,this.minimiseButton,this.zoomButton),e.onClose&&this.listen(this.closeButton,`click`,e.onClose),e.onMinimise&&this.listen(this.minimiseButton,`click`,e.onMinimise),e.onZoom&&this.listen(this.zoomButton,`click`,e.onZoom)}makeLight(e,t){return n(`button`,{class:`mac-traffic-light mac-traffic-light--${e}`,type:`button`,"aria-label":t,title:t})}addGlyph(e,t,n){let r=`http://www.w3.org/2000/svg`,i=document.createElementNS(r,`svg`);i.setAttribute(`viewBox`,`0 0 12 12`),i.setAttribute(`aria-hidden`,`true`),i.classList.add(t);let a=document.createElementNS(r,`path`);a.setAttribute(`d`,n),i.appendChild(a),e.appendChild(i)}addTriangle(e,t,n,r){let i=`http://www.w3.org/2000/svg`,a=document.createElementNS(i,`svg`);a.setAttribute(`viewBox`,`0 0 12 12`),a.setAttribute(`aria-hidden`,`true`),a.classList.add(t);for(let e of[n,r]){let t=document.createElementNS(i,`path`);t.setAttribute(`d`,e),a.appendChild(t)}e.appendChild(a)}setZoomed(e){if(this.root.classList.contains(`is-zoomed`)===e)return;this.root.classList.toggle(`is-zoomed`,e);let t=e?`还原`:`缩放`;this.zoomButton.title=t,this.zoomButton.setAttribute(`aria-label`,t)}setFocused(e){this.root.classList.contains(`is-unfocused`)!==!e&&this.root.classList.toggle(`is-unfocused`,!e)}},U=class extends t{root;titleNode;lights;constructor(e={}){super();let{title:t=``,trafficLights:r=!0,leading:i=[],trailing:a=[]}=e;this.root=n(`header`,{class:`mac-titlebar`});let o=n(`div`,{class:`mac-titlebar__leading`});r?(this.lights=new H({onClose:e.onClose,onMinimise:e.onMinimise,onZoom:e.onZoom}),o.appendChild(this.lights.element)):this.lights=null;for(let e of i)e!=null&&e!==!1&&o.appendChild(typeof e==`string`||typeof e==`number`?document.createTextNode(String(e)):e);this.titleNode=n(`div`,{class:`mac-titlebar__title`,text:t});let s=n(`div`,{class:`mac-titlebar__trailing`});for(let e of a)e!=null&&e!==!1&&s.appendChild(typeof e==`string`||typeof e==`number`?document.createTextNode(String(e)):e);if(this.root.append(o,this.titleNode,s),e.onDoubleClick){let t=e.onDoubleClick,n=0,r=0,i=0,a=0,o=()=>{let e=performance.now();e-a<350||(a=e,t())};this.listen(this.root,`dblclick`,e=>{e.target.closest(`button, input, a, [role='button'], [role='switch']`)||(e.preventDefault(),o())}),this.listen(this.root,`mousedown`,e=>{if(e.button!==0||e.target.closest(`button, input, a, [role='button'], [role='switch']`))return;let t=e.timeStamp,a=Math.abs(e.clientX-r)<8&&Math.abs(e.clientY-i)<8;t-n<500&&a?(n=0,o()):(n=t,r=e.clientX,i=e.clientY)},{capture:!0})}}get trafficLights(){return this.lights}setTitle(e){this.titleNode.textContent!==e&&(this.titleNode.textContent=e)}addTrailing(e){this.root.querySelector(`.mac-titlebar__trailing`)?.appendChild(e)}destroy(){this.lights?.destroy(),super.destroy()}},W=class extends t{root;selectedId;onSelect;constructor(e){super(),this.selectedId=e.selected??null,this.onSelect=e.onSelect,this.root=n(`aside`,{class:`mac-sidebar`});for(let t of e.groups){let e=n(`nav`,{class:`mac-sidebar__group`,"aria-label":t.heading??`导航`});t.heading&&e.appendChild(n(`div`,{class:`mac-sidebar__heading`,text:t.heading}));for(let n of t.items)e.appendChild(this.makeItem(n));this.root.appendChild(e)}this.listen(this.root,`click`,e=>{let t=e.target.closest(`.mac-sidebar__item`);if(!t||t.disabled)return;let n=t.dataset.id;n&&this.setSelected(n,!0)})}makeItem(e){let t=e.id===this.selectedId,r=n(`button`,{class:`mac-sidebar__item${t?` is-selected`:``}`,type:`button`,disabled:e.disabled??!1,dataset:{id:e.id,section:e.id},"aria-current":t?`page`:`false`});e.icon&&r.appendChild(a(e.icon,16));let i=n(`span`,{text:e.label});return r.appendChild(i),e.count!==void 0&&r.appendChild(n(`span`,{class:`mac-sidebar__count`,text:String(e.count)})),r}setSelected(e,t=!1){if((this.selectedId!==e||t)&&this.selectedId!==e){this.selectedId=e;for(let t of this.root.querySelectorAll(`.mac-sidebar__item`)){let n=t.dataset.id===e;t.classList.toggle(`is-selected`,n),t.setAttribute(`aria-current`,n?`page`:`false`)}t&&this.onSelect?.(e)}}get selected(){return this.selectedId}setCollapsed(e){this.root.classList.contains(`is-collapsed`)!==e&&(this.root.classList.toggle(`is-collapsed`,e),this.root.setAttribute(`aria-hidden`,String(e)))}get collapsed(){return this.root.classList.contains(`is-collapsed`)}},G=class extends t{root;dot;textNode;trailingNode;constructor(e={}){super();let{text:t=``,state:r=`ok`,trailing:i=``}=e;this.root=n(`footer`,{class:`mac-statusbar`});let a=n(`span`,{class:`mac-statusbar__leading`});this.dot=n(`span`,{class:`mac-statusbar__dot mac-statusbar__dot--${r}`}),this.textNode=n(`span`,{class:`mac-statusbar__text`,text:t}),a.append(this.dot,this.textNode),this.trailingNode=n(`span`,{class:`mac-statusbar__time`,text:i}),this.root.append(a,this.trailingNode)}setText(e){this.textNode.textContent!==e&&(this.textNode.textContent=e)}setState(e){let t=`mac-statusbar__dot mac-statusbar__dot--${e}`;this.dot.className!==t&&(this.dot.className=t)}setTrailing(e){this.trailingNode.textContent!==e&&(this.trailingNode.textContent=e)}},K=class extends t{root;leadingSlot;centerSlot;trailingSlot;constructor(e={}){super();let{leading:t=[],center:i=[],trailing:a=[],position:o=`top`,bordered:s=!0,ariaLabel:c}=e,l=[`mac-toolbar`,`mac-toolbar--${o}`];s||l.push(`mac-toolbar--borderless`),this.root=n(`div`,{class:l.join(` `),role:`toolbar`,"aria-orientation":`horizontal`}),this.root.dataset.position=o,c&&this.root.setAttribute(`aria-label`,c),this.leadingSlot=n(`div`,{class:`mac-toolbar__leading`}),this.centerSlot=n(`div`,{class:`mac-toolbar__center`}),this.trailingSlot=n(`div`,{class:`mac-toolbar__trailing`}),r(this.leadingSlot,t),r(this.centerSlot,i),r(this.trailingSlot,a),this.root.append(this.leadingSlot,this.centerSlot,this.trailingSlot)}addTrailing(e){r(this.trailingSlot,[e])}addLeading(e){r(this.leadingSlot,[e])}addCenter(e){r(this.centerSlot,[e])}setBordered(e){this.root.classList.toggle(`mac-toolbar--borderless`,!e),this.root.dataset.bordered=String(e)}get bordered(){return!this.root.classList.contains(`mac-toolbar--borderless`)}get slots(){return{leading:this.leadingSlot,center:this.centerSlot,trailing:this.trailingSlot}}},q=class extends t{root;tabs;onSelect;listNode;panelHost;tabButtons=new Map;panels=new Map;selectedId;constructor(e){super(),this.tabs=e.tabs,this.onSelect=e.onSelect,this.selectedId=e.selected??this.tabs.find(e=>!e.disabled)?.id??``,this.root=n(`div`,{class:`mac-tabview`}),this.listNode=n(`div`,{class:`mac-tabview__list`,role:`tablist`,"aria-orientation":`horizontal`}),e.ariaLabel&&this.listNode.setAttribute(`aria-label`,e.ariaLabel),this.panelHost=n(`div`,{class:`mac-tabview__panels`});for(let e of this.tabs){let t=e.id===this.selectedId,r=c(`mac-tabview-tab`),i=c(`mac-tabview-panel`),o=n(`button`,{class:`mac-tabview__tab${t?` is-selected`:``}`,type:`button`,role:`tab`,id:r,"aria-selected":String(t),"aria-controls":i,tabindex:t?0:-1,disabled:e.disabled??!1,dataset:{id:e.id}});e.icon&&o.appendChild(a(e.icon,14)),o.appendChild(n(`span`,{class:`mac-tabview__label`,text:e.label}));let s=n(`div`,{class:`mac-tabview__panel`,role:`tabpanel`,id:i,"aria-labelledby":r,tabindex:0,hidden:!t});this.tabButtons.set(e.id,o),this.panels.set(e.id,s),this.listNode.appendChild(o),this.panelHost.appendChild(s)}this.listen(this.listNode,`click`,e=>{let t=e.target.closest(`.mac-tabview__tab`);if(!t||t.disabled)return;let n=t.dataset.id;n&&n!==this.selectedId&&(this.apply(n),this.onSelect?.(n))}),this.listen(this.listNode,`keydown`,e=>this.onKeyDown(e)),this.root.append(this.listNode,this.panelHost)}addPanel(e,t){let n=this.panels.get(e);n&&n.replaceChildren(t)}setSelected(e){if(e===this.selectedId)return;let t=this.tabs.find(t=>t.id===e);t&&!t.disabled&&this.apply(e)}get selected(){return this.selectedId}apply(e){this.selectedId=e;for(let[t,n]of this.tabButtons){let r=t===e;n.classList.toggle(`is-selected`,r),n.setAttribute(`aria-selected`,String(r)),n.tabIndex=r?0:-1}for(let[t,n]of this.panels)n.hidden=t!==e}onKeyDown(e){let t=this.tabs.filter(e=>!e.disabled&&this.tabButtons.has(e.id));if(t.length===0)return;let n=t.findIndex(e=>e.id===this.selectedId),r=n;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=n===-1?0:(n+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:r=n===-1?t.length-1:(n-1+t.length)%t.length;break;case`Home`:r=0;break;case`End`:r=t.length-1;break;default:return}e.preventDefault();let i=t[r];this.apply(i.id),this.tabButtons.get(i.id)?.focus(),this.onSelect?.(i.id)}destroy(){this.panels.clear(),this.tabButtons.clear(),super.destroy()}},J=`M3 7 L5.5 9.5 L11 4`,Y=class extends t{root;items;onSelect;menuItems=[];opened=!1;disposeTracking=null;restoreFocusTo=null;highlighted=-1;constructor(e){super(),this.items=e.items,this.onSelect=e.onSelect,this.root=n(`div`,{class:`mac-menu`,role:`menu`,tabindex:-1}),this.root.style.display=`none`,this.root.style.visibility=`hidden`,this.root.dataset.placement=e.placement??`bottom-start`;for(let e of this.items){if(e.separator){this.root.appendChild(n(`div`,{class:`mac-menu__separator`,role:`separator`}));continue}let t=n(`button`,{class:`mac-menu__item`,type:`button`,role:e.checked===void 0?`menuitem`:`menuitemcheckbox`,disabled:e.disabled??!1,dataset:{value:e.value}});if(e.checked!==void 0&&t.setAttribute(`aria-checked`,String(e.checked)),e.checked!==void 0){let r=n(`span`,{class:`mac-menu__check`});e.checked&&r.appendChild(a(J,14,`0 0 14 14`)),t.appendChild(r)}else e.icon&&t.appendChild(a(e.icon,14));t.appendChild(n(`span`,{class:`mac-menu__label`,text:e.label})),e.shortcut&&t.appendChild(n(`span`,{class:`mac-menu__shortcut`,text:e.shortcut})),this.menuItems.push(t),this.root.appendChild(t)}this.listen(this.root,`click`,e=>{let t=e.target.closest(`.mac-menu__item`);t&&!t.disabled&&this.choose(t.dataset.value??``)}),this.listen(this.root,`keydown`,e=>this.onKeyDown(e)),this.listen(this.root,`mousemove`,e=>{let t=e.target.closest(`.mac-menu__item`);if(!t||t.disabled)return;let n=this.menuItems.indexOf(t);n>=0&&this.highlight(n)}),this.listen(document,`mousedown`,e=>{if(!this.opened)return;let t=e.target;this.root.contains(t)||this.close()}),this.listen(document,`keydown`,e=>{this.opened&&e.key===`Escape`&&(e.preventDefault(),this.close())})}open(e){this.opened||(this.restoreFocusTo=document.activeElement,this.root.style.display=`block`,this.root.style.visibility=`hidden`,this.root.style.zIndex=String(p()),document.body.appendChild(this.root),this.disposeTracking=d({anchor:e,panel:this.root,placement:this.root.dataset.placement??`bottom-start`}),this.opened=!0,requestAnimationFrame(()=>{this.root.classList.add(`is-open`),this.highlight(0),this.root.focus()}))}close(){this.opened&&(this.opened=!1,this.root.classList.remove(`is-open`),this.disposeTracking?.(),this.disposeTracking=null,window.setTimeout(()=>{this.opened||this.root.remove()},140),this.root.remove(),this.highlight(-1),this.restoreFocusTo?.focus?.(),this.restoreFocusTo=null)}get isOpen(){return this.opened}choose(e){this.onSelect?.(e),this.close()}highlight(e){e!==this.highlighted&&(this.menuItems[this.highlighted]?.classList.remove(`is-highlighted`),this.highlighted=e,this.menuItems[e]?.classList.add(`is-highlighted`))}step(e){let t=this.menuItems.map((e,t)=>({button:e,index:t})).filter(e=>!e.button.disabled);if(t.length===0)return;let n=t.findIndex(e=>e.index===this.highlighted),r=n===-1?e===1?0:t.length-1:(n+e+t.length)%t.length;this.highlight(t[r].index)}onKeyDown(e){switch(e.key){case`ArrowDown`:e.preventDefault(),this.step(1);break;case`ArrowUp`:e.preventDefault(),this.step(-1);break;case`Home`:{e.preventDefault();let t=this.menuItems.find(e=>!e.disabled),n=t?this.menuItems.indexOf(t):-1;n>=0&&this.highlight(n);break}case`End`:e.preventDefault();for(let e=this.menuItems.length-1;e>=0;--e)if(!this.menuItems[e].disabled){this.highlight(e);break}break;case`Enter`:case` `:{e.preventDefault();let t=this.menuItems[this.highlighted];t&&!t.disabled&&this.choose(t.dataset.value??``);break}}}destroy(){this.disposeTracking?.(),this.disposeTracking=null,this.root.remove(),super.destroy()}};function X(e,t){let n=new Y(t);return n.open(e),n}var ie=class extends t{root;content;placement;delay;trigger=null;disposeTracking=null;showTimer=null;visible=!1;triggerListeners=[];constructor(e){super(),this.content=e.content,this.placement=e.placement??`top`,this.delay=e.delay??400,this.root=n(`div`,{class:`mac-tooltip`,role:`tooltip`,id:c(`mac-tooltip`)}),this.root.textContent=this.content,this.root.style.display=`none`}attachTo(e){this.detach(),this.trigger=e,e.setAttribute(`aria-describedby`,this.root.id);let t=(t,n)=>{e.addEventListener(t,n),this.triggerListeners.push(()=>e.removeEventListener(t,n))};t(`mouseenter`,()=>this.schedule()),t(`mouseleave`,()=>this.close()),t(`focus`,()=>this.schedule()),t(`blur`,()=>this.close()),t(`mousedown`,()=>this.close())}detach(){this.trigger&&=(this.trigger.removeAttribute(`aria-describedby`),null),this.cancelTimer(),this.close();for(let e of this.triggerListeners.splice(0))e()}schedule(){this.cancelTimer(),this.showTimer=setTimeout(()=>this.open(),this.delay)}cancelTimer(){this.showTimer!==null&&(clearTimeout(this.showTimer),this.showTimer=null)}open(){!this.visible&&this.trigger&&(this.root.style.display=`block`,this.root.style.visibility=`hidden`,this.root.style.zIndex=String(p()),document.body.appendChild(this.root),this.disposeTracking=d({anchor:this.trigger,panel:this.root,placement:this.placement,offset:8}),this.visible=!0,requestAnimationFrame(()=>this.root.classList.add(`is-open`)))}close(){this.cancelTimer(),this.visible&&(this.visible=!1,this.root.classList.remove(`is-open`),this.disposeTracking?.(),this.disposeTracking=null,this.root.remove())}destroy(){this.triggerListeners.splice(0).forEach(e=>e()),this.cancelTimer(),this.disposeTracking?.(),this.disposeTracking=null,this.root.remove(),super.destroy()}},ae=class extends t{root;scrim;onCancel;onConfirm;releaseFocus=null;opened=!1;constructor(e){super();let{title:t,body:r,confirmLabel:i=`确定`,cancelLabel:a=`取消`,onConfirm:o,onCancel:s}=e;this.onConfirm=o,this.onCancel=s;let l=c(`mac-dialog-title`);this.scrim=n(`div`,{class:`mac-dialog__scrim`}),this.root=n(`div`,{class:`mac-dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,tabindex:-1});let u=n(`h2`,{class:`mac-dialog__title`,text:t,id:l}),d=n(`div`,{class:`mac-dialog__body`});typeof r==`string`||typeof r==`number`?d.textContent=String(r):r&&d.appendChild(r);let f=n(`div`,{class:`mac-dialog__actions`}),p=new w({label:a,onClick:()=>this.cancel()}),m=new w({label:i,variant:`primary`,onClick:()=>this.confirm()});f.append(p.element,m.element),this.root.append(u,d,f),this.scrim.appendChild(this.root),this.listen(this.scrim,`mousedown`,e=>{e.target===this.scrim&&this.cancel()}),this.listen(document,`keydown`,e=>{this.opened&&e.key===`Escape`&&(e.preventDefault(),this.cancel())})}open(){this.opened||(this.opened=!0,document.body.appendChild(this.scrim),this.releaseFocus=g(this.root),requestAnimationFrame(()=>this.scrim.classList.add(`is-open`)))}close(){this.opened&&(this.opened=!1,this.scrim.classList.remove(`is-open`),this.releaseFocus?.(),this.releaseFocus=null,setTimeout(()=>{this.opened||this.scrim.remove()},200))}confirm(){this.onConfirm?.(),this.close()}cancel(){this.onCancel?.(),this.close()}get isOpen(){return this.opened}destroy(){this.releaseFocus?.(),this.releaseFocus=null,this.scrim.remove(),super.destroy()}},oe=160,se=class extends t{root;placement;offset;onClose;surface;arrowNode=null;anchor=null;opened=!1;disposeTracking=null;closeTimer=null;arrowFrame=0;constructor(e){super();let{content:t,placement:r=`bottom`,offset:i=8,arrow:a=!1,ariaLabel:o,onClose:s}=e;this.placement=r,this.offset=i,this.onClose=s,this.root=n(`div`,{class:`mac-popover`,role:`dialog`,"aria-modal":`false`,tabindex:-1}),this.root.style.display=`none`,o&&this.root.setAttribute(`aria-label`,o),this.surface=n(`div`,{class:`mac-popover__surface`});let c=n(`div`,{class:`mac-popover__body`});typeof t==`string`?c.textContent=t:c.appendChild(t),this.surface.appendChild(c),a&&(this.arrowNode=n(`span`,{class:`mac-popover__arrow`,"aria-hidden":`true`}),this.surface.appendChild(this.arrowNode)),this.root.appendChild(this.surface),this.listen(document,`mousedown`,e=>{if(!this.opened)return;let t=e.target;!t||this.root.contains(t)||this.anchor?.contains(t)||this.close()}),this.listen(document,`keydown`,e=>{this.opened&&e.key===`Escape`&&(e.preventDefault(),this.close())}),this.listen(window,`scroll`,()=>this.scheduleArrowUpdate(),{capture:!0}),this.listen(window,`resize`,()=>this.scheduleArrowUpdate()),this.onDestroy(()=>{this.disposeTracking?.(),this.disposeTracking=null})}open(e){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null),this.opened?this.anchor!==e&&(this.anchor=e,this.place(),this.positionArrow(),this.disposeTracking?.(),this.disposeTracking=d(this.positionOptions(e))):(this.opened=!0,this.anchor=e,this.root.style.display=`block`,this.root.style.zIndex=String(p()),document.body.appendChild(this.root),this.place(),this.positionArrow(),this.disposeTracking=d(this.positionOptions(e)),requestAnimationFrame(()=>{this.opened&&(this.root.classList.add(`is-open`),this.focusInto())}))}close(){if(!this.opened)return;this.opened=!1,this.root.classList.remove(`is-open`),this.disposeTracking?.(),this.disposeTracking=null,this.cancelArrowUpdate();let e=this.anchor;this.anchor=null;let t=document.activeElement;(!t||t===document.body||this.root.contains(t))&&e?.focus?.(),this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.opened||this.root.remove()},oe),this.onClose?.()}get isOpen(){return this.opened}positionOptions(e){return{anchor:e,panel:this.root,placement:this.placement,offset:this.offset}}place(){this.anchor&&u(this.positionOptions(this.anchor))}scheduleArrowUpdate(){this.opened&&this.arrowNode&&this.arrowFrame===0&&(this.arrowFrame=requestAnimationFrame(()=>{this.arrowFrame=0,this.opened&&this.arrowNode&&(this.place(),this.positionArrow())}))}cancelArrowUpdate(){this.arrowFrame!==0&&(cancelAnimationFrame(this.arrowFrame),this.arrowFrame=0)}positionArrow(){let e=this.arrowNode;if(!e||!this.anchor)return;let t=this.surface.offsetLeft+this.surface.clientLeft,n=this.surface.offsetTop+this.surface.clientTop,r=this.surface.clientWidth,i=this.surface.clientHeight;if(r===0||i===0)return;let a=this.anchor.getBoundingClientRect(),o=e.offsetWidth/2,s=this.root.dataset.side??`bottom`;if(s===`top`||s===`bottom`){let e=a.left+a.width/2-t,n=Math.max(o,Math.min(e,r-o));this.surface.style.setProperty(`--mac-popover-arrow-x`,`${Math.round(n)}px`)}else{let e=a.top+a.height/2-n,t=Math.max(o,Math.min(e,i-o));this.surface.style.setProperty(`--mac-popover-arrow-y`,`${Math.round(t)}px`)}}focusInto(){(h(this.root)[0]??this.root).focus()}destroy(){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null),this.cancelArrowUpdate(),this.root.remove(),super.destroy()}},ce=300,Z=class extends t{root;scrim;panel;bodyNode;onConfirm;onCancel;releaseFocus=null;opened=!1;closeTimer=null;constructor(e){super();let{title:t,body:r,confirmLabel:i=`确定`,cancelLabel:a=`取消`,onConfirm:o,onCancel:s}=e;this.onConfirm=o,this.onCancel=s;let l=c(`mac-sheet-title`);this.root=n(`div`,{class:`mac-sheet`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,tabindex:-1}),this.scrim=n(`div`,{class:`mac-sheet__scrim`,"aria-hidden":`true`}),this.panel=n(`div`,{class:`mac-sheet__panel`});let u=n(`h2`,{class:`mac-sheet__title`,id:l,text:t});this.bodyNode=n(`div`,{class:`mac-sheet__body`}),typeof r==`string`||typeof r==`number`?this.bodyNode.textContent=String(r):r&&this.bodyNode.appendChild(r);let d=n(`div`,{class:`mac-sheet__actions`}),f=new w({label:a,onClick:()=>this.cancel()}),p=new w({label:i,variant:`primary`,onClick:()=>this.confirm()});d.append(f.element,p.element),this.panel.append(u,this.bodyNode,d),this.root.append(this.scrim,this.panel),this.listen(this.scrim,`mousedown`,()=>this.cancel()),this.listen(document,`keydown`,e=>{this.opened&&e.key===`Escape`&&(e.preventDefault(),this.cancel())}),this.onDestroy(()=>{this.releaseFocus?.(),this.releaseFocus=null,this.root.remove()})}open(){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null),this.opened||(this.opened=!0,document.body.appendChild(this.root),this.releaseFocus=g(this.root),this.panel.offsetHeight,requestAnimationFrame(()=>{this.opened&&this.root.classList.add(`is-open`)}))}close(){this.opened&&(this.opened=!1,this.root.classList.remove(`is-open`),this.releaseFocus?.(),this.releaseFocus=null,this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.opened||this.root.remove()},ce))}confirm(){this.onConfirm?.(),this.close()}cancel(){this.onCancel?.(),this.close()}get isOpen(){return this.opened}get content(){return this.bodyNode}destroy(){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null),super.destroy()}},Q=null;function le(){if(Q&&Q.isConnected)return Q;Q=n(`div`,{class:`mac-toast-stack`}),document.body.appendChild(Q);let e=new MutationObserver(()=>{Q&&Q.childElementCount===0&&(Q.remove(),Q=null,e.disconnect())});return e.observe(Q,{childList:!0}),Q}var $=class extends t{root;messageNode;detailNode;duration;timer=null;visible=!1;constructor(e={}){super(),this.duration=e.duration??4e3;let t=[`mac-toast`];e.variant&&e.variant!=="default"&&t.push(`mac-toast--${e.variant}`),this.root=n(`div`,{class:t.join(` `),role:`status`,"aria-live":`polite`}),this.messageNode=n(`div`,{class:`mac-toast__message`,text:e.message??``}),this.detailNode=n(`div`,{class:`mac-toast__detail`,text:e.detail??``}),e.detail||(this.detailNode.style.display=`none`),this.root.append(this.messageNode,this.detailNode)}show(e,t){e!==void 0&&(this.messageNode.textContent=e),t!==void 0&&(this.detailNode.textContent=t,this.detailNode.style.display=t?``:`none`),this.visible||(le().appendChild(this.root),this.visible=!0,requestAnimationFrame(()=>this.root.classList.add(`is-open`))),this.scheduleDismiss()}setDuration(e){this.duration=e}hide(){this.clearTimer(),this.visible&&(this.visible=!1,this.root.classList.remove(`is-open`),setTimeout(()=>{this.visible||this.root.remove()},200))}scheduleDismiss(){this.clearTimer(),this.duration<=0||(this.timer=setTimeout(()=>this.hide(),this.duration))}clearTimer(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null)}destroy(){this.clearTimer(),this.root.remove(),super.destroy()}};function ue(e,t={}){let n=new $({...t,message:e});return n.show(),n}var de=class extends t{root;titleNode;contentNode;tabBar;onTabChange;currentId;constructor(e){super();let{title:t,tabs:r=[],selected:i,onTabChange:o,action:s}=e;this.currentId=i??r[0]?.id??null,this.onTabChange=o,this.root=n(`div`,{class:`mac-mobile`});let c=n(`header`,{class:`mac-mobile__navbar`});if(this.titleNode=n(`h1`,{class:`mac-mobile__title`,text:t}),c.appendChild(this.titleNode),s){let e=n(`div`,{class:`mac-mobile__action`});e.appendChild(s),c.appendChild(e)}this.contentNode=n(`div`,{class:`mac-mobile__content`});let l=r.length>0?n(`nav`,{class:`mac-mobile__tabbar`,role:`tablist`}):null;if(this.tabBar=l,l){for(let e of r){let t=n(`button`,{class:`mac-mobile__tab${e.id===this.currentId?` is-selected`:``}`,type:`button`,role:`tab`,"aria-selected":String(e.id===this.currentId),dataset:{id:e.id}});t.append(a(e.icon,22),n(`span`,{text:e.label})),l.appendChild(t)}this.listen(l,`click`,e=>{let t=e.target.closest(`.mac-mobile__tab`);if(!t)return;let n=t.dataset.id;n&&this.setSelected(n,!0)})}this.root.append(c,this.contentNode),l&&this.root.appendChild(l)}get content(){return this.contentNode}setTitle(e){this.titleNode.textContent!==e&&(this.titleNode.textContent=e)}setSelected(e,t=!1){if(this.currentId!==e){if(this.currentId=e,this.tabBar)for(let t of this.tabBar.querySelectorAll(`.mac-mobile__tab`)){let n=t.dataset.id===e;t.classList.toggle(`is-selected`,n),t.setAttribute(`aria-selected`,String(n))}t&&this.onTabChange?.(e)}}get selected(){return this.currentId}};function fe(){if(typeof window>`u`)return!1;let e=window.matchMedia(`(pointer: coarse)`).matches,t=window.matchMedia(`(max-width: 720px)`).matches;return e&&t}return e.BUILTIN_THEMES=_,e.Badge=E,e.Button=w,e.Checkbox=O,e.ComboBox=B,e.Component=t,e.DatePicker=re,e.Dialog=ae,e.Disclosure=P,e.Menu=Y,e.MobileShell=de,e.NumberField=ee,e.Popover=se,e.Progress=ne,e.SegmentedControl=k,e.Select=A,e.Sheet=Z,e.Sidebar=W,e.Slider=te,e.Spinner=j,e.SplitView=z,e.StatusBar=G,e.Switch=D,e.TabView=q,e.Table=L,e.TextArea=M,e.TextField=T,e.ThemeManager=b,e.TitleBar=U,e.Toast=$,e.Toolbar=K,e.Tooltip=ie,e.TrafficLights=H,e.append=r,e.clear=i,e.el=n,e.focusableWithin=h,e.getDensity=C,e.looksLikeMobile=fe,e.nextZIndex=p,e.positionOverlay=u,e.rafThrottle=o,e.setDensity=S,e.showMenu=X,e.showToast=ue,e.svgIcon=a,e.themeManager=x,e.trackOverlay=d,e.trapFocus=g,e.uid=c,e})({});
2
+ //# sourceMappingURL=macos-ui-kit.iife.js.map