efficient-shell 10.24.0 → 11.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 (106) hide show
  1. package/README.md +18 -2
  2. package/dist/Browser-PTDZDMCG.js +44 -0
  3. package/dist/{Calculator-LENRW34X.js → Calculator-KP57FK7Y.js} +21 -21
  4. package/dist/{CurrencyConverter-7UMHQS2V.js → CurrencyConverter-W66ZDA6I.js} +6 -6
  5. package/dist/{Documents-ODZ4AAOY.js → Documents-EASK3J36.js} +15 -15
  6. package/dist/{Files-BRGTTI2J.js → Files-YT4Z4J36.js} +22 -22
  7. package/dist/{Notepad-RMRDEGGU.js → Notepad-T6NV4BSM.js} +7 -7
  8. package/dist/{PomodoroTimer-4566W4F7.js → PomodoroTimer-6B2MNLWD.js} +21 -21
  9. package/dist/{Preview-7POJP7PB.js → Preview-KHCQHAWG.js} +26 -26
  10. package/dist/{Sidebar-TU4QCKYJ.js → Sidebar-BCTWRG7P.js} +34 -34
  11. package/dist/{Spreadsheet-7T4VT5IO.js → Spreadsheet-IQZECLJW.js} +14 -14
  12. package/dist/{Stock-H73C4R3N.js → Stock-GCCTYXAG.js} +3 -3
  13. package/dist/{Weather-WF56QCBI.js → Weather-DL4IZELD.js} +17 -17
  14. package/dist/{WorldClock-5QJNZYYS.js → WorldClock-ZVN5O77W.js} +4 -4
  15. package/dist/ai/index.js +91 -91
  16. package/dist/apps/index.js +1 -1
  17. package/dist/bin/media-host-check.js +1 -1
  18. package/dist/bin/ui-check.js +1 -1
  19. package/dist/brand.css +1 -1
  20. package/dist/chunk-3XZFWR6T.js +13 -0
  21. package/dist/{chunk-CIHR5ZKF.js → chunk-4DDL6NXB.js} +1 -1
  22. package/dist/{chunk-USWA6YNZ.js → chunk-5PDHKH2A.js} +3 -3
  23. package/dist/{chunk-Z6GQFTLJ.js → chunk-5WY5DQI7.js} +1 -1
  24. package/dist/{chunk-OTITQ3IH.js → chunk-6KGIHI6X.js} +7 -7
  25. package/dist/{chunk-RSOBUPLK.js → chunk-7DQ3PM5Z.js} +1 -1
  26. package/dist/chunk-AIJ3G6BD.js +1 -0
  27. package/dist/{chunk-DRUQH4ZE.js → chunk-AIJ6OR6X.js} +2 -2
  28. package/dist/{chunk-S5DYR75A.js → chunk-AM6HSHT5.js} +18 -18
  29. package/dist/{chunk-CQEVJG43.js → chunk-AWGJIDBR.js} +1 -1
  30. package/dist/{chunk-USVL5SLG.js → chunk-D5HGRACW.js} +1 -1
  31. package/dist/chunk-ETJRGQNG.js +1 -0
  32. package/dist/chunk-HNUKXGYP.js +5 -0
  33. package/dist/{chunk-GOXQJCXG.js → chunk-HUU4XMWE.js} +17 -17
  34. package/dist/{chunk-Z3SLQKE6.js → chunk-ILY4DU3D.js} +1 -1
  35. package/dist/{chunk-3FBDLIQW.js → chunk-IQZD6QQF.js} +35 -35
  36. package/dist/{chunk-IHNOWRTP.js → chunk-KIXTJNHQ.js} +2 -2
  37. package/dist/{chunk-DGWS4GTI.js → chunk-KXU4ORKE.js} +1 -1
  38. package/dist/chunk-KYBXJL6A.js +23 -0
  39. package/dist/chunk-LH7IKIGE.js +1 -0
  40. package/dist/{chunk-JPOYR5AO.js → chunk-NZISMTQE.js} +5 -5
  41. package/dist/{chunk-QWCEKHAP.js → chunk-OEPYQUXZ.js} +9 -9
  42. package/dist/{chunk-HUA3TGMM.js → chunk-P2C33RHT.js} +1 -1
  43. package/dist/{chunk-CX4XR4HO.js → chunk-PLC656AN.js} +1 -1
  44. package/dist/chunk-Q5Z3KHT2.js +1 -0
  45. package/dist/{chunk-RZQGPWSN.js → chunk-QOI4GQVH.js} +1 -1
  46. package/dist/{chunk-NZ7BFYCM.js → chunk-QYXZC37J.js} +1 -1
  47. package/dist/{chunk-PVDZG2U2.js → chunk-RBZKV3ED.js} +4 -4
  48. package/dist/{chunk-EH2BNSG3.js → chunk-SX3SG522.js} +9 -9
  49. package/dist/{chunk-GC3DA6D6.js → chunk-T6BGS26U.js} +1 -1
  50. package/dist/chunk-WBJ6KNUF.js +1 -0
  51. package/dist/data/EntityList.js +1 -1
  52. package/dist/format/index.d.ts +1 -1
  53. package/dist/format/index.js +1 -1
  54. package/dist/forms/DateRangePicker.js +1 -1
  55. package/dist/forms/Input.d.ts +50 -2
  56. package/dist/forms/Input.js +1 -1
  57. package/dist/forms/LinkPicker.js +1 -1
  58. package/dist/forms/MediaLibrary.js +1 -1
  59. package/dist/forms/SplitButton.js +1 -1
  60. package/dist/forms/linkHref.js +1 -1
  61. package/dist/icons/efficient-glyphs.js +1 -1
  62. package/dist/icons/efficient-looks.js +1 -1
  63. package/dist/icons/efficient-meanings.d.ts +2 -2
  64. package/dist/icons/efficient-meanings.js +1 -1
  65. package/dist/icons/efficient.js +1 -1
  66. package/dist/icons/looks/map.js +1 -1
  67. package/dist/icons/payment.js +1 -1
  68. package/dist/icons/sets.js +1 -1
  69. package/dist/index.d.ts +2 -1
  70. package/dist/index.js +666 -667
  71. package/dist/markup/index.d.ts +55 -11
  72. package/dist/markup/index.js +1 -1
  73. package/dist/motion/values.d.ts +75 -0
  74. package/dist/motion/values.js +1 -0
  75. package/dist/motion.css +26 -0
  76. package/dist/page-tabs/index.js +4 -4
  77. package/dist/shell/ContextMenu.js +1 -1
  78. package/dist/shell/DropdownMenu.js +1 -1
  79. package/dist/shell/HelpCenter.js +1 -1
  80. package/dist/shell/ImageLightbox.js +1 -1
  81. package/dist/shell/Markdown.js +1 -1
  82. package/dist/shell/PopupMenu.js +1 -1
  83. package/dist/shell/SearchableSelect.d.ts +11 -1
  84. package/dist/shell/SearchableSelect.js +1 -1
  85. package/dist/shell/TopNav.js +1 -1
  86. package/dist/telemetry/index.js +1 -1
  87. package/dist/templates/AuthScreen.js +1 -1
  88. package/dist/templates/ChatTemplate.js +1 -1
  89. package/dist/templates/CheckoutTemplate.js +1 -1
  90. package/dist/templates/DataTablePage.js +1 -1
  91. package/dist/templates/FormLayoutPage.js +1 -1
  92. package/dist/tokens/type.d.ts +3 -31
  93. package/dist/tokens/type.js +1 -1
  94. package/dist/ui/index.d.ts +2 -1
  95. package/dist/ui/index.js +1 -1
  96. package/dist/version.js +1 -1
  97. package/package.json +3 -2
  98. package/dist/Browser-KUFFOGYK.js +0 -43
  99. package/dist/chunk-3C5NKOVF.js +0 -1
  100. package/dist/chunk-5DIGYJHD.js +0 -1
  101. package/dist/chunk-7RP7QTRF.js +0 -12
  102. package/dist/chunk-DHKRXHJN.js +0 -1
  103. package/dist/chunk-H475WZPF.js +0 -23
  104. package/dist/chunk-MAMWQCJ6.js +0 -2
  105. package/dist/chunk-PJPK2ADX.js +0 -1
  106. /package/dist/{chunk-RKLZDVAO.js → chunk-2F5SLLBJ.js} +0 -0
@@ -72,6 +72,7 @@
72
72
  * [words]{sub} subscript
73
73
  * [words]{color=name} a theme colour, by NAME ({@link isColorName})
74
74
  * [words]{color=#rrggbb} any colour, six hex digits ({@link isColorValue})
75
+ * [words]{style=id} one of the site's text styles ({@link isStyleId})
75
76
  *
76
77
  * THE SPANS AND THE NUMBERED LINE (plan step E1, approved by GG 2026-10-06)
77
78
  * are the final text box's marks. One shape for all four, so one reading rule:
@@ -144,10 +145,10 @@
144
145
  * {@link MARKUP_TOOLS} offers yet. A colour carries a name, so it is written
145
146
  * by {@link applyColor}, not here. */
146
147
  type MarkStyle = 'bold' | 'italic' | 'strike' | 'code' | 'highlight' | 'quiet' | 'link' | 'bullet' | 'number' | 'quote' | 'clear' | 'underline' | 'sup' | 'sub';
147
- /** What a span means: `[words]{underline}`, `{sup}`, `{sub}` or
148
- * `{color=name}`. Only the tree reads these; {@link InlineKind} is the flat
149
- * reading's, which never makes one. */
150
- type SpanKind = 'underline' | 'sup' | 'sub' | 'color';
148
+ /** What a span means: `[words]{underline}`, `{sup}`, `{sub}`,
149
+ * `{color=name}` or `{style=id}`. Only the tree reads these;
150
+ * {@link InlineKind} is the flat reading's, which never makes one. */
151
+ type SpanKind = 'underline' | 'sup' | 'sub' | 'color' | 'style';
151
152
  /** What a parsed run MEANS. `accent` is the storefront/campaign brand colour —
152
153
  * the legacy `*phrase*` — and `highlight` is its standard-markdown successor;
153
154
  * both resolve to the same paint, which is what makes converting stored copy
@@ -166,13 +167,39 @@ declare function isColorName(name: string): boolean;
166
167
  * WIDENS E1 (GG 2026-10-06): the final design draws "Any color", and a
167
168
  * feature is never cut to fit. A hex does not follow the theme; a name does. */
168
169
  declare function isColorValue(value: string): boolean;
170
+ /** The colour slots, in the colour window's order. A slot names a colour of
171
+ * the theme of the SECTION the words sit in, so the words follow that
172
+ * section's theme (Lewis 2026-10-29, U1). `main` is what was called accent
173
+ * ("Main吧"); `muted` is the dim text colour (U2). */
174
+ declare const COLOR_SLOTS: readonly ["main", "text", "background", "muted"];
175
+ type ColorSlot = (typeof COLOR_SLOTS)[number];
176
+ /** What a saved colour value MEANS: a slot of the section's theme, or a fixed
177
+ * hex that follows no theme. */
178
+ type ColorRole = {
179
+ kind: 'slot';
180
+ slot: ColorSlot;
181
+ } | {
182
+ kind: 'hex';
183
+ hex: string;
184
+ };
185
+ /**
186
+ * The ONE reading of a saved colour value ({@link COLOR_SLOTS} or a 6-digit
187
+ * hex), for every renderer and every panel: each maps the role to its own
188
+ * paint, and none keeps its own list of names. Null for anything else — an
189
+ * old name (`accent`, `labels`), a 3-digit hex, a typo — which a renderer
190
+ * draws as plain words.
191
+ */
192
+ declare function colorRole(value: string): ColorRole | null;
193
+ /** A site text style's id as a span saves it — `heading-1` … `body-7`, the
194
+ * ids the Styles list gives them: lowercase letters, then `-` and digits. */
195
+ declare function isStyleId(id: string): boolean;
169
196
  /**
170
197
  * The words a press WRITES when nothing is selected — `**bold text**`, left
171
198
  * selected so the next keystroke replaces it. English unless the caller of
172
199
  * {@link applyMark} hands in its own (0.95.0: a host in another language).
173
200
  * They are words put in the box, not rules: nothing here changes what parses.
174
201
  */
175
- type MarkPlaceholders = Record<'bold' | 'italic' | 'strike' | 'code' | 'highlight' | 'quiet' | 'link', string> & Partial<Record<'underline' | 'sup' | 'sub' | 'color', string>>;
202
+ type MarkPlaceholders = Record<'bold' | 'italic' | 'strike' | 'code' | 'highlight' | 'quiet' | 'link', string> & Partial<Record<'underline' | 'sup' | 'sub' | 'color' | 'style', string>>;
176
203
  declare const MARK_PLACEHOLDERS: MarkPlaceholders;
177
204
  interface WrapResult {
178
205
  text: string;
@@ -432,12 +459,14 @@ interface MarkupText {
432
459
  /** A delimited run. `open` and `close` are the delimiters that were actually
433
460
  * saved — `#` for a legacy campaign bold, `**` for the standard one, `[` and
434
461
  * `]{sup}` for a span — so the tree writes back the same bytes it was read
435
- * from. `color` is the theme colour's name, on a `color` span only. */
462
+ * from. `color` is the theme colour's name, on a `color` span only; `style`
463
+ * the text style's id, on a `style` span only. */
436
464
  interface MarkupRun {
437
465
  kind: InlineRule['kind'] | SpanKind;
438
466
  open: string;
439
467
  close: string;
440
468
  color?: string;
469
+ style?: string;
441
470
  children: MarkupNode[];
442
471
  }
443
472
  /** `[words](href)`. Only made when {@link isSafeLinkHref} passes. */
@@ -495,7 +524,8 @@ declare function serializeMarkup(lines: readonly MarkupLine[]): string;
495
524
  *
496
525
  * `open` and `close` are the delimiters that were saved (`#` for a legacy
497
526
  * campaign bold), or, for a run made in the editor, the toolbar's own fence.
498
- * A link's `close` is `](href)`, a span's `]{sup}` or `]{color=name}`.
527
+ * A link's `close` is `](href)`, a span's `]{sup}`, `]{color=name}` or
528
+ * `]{style=id}`.
499
529
  */
500
530
  interface MarkSpan {
501
531
  id: number;
@@ -504,16 +534,18 @@ interface MarkSpan {
504
534
  close: string;
505
535
  href?: string;
506
536
  color?: string;
537
+ style?: string;
507
538
  }
508
539
  /**
509
540
  * A NEW run, as the toolbar writes it: `**` for bold, `_` for italic, and so on
510
541
  * ({@link applyMark}'s own fences), a link to `value`, or a colour span of
511
- * `value` — a theme name or a 6-digit hex, saved lowercase ({@link isColorValue}). Null for a style that writes no run (a line
512
- * prefix, clear) and for a link or colour with no usable value. A paste filter
542
+ * `value` — a theme name or a 6-digit hex, saved lowercase ({@link isColorValue}) —
543
+ * or a text-style span of `value` ({@link isStyleId}). Null for a style that writes no run (a line
544
+ * prefix, clear) and for a link, colour or text style with no usable value. A paste filter
513
545
  * or an editor making a run asks here, so no delimiter is spelled outside this
514
546
  * module (E8).
515
547
  */
516
- declare function spanFor(id: number, style: MarkStyle | 'color', value?: string): MarkSpan | null;
548
+ declare function spanFor(id: number, style: MarkStyle | 'color' | 'style', value?: string): MarkSpan | null;
517
549
  /** One character of the words — never a delimiter — with the runs it sits in,
518
550
  * outside first, and its offset in the saved string. */
519
551
  interface MarkedChar {
@@ -643,6 +675,18 @@ declare function colorOver(text: string, start: number, end: number, name: strin
643
675
  * selected, the word before the caret on its line — or null. What the colour
644
676
  * window draws as chosen, and the colour under the A. */
645
677
  declare function colorIn(text: string, start: number, end: number, rules?: readonly InlineRule[]): string | null;
678
+ /**
679
+ * Put the site text style `id` on the WORDS in `text[start:end]`
680
+ * (`[words]{style=id}`, Lewis 2026-10-29, B), as {@link colorOver} puts a
681
+ * colour: nested with the runs it meets, a style the words already wear
682
+ * replaced, `null` taking it off. An id {@link isStyleId} refuses, or nothing
683
+ * selected, changes nothing.
684
+ */
685
+ declare function styleOver(text: string, start: number, end: number, id: string | null, rules?: readonly InlineRule[]): WrapResult;
686
+ /** The ONE text style every word in `text[start:end]` wears — read the way
687
+ * {@link colorIn} reads a colour — or null. What the style list draws as
688
+ * chosen. */
689
+ declare function styleIn(text: string, start: number, end: number, rules?: readonly InlineRule[]): string | null;
646
690
  /**
647
691
  * Make every line `text[start:end]` touches (the caret's line, with nothing
648
692
  * selected) a bulleted list, a numbered list, or — `null` — no list. The
@@ -656,4 +700,4 @@ declare function setList(text: string, start: number, end: number, kind: 'bullet
656
700
  * kind of list line, else null — what the list buttons draw as pressed. */
657
701
  declare function listIn(text: string, start: number, end: number, rules?: readonly InlineRule[]): 'bullet' | 'number' | null;
658
702
 
659
- export { CAMPAIGN_MARKUP, COPY_FIELD_TOOLS, type InlineKind, type InlineRule, type InlineToken, type LinkSpan, MARKUP_TOOLS, MARK_NAMES, MARK_PLACEHOLDERS, type MarkPlaceholders, type MarkSpan, type MarkStyle, type MarkedChar, type MarkedLine, type MarkupLine, type MarkupLink, type MarkupNode, type MarkupRun, type MarkupText, type MarkupTool, RETIRED_MARKS, STANDARD_MARKUP, STOREFRONT_MARKUP, type SpanKind, type WrapResult, applyColor, applyMark, clearMarks, clearStyle, colorIn, colorOver, findLink, isColorName, isColorValue, isSafeLinkHref, linkOver, listIn, markedAt, markedLines, marksIn, markupTools, parseMarkup, removeLink, sameMarks, serializeMarkup, setList, spanFor, stripInline, toggleMark, tokenizeInline, unlinkAt, writeLink, writeMarkedLines };
703
+ export { CAMPAIGN_MARKUP, COLOR_SLOTS, COPY_FIELD_TOOLS, type ColorRole, type ColorSlot, type InlineKind, type InlineRule, type InlineToken, type LinkSpan, MARKUP_TOOLS, MARK_NAMES, MARK_PLACEHOLDERS, type MarkPlaceholders, type MarkSpan, type MarkStyle, type MarkedChar, type MarkedLine, type MarkupLine, type MarkupLink, type MarkupNode, type MarkupRun, type MarkupText, type MarkupTool, RETIRED_MARKS, STANDARD_MARKUP, STOREFRONT_MARKUP, type SpanKind, type WrapResult, applyColor, applyMark, clearMarks, clearStyle, colorIn, colorOver, colorRole, findLink, isColorName, isColorValue, isSafeLinkHref, isStyleId, linkOver, listIn, markedAt, markedLines, marksIn, markupTools, parseMarkup, removeLink, sameMarks, serializeMarkup, setList, spanFor, stripInline, styleIn, styleOver, toggleMark, tokenizeInline, unlinkAt, writeLink, writeMarkedLines };
@@ -1 +1 @@
1
- export{CAMPAIGN_MARKUP,COPY_FIELD_TOOLS,MARKUP_TOOLS,MARK_NAMES,MARK_PLACEHOLDERS,RETIRED_MARKS,STANDARD_MARKUP,STOREFRONT_MARKUP,applyColor,applyMark,clearMarks,clearStyle,colorIn,colorOver,findLink,isColorName,isColorValue,isSafeLinkHref,linkOver,listIn,markedAt,markedLines,marksIn,markupTools,parseMarkup,removeLink,sameMarks,serializeMarkup,setList,spanFor,stripInline,toggleMark,tokenizeInline,unlinkAt,writeLink,writeMarkedLines}from"../chunk-PJPK2ADX.js";
1
+ export{CAMPAIGN_MARKUP,COLOR_SLOTS,COPY_FIELD_TOOLS,MARKUP_TOOLS,MARK_NAMES,MARK_PLACEHOLDERS,RETIRED_MARKS,STANDARD_MARKUP,STOREFRONT_MARKUP,applyColor,applyMark,clearMarks,clearStyle,colorIn,colorOver,colorRole,findLink,isColorName,isColorValue,isSafeLinkHref,isStyleId,linkOver,listIn,markedAt,markedLines,marksIn,markupTools,parseMarkup,removeLink,sameMarks,serializeMarkup,setList,spanFor,stripInline,styleIn,styleOver,toggleMark,tokenizeInline,unlinkAt,writeLink,writeMarkedLines}from"../chunk-Q5Z3KHT2.js";
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The page motion values — the numbers behind every animation a website page
3
+ * plays (a block arriving, a card on hover, a row that loops, a number counting
4
+ * up), not the editor's chrome (that is `MOTION_DURATIONS`, 120 / 160 ms).
5
+ * `src/motion.css` declares the same defaults as custom properties;
6
+ * `tests/motionValues.test.ts` holds the two to each other.
7
+ *
8
+ * Owner rulings, 2026-10-29 (the animation plan):
9
+ *
10
+ * groups the Animation tab, like Wix: Entrance · Hover · Scroll · Loop ·
11
+ * Click · Mouse · WebGL · Count up.
12
+ * timing every timed animation has a Duration and a Delay in SECONDS, a
13
+ * slider each, like Wix. No Short / Normal / Long steps (that
14
+ * scale, 2026-10-27, is retired). Defaults are today's times, so
15
+ * a page with no choice of its own does not change. Loop runs to
16
+ * 120 s, past Wix's 50 s: inovit.com's journal bar stores 80 s.
17
+ * rotate a wheel turns one spoke on hover: 360 / its spoke count, 72
18
+ * degrees when the count is unknown.
19
+ *
20
+ * Scroll, Mouse and WebGL follow the visitor (the scroll position, the
21
+ * pointer), so they have no Duration or Delay.
22
+ *
23
+ * A leaf that imports nothing: a published page reads it through the `format`
24
+ * entry. No utility is written out in this file: the brand stylesheet is
25
+ * compiled by scanning the repository, so a class named here would ship in it.
26
+ */
27
+ /** The Animation tab's groups, in the order it lists them. */
28
+ declare const MOTION_GROUPS: readonly ["entrance", "hover", "scroll", "loop", "click", "mouse", "webgl", "countUp"];
29
+ type MotionGroup = (typeof MOTION_GROUPS)[number];
30
+ /** One slider: its resting value, its ends and its step, in seconds. */
31
+ interface MotionRange {
32
+ readonly default: number;
33
+ readonly min: number;
34
+ readonly max: number;
35
+ readonly step: number;
36
+ }
37
+ interface MotionTiming {
38
+ readonly duration: MotionRange;
39
+ readonly delay: MotionRange;
40
+ }
41
+ /** The groups that play for a time of their own. */
42
+ type TimedMotionGroup = 'entrance' | 'hover' | 'loop' | 'click' | 'countUp';
43
+ /** Duration and Delay of every timed group, in seconds. */
44
+ declare const MOTION_TIMING: Readonly<Record<TimedMotionGroup, MotionTiming>>;
45
+ /**
46
+ * A stored Duration or Delay, read into its range and onto its step (a half
47
+ * step rounds up). A number or a plain decimal string counts; anything else is
48
+ * the default.
49
+ */
50
+ declare function motionSeconds(group: TimedMotionGroup, kind: keyof MotionTiming, stored: unknown): number;
51
+ /**
52
+ * The easing list. `arrive` slows to a stop (Entrance, Click); `loop` keeps an
53
+ * even speed; `media` is the card picture's curve on hover.
54
+ */
55
+ declare const MOTION_EASING: {
56
+ readonly arrive: "cubic-bezier(0.22, 1, 0.36, 1)";
57
+ readonly loop: "linear";
58
+ readonly media: "cubic-bezier(0.2, 0.6, 0.2, 1)";
59
+ };
60
+ type MotionEasing = keyof typeof MOTION_EASING;
61
+ /** How far a hover moves: Zoom's scale, Lift's rise in px, Rotate's fallback. */
62
+ declare const HOVER_MOTION: {
63
+ readonly zoom: 1.04;
64
+ readonly liftPx: 3;
65
+ readonly rotateFallbackDeg: 72;
66
+ };
67
+ /** Rotate on hover turns a wheel by one spoke: 360 / spokes, or 72 degrees. */
68
+ declare function rotateDegrees(spokes: number | null | undefined): number;
69
+ /**
70
+ * The defaults as the custom properties `motion.css` declares. The test holds
71
+ * the stylesheet to this list both ways; a page reads the stylesheet, not this.
72
+ */
73
+ declare function motionCustomProperties(): Record<string, string>;
74
+
75
+ export { HOVER_MOTION, MOTION_EASING, MOTION_GROUPS, MOTION_TIMING, type MotionEasing, type MotionGroup, type MotionRange, type MotionTiming, type TimedMotionGroup, motionCustomProperties, motionSeconds, rotateDegrees };
@@ -0,0 +1 @@
1
+ export{HOVER_MOTION,MOTION_EASING,MOTION_GROUPS,MOTION_TIMING,motionCustomProperties,motionSeconds,rotateDegrees}from"../chunk-AIJ3G6BD.js";
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Page motion — the animations a website page plays (efficient-shell/motion.css).
3
+ *
4
+ * The defaults behind every Duration, Delay, easing and hover distance, the
5
+ * same numbers as `src/motion/values.ts` (tests/motionValues.test.ts holds the
6
+ * two together). A page's own choice is written inline over these.
7
+ * The editor chrome keeps its own `--motion-fast` / `--motion-base` (ui.css).
8
+ */
9
+ :root {
10
+ --page-motion-entrance-duration: 0.6s;
11
+ --page-motion-entrance-delay: 0s;
12
+ --page-motion-hover-duration: 0.7s;
13
+ --page-motion-hover-delay: 0s;
14
+ --page-motion-loop-duration: 50s;
15
+ --page-motion-loop-delay: 0s;
16
+ --page-motion-click-duration: 0.3s;
17
+ --page-motion-click-delay: 0s;
18
+ --page-motion-count-up-duration: 1.4s;
19
+ --page-motion-count-up-delay: 0s;
20
+ --page-ease-arrive: cubic-bezier(0.22, 1, 0.36, 1);
21
+ --page-ease-loop: linear;
22
+ --page-ease-media: cubic-bezier(0.2, 0.6, 0.2, 1);
23
+ --page-hover-zoom: 1.04;
24
+ --page-hover-lift: 3px;
25
+ --page-hover-rotate: 72deg;
26
+ }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import{TabStrip as e}from"../chunk-GOXQJCXG.js";import{useShellLanguage as t}from"../chunk-7TZV6G2F.js";import"../chunk-2E2SUEEE.js";import{confirm as n}from"../chunk-PLK2WHZG.js";import"../chunk-7INZ7O3A.js";import"../chunk-55AEZX6K.js";import"../chunk-3DVNXNTF.js";import"../chunk-ECJKIPWU.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-CDAJKLGL.js";import"../chunk-OTITQ3IH.js";import"../chunk-5QFPTDQF.js";import"../chunk-URHGHXDN.js";import"../chunk-UQYNPYF4.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as i}from"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";import*as c from"react";import{createContext as s,memo as l,useRef as a,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as p,useState as f,useContext as k}from"react";import{useLocation as m,useNavigate as h}from"react-router-dom";import{jsx as b,Fragment as v,jsxs as g}from"react/jsx-runtime";var j=s(null),K=s(null),N=12;var T=(e,t)=>e.filter(e=>e!==t);function F(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function I(e,t,n=12){const r=e.clock+1;let i;i=e.tabs.find(e=>e.key===t.key)?e.tabs.map(e=>e.key===t.key?{...e,path:t.path,title:"page"===e.titleFrom?e.title:t.title||e.title,lastActive:r}:e):[...e.tabs,{key:t.key,path:t.path,title:t.title,titleFrom:"route",pinned:!1,lastActive:r}];let c={...e,tabs:i,activeKey:t.key,mounted:(s=e.mounted,l=t.key,s.includes(l)?s:[...s,l]),clock:r};var s,l;return c.closing&&c.closing!==t.key?c=C(c,c.closing):c.closing===t.key&&(c={...c,closing:null}),function(e,t){let n=e;for(;n.tabs.length>t;){const e=n.tabs.filter(e=>!e.pinned&&e.key!==n.activeKey&&!n.dirty.includes(e.key)&&e.key!==n.closing).sort((e,t)=>e.lastActive-t.lastActive);if(0===e.length)break;n=C(n,e[0].key)}return n}(c,n)}function A(e){let t={...e,activeKey:null};return t.closing&&(t=C(t,t.closing)),t}function C(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:T(e.mounted,t),dirty:T(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function L(e,t){switch(t.type){case"visit":return I(e,t.entry,t.maxTabs);case"transient":return A(e);case"close":{let n=e;for(const e of t.keys)n=C(n,e);return t.closing?function(e,t){return{...e,closing:t}}(n,t.closing):n}case"title":return function(e,t,n){const r=e.tabs.find(e=>e.key===t);return!r||!n||r.title===n&&"page"===r.titleFrom?e:{...e,tabs:e.tabs.map(e=>e.key===t?{...e,title:n,titleFrom:"page"}:e)}}(e,t.key,t.title);case"dirty":return function(e,t,n){return n===e.dirty.includes(t)?e:{...e,dirty:n?[...e.dirty,t]:T(e.dirty,t)}}(e,t.key,t.dirty)}}var O=e=>`${e.pathname}${e.search}`;function w(e){const t=e.indexOf("#"),n=t>=0?e.slice(t):"",r=t>=0?e.slice(0,t):e,i=r.indexOf("?");return{pathname:i>=0?r.slice(0,i):r,search:i>=0?r.slice(i):"",hash:n}}function D({children:e,resolve:c,pinned:s=[],storageKey:l,maxTabs:k=12,enabled:v=!0,confirmDiscard:g}){const K=m(),N=h(),T=i().pageTabs,C=y(),D=a(c);D.current=c;const M=d(e=>{const t=D.current(e);return t?{key:t.key??e.pathname,path:O(e),title:t.title}:null},[]),{language:E}=t(),[J,Q]=p(L,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const c=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),s=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||s.some(e=>e.key===i.key))continue;const l=!c&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;s.push({key:i.key,path:r,title:l||i.title,titleFrom:l?"page":"route",pinned:!1,lastActive:0})}return s}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(l),e=>M(w(e)),E);let t=function(e,t){const n=t.map(e=>e.key);let r=e.tabs.map(e=>({...e,pinned:n.includes(e.key)}));for(const e of t)r.some(t=>t.key===e.key)||(r=[...r,{key:e.key,path:e.path,title:e.title,titleFrom:"route",pinned:!0,lastActive:0}]);return{...e,tabs:F(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},s.map(e=>M(w(e))).filter(e=>Boolean(e)));const n=v?M(K):null;return t=n?I(t,n,k):A(t),t}),x=a(J);x.current=J;const B=a(/* @__PURE__ */new Map),G=v?M(K):null,S=G?.key??null;r(()=>{if(!v)return;const e=M(K);e?(B.current.set(e.key,K),Q({type:"visit",entry:e,maxTabs:k})):Q({type:"transient"})},[K,v,k,M]),o(()=>{const e=new Set(J.tabs.map(e=>e.key));for(const t of B.current.keys())e.has(t)||B.current.delete(t)},[J.tabs]);const P=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(J,E),[J,E]);o(()=>{if(l)try{localStorage.setItem(l,P)}catch{}},[P,l]);const U=J.dirty.length>0;o(()=>{if(!U)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[U]);const W=a(/* @__PURE__ */new Map),X=d((e,t)=>{let n=W.current.get(e);return void 0===n&&(n=W.current.size,W.current.set(e,n)),`${C}-page-${t}-${n}`},[C]),H=d(e=>g?g(e):n({title:T.discardTitle,message:1===e.length?T.discardOne:T.discardCount?.(e.length)??`${e.length} ${T.discardMany}`,confirmLabel:T.discardConfirm,cancelLabel:T.keepEditing,variant:"warning"}),[g,T]),$=d(()=>{const e=x.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),R=d((e,t,n)=>{const r=x.current,i=r.activeKey;if(!i||!e.includes(i))return void Q({type:"close",keys:e,closing:null});let c=t;if(!c){const t={...r,tabs:r.tabs.filter(t=>t.key===i||!e.includes(t.key))},s=n?r.tabs.find(t=>t.key===n&&!e.includes(t.key)):void 0;c=(s??function(e,t){const n=e.tabs.filter(n=>n.key!==e.closing||n.key===t),r=n.findIndex(e=>e.key===t);return r<0?null:n[r+1]??n[r-1]??null}(t,i))?.path??$()}Q({type:"close",keys:e.filter(e=>e!==i),closing:i}),N(c)},[N,$]),Z=d(async(e,t={})=>{const n=x.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&N(t.to),!1):!(!t.force&&x.current.dirty.includes(e)&&!await H([n]))&&(!!x.current.tabs.some(t=>t.key===e)&&(R([e],t.to),!0))},[H,R,N]),V=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(x.current,e,t);const r=x.current.tabs.filter(e=>n.includes(e.key)&&x.current.dirty.includes(e.key));r.length&&!await H(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(x.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&R(n,void 0,"all"===e?null:t)},[H,R]),Y=d(e=>{const t=x.current.tabs.find(t=>t.key===e);t&&e!==x.current.activeKey&&N(t.path)},[N]),z=d((e,t)=>Q({type:"title",key:e,title:t}),[]),q=d((e,t)=>Q({type:"dirty",key:e,dirty:t}),[]),[_,ee]=f({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>M(e)?.key??null,[M]),re=d(e=>B.current.get(e),[]),ie=u(()=>v?J.tabs.filter(e=>e.key!==J.closing):[],[v,J.tabs,J.closing]),ce=u(()=>({enabled:v,state:J,currentKey:S,resolve:c,keyFor:ne,locationFor:re,idFor:X,activate:Y,close:Z,closeMany:V,setTitle:z,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[v,J,S,c,ne,re,X,Y,Z,V,z,q,_,te,ie]);/* @__PURE__ */
3
- return b(j.Provider,{value:ce,children:e})}var M=c.Activity,E=Boolean(M);function J({active:e,children:t}){return M?/* @__PURE__ */b(M,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */b(v,{children:t})}var Q=l(function({tabKey:e,active:t,location:n,render:i,className:c,panelId:s,tabId:l}){const y=a(null),d=a(t),p=a(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of p.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):p.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&p.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const f=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
2
+ import{TabStrip as e}from"../chunk-HUU4XMWE.js";import{useShellLanguage as t}from"../chunk-7TZV6G2F.js";import"../chunk-2E2SUEEE.js";import{confirm as n}from"../chunk-PLK2WHZG.js";import"../chunk-7INZ7O3A.js";import"../chunk-55AEZX6K.js";import"../chunk-3DVNXNTF.js";import"../chunk-ECJKIPWU.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-UQYNPYF4.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as i}from"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";import*as c from"react";import{createContext as s,memo as l,useRef as a,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as p,useState as f,useContext as k}from"react";import{useLocation as m,useNavigate as h}from"react-router-dom";import{jsx as b,Fragment as v,jsxs as g}from"react/jsx-runtime";var j=s(null),K=s(null),N=12;var F=(e,t)=>e.filter(e=>e!==t);function T(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function I(e,t,n=12){const r=e.clock+1;let i;i=e.tabs.find(e=>e.key===t.key)?e.tabs.map(e=>e.key===t.key?{...e,path:t.path,title:"page"===e.titleFrom?e.title:t.title||e.title,lastActive:r}:e):[...e.tabs,{key:t.key,path:t.path,title:t.title,titleFrom:"route",pinned:!1,lastActive:r}];let c={...e,tabs:i,activeKey:t.key,mounted:(s=e.mounted,l=t.key,s.includes(l)?s:[...s,l]),clock:r};var s,l;return c.closing&&c.closing!==t.key?c=L(c,c.closing):c.closing===t.key&&(c={...c,closing:null}),function(e,t){let n=e;for(;n.tabs.length>t;){const e=n.tabs.filter(e=>!e.pinned&&e.key!==n.activeKey&&!n.dirty.includes(e.key)&&e.key!==n.closing).sort((e,t)=>e.lastActive-t.lastActive);if(0===e.length)break;n=L(n,e[0].key)}return n}(c,n)}function A(e){let t={...e,activeKey:null};return t.closing&&(t=L(t,t.closing)),t}function L(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:F(e.mounted,t),dirty:F(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function M(e,t){switch(t.type){case"visit":return I(e,t.entry,t.maxTabs);case"transient":return A(e);case"close":{let n=e;for(const e of t.keys)n=L(n,e);return t.closing?function(e,t){return{...e,closing:t}}(n,t.closing):n}case"title":return function(e,t,n){const r=e.tabs.find(e=>e.key===t);return!r||!n||r.title===n&&"page"===r.titleFrom?e:{...e,tabs:e.tabs.map(e=>e.key===t?{...e,title:n,titleFrom:"page"}:e)}}(e,t.key,t.title);case"dirty":return function(e,t,n){return n===e.dirty.includes(t)?e:{...e,dirty:n?[...e.dirty,t]:F(e.dirty,t)}}(e,t.key,t.dirty)}}var w=e=>`${e.pathname}${e.search}`;function C(e){const t=e.indexOf("#"),n=t>=0?e.slice(t):"",r=t>=0?e.slice(0,t):e,i=r.indexOf("?");return{pathname:i>=0?r.slice(0,i):r,search:i>=0?r.slice(i):"",hash:n}}function D({children:e,resolve:c,pinned:s=[],storageKey:l,maxTabs:k=12,enabled:v=!0,confirmDiscard:g}){const K=m(),N=h(),F=i().pageTabs,L=y(),D=a(c);D.current=c;const E=d(e=>{const t=D.current(e);return t?{key:t.key??e.pathname,path:w(e),title:t.title}:null},[]),{language:O}=t(),[J,U]=p(M,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const c=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),s=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||s.some(e=>e.key===i.key))continue;const l=!c&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;s.push({key:i.key,path:r,title:l||i.title,titleFrom:l?"page":"route",pinned:!1,lastActive:0})}return s}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(l),e=>E(C(e)),O);let t=function(e,t){const n=t.map(e=>e.key);let r=e.tabs.map(e=>({...e,pinned:n.includes(e.key)}));for(const e of t)r.some(t=>t.key===e.key)||(r=[...r,{key:e.key,path:e.path,title:e.title,titleFrom:"route",pinned:!0,lastActive:0}]);return{...e,tabs:T(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},s.map(e=>E(C(e))).filter(e=>Boolean(e)));const n=v?E(K):null;return t=n?I(t,n,k):A(t),t}),x=a(J);x.current=J;const B=a(/* @__PURE__ */new Map),Q=v?E(K):null,S=Q?.key??null;r(()=>{if(!v)return;const e=E(K);e?(B.current.set(e.key,K),U({type:"visit",entry:e,maxTabs:k})):U({type:"transient"})},[K,v,k,E]),o(()=>{const e=new Set(J.tabs.map(e=>e.key));for(const t of B.current.keys())e.has(t)||B.current.delete(t)},[J.tabs]);const W=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(J,O),[J,O]);o(()=>{if(l)try{localStorage.setItem(l,W)}catch{}},[W,l]);const G=J.dirty.length>0;o(()=>{if(!G)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[G]);const P=a(/* @__PURE__ */new Map),H=d((e,t)=>{let n=P.current.get(e);return void 0===n&&(n=P.current.size,P.current.set(e,n)),`${L}-page-${t}-${n}`},[L]),X=d(e=>g?g(e):n({title:F.discardTitle,message:1===e.length?F.discardOne:F.discardCount?.(e.length)??`${e.length} ${F.discardMany}`,confirmLabel:F.discardConfirm,cancelLabel:F.keepEditing,variant:"warning"}),[g,F]),$=d(()=>{const e=x.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),R=d((e,t,n)=>{const r=x.current,i=r.activeKey;if(!i||!e.includes(i))return void U({type:"close",keys:e,closing:null});let c=t;if(!c){const t={...r,tabs:r.tabs.filter(t=>t.key===i||!e.includes(t.key))},s=n?r.tabs.find(t=>t.key===n&&!e.includes(t.key)):void 0;c=(s??function(e,t){const n=e.tabs.filter(n=>n.key!==e.closing||n.key===t),r=n.findIndex(e=>e.key===t);return r<0?null:n[r+1]??n[r-1]??null}(t,i))?.path??$()}U({type:"close",keys:e.filter(e=>e!==i),closing:i}),N(c)},[N,$]),Z=d(async(e,t={})=>{const n=x.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&N(t.to),!1):!(!t.force&&x.current.dirty.includes(e)&&!await X([n]))&&(!!x.current.tabs.some(t=>t.key===e)&&(R([e],t.to),!0))},[X,R,N]),V=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(x.current,e,t);const r=x.current.tabs.filter(e=>n.includes(e.key)&&x.current.dirty.includes(e.key));r.length&&!await X(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(x.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&R(n,void 0,"all"===e?null:t)},[X,R]),Y=d(e=>{const t=x.current.tabs.find(t=>t.key===e);t&&e!==x.current.activeKey&&N(t.path)},[N]),z=d((e,t)=>U({type:"title",key:e,title:t}),[]),q=d((e,t)=>U({type:"dirty",key:e,dirty:t}),[]),[_,ee]=f({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>E(e)?.key??null,[E]),re=d(e=>B.current.get(e),[]),ie=u(()=>v?J.tabs.filter(e=>e.key!==J.closing):[],[v,J.tabs,J.closing]),ce=u(()=>({enabled:v,state:J,currentKey:S,resolve:c,keyFor:ne,locationFor:re,idFor:H,activate:Y,close:Z,closeMany:V,setTitle:z,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[v,J,S,c,ne,re,H,Y,Z,V,z,q,_,te,ie]);/* @__PURE__ */
3
+ return b(j.Provider,{value:ce,children:e})}var E=c.Activity,O=Boolean(E);function J({active:e,children:t}){return E?/* @__PURE__ */b(E,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */b(v,{children:t})}var U=l(function({tabKey:e,active:t,location:n,render:i,className:c,panelId:s,tabId:l}){const y=a(null),d=a(t),p=a(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of p.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):p.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&p.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const f=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
4
4
  return b("div",{ref:y,role:s?"tabpanel":void 0,id:s,"aria-labelledby":l,hidden:!t,style:t?void 0:{display:"none"},className:c,"data-page-tab":e,children:/* @__PURE__ */b(K.Provider,{value:f,children:/* @__PURE__ */b(J,{active:t,children:i(n)})})})},(e,t)=>e.active===t.active&&e.location===t.location&&e.className===t.className&&e.panelId===t.panelId&&e.tabId===t.tabId&&(!t.active||e.render===t.render)),x="\0transient";function B({children:e,frameClassName:t}){const n=k(j),r=m();if(!n||!n.enabled)/* @__PURE__ */
5
- return b("div",{className:t,children:e(r)},x);const{state:i,currentKey:c,locationFor:s,idFor:l}=n,a=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return c&&!a.includes(c)&&a.push(c),/* @__PURE__ */g(v,{children:[a.map(n=>{const i=n===c,a=i?r:s(n);return a?/* @__PURE__ */b(Q,{tabKey:n,active:i,location:a,render:e,className:t,panelId:l(n,"panel"),tabId:l(n,"tab")},n):null}),!c&&/* @__PURE__ */b(Q,{tabKey:x,active:!0,location:r,render:e,className:t},x)]})}function G({className:t,activeClassName:n,end:r}){const c=k(j),s=i().pageTabs;if(!c||!c.enabled)return null;const{visibleTabs:l,state:a,idFor:o,activate:u,close:y,closeMany:d,resolve:p}=c;/* @__PURE__ */
6
- return b(e,{tabs:l.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:a.dirty.includes(e.key),copy:c.copies[e.key],icon:p(w(e.path))?.icon})),activeKey:c.currentKey??null,idFor:o,panelMounted:e=>a.mounted.includes(e),onActivate:u,onClose:e=>{y(e)},onCloseMany:(e,t)=>{d(e,t)},label:s.label,className:t,activeClassName:n,end:r})}var S={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function P(){const e=k(j);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:S}function U(){const e=k(j),t=k(K),n=h();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function W(e){const t=k(j),n=k(K),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function X(e){const t=k(j),n=k(K),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function H(e){const t=k(j),n=k(K),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{N as DEFAULT_MAX_TABS,E as PAGE_TABS_PAUSE_HIDDEN,G as PageTabBar,B as PageTabsOutlet,D as PageTabsProvider,w as parseTabPath,U as usePageTab,X as usePageTabCopy,H as usePageTabDirty,W as usePageTabTitle,P as usePageTabs};
5
+ return b("div",{className:t,children:e(r)},x);const{state:i,currentKey:c,locationFor:s,idFor:l}=n,a=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return c&&!a.includes(c)&&a.push(c),/* @__PURE__ */g(v,{children:[a.map(n=>{const i=n===c,a=i?r:s(n);return a?/* @__PURE__ */b(U,{tabKey:n,active:i,location:a,render:e,className:t,panelId:l(n,"panel"),tabId:l(n,"tab")},n):null}),!c&&/* @__PURE__ */b(U,{tabKey:x,active:!0,location:r,render:e,className:t},x)]})}function Q({className:t,activeClassName:n,end:r}){const c=k(j),s=i().pageTabs;if(!c||!c.enabled)return null;const{visibleTabs:l,state:a,idFor:o,activate:u,close:y,closeMany:d,resolve:p}=c;/* @__PURE__ */
6
+ return b(e,{tabs:l.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:a.dirty.includes(e.key),copy:c.copies[e.key],icon:p(C(e.path))?.icon})),activeKey:c.currentKey??null,idFor:o,panelMounted:e=>a.mounted.includes(e),onActivate:u,onClose:e=>{y(e)},onCloseMany:(e,t)=>{d(e,t)},label:s.label,className:t,activeClassName:n,end:r})}var S={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function W(){const e=k(j);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:S}function G(){const e=k(j),t=k(K),n=h();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function P(e){const t=k(j),n=k(K),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function H(e){const t=k(j),n=k(K),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function X(e){const t=k(j),n=k(K),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{N as DEFAULT_MAX_TABS,O as PAGE_TABS_PAUSE_HIDDEN,Q as PageTabBar,B as PageTabsOutlet,D as PageTabsProvider,C as parseTabPath,G as usePageTab,H as usePageTabCopy,X as usePageTabDirty,P as usePageTabTitle,W as usePageTabs};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ContextMenu,useContextMenu}from"../chunk-DRUQH4ZE.js";import"../chunk-CIHR5ZKF.js";import"../chunk-OTITQ3IH.js";import"../chunk-5QFPTDQF.js";import"../chunk-URHGHXDN.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
2
+ export{ContextMenu,useContextMenu}from"../chunk-AIJ6OR6X.js";import"../chunk-4DDL6NXB.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{DropdownMenu as default}from"../chunk-JPOYR5AO.js";import"../chunk-CIHR5ZKF.js";import"../chunk-CDAJKLGL.js";import"../chunk-OTITQ3IH.js";import"../chunk-5QFPTDQF.js";import"../chunk-URHGHXDN.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
2
+ export{DropdownMenu as default}from"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{HelpCenter as default}from"../chunk-QWCEKHAP.js";import"../chunk-RZQGPWSN.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-AYZY3YNC.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{HelpCenter as default}from"../chunk-OEPYQUXZ.js";import"../chunk-QOI4GQVH.js";import"../chunk-UJUTS6LJ.js";import"../chunk-Q5Z3KHT2.js";import"../chunk-AYZY3YNC.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ImageLightbox as default,lightboxKind}from"../chunk-P7H2DXJB.js";import"../chunk-CGUMJZUB.js";import"../chunk-H5NIW2KS.js";import"../chunk-TDAI4J27.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-CDAJKLGL.js";import"../chunk-FZM3ZPW3.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-WGLHB6WE.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{ImageLightbox as default,lightboxKind}from"../chunk-P7H2DXJB.js";import"../chunk-CGUMJZUB.js";import"../chunk-H5NIW2KS.js";import"../chunk-TDAI4J27.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-FZM3ZPW3.js";import"../chunk-CDAJKLGL.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-WGLHB6WE.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{Markdown as default,plainCell,tableToCsv}from"../chunk-RZQGPWSN.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{Markdown as default,plainCell,tableToCsv}from"../chunk-QOI4GQVH.js";import"../chunk-UJUTS6LJ.js";import"../chunk-Q5Z3KHT2.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{MenuCheckMark,MenuIcon,MenuSemanticsContext,PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,itemLook,menuTextRowStyle}from"../chunk-OTITQ3IH.js";import"../chunk-5QFPTDQF.js";import"../chunk-URHGHXDN.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
2
+ export{MenuCheckMark,MenuIcon,MenuSemanticsContext,PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,itemLook,menuTextRowStyle}from"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
@@ -1,5 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
+ import { InputEndAction } from '../forms/Input.js';
4
+ import './DropdownMenu.js';
5
+ import '../forms/buttonStyles.js';
6
+ import '../forms/styles.js';
3
7
 
4
8
  /** A run of options under a heading. Groups do not nest. */
5
9
  interface OptionGroup<T> {
@@ -100,8 +104,14 @@ interface SearchableSelectBaseProps {
100
104
  /** Optional content rendered inside the trigger's right edge — to the
101
105
  * left of the clear button — when the dropdown is closed. Use for
102
106
  * compact status pills that should read alongside the selected label.
103
- * Hidden while the user is typing so the search text stays legible. */
107
+ * Hidden while the user is typing so the search text stays legible.
108
+ * Not for an action: put a press or a menu in `endAction`. */
104
109
  rightAdornment?: ReactNode;
110
+ /** An action inside the field's end, as `Input`'s `endAction` draws it — an
111
+ * "open this" beside the choice. It sits at the very end, the clear ×
112
+ * just before it, and it shows while the list is open too. A press never
113
+ * opens the list. */
114
+ endAction?: InputEndAction;
105
115
  /**
106
116
  * Draws an option in the OPEN LIST in place of its label — a font list that
107
117
  * shows each face in itself, a colour beside its name. The option's `label`
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{SearchableSelect as default,fitChoice}from"../chunk-7RP7QTRF.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-AYZY3YNC.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{SearchableSelect as default,fitChoice}from"../chunk-3XZFWR6T.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{TopNav as default}from"../chunk-GC3DA6D6.js";import"../chunk-JPOYR5AO.js";import"../chunk-CIHR5ZKF.js";import"../chunk-CDAJKLGL.js";import"../chunk-OTITQ3IH.js";import"../chunk-5QFPTDQF.js";import"../chunk-URHGHXDN.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
2
+ export{TopNav as default}from"../chunk-T6BGS26U.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";
@@ -1 +1 @@
1
- export{startClientTelemetry}from"../chunk-NZ7BFYCM.js";import"../chunk-KNUR2UEG.js";import"../chunk-5DIGYJHD.js";
1
+ export{startClientTelemetry}from"../chunk-QYXZC37J.js";import"../chunk-KNUR2UEG.js";import"../chunk-ETJRGQNG.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{AuthScreen as default}from"../chunk-DGWS4GTI.js";import"../chunk-P3RXXWXN.js";import"../chunk-6KBDNYRW.js";import"../chunk-CGZBDI6C.js";import"../chunk-MAMWQCJ6.js";import"../chunk-AYZY3YNC.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{AuthScreen as default}from"../chunk-KXU4ORKE.js";import"../chunk-P3RXXWXN.js";import"../chunk-6KBDNYRW.js";import"../chunk-CGZBDI6C.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ChatTemplate as default}from"../chunk-CQEVJG43.js";import"../chunk-AFG34RBV.js";import"../chunk-QWK6DRSN.js";import"../chunk-Z44JWU75.js";import"../chunk-AFYLVV74.js";import"../chunk-MAMWQCJ6.js";import"../chunk-AYZY3YNC.js";import"../chunk-UGTRSRIW.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{ChatTemplate as default}from"../chunk-AWGJIDBR.js";import"../chunk-AFG34RBV.js";import"../chunk-QWK6DRSN.js";import"../chunk-Z44JWU75.js";import"../chunk-AFYLVV74.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-UGTRSRIW.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{CheckoutTemplate as default}from"../chunk-CX4XR4HO.js";import"../chunk-P3RXXWXN.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-6KBDNYRW.js";import"../chunk-2NMW66P5.js";import"../chunk-CGZBDI6C.js";import"../chunk-ZGOHRLXG.js";import"../chunk-MAMWQCJ6.js";import"../chunk-AYZY3YNC.js";import"../chunk-UGTRSRIW.js";import"../chunk-URHGHXDN.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{CheckoutTemplate as default}from"../chunk-PLC656AN.js";import"../chunk-P3RXXWXN.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-6KBDNYRW.js";import"../chunk-2NMW66P5.js";import"../chunk-CGZBDI6C.js";import"../chunk-ZGOHRLXG.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-UGTRSRIW.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{DataTablePage as default}from"../chunk-USVL5SLG.js";import"../chunk-P3RXXWXN.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-2NMW66P5.js";import"../chunk-LXL2UCUR.js";import"../chunk-MAMWQCJ6.js";import"../chunk-AYZY3YNC.js";import"../chunk-UGTRSRIW.js";import"../chunk-FZM3ZPW3.js";import"../chunk-URHGHXDN.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-WGLHB6WE.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{DataTablePage as default}from"../chunk-D5HGRACW.js";import"../chunk-P3RXXWXN.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-2NMW66P5.js";import"../chunk-LXL2UCUR.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-UGTRSRIW.js";import"../chunk-FZM3ZPW3.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-WGLHB6WE.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{FormLayoutPage as default}from"../chunk-Z3SLQKE6.js";import"../chunk-P3RXXWXN.js";import"../chunk-PB7G6CJ7.js";import"../chunk-NI5FXWK5.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-6KBDNYRW.js";import"../chunk-2NMW66P5.js";import"../chunk-CGZBDI6C.js";import"../chunk-MAMWQCJ6.js";import"../chunk-AYZY3YNC.js";import"../chunk-UGTRSRIW.js";import"../chunk-URHGHXDN.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
2
+ export{FormLayoutPage as default}from"../chunk-ILY4DU3D.js";import"../chunk-P3RXXWXN.js";import"../chunk-PB7G6CJ7.js";import"../chunk-NI5FXWK5.js";import"../chunk-XFH64VIG.js";import"../chunk-EO5RLFRX.js";import"../chunk-LJN77RG6.js";import"../chunk-6KBDNYRW.js";import"../chunk-2NMW66P5.js";import"../chunk-CGZBDI6C.js";import"../chunk-HNUKXGYP.js";import"../chunk-NZISMTQE.js";import"../chunk-4DDL6NXB.js";import"../chunk-AYZY3YNC.js";import"../chunk-LE5LWALR.js";import"../chunk-UGTRSRIW.js";import"../chunk-CDAJKLGL.js";import"../chunk-6KGIHI6X.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-EOVXFXVV.js";import"../chunk-UQYNPYF4.js";import"../chunk-TE6R53YD.js";import"../chunk-2UO47XB4.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-MRJKZWWV.js";import"../chunk-NJN5IKWO.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import"../chunk-TWVUQUUD.js";import"../chunk-GDQJBQ5B.js";import"../chunk-C3QOHMR6.js";
@@ -16,13 +16,8 @@
16
16
  * border 1 hairline · 2 strong (a selected tab's rule, a dashed empty
17
17
  * state) · 4 accent bar.
18
18
  *
19
- * Owner rulings, 2026-10-27 (the Count up and Box Loop pages):
20
- *
21
- * page motion the animations a website page plays, not the chrome: one
22
- * Normal time each (a block arriving 600ms, a number counting
23
- * up 1.4s, a row looping 50s, which is today's time, so a page
24
- * with no choice of its own does not change), and ONE Duration
25
- * scale for all three: Short x0.6, Normal x1, Long x1.6.
19
+ * The page motion values (a website page, not the chrome) are in
20
+ * `src/motion/values.ts`.
26
21
  *
27
22
  * A leaf that imports nothing. No utility is written out in this file: the
28
23
  * brand stylesheet is compiled by scanning the repository, so a class named in
@@ -45,29 +40,6 @@ declare const MOTION_DURATIONS: {
45
40
  readonly base: 160;
46
41
  };
47
42
  type MotionSpeed = keyof typeof MOTION_DURATIONS;
48
- /** A page animation's Normal time, in ms (a website page, not the chrome). */
49
- declare const PAGE_MOTION_DURATIONS: {
50
- readonly entrance: 600;
51
- readonly countUp: 1400;
52
- readonly loop: 50000;
53
- };
54
- type PageMotion = keyof typeof PAGE_MOTION_DURATIONS;
55
- /** The one Duration scale every page animation offers: a factor of its
56
- * Normal time. A stored choice is the step's name; no choice is Normal. */
57
- declare const PAGE_MOTION_STEPS: {
58
- readonly short: 0.6;
59
- readonly normal: 1;
60
- readonly long: 1.6;
61
- };
62
- type PageMotionStep = keyof typeof PAGE_MOTION_STEPS;
63
- /** The one easing list: arriving slows to a stop, a loop keeps an even speed. */
64
- declare const PAGE_MOTION_EASING: {
65
- readonly arrive: "cubic-bezier(0.22, 1, 0.36, 1)";
66
- readonly loop: "linear";
67
- };
68
- type PageMotionEasing = keyof typeof PAGE_MOTION_EASING;
69
- /** How long `motion` plays at `step`, in whole ms. */
70
- declare function pageMotionMs(motion: PageMotion, step?: PageMotionStep): number;
71
43
  /** Border widths in px; `--border-<role>` in `ui.css`. */
72
44
  declare const BORDER_WIDTHS: {
73
45
  readonly hairline: 1;
@@ -76,4 +48,4 @@ declare const BORDER_WIDTHS: {
76
48
  };
77
49
  type BorderRole = keyof typeof BORDER_WIDTHS;
78
50
 
79
- export { BORDER_WIDTHS, type BorderRole, FONT_WEIGHTS, type FontWeightRole, MOTION_DURATIONS, type MotionSpeed, PAGE_MOTION_DURATIONS, PAGE_MOTION_EASING, PAGE_MOTION_STEPS, type PageMotion, type PageMotionEasing, type PageMotionStep, TYPE_SCALE, type TypeStep, pageMotionMs };
51
+ export { BORDER_WIDTHS, type BorderRole, FONT_WEIGHTS, type FontWeightRole, MOTION_DURATIONS, type MotionSpeed, TYPE_SCALE, type TypeStep };
@@ -1 +1 @@
1
- export{BORDER_WIDTHS,FONT_WEIGHTS,MOTION_DURATIONS,PAGE_MOTION_DURATIONS,PAGE_MOTION_EASING,PAGE_MOTION_STEPS,TYPE_SCALE,pageMotionMs}from"../chunk-DHKRXHJN.js";
1
+ export{BORDER_WIDTHS,FONT_WEIGHTS,MOTION_DURATIONS,TYPE_SCALE}from"../chunk-LH7IKIGE.js";
@@ -70,7 +70,8 @@ export { Paragraph, ParagraphProps, Text, TextProps, TextSize, TextTone, TextWei
70
70
  export { Align, Gap, Grid, GridCols, GridProps, Inline, InlineProps, Justify, Stack, StackProps } from '../shell/Stack.js';
71
71
  export { default as Divider, DividerProps, DividerSpacing } from '../shell/Divider.js';
72
72
  export { CONTROL_HEIGHTS, ControlSize, ROW_HEIGHTS, SPACING_ROLES, SPACING_SCALE, SpacingRole, SpacingStep, isSpacingStep } from '../tokens/spacing.js';
73
- export { BORDER_WIDTHS, BorderRole, FONT_WEIGHTS, FontWeightRole, MOTION_DURATIONS, MotionSpeed, PAGE_MOTION_DURATIONS, PAGE_MOTION_EASING, PAGE_MOTION_STEPS, PageMotion, PageMotionEasing, PageMotionStep, TYPE_SCALE, TypeStep, pageMotionMs } from '../tokens/type.js';
73
+ export { BORDER_WIDTHS, BorderRole, FONT_WEIGHTS, FontWeightRole, MOTION_DURATIONS, MotionSpeed, TYPE_SCALE, TypeStep } from '../tokens/type.js';
74
+ export { HOVER_MOTION, MOTION_EASING, MOTION_GROUPS, MOTION_TIMING, MotionEasing, MotionGroup, MotionRange, MotionTiming, TimedMotionGroup, motionSeconds, rotateDegrees } from '../motion/values.js';
74
75
  export { ELEVATION_LEVELS, ElevationLevel, RADIUS_ROLES, RadiusRole } from '../tokens/elevation.js';
75
76
  export { ACCENT_ROLES, COLOUR_ROLES, ColourRole, FLAT_STATUS_ROLES, IDENTITY_ROLES, NEUTRAL_ROLES, SCRIM_ROLES, STATUS_GROUPS, STATUS_ROLES } from '../tokens/colour.js';
76
77
  export { default as Skeleton, SkeletonProps, SkeletonVariant } from '../shell/Skeleton.js';