@fusion.dev/helix 0.0.0-dev → 0.0.3

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 (227) hide show
  1. package/custom-elements.json +5565 -5519
  2. package/dist/accordion/item/accordion-item.css.js +1 -19
  3. package/dist/accordion/root/accordion-root.css.js +1 -1
  4. package/dist/accordion/root/accordion-root.d.ts +1 -1
  5. package/dist/accordion/root/accordion-root.js +1 -1
  6. package/dist/announcement/root/announcement-root.css.js +1 -7
  7. package/dist/app-header/root/app-header-root.css.js +1 -7
  8. package/dist/app-header/root/app-header-root.d.ts +20 -23
  9. package/dist/app-header/root/app-header-root.js +4 -4
  10. package/dist/aura/root/aura-axis.d.ts +5 -7
  11. package/dist/aura/root/aura-axis.js +5 -7
  12. package/dist/aura/root/aura-root.css.js +1 -1
  13. package/dist/aura/root/aura-root.d.ts +75 -87
  14. package/dist/aura/root/aura-root.js +100 -109
  15. package/dist/aura/root/aura-shader.d.ts +10 -13
  16. package/dist/aura/root/aura-shader.js +165 -238
  17. package/dist/avatar/group/avatar-group.css.js +1 -1
  18. package/dist/avatar/root/avatar-root.css.js +1 -1
  19. package/dist/badge/root/badge-root.css.js +1 -13
  20. package/dist/badge/root/badge-root.d.ts +4 -5
  21. package/dist/bar-chart/root/bar-chart-root.css.js +1 -13
  22. package/dist/bar-chart/root/bar-chart-root.d.ts +51 -60
  23. package/dist/bar-chart/root/bar-chart-root.js +10 -17
  24. package/dist/blockquote/root/blockquote-root.css.js +1 -1
  25. package/dist/breadcrumbs/breadcrumb/breadcrumb.css.js +1 -7
  26. package/dist/breadcrumbs/root/breadcrumbs-root.css.js +1 -1
  27. package/dist/button/root/button-root.css.js +1 -7
  28. package/dist/button/root/button-root.d.ts +16 -25
  29. package/dist/button/root/button-root.js +3 -3
  30. package/dist/button-group/root/button-group-root.css.js +1 -1
  31. package/dist/button-group/root/button-group-root.d.ts +5 -7
  32. package/dist/callout/root/callout-root.css.js +1 -1
  33. package/dist/callout/root/callout-root.d.ts +4 -4
  34. package/dist/callout/root/callout-root.js +4 -4
  35. package/dist/card/root/card-root.css.js +2 -2
  36. package/dist/card/root/card-root.d.ts +38 -48
  37. package/dist/card/root/card-root.js +8 -11
  38. package/dist/carousel/root/carousel-root.css.js +1 -11
  39. package/dist/carousel/root/carousel-root.d.ts +39 -43
  40. package/dist/carousel/root/carousel-root.js +7 -7
  41. package/dist/chat/composer/chat-composer.css.js +1 -1
  42. package/dist/chat/message/chat-message.css.js +1 -7
  43. package/dist/chat/message/chat-message.d.ts +8 -13
  44. package/dist/chat/root/chat-root.css.js +1 -1
  45. package/dist/checkbox/root/checkbox-root.css.js +1 -14
  46. package/dist/checkbox-group/root/checkbox-group-root.css.js +1 -1
  47. package/dist/code/root/code-root.css.js +9 -7
  48. package/dist/code/root/code-root.d.ts +4 -0
  49. package/dist/code/root/code-root.js +4 -0
  50. package/dist/code-block/root/code-block-root.css.js +1 -1
  51. package/dist/color-input/root/color-input-root.css.js +2 -2
  52. package/dist/color-input/root/color-input-root.js +3 -3
  53. package/dist/color-picker/root/color-picker-root.css.js +1 -9
  54. package/dist/color-picker/root/color-picker-root.js +3 -3
  55. package/dist/combobox/root/combobox-root.css.js +1 -8
  56. package/dist/combobox/root/combobox-root.js +1 -1
  57. package/dist/command/root/command-root.css.js +1 -1
  58. package/dist/copy-button/root/copy-button-root.css.js +1 -1
  59. package/dist/data-table/root/data-table-root.css.js +9 -3
  60. package/dist/data-table/root/data-table-root.d.ts +4 -1
  61. package/dist/data-table/root/data-table-root.js +4 -1
  62. package/dist/date-input/root/date-input-root.css.js +1 -1
  63. package/dist/date-picker/root/date-picker-root.css.js +1 -7
  64. package/dist/date-picker/root/date-picker-root.d.ts +1 -1
  65. package/dist/date-picker/root/date-picker-root.js +1 -1
  66. package/dist/dialog/root/dialog-root.css.js +1 -1
  67. package/dist/dialog/root/dialog-root.d.ts +15 -20
  68. package/dist/dialog/root/dialog-root.js +2 -2
  69. package/dist/divider/root/divider-root.css.js +1 -1
  70. package/dist/donut-chart/root/donut-chart-root.css.js +2 -20
  71. package/dist/donut-chart/root/donut-chart-root.d.ts +14 -19
  72. package/dist/donut-chart/root/donut-chart-root.js +6 -7
  73. package/dist/drawer/root/drawer-root.css.js +1 -11
  74. package/dist/drawer/root/drawer-root.d.ts +3 -7
  75. package/dist/drilldown/item/drilldown-item.css.js +1 -1
  76. package/dist/drilldown/root/drilldown-root.css.js +1 -1
  77. package/dist/element-events.generated.js +1 -1
  78. package/dist/empty/root/empty-root.css.js +1 -1
  79. package/dist/file-input/root/file-input-root.css.js +1 -1
  80. package/dist/file-input/root/file-input-root.js +1 -2
  81. package/dist/flex/root/flex-root.css.js +1 -1
  82. package/dist/flex/root/flex-root.d.ts +6 -6
  83. package/dist/flex/root/flex-root.js +9 -9
  84. package/dist/format-date/root/format-date-root.css.js +1 -1
  85. package/dist/grid/root/grid-root.css.js +1 -1
  86. package/dist/grid/root/grid-root.d.ts +8 -8
  87. package/dist/grid/root/grid-root.js +8 -9
  88. package/dist/heatmap/root/heatmap-root.css.js +2 -2
  89. package/dist/heatmap/root/heatmap-root.d.ts +11 -12
  90. package/dist/heatmap/root/heatmap-root.js +11 -12
  91. package/dist/icon/glyph.css.js +1 -1
  92. package/dist/icon/root/icon-root.css.js +1 -1
  93. package/dist/icon-button/root/icon-button-root.css.js +1 -7
  94. package/dist/icon-button/root/icon-button-root.d.ts +10 -10
  95. package/dist/icon-button/root/icon-button-root.js +4 -4
  96. package/dist/image/root/image-root.css.js +1 -7
  97. package/dist/input/root/input-root.css.js +1 -9
  98. package/dist/kbd/root/kbd-root.css.js +1 -1
  99. package/dist/legend/root/legend-root.css.js +1 -1
  100. package/dist/legend/root/legend-root.d.ts +34 -37
  101. package/dist/legend/root/legend-root.js +10 -10
  102. package/dist/line-chart/root/line-chart-root.css.js +1 -8
  103. package/dist/line-chart/root/line-chart-root.d.ts +6 -9
  104. package/dist/list/item/list-item.css.js +1 -1
  105. package/dist/list/root/list-root.css.js +1 -1
  106. package/dist/list/root/list-root.d.ts +4 -7
  107. package/dist/listbox/root/listbox-root.css.js +3 -3
  108. package/dist/listbox/root/listbox-root.d.ts +2 -0
  109. package/dist/listbox/root/listbox-root.js +2 -0
  110. package/dist/loader/root/loader-root.css.js +1 -1
  111. package/dist/loader/root/loader-root.d.ts +5 -9
  112. package/dist/loader/root/loader-root.js +2 -2
  113. package/dist/megamenu/root/megamenu-root.css.js +3 -2
  114. package/dist/menu/item/menu-item.css.js +1 -7
  115. package/dist/menu/root/menu-root.css.js +1 -1
  116. package/dist/meter/root/meter-root.css.js +1 -14
  117. package/dist/meter/root/meter-root.d.ts +18 -18
  118. package/dist/meter/root/meter-root.js +6 -8
  119. package/dist/mixins/mixin-control-surface/mixin-control-surface.d.ts +1 -1
  120. package/dist/navigation/root/navigation-root.css.js +1 -7
  121. package/dist/notifications/notification/notification.css.js +1 -7
  122. package/dist/notifications/root/notifications-root.css.js +1 -1
  123. package/dist/number-input/root/number-input-root.css.js +1 -9
  124. package/dist/option/group/option-group.css.js +1 -1
  125. package/dist/option/root/option-root.css.js +1 -1
  126. package/dist/outline/root/outline-root.css.js +1 -14
  127. package/dist/outline/root/outline-root.d.ts +1 -1
  128. package/dist/outline/root/outline-root.js +1 -1
  129. package/dist/pagination/root/pagination-root.css.js +1 -12
  130. package/dist/pagination/size/pagination-size.css.js +1 -1
  131. package/dist/pagination/summary/pagination-summary.css.js +1 -1
  132. package/dist/pin-input/root/pin-input-root.css.js +1 -7
  133. package/dist/popover/root/popover-root.css.js +4 -2
  134. package/dist/progress/root/progress-root.css.js +1 -7
  135. package/dist/progress/root/progress-root.d.ts +10 -9
  136. package/dist/qr-code/root/qr-code-root.css.js +1 -1
  137. package/dist/qr-code/root/qr-code-root.d.ts +1 -1
  138. package/dist/qr-code/root/qr-code-root.js +1 -1
  139. package/dist/quote/root/quote-root.css.js +1 -1
  140. package/dist/radio/group/radio-group.css.js +1 -1
  141. package/dist/radio/root/radio-root.css.js +1 -14
  142. package/dist/radio/root/radio-root.d.ts +20 -18
  143. package/dist/radio/root/radio-root.js +5 -6
  144. package/dist/rating/root/rating-root.css.js +1 -1
  145. package/dist/rating/root/rating-root.d.ts +4 -5
  146. package/dist/sandbox/preview/sandbox-preview.css.js +1 -1
  147. package/dist/sandbox/preview/sandbox-preview.d.ts +48 -44
  148. package/dist/sandbox/preview/sandbox-preview.js +63 -50
  149. package/dist/sandbox/root/sandbox-root.css.js +1 -2
  150. package/dist/sandbox/root/sandbox-root.d.ts +50 -59
  151. package/dist/sandbox/root/sandbox-root.js +75 -91
  152. package/dist/sandbox/source/sandbox-source.css.js +1 -1
  153. package/dist/sandbox/source/sandbox-source.d.ts +21 -29
  154. package/dist/sandbox/source/sandbox-source.js +26 -34
  155. package/dist/sandbox/status-bar/sandbox-status-bar.css.js +1 -1
  156. package/dist/sandbox/terminal/sandbox-terminal.css.js +1 -1
  157. package/dist/sandbox/toolbar/sandbox-toolbar.css.js +1 -1
  158. package/dist/scroll-area/root/scroll-area-root.css.js +5 -5
  159. package/dist/select/root/select-root.css.js +2 -15
  160. package/dist/select/root/select-root.d.ts +4 -4
  161. package/dist/select/root/select-root.js +5 -7
  162. package/dist/shared/chart/series.css.js +1 -1
  163. package/dist/shared/chart/terminus.css.js +1 -1
  164. package/dist/shared/field/field-inline.css.js +1 -1
  165. package/dist/shared/field/field-stacked.css.js +1 -1
  166. package/dist/shared/field/field.css.js +1 -1
  167. package/dist/skeleton/root/skeleton-root.css.js +1 -1
  168. package/dist/slider/root/slider-root.css.js +1 -3
  169. package/dist/sparkline/root/sparkline-root.css.js +1 -1
  170. package/dist/sparkline/root/sparkline-root.d.ts +22 -24
  171. package/dist/sparkline/root/sparkline-root.js +6 -6
  172. package/dist/speed-dial/item/speed-dial-item.css.js +1 -7
  173. package/dist/speed-dial/root/speed-dial-root.css.js +1 -1
  174. package/dist/splitter/root/splitter-root.css.js +1 -14
  175. package/dist/stat/group/stat-group.css.js +1 -1
  176. package/dist/stat/root/stat-root.css.js +1 -1
  177. package/dist/steps/root/steps-root.css.js +1 -1
  178. package/dist/steps/step/step.css.js +1 -8
  179. package/dist/steps/step/step.js +1 -1
  180. package/dist/switch/root/switch-root.css.js +1 -8
  181. package/dist/table/cell/table-cell.css.js +1 -1
  182. package/dist/table/column/table-column.css.js +1 -1
  183. package/dist/table/root/table-root.css.js +1 -1
  184. package/dist/table/row/table-row.css.js +1 -1
  185. package/dist/tabs/panel/tab-panel.css.js +1 -1
  186. package/dist/tabs/root/tabs-root.css.js +1 -7
  187. package/dist/tabs/tab/tab.css.js +2 -8
  188. package/dist/tag/root/tag-root.css.js +1 -1
  189. package/dist/tag/root/tag-root.d.ts +10 -19
  190. package/dist/tag/root/tag-root.js +3 -3
  191. package/dist/text/root/text-root.css.js +1 -1
  192. package/dist/text/root/text-root.d.ts +13 -14
  193. package/dist/text/root/text-root.js +6 -6
  194. package/dist/textarea/root/textarea-root.css.js +1 -7
  195. package/dist/time-input/root/time-input-root.css.js +1 -1
  196. package/dist/time-input/root/time-input-root.js +1 -1
  197. package/dist/time-picker/root/time-picker-root.css.js +1 -7
  198. package/dist/time-picker/root/time-picker-root.js +1 -1
  199. package/dist/timeline/item/timeline-item.css.js +1 -1
  200. package/dist/timeline/root/timeline-root.css.js +1 -1
  201. package/dist/toast/item/toast-item.css.js +1 -1
  202. package/dist/toast/root/toast-root.css.js +1 -1
  203. package/dist/toggle/group/toggle-group.css.js +1 -7
  204. package/dist/toggle/group/toggle-group.d.ts +6 -9
  205. package/dist/toggle/root/toggle-root.css.js +1 -1
  206. package/dist/toolbar/root/toolbar-root.css.js +1 -1
  207. package/dist/tooltip/root/tooltip-root.css.js +1 -1
  208. package/dist/tooltip/root/tooltip-root.d.ts +6 -7
  209. package/dist/tour/root/tour-root.css.js +1 -7
  210. package/dist/tour/stop/tour-stop.css.js +2 -2
  211. package/dist/tree/item/tree-item.css.js +1 -17
  212. package/dist/tree/root/tree-root.css.js +1 -1
  213. package/dist/tree/root/tree-root.d.ts +0 -2
  214. package/dist/trend/root/trend-root.css.js +1 -1
  215. package/dist/trend/root/trend-root.d.ts +4 -7
  216. package/dist/trend/root/trend-root.js +4 -7
  217. package/dist/video/root/video-root.css.js +1 -12
  218. package/dist/video/root/video-root.d.ts +3 -8
  219. package/dist/video-playlist/item/video-playlist-item.css.js +1 -7
  220. package/dist/video-playlist/menu/video-playlist-menu.css.js +1 -1
  221. package/dist/video-playlist/root/video-playlist-root.css.js +1 -1
  222. package/dist/virtual-list/root/virtual-list-root.css.js +1 -1
  223. package/elements.css +4 -5
  224. package/helix.css +31 -0
  225. package/jsx.d.ts +11625 -14561
  226. package/package.json +10 -8
  227. package/vue.d.ts +3594 -4231
@@ -1,4 +1,4 @@
1
- // Generated from src/accordion/item/accordion-item.css by `bun run styles`. Do not edit.
1
+ // Generated from src/accordion/item/accordion-item.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  display: block;
@@ -40,12 +40,6 @@ margin-inline-start: auto;
40
40
  transform: scaleY(-1);
41
41
  }
42
42
 
43
- @media (prefers-reduced-motion: reduce) {
44
- [part="chevron"] {
45
- transition: none;
46
- }
47
- }
48
-
49
43
  [part="trigger"]:hover [part="chevron"] {
50
44
  color: var(--helix-color-foreground);
51
45
  }
@@ -77,16 +71,4 @@ display: block;
77
71
  line-height: var(--helix-leading-normal);
78
72
  padding: var(--accordion-item-padding, var(--helix-space-sm) var(--helix-space-md));
79
73
  padding-block-start: 0;
80
- }
81
-
82
- @media (prefers-reduced-motion: reduce) {
83
- [part="content"] {
84
- transition: none;
85
- }
86
- }
87
-
88
- @media (prefers-reduced-motion: reduce) {
89
- [part="trigger"] {
90
- transition: none;
91
- }
92
74
  }`);
@@ -1,4 +1,4 @@
1
- // Generated from src/accordion/root/accordion-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/accordion/root/accordion-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  display: block;
@@ -4,7 +4,7 @@ import type { CSSResultGroup } from 'lit';
4
4
  * @summary Groups collapsible sections, one open at a time by default.
5
5
  *
6
6
  * @description
7
- * Items share one rule between neighbours rather than each drawing its own, so
7
+ * Items share one rule between neighbors rather than each drawing its own, so
8
8
  * the seam between two items is one pixel and not two. Those seams are what
9
9
  * carry the grouping, which is why the surrounding frame is opt-in rather than
10
10
  * the default: an accordion is a list, where a card is a surface.
@@ -12,7 +12,7 @@ import { styles } from './accordion-root.css.js';
12
12
  * @summary Groups collapsible sections, one open at a time by default.
13
13
  *
14
14
  * @description
15
- * Items share one rule between neighbours rather than each drawing its own, so
15
+ * Items share one rule between neighbors rather than each drawing its own, so
16
16
  * the seam between two items is one pixel and not two. Those seams are what
17
17
  * carry the grouping, which is why the surrounding frame is opt-in rather than
18
18
  * the default: an accordion is a list, where a card is a surface.
@@ -1,4 +1,4 @@
1
- // Generated from src/announcement/root/announcement-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/announcement/root/announcement-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
 
@@ -127,12 +127,6 @@ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
127
127
  outline-offset: var(--helix-size-focus-offset);
128
128
  }
129
129
 
130
- @media (prefers-reduced-motion: reduce) {
131
- [part="dismiss"] {
132
- transition: none;
133
- }
134
- }
135
-
136
130
  [part="actions"][data-empty] {
137
131
  display: none;
138
132
  }
@@ -1,4 +1,4 @@
1
- // Generated from src/app-header/root/app-header-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/app-header/root/app-header-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
 
@@ -99,12 +99,6 @@ overflow-x: auto;
99
99
  justify-content: flex-start;
100
100
  }
101
101
 
102
- @media (prefers-reduced-motion: reduce) {
103
- :host {
104
- transition: none;
105
- }
106
- }
107
-
108
102
  @media print {
109
103
  :host {
110
104
  display: none;
@@ -6,10 +6,10 @@ import type { CSSResultGroup } from 'lit';
6
6
  * @description
7
7
  * Flat, opaque, and in the flow. Both of the interesting things a banner can do
8
8
  * are opt-in: `sticky` because following the reader is a decision about the
9
- * page rather than about the bar, and `appearance="material"` because a
10
- * backdrop filter makes the header a containing block for `position: fixed`
11
- * descendants, so an overlay rendered inside a material header is placed
12
- * against the header rather than the viewport.
9
+ * page rather than about the bar, and `material` because a backdrop filter
10
+ * makes the header a containing block for `position: fixed` descendants, so an
11
+ * overlay rendered inside a material header is placed against the header rather
12
+ * than the viewport.
13
13
  *
14
14
  * The separating rule appears only once the page has scrolled, which keeps the
15
15
  * banner flat against a hero and lifts it off the content afterwards. There is
@@ -39,38 +39,35 @@ export declare class HelixAppHeader extends HelixHeadlessAppHeader {
39
39
  * What the banner is made of, which is how much of what is behind it shows
40
40
  * through.
41
41
  *
42
- * One axis, three points, and absent is opaque, per the rule that a reflected
43
- * property takes no default.
42
+ * One axis, and absent is opaque, per the rule that a reflected property
43
+ * takes no default.
44
44
  *
45
45
  * - Absent is opaque. The page stops at the bar, which is what an application
46
46
  * wants: the bar is chrome and chrome does not need to be interesting.
47
47
  * - `glass` is translucent and blurred, so content passing underneath stays
48
48
  * visible and goes soft. The page reads as one surface with a bar floating
49
49
  * over it.
50
+ * - `frosted` is the same pair turned up: less shows through and the blur is
51
+ * heavier.
50
52
  * - `transparent` has no fill at all until something has scrolled under it,
51
53
  * and then it takes the glass. For a banner over a hero, where the art
52
54
  * should reach the top of the window and the bar should only become a
53
55
  * surface once it has to be legible over moving content.
54
56
  *
55
- * **This was `appearance`, and it was filed under the wrong axis from the
56
- * start.** The library's test is the one `Card` states: `separation` is where
57
- * a surface ends, `tone` is what it means, `material` is what it is made of,
58
- * and a property belongs to `material` when it can be true at the same time
59
- * as the other two. Every value here varies exactly one quantity, and that
60
- * quantity is translucency. The proof is inside the component rather than in
61
- * the argument: scrolled, `transparent` emits the same two declarations
62
- * `glass` does, so two of the three points are the same material arriving at
63
- * different times.
57
+ * **This belongs to `material` and not to a shape or an appearance.** The
58
+ * library's test is the one `Card` states: `separation` is where a surface
59
+ * ends, `tone` is what it means, `material` is what it is made of, and a
60
+ * property belongs to `material` when it can be true at the same time as the
61
+ * other two. Every value here varies exactly one quantity, translucency. The
62
+ * proof is inside the component: scrolled, `transparent` emits the same two
63
+ * declarations `glass` does, so two of the points are the same material
64
+ * arriving at different times.
64
65
  *
65
66
  * **One axis rather than two, and that is the whole reason it stays an
66
- * enum.** The three are mutually exclusive: a bar cannot be opaque and
67
- * see-through. Splitting the glass out and leaving `appearance="transparent"`
68
- * beside it would make `material="glass" appearance="transparent"` sayable,
69
- * which is a state with nothing to mean, where an enum makes it unsayable.
70
- *
71
- * The vocabulary got more coherent on the way. `flat` is a word about shape,
72
- * `material` was a word about categories and `transparent` a word about
73
- * light; opaque, glass and transparent are three points in one language.
67
+ * enum.** The values are mutually exclusive: a bar cannot be opaque and
68
+ * see-through. Splitting the glass out onto a second property would make
69
+ * `material="glass"` and a transparent flag sayable together, which is a
70
+ * state with nothing to mean, where an enum makes it unsayable.
74
71
  *
75
72
  * **`material` makes the header a containing block for `position: fixed`
76
73
  * descendants**, which is worth knowing and is narrower than it sounds. Every
@@ -14,10 +14,10 @@ import { styles } from './app-header-root.css.js';
14
14
  * @description
15
15
  * Flat, opaque, and in the flow. Both of the interesting things a banner can do
16
16
  * are opt-in: `sticky` because following the reader is a decision about the
17
- * page rather than about the bar, and `appearance="material"` because a
18
- * backdrop filter makes the header a containing block for `position: fixed`
19
- * descendants, so an overlay rendered inside a material header is placed
20
- * against the header rather than the viewport.
17
+ * page rather than about the bar, and `material` because a backdrop filter
18
+ * makes the header a containing block for `position: fixed` descendants, so an
19
+ * overlay rendered inside a material header is placed against the header rather
20
+ * than the viewport.
21
21
  *
22
22
  * The separating rule appears only once the page has scrolled, which keeps the
23
23
  * banner flat against a hero and lifts it off the content afterwards. There is
@@ -8,11 +8,9 @@
8
8
  * output is a uniform, and what that uniform does is a WebGL draw.
9
9
  *
10
10
  * That guard is the whole reason this file exists. `terminus` was wrong twice
11
- * while its docstring said otherwise, out by a factor of two and by the aspect
12
- * correction, so `0.5` exited at 81.3% of the width on the landing page's own
13
- * box and `0` was the only value that reached the middle. Both times the
14
- * arithmetic lived inside a getter, beside a sentence describing different
15
- * arithmetic, and nothing compared them. See 155.
11
+ * while its docstring said otherwise, the arithmetic living inside a getter
12
+ * beside a sentence describing different arithmetic with nothing comparing the
13
+ * two.
16
14
  *
17
15
  * **`exitOf` mirrors the shader step by step rather than stating the closed
18
16
  * form**, which is deliberate and is what makes the round trip worth running.
@@ -51,8 +49,8 @@ export declare const exitOf: (tilt: number, aspect: number) => number;
51
49
  * steps gives `terminus = 0.5 + tan(tilt) / (2 * aspect^2)`, and rearranging
52
50
  * for the tilt gives what is below.
53
51
  *
54
- * This is the contract `terminus` has always claimed and twice failed to keep:
55
- * `0` is the left edge, `0.5` the middle and `1` the right edge, in every box.
52
+ * The contract `terminus` claims: `0` is the left edge, `0.5` the middle and
53
+ * `1` the right edge, in every box.
56
54
  *
57
55
  * @param terminus - The crossing wanted, as a fraction of the width.
58
56
  * @param aspect - The box's width over its height.
@@ -8,11 +8,9 @@
8
8
  * output is a uniform, and what that uniform does is a WebGL draw.
9
9
  *
10
10
  * That guard is the whole reason this file exists. `terminus` was wrong twice
11
- * while its docstring said otherwise, out by a factor of two and by the aspect
12
- * correction, so `0.5` exited at 81.3% of the width on the landing page's own
13
- * box and `0` was the only value that reached the middle. Both times the
14
- * arithmetic lived inside a getter, beside a sentence describing different
15
- * arithmetic, and nothing compared them. See 155.
11
+ * while its docstring said otherwise, the arithmetic living inside a getter
12
+ * beside a sentence describing different arithmetic with nothing comparing the
13
+ * two.
16
14
  *
17
15
  * **`exitOf` mirrors the shader step by step rather than stating the closed
18
16
  * form**, which is deliberate and is what makes the round trip worth running.
@@ -58,8 +56,8 @@ export const exitOf = (tilt, aspect) => {
58
56
  * steps gives `terminus = 0.5 + tan(tilt) / (2 * aspect^2)`, and rearranging
59
57
  * for the tilt gives what is below.
60
58
  *
61
- * This is the contract `terminus` has always claimed and twice failed to keep:
62
- * `0` is the left edge, `0.5` the middle and `1` the right edge, in every box.
59
+ * The contract `terminus` claims: `0` is the left edge, `0.5` the middle and
60
+ * `1` the right edge, in every box.
63
61
  *
64
62
  * @param terminus - The crossing wanted, as a fraction of the width.
65
63
  * @param aspect - The box's width over its height.
@@ -1,4 +1,4 @@
1
- // Generated from src/aura/root/aura-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/aura/root/aura-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  position: relative;
@@ -54,21 +54,9 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
54
54
  export declare class HelixAura extends HelixElement {
55
55
  static styles: CSSResultGroup;
56
56
  /**
57
- * Which form the light takes. Absent is `braid`.
58
- *
59
- * Reflected because the fallback gradient selects on it, and given no default
60
- * for the same reason every axis here has none: a default on a reflected
61
- * property writes the attribute onto every host anybody renders.
62
- *
63
- * **`variant` and not `shape`, which it was until 26 Aug 2026.** `shape` is
64
- * an axis about geometry, `circle` against `square`, `arc` against `ring`,
65
- * and it is registered as one now. Aurora, braid and caustics are not
66
- * geometries; they are eleven names for a look, which is what `variant` is
67
- * for by the rule the registry already states. Renamed rather than
68
- * grandfathered because nothing is published yet: there is no `helix-v` tag,
69
- * so this costs an edit today and a deprecation later. See 236.
57
+ * How soft the falloff is, `0` tight and `1` diffuse.
70
58
  */
71
- variant?: 'aurora' | 'braid' | 'caustics' | 'flow' | 'fracture' | 'lattice' | 'particles' | 'rays' | 'streaks' | 'threads' | 'waves';
59
+ bloom: number;
72
60
  /**
73
61
  * How far the settings wander on their own, `0` still and `1` restless.
74
62
  *
@@ -84,6 +72,10 @@ export declare class HelixAura extends HelixElement {
84
72
  * a timer.
85
73
  */
86
74
  drift: number;
75
+ /**
76
+ * Overall brightness, as a multiplier on the field.
77
+ */
78
+ gain: number;
87
79
  /**
88
80
  * What the pointer does, where the shape's own answer is not wanted.
89
81
  *
@@ -91,21 +83,13 @@ export declare class HelixAura extends HelixElement {
91
83
  * of: braid leans, rays are occluded, threads pinch, particles scatter. The
92
84
  * named options are generic, and are a deliberate step down in meaning. A
93
85
  * response made of the same material as the shape says something about that
94
- * shape; a lamp following the cursor says the same nothing on all nine.
86
+ * shape; a lamp following the cursor says the same nothing on every one.
95
87
  *
96
88
  * They exist because a consumer may want the quieter, more conventional
97
89
  * answer, and because `none` is a real requirement. Not because any of them
98
90
  * is the better default.
99
91
  */
100
92
  interaction?: 'light' | 'none' | 'ripple' | 'shadow';
101
- /**
102
- * How far the pointer reaches into the field, `0` upward.
103
- *
104
- * Multiplied into the presence the pointer already fades in and out with, so
105
- * it scales the whole response rather than any one part of it, whichever
106
- * interaction is in play.
107
- */
108
- reach: number;
109
93
  /**
110
94
  * Whether the pointer shifts and lifts the field.
111
95
  *
@@ -116,13 +100,13 @@ export declare class HelixAura extends HelixElement {
116
100
  */
117
101
  interactive: boolean;
118
102
  /**
119
- * How soft the falloff is, `0` tight and `1` diffuse.
120
- */
121
- bloom: number;
122
- /**
123
- * Overall brightness, as a multiplier on the field.
103
+ * How far the pointer reaches into the field, `0` upward.
104
+ *
105
+ * Multiplied into the presence the pointer already fades in and out with, so
106
+ * it scales the whole response rather than any one part of it, whichever
107
+ * interaction is in play.
124
108
  */
125
- gain: number;
109
+ reach: number;
126
110
  /**
127
111
  * Feature size, as a multiplier on the sampled coordinates.
128
112
  */
@@ -131,10 +115,6 @@ export declare class HelixAura extends HelixElement {
131
115
  * How fast it drifts, as a multiplier on time.
132
116
  */
133
117
  speed: number;
134
- /**
135
- * The field's rotation, in degrees.
136
- */
137
- tilt: number;
138
118
  /**
139
119
  * Where the axis crosses the top edge, as a fraction of the width.
140
120
  *
@@ -152,20 +132,16 @@ export declare class HelixAura extends HelixElement {
152
132
  * the angle really is the point, which is what an aura in a square tile
153
133
  * wants.
154
134
  *
155
- * **The fraction is measured across the whole width, and for a while it was
156
- * not.** The first expression corrected for the aspect once in the wrong
157
- * direction and never subtracted the center, so the value read as an offset
158
- * from the middle that also moved with the box: on a 1440 by 1800 hero `0.5`
159
- * put the axis at 81.3% of the width and `0` was the only value that reached
160
- * the middle. The contract above is now solved against what the shader draws
161
- * rather than asserted beside it.
162
- *
163
135
  * Derived from the box the resize observer already keeps, so it costs no
164
136
  * layout read per frame, and the drift is applied to the result rather than
165
137
  * to the angle behind it: the field still wanders, around a bearing that
166
138
  * holds the exit where it was put.
167
139
  */
168
140
  terminus?: number;
141
+ /**
142
+ * The field's rotation, in degrees.
143
+ */
144
+ tilt: number;
169
145
  /**
170
146
  * How much the members of a population differ from one another, `0` a set
171
147
  * that is uniform and `1` the resting amount. Clamped to that range: these
@@ -182,6 +158,20 @@ export declare class HelixAura extends HelixElement {
182
158
  * those four this is inert.
183
159
  */
184
160
  variance: number;
161
+ /**
162
+ * Which form the light takes. Absent is `braid`.
163
+ *
164
+ * Reflected because the fallback gradient selects on it, and given no default
165
+ * for the same reason every axis here has none: a default on a reflected
166
+ * property writes the attribute onto every host anybody renders.
167
+ *
168
+ * **`variant` and not `shape`.** `shape` is an axis about geometry, `circle`
169
+ * against `square`, `arc` against `ring`, and it is registered as one.
170
+ * Aurora, braid and caustics are not geometries; they are eleven names for a
171
+ * look, which is what `variant` is for by the rule the registry already
172
+ * states.
173
+ */
174
+ variant?: 'aurora' | 'braid' | 'caustics' | 'flow' | 'fracture' | 'lattice' | 'particles' | 'rays' | 'streaks' | 'threads' | 'waves';
185
175
  /** Repaints when the palette moves, which no re-render would do on its own. */
186
176
  private readonly tokens;
187
177
  /**
@@ -235,7 +225,12 @@ export declare class HelixAura extends HelixElement {
235
225
  * ending at P to ending at P, P, which is the same shape, and nothing jumps.
236
226
  */
237
227
  private readonly head;
238
- /** Where the pointer is, and where the field has got to. The gap is weight. */
228
+ /**
229
+ * Where the pointer is, and where the field has got to. The gap is weight.
230
+ *
231
+ * `presence`, not `reach`: the eased value is how far the pointer has faded
232
+ * in, and `reach` is the consumer's amplitude. The two multiply.
233
+ */
239
234
  private readonly target;
240
235
  private readonly eased;
241
236
  private motion;
@@ -243,12 +238,12 @@ export declare class HelixAura extends HelixElement {
243
238
  /**
244
239
  * The element's box, cached.
245
240
  *
246
- * **Read per event, this was the ragged half.** `getBoundingClientRect` forces
247
- * a synchronous layout, and a pointer emits events far faster than the
248
- * display refreshes: a 1000Hz mouse flushed layout a thousand times a second
249
- * to compute a number that only changes when the page reflows. Refreshed from
250
- * the resize observer and from scroll, both of which are exactly when it can
251
- * go stale, and never from the handler that reads it.
241
+ * **Never read per event.** `getBoundingClientRect` forces a synchronous
242
+ * layout, and a pointer emits events far faster than the display refreshes: a
243
+ * 1000Hz mouse flushed layout a thousand times a second to compute a number
244
+ * that only changes when the page reflows. Refreshed from the resize observer
245
+ * and from scroll, both of which are exactly when it can go stale, and never
246
+ * from the handler that reads it.
252
247
  */
253
248
  private box;
254
249
  /** Watches the element's own size, so no frame has to ask for it. */
@@ -265,9 +260,8 @@ export declare class HelixAura extends HelixElement {
265
260
  * scales: it opens coarse and tightens, which reads as the background zooming
266
261
  * out on load rather than as a background.
267
262
  *
268
- * Refusing the degenerate 0 by 0 box fixed the worst of it, a 2 by 2 drawing
269
- * buffer smeared over the page, and left the ordinary case: a first real box
270
- * that is simply not the last one.
263
+ * Refusing the degenerate 0 by 0 box leaves the ordinary case: a first real
264
+ * box that is simply not the last one.
271
265
  *
272
266
  * So the opening frame waits for the box to stop moving. Nothing paints until
273
267
  * a measurement has stood unchanged for one animation frame, which is the
@@ -293,17 +287,16 @@ export declare class HelixAura extends HelixElement {
293
287
  /**
294
288
  * The context and the program, from whatever canvas can still give one.
295
289
  *
296
- * **A canvas whose context was force-lost never yields a working one again**,
297
- * and the release below used to assume the opposite: `getContext` hands back
298
- * the very same dead object, which reports `isContextLost()` and answers
299
- * `null` to every `getShaderParameter`. So `link` failed, `start` returned
300
- * before installing a single observer, and the element sat connected and
301
- * permanently blind, holding whatever buffer it last painted. Measured on the
302
- * landing page, where one remove-and-reinsert was enough: the frozen frame
303
- * was the 2x2 the first `measure` took before layout, stretched across two
304
- * screens as a gray smear that reads as a broken gradient rather than as a
305
- * dead component. The only sound in the console was `getShaderInfoLog`
306
- * answering `null`, twice per element.
290
+ * **A canvas whose context was force-lost never yields a working one again.**
291
+ * `getContext` hands back the very same dead object, which reports
292
+ * `isContextLost()` and answers `null` to every `getShaderParameter`, so
293
+ * `link` fails, `start` returns before installing a single observer, and the
294
+ * element sits connected and permanently blind, holding whatever buffer it
295
+ * last painted. Measured on the landing page, where one remove-and-reinsert
296
+ * was enough: the frozen frame was the 2x2 the first `measure` took before
297
+ * layout, stretched across two screens as a gray smear that reads as a broken
298
+ * gradient rather than as a dead component. The only sound in the console was
299
+ * `getShaderInfoLog` answering `null`, twice per element.
307
300
  *
308
301
  * A spent canvas is therefore replaced rather than re-asked. `restoreContext`
309
302
  * is the other way and is not reachable from here: it needs the `webglcontextlost`
@@ -385,12 +378,10 @@ export declare class HelixAura extends HelixElement {
385
378
  * `/helix/aura`, where it is a toggle a reader chose. So the cap applies where
386
379
  * nothing is being followed and lifts where something is.
387
380
  *
388
- * **Measured before it was capped, because the cost had changed.** 252 was
389
- * filed against one field on the first two screens. It is three now, one per
390
- * transparent run of the page, and with the frame limiter off they drew 2,654
391
- * times in three seconds against 1,276 for one: the work scales with the count
392
- * because each instance draws once per callback. Capping the two that nobody
393
- * points at is most of that back.
381
+ * **The cost scales with the count.** Three fields run on the landing page,
382
+ * one per transparent run, and with the frame limiter off they drew 2,654
383
+ * times in three seconds against 1,276 for one: each instance draws once per
384
+ * callback. Capping the two that nobody points at is most of that back.
394
385
  */
395
386
  private static readonly CAPPED;
396
387
  private readonly tick;
@@ -403,12 +394,9 @@ export declare class HelixAura extends HelixElement {
403
394
  * business knowing when: it is read once per frame from numbers already
404
395
  * there.
405
396
  *
406
- * The solve is `tiltFor` in `aura-axis.ts` rather than an expression here,
407
- * and that is the fix for how this went wrong twice. Both times the
408
- * arithmetic sat inside this getter next to a sentence describing different
409
- * arithmetic, and nothing in the repository could tell they disagreed. It is
410
- * callable now, and `aura-root.dom.spec.ts` runs it against a model of the
411
- * shader in both directions. See 155.
397
+ * The solve is `tiltFor` in `aura-axis.ts` rather than an expression here, so
398
+ * it is callable and `aura-root.dom.spec.ts` runs it against a model of the
399
+ * shader in both directions.
412
400
  */
413
401
  private get bearing();
414
402
  private drifted;
@@ -418,19 +406,19 @@ export declare class HelixAura extends HelixElement {
418
406
  /**
419
407
  * Keeps the head of the wake on the cursor, and commits it as it travels.
420
408
  *
421
- * **The head used to be a committed mark, and that was both faults at once.**
422
- * Marks are spaced by distance so eight slots cover a gesture rather than the
423
- * last few milliseconds of one, but committing was also the only time the
424
- * stroke grew: its leading end therefore sat up to a full gate behind the
425
- * pointer, and caught up in jumps of exactly that size. Latent, and jagged,
426
- * for one reason.
427
- *
428
- * So the slot at `trailNext` is provisional. It is rewritten every frame to
429
- * wherever the field has actually eased to, which is where the cursor looks
430
- * like it is, so the stroke always reaches the pointer. Crossing the gate does
431
- * not move the head, it just stops the previous position from being
432
- * overwritten, and a new provisional head starts from there. The wake grows
433
- * continuously and is still only ever eight points.
409
+ * **The head is provisional, never a committed mark**, and holding it in the
410
+ * ring is two faults at once. Marks are spaced by distance so eight slots
411
+ * cover a gesture rather than the last few milliseconds of one, but if
412
+ * committing is also the only time the stroke grows, its leading end sits up
413
+ * to a full gate behind the pointer and catches up in jumps of exactly that
414
+ * size. Latent, and jagged, for one reason.
415
+ *
416
+ * So the slot at `trailNext` is rewritten every frame to wherever the field
417
+ * has actually eased to, which is where the cursor looks like it is, so the
418
+ * stroke always reaches the pointer. Crossing the gate does not move the head,
419
+ * it just stops the previous position from being overwritten, and a new
420
+ * provisional head starts from there. The wake grows continuously and is still
421
+ * only ever eight points.
434
422
  *
435
423
  * Measured against `eased` rather than `target`, or the stroke would reach a
436
424
  * place the field has not arrived at yet and lead its own parallax.