@fusion.dev/helix 0.147.0 → 0.149.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 (114) hide show
  1. package/custom-elements.json +11575 -1278
  2. package/dist/announcement/root/announcement-root.css.js +1 -1
  3. package/dist/blockquote/root/blockquote-root.css.js +1 -1
  4. package/dist/blockquote/root/blockquote-root.d.ts +8 -2
  5. package/dist/button-group/root/button-group-root.css.js +10 -1
  6. package/dist/button-group/root/button-group-root.d.ts +29 -7
  7. package/dist/button-group/root/button-group-root.js +19 -0
  8. package/dist/canvas/node/canvas-node.css.js +6 -6
  9. package/dist/canvas/node/canvas-node.d.ts +5 -0
  10. package/dist/canvas/root/canvas-root.css.js +6 -2
  11. package/dist/canvas/root/canvas-root.d.ts +6 -0
  12. package/dist/card/root/card-root.css.js +3 -3
  13. package/dist/card/root/card-root.d.ts +4 -0
  14. package/dist/chat/root/chat-root.css.js +3 -1
  15. package/dist/chat/root/chat-root.d.ts +3 -0
  16. package/dist/code-block/root/code-block-root.css.js +17 -9
  17. package/dist/code-block/root/code-block-root.d.ts +7 -0
  18. package/dist/combobox/root/combobox-root.js +2 -0
  19. package/dist/data-table/root/data-table-root.css.js +20 -8
  20. package/dist/data-table/root/data-table-root.d.ts +12 -0
  21. package/dist/description-list/item/description-list-item.css.js +1 -1
  22. package/dist/description-list/item/description-list-item.d.ts +1 -0
  23. package/dist/description-list/root/description-list-root.css.js +2 -1
  24. package/dist/description-list/root/description-list-root.d.ts +12 -0
  25. package/dist/description-list/root/description-list-root.js +7 -0
  26. package/dist/divider/root/divider-root.css.js +3 -4
  27. package/dist/divider/root/divider-root.d.ts +3 -0
  28. package/dist/element-events.generated.js +33 -4
  29. package/dist/format-date/root/format-date-root.css.js +1 -1
  30. package/dist/format-date/root/format-date-root.d.ts +0 -1
  31. package/dist/format-date/root/format-date-root.js +0 -1
  32. package/dist/list/item/list-item.css.js +4 -2
  33. package/dist/list/item/list-item.d.ts +4 -0
  34. package/dist/list/root/list-root.css.js +2 -1
  35. package/dist/list/root/list-root.d.ts +6 -0
  36. package/dist/list/root/list-root.js +2 -1
  37. package/dist/listbox/reorder/index.d.ts +1 -0
  38. package/dist/listbox/reorder/index.js +6 -0
  39. package/dist/listbox/reorder/listbox-drag-preview.css.d.ts +1 -0
  40. package/dist/listbox/reorder/listbox-drag-preview.css.js +3 -0
  41. package/dist/listbox/reorder/listbox-reorder.css.d.ts +1 -0
  42. package/dist/listbox/reorder/listbox-reorder.css.js +4 -0
  43. package/dist/listbox/root/listbox-root.css.js +4 -1
  44. package/dist/listbox/root/listbox-root.d.ts +11 -0
  45. package/dist/listbox/root/listbox-root.js +1 -0
  46. package/dist/map/root/map-root.css.js +10 -6
  47. package/dist/map/root/map-root.d.ts +10 -0
  48. package/dist/notifications/notification/notification.css.js +8 -2
  49. package/dist/notifications/notification/notification.d.ts +13 -5
  50. package/dist/notifications/notification/notification.js +13 -0
  51. package/dist/notifications/root/notifications-root.css.js +4 -2
  52. package/dist/notifications/root/notifications-root.d.ts +21 -3
  53. package/dist/notifications/root/notifications-root.js +13 -1
  54. package/dist/orb/root/orb-root.d.ts +5 -0
  55. package/dist/orb/root/orb-root.js +13 -12
  56. package/dist/pagination/root/pagination-root.css.js +7 -7
  57. package/dist/pagination/root/pagination-root.d.ts +14 -0
  58. package/dist/pagination/size/pagination-size.css.js +1 -1
  59. package/dist/pagination/size/pagination-size.d.ts +3 -0
  60. package/dist/pagination/summary/pagination-summary.css.js +1 -1
  61. package/dist/pagination/summary/pagination-summary.d.ts +3 -0
  62. package/dist/qr-code/root/qr-code-root.css.js +1 -1
  63. package/dist/qr-code/root/qr-code-root.d.ts +3 -0
  64. package/dist/sandbox/preview/sandbox-preview.d.ts +14 -1
  65. package/dist/sandbox/preview/sandbox-preview.js +12 -9
  66. package/dist/sandbox/root/sandbox-root.d.ts +8 -3
  67. package/dist/sandbox/root/sandbox-root.js +7 -3
  68. package/dist/sandbox/source/sandbox-source.d.ts +5 -0
  69. package/dist/sandbox/source/sandbox-source.js +4 -1
  70. package/dist/sandbox/status-bar/sandbox-status-bar.d.ts +10 -0
  71. package/dist/sandbox/status-bar/sandbox-status-bar.js +14 -2
  72. package/dist/sandbox/terminal/sandbox-terminal.d.ts +11 -0
  73. package/dist/sandbox/terminal/sandbox-terminal.js +22 -11
  74. package/dist/scroll-area/root/scroll-area-root.css.js +5 -4
  75. package/dist/scroll-area/root/scroll-area-root.d.ts +3 -3
  76. package/dist/select/root/select-root.css.js +4 -1
  77. package/dist/select/root/select-root.js +2 -0
  78. package/dist/shared/viewport/viewport.css.js +1 -1
  79. package/dist/speed-dial/group/speed-dial-group.css.d.ts +1 -0
  80. package/dist/speed-dial/group/speed-dial-group.css.js +2 -0
  81. package/dist/speed-dial/group/speed-dial-group.d.ts +27 -0
  82. package/dist/speed-dial/group/speed-dial-group.js +16 -0
  83. package/dist/speed-dial/index.d.ts +1 -0
  84. package/dist/speed-dial/index.js +1 -0
  85. package/dist/speed-dial/item/speed-dial-item.css.js +1 -1
  86. package/dist/speed-dial/item/speed-dial-item.d.ts +1 -0
  87. package/dist/speed-dial/root/speed-dial-root.css.js +1 -1
  88. package/dist/splitter/root/splitter-root.css.js +15 -7
  89. package/dist/splitter/root/splitter-root.d.ts +4 -0
  90. package/dist/table/cell/table-cell.css.js +1 -1
  91. package/dist/table/root/table-root.css.js +3 -1
  92. package/dist/table/root/table-root.d.ts +8 -1
  93. package/dist/table/row/table-row.css.js +9 -1
  94. package/dist/table/row/table-row.d.ts +5 -0
  95. package/dist/time-picker/root/time-picker-root.css.js +9 -4
  96. package/dist/time-picker/root/time-picker-root.d.ts +6 -0
  97. package/dist/toast/item/toast-item.css.js +9 -6
  98. package/dist/toast/item/toast-item.d.ts +10 -0
  99. package/dist/toolbar/root/toolbar-root.css.js +1 -1
  100. package/dist/toolbar/root/toolbar-root.d.ts +9 -0
  101. package/dist/toolbar/root/toolbar-root.js +4 -0
  102. package/dist/tooltip/root/tooltip-root.d.ts +9 -0
  103. package/dist/tree/item/tree-item.css.js +3 -1
  104. package/dist/tree/item/tree-item.d.ts +6 -0
  105. package/dist/tree/root/tree-root.css.js +2 -1
  106. package/dist/tree/root/tree-root.d.ts +8 -1
  107. package/dist/virtual-list/root/virtual-list-root.css.js +6 -1
  108. package/dist/virtual-list/root/virtual-list-root.d.ts +3 -0
  109. package/lint.json +1 -1
  110. package/package.json +8 -7
  111. package/types/jsx.d.ts +5934 -1679
  112. package/types/svelte.d.ts +1 -0
  113. package/types/vue.d.ts +1910 -541
  114. package/types/words.d.ts +2555 -0
@@ -6,14 +6,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessNotifications } from '@fusion.dev/helix-headless/notifications';
9
+ import { property } from 'lit/decorators.js';
9
10
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
11
  import { styles as liveStyles } from '../../shared/live/live.css.js';
12
+ import { HelixNotification } from '../notification/notification.js';
11
13
  import { styles } from './notifications-root.css.js';
12
- import '../notification/notification.js';
13
14
  let HelixNotifications = class HelixNotifications extends HelixHeadlessNotifications {
14
15
  static { this.tier = 'helix-'; }
15
16
  static { this.styles = [liveStyles, collectionStateStyles, styles]; }
17
+ updated(changed) {
18
+ super.updated(changed);
19
+ for (const item of this.items) {
20
+ if (item instanceof HelixNotification) {
21
+ item.feedSeparation = this.separation;
22
+ }
23
+ }
24
+ }
16
25
  };
26
+ __decorate([
27
+ property({ reflect: true })
28
+ ], HelixNotifications.prototype, "separation", void 0);
17
29
  HelixNotifications = __decorate([
18
30
  customElement('helix-notifications')
19
31
  ], HelixNotifications);
@@ -63,6 +63,11 @@ import { type OrbState } from '../shapes.js';
63
63
  * @cssstate working - The orb shows `working`.
64
64
  */
65
65
  export declare class HelixOrb extends HelixElement {
66
+ /**
67
+ * The key this family's words are registered under, its tag:
68
+ * `registerWords('de', { 'helix-orb': { stateLabels: { thinking: 'Denkt nach' } } })`.
69
+ */
70
+ static words: string;
66
71
  static styles: CSSResultGroup;
67
72
  /**
68
73
  * Says each new state politely, such as "Working" and then "Done".
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, HelixElement, hostAria, PaintGateController, readColor, wordsConverter, } from '@fusion.dev/helix-core';
7
+ import { customElement, HelixElement, hostAria, PaintGateController, readColor, words, wordsConverter, } from '@fusion.dev/helix-core';
8
8
  import { html, nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { styles as liveStyles } from '../../shared/live/live.css.js';
@@ -14,15 +14,6 @@ const MORPH_NEAR = 380;
14
14
  const MORPH_REACH = 580;
15
15
  const LIGHT_Y = 0.36;
16
16
  const STILL_PHASE = 1.4;
17
- const LABELS = {
18
- connecting: 'Connecting',
19
- done: 'Done',
20
- fetching: 'Fetching',
21
- listening: 'Listening',
22
- thinking: 'Thinking',
23
- waiting: 'Waiting',
24
- working: 'Working',
25
- };
26
17
  const GRAY = [128, 128, 128];
27
18
  let HelixOrb = class HelixOrb extends HelixElement {
28
19
  constructor() {
@@ -30,7 +21,15 @@ let HelixOrb = class HelixOrb extends HelixElement {
30
21
  this.announce = false;
31
22
  this.label = '';
32
23
  this.state = 'thinking';
33
- this.stateLabels = {};
24
+ this.stateLabels = {
25
+ connecting: 'Connecting',
26
+ done: 'Done',
27
+ fetching: 'Fetching',
28
+ listening: 'Listening',
29
+ thinking: 'Thinking',
30
+ waiting: 'Waiting',
31
+ working: 'Working',
32
+ };
34
33
  this.context = null;
35
34
  this.gate = new PaintGateController(this, {
36
35
  canRun: () => !!this.context && !this.lost,
@@ -69,6 +68,7 @@ let HelixOrb = class HelixOrb extends HelixElement {
69
68
  this.gate.play();
70
69
  };
71
70
  }
71
+ static { this.words = 'helix-orb'; }
72
72
  static { this.styles = [liveStyles, styles]; }
73
73
  willUpdate(changed) {
74
74
  super.willUpdate(changed);
@@ -95,7 +95,7 @@ let HelixOrb = class HelixOrb extends HelixElement {
95
95
  : 'thinking';
96
96
  }
97
97
  get word() {
98
- return this.stateLabels?.[this.shown] || LABELS[this.shown];
98
+ return this.stateLabels?.[this.shown] ?? '';
99
99
  }
100
100
  render() {
101
101
  return html `<canvas part="canvas" aria-hidden="true"></canvas>${this.announce ? html `<span part="live">${this.word}</span>` : nothing}`;
@@ -264,6 +264,7 @@ __decorate([
264
264
  property()
265
265
  ], HelixOrb.prototype, "state", void 0);
266
266
  __decorate([
267
+ words,
267
268
  property({ attribute: 'state-labels', converter: wordsConverter })
268
269
  ], HelixOrb.prototype, "stateLabels", void 0);
269
270
  HelixOrb = __decorate([
@@ -1,37 +1,37 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
- export const styles = createSheet(`:host {align-items: center;display: flex;flex-wrap: wrap;font-size: var(--helix-text-sm);gap: var(--pagination-gap, var(--helix-space-2xs));}[part="list"] {align-items: center;display: flex;flex-wrap: wrap;gap: var(--pagination-gap, var(--helix-space-2xs));list-style: none;margin: var(--helix-space-none);padding: var(--helix-space-none);}[part="item"] {display: inline-flex;}[part="first"],
2
+ export const styles = createSheet(`:host {align-items: center;display: flex;flex-wrap: wrap;font-size: var(--pagination-font-size, var(--helix-text-sm));gap: var(--pagination-gap, var(--helix-space-2xs));}[part="list"] {align-items: center;display: flex;flex-wrap: wrap;gap: var(--pagination-gap, var(--helix-space-2xs));list-style: none;margin: var(--helix-space-none);padding: var(--helix-space-none);}[part="item"] {display: inline-flex;}[part="first"],
3
3
  [part="gap"],
4
4
  [part="last"],
5
5
  [part~="page"],
6
6
  [part="previous"],
7
- [part="next"] {align-items: center;appearance: none;background-color: transparent;block-size: var(--pagination-size, var(--helix-size-control-tight));border: var(--helix-border-thin) solid transparent;border-radius: var(--helix-radii-sm);color: var(--helix-color-foreground-muted);cursor: pointer;display: inline-flex;font: inherit;font-variant-numeric: tabular-nums;font-weight: var(--helix-weight-medium);justify-content: center;min-inline-size: var(--pagination-size, var(--helix-size-control-tight));padding-inline: var(--helix-space-2xs);text-decoration: none;transition:
7
+ [part="next"] {align-items: center;appearance: none;background-color: transparent;block-size: var(--pagination-size, var(--helix-size-control-tight));border: var(--helix-border-thin) solid transparent;border-radius: var(--pagination-radius, var(--helix-radii-sm));color: var(--pagination-foreground-color, var(--helix-color-foreground-muted));cursor: pointer;display: inline-flex;font: inherit;font-variant-numeric: tabular-nums;font-weight: var(--pagination-font-weight, var(--helix-weight-medium));justify-content: center;min-inline-size: var(--pagination-size, var(--helix-size-control-tight));padding-inline: var(--pagination-padding, var(--helix-space-2xs));text-decoration: none;transition:
8
8
  background-color var(--helix-duration-fast) var(--helix-easing-standard),
9
9
  color var(--helix-duration-fast) var(--helix-easing-standard);}[part="first"]:hover,
10
10
  [part="gap"]:hover,
11
11
  [part="last"]:hover,
12
12
  [part~="page"]:hover,
13
13
  [part="previous"]:hover,
14
- [part="next"]:hover {background-color: var(--pagination-hover-color, var(--helix-color-surface-sunken));color: var(--helix-color-foreground);}[part="first"]:focus-visible,
14
+ [part="next"]:hover {background-color: var(--pagination-hover-color, var(--helix-color-surface-sunken));color: var(--pagination-hover-foreground-color, var(--helix-color-foreground));}[part="first"]:focus-visible,
15
15
  [part="gap"]:focus-visible,
16
16
  [part="last"]:focus-visible,
17
17
  [part~="page"]:focus-visible,
18
18
  [part="previous"]:focus-visible,
19
19
  [part="next"]:focus-visible {outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);outline-offset: var(--helix-size-focus-offset);}[part~="page"][aria-current="page"],
20
- [part~="page"][aria-current="page"]:hover {background-color: var(--pagination-current-color, var(--helix-color-surface-raised));border-color: var(--helix-color-border);color: var(--helix-color-foreground);font-weight: var(--helix-weight-semibold);}[part="first"]:disabled,
20
+ [part~="page"][aria-current="page"]:hover {background-color: var(--pagination-current-color, var(--helix-color-surface-raised));border-color: var(--pagination-current-border-color, var(--helix-color-border));color: var(--pagination-current-foreground-color, var(--helix-color-foreground));font-weight: var(--pagination-current-font-weight, var(--helix-weight-semibold));}[part="first"]:disabled,
21
21
  [part="last"]:disabled,
22
22
  [part="previous"]:disabled,
23
23
  [part="next"]:disabled,
24
24
  [part="first"][aria-disabled="true"],
25
25
  [part="last"][aria-disabled="true"],
26
26
  [part="previous"][aria-disabled="true"],
27
- [part="next"][aria-disabled="true"] {color: var(--helix-color-foreground-subtle);cursor: default;opacity: 0.5;pointer-events: none;}[part="first"] svg,
27
+ [part="next"][aria-disabled="true"] {color: var(--pagination-disabled-foreground-color, var(--helix-color-foreground-subtle));cursor: default;opacity: var(--pagination-disabled-opacity, 0.5);pointer-events: none;}[part="first"] svg,
28
28
  [part="last"] svg,
29
29
  [part="previous"] svg,
30
30
  [part="next"] svg,
31
31
  ::slotted([slot="first-icon"]),
32
32
  ::slotted([slot="last-icon"]),
33
33
  ::slotted([slot="previous-icon"]),
34
- ::slotted([slot="next-icon"]) {block-size: var(--helix-size-icon-tight);inline-size: var(--helix-size-icon-tight);}:host(:dir(rtl)) ::slotted([slot="first-icon"]),
34
+ ::slotted([slot="next-icon"]) {block-size: var(--pagination-icon-size, var(--helix-size-icon-tight));inline-size: var(--pagination-icon-size, var(--helix-size-icon-tight));}:host(:dir(rtl)) ::slotted([slot="first-icon"]),
35
35
  :host(:dir(rtl)) ::slotted([slot="last-icon"]),
36
36
  :host(:dir(rtl)) ::slotted([slot="previous-icon"]),
37
- :host(:dir(rtl)) ::slotted([slot="next-icon"]) {scale: -1 1;}[part="gap"] {color: var(--helix-color-foreground-subtle);user-select: none;}:host(:state(empty)) {display: none;}[part="status"] {color: var(--helix-color-foreground-muted);font-variant-numeric: tabular-nums;font-weight: var(--helix-weight-medium);padding-inline: var(--helix-space-xs);}@media print {:host {display: none;}}`);
37
+ :host(:dir(rtl)) ::slotted([slot="next-icon"]) {scale: -1 1;}[part="gap"] {color: var(--pagination-ellipsis-foreground-color, var(--helix-color-foreground-subtle));user-select: none;}:host(:state(empty)) {display: none;}[part="status"] {color: var(--pagination-status-foreground-color, var(--helix-color-foreground-muted));font-variant-numeric: tabular-nums;font-weight: var(--pagination-font-weight, var(--helix-weight-medium));padding-inline: var(--helix-space-xs);}@media print {:host {display: none;}}`);
@@ -35,10 +35,24 @@ import type { CSSResultGroup } from 'lit';
35
35
  * @csspart previous - The control that moves back one page.
36
36
  * @csspart status - The text that says which page you are on, in `compact`.
37
37
  *
38
+ * @cssproperty --pagination-current-border-color - Edge of the page you are on.
38
39
  * @cssproperty --pagination-current-color - Fill behind the page you are on.
40
+ * @cssproperty --pagination-current-font-weight - Weight of the number of the page you are on.
41
+ * @cssproperty --pagination-current-foreground-color - Color of the number of the page you are on.
42
+ * @cssproperty --pagination-disabled-foreground-color - Color of a first, previous, next or last control with nowhere to go.
43
+ * @cssproperty --pagination-disabled-opacity - How faint a control with nowhere to go is drawn.
44
+ * @cssproperty --pagination-ellipsis-foreground-color - Color of the control that stands in for hidden pages.
45
+ * @cssproperty --pagination-font-size - Size of the numbers and the status text.
46
+ * @cssproperty --pagination-font-weight - Weight of the numbers and the status text.
47
+ * @cssproperty --pagination-foreground-color - Color of the numbers and the marks on every control.
39
48
  * @cssproperty --pagination-gap - Space between one control and the next.
40
49
  * @cssproperty --pagination-hover-color - Fill behind a control under the pointer.
50
+ * @cssproperty --pagination-hover-foreground-color - Color of a control's number or mark under the pointer.
51
+ * @cssproperty --pagination-icon-size - Size of the mark on a first, previous, next or last control, drawn or slotted.
52
+ * @cssproperty --pagination-padding - Space either side of a control's number or mark.
53
+ * @cssproperty --pagination-radius - Corner radius of every control in the row.
41
54
  * @cssproperty --pagination-size - The box every control in the row takes.
55
+ * @cssproperty --pagination-status-foreground-color - Color of the text that says which page you are on, in `compact`.
42
56
  */
43
57
  export declare class HelixPagination extends HelixHeadlessPagination {
44
58
  static styles: CSSResultGroup;
@@ -1,2 +1,2 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
- export const styles = createSheet(`:host {display: inline-flex;}:host(:state(empty)) {display: none;}[part="control"] {align-items: center;flex-direction: row;gap: var(--helix-space-xs);}[part="control"]::part(label) {padding-block-end: var(--helix-space-none);white-space: nowrap;}[part="control"]::part(trigger) {block-size: var(--helix-size-control-tight);}`);
2
+ export const styles = createSheet(`:host {display: inline-flex;}:host(:state(empty)) {display: none;}[part="control"] {align-items: center;flex-direction: row;gap: var(--pagination-size-gap, var(--helix-space-xs));}[part="control"]::part(label) {padding-block-end: var(--helix-space-none);white-space: nowrap;}[part="control"]::part(trigger) {block-size: var(--pagination-size, var(--helix-size-control-tight));}`);
@@ -20,6 +20,9 @@ import '../../select/index.js';
20
20
  * @documentation https://fusion.dev/helix/components/pagination
21
21
  *
22
22
  * @csspart control - The select.
23
+ *
24
+ * @cssproperty --pagination-size - Height of the select's trigger, the same hook that sizes every control in the page row.
25
+ * @cssproperty --pagination-size-gap - Space between the label and the select.
23
26
  */
24
27
  export declare class HelixPaginationSize extends HelixHeadlessPaginationSize {
25
28
  static tier: string;
@@ -1,2 +1,2 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
- export const styles = createSheet(`:host {color: var(--helix-color-foreground-subtle);display: inline-block;font-family: var(--helix-font-sans);font-size: var(--helix-text-sm);font-variant-numeric: tabular-nums;}`);
2
+ export const styles = createSheet(`:host {color: var(--pagination-summary-foreground-color, var(--helix-color-foreground-subtle));display: inline-block;font-family: var(--helix-font-sans);font-size: var(--pagination-font-size, var(--helix-text-sm));font-variant-numeric: tabular-nums;}`);
@@ -11,6 +11,9 @@ import type { CSSResultGroup } from 'lit';
11
11
  * @status stable
12
12
  * @aliases Result count, Range
13
13
  * @documentation https://fusion.dev/helix/components/pagination
14
+ *
15
+ * @cssproperty --pagination-font-size - Size of the text, the same hook that sizes the page numbers.
16
+ * @cssproperty --pagination-summary-foreground-color - Color of the text.
14
17
  */
15
18
  export declare class HelixPaginationSummary extends HelixHeadlessPaginationSummary {
16
19
  static styles: CSSResultGroup;
@@ -1,2 +1,2 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
- export const styles = createSheet(`:host {--_qr-size: var(--qr-code-size, 12rem);background-color: var(--qr-code-background-color, var(--helix-color-foreground-media));block-size: var(--_qr-size);border-radius: var(--helix-radii-sm);color: var(--qr-code-color, var(--helix-color-surface-media));display: block;inline-size: var(--_qr-size);position: relative;}[part="code"] {block-size: 100%;display: block;inline-size: 100%;}[part="fallback"] {align-items: center;block-size: 100%;box-sizing: border-box;display: flex;justify-content: center;overflow-wrap: anywhere;padding: var(--helix-space-md);text-align: center;}[part="finders"] {fill: var(--qr-code-finder-color, currentColor);}[part="logo"] {align-items: center;background-color: var(--qr-code-background-color, var(--helix-color-foreground-media));border-radius: var(--helix-radii-sm);box-sizing: border-box;display: flex;inset-block-start: 50%;inset-inline-start: 50%;justify-content: center;max-block-size: var(--qr-code-logo-size, 27%);max-inline-size: var(--qr-code-logo-size, 27%);min-block-size: var(--qr-code-logo-size, 27%);min-inline-size: var(--qr-code-logo-size, 27%);padding: var(--qr-code-logo-padding, 6%);position: absolute;translate: -50% -50%;}[part="logo"] slot::slotted(*) {block-size: 100%;inline-size: 100%;object-fit: contain;}[part="logo"][hidden] {display: none;}@media print {:host {print-color-adjust: economy;}}`);
2
+ export const styles = createSheet(`:host {--_qr-size: var(--qr-code-size, 12rem);background-color: var(--qr-code-background-color, var(--helix-color-foreground-media));block-size: var(--_qr-size);border-radius: var(--qr-code-radius, var(--helix-radii-sm));color: var(--qr-code-color, var(--helix-color-surface-media));display: block;inline-size: var(--_qr-size);position: relative;}[part="code"] {block-size: 100%;display: block;inline-size: 100%;}[part="fallback"] {align-items: center;block-size: 100%;box-sizing: border-box;display: flex;justify-content: center;overflow-wrap: anywhere;padding: var(--qr-code-fallback-padding, var(--helix-space-md));text-align: center;}[part="finders"] {fill: var(--qr-code-finder-color, currentColor);}[part="logo"] {align-items: center;background-color: var(--qr-code-background-color, var(--helix-color-foreground-media));border-radius: var(--qr-code-logo-radius, var(--helix-radii-sm));box-sizing: border-box;display: flex;inset-block-start: 50%;inset-inline-start: 50%;justify-content: center;max-block-size: var(--qr-code-logo-size, 27%);max-inline-size: var(--qr-code-logo-size, 27%);min-block-size: var(--qr-code-logo-size, 27%);min-inline-size: var(--qr-code-logo-size, 27%);padding: var(--qr-code-logo-padding, 6%);position: absolute;translate: -50% -50%;}:host(:dir(rtl)) [part="logo"] {translate: 50% -50%;}[part="logo"] slot::slotted(*) {block-size: 100%;inline-size: 100%;object-fit: contain;}[part="logo"][hidden] {display: none;}@media print {:host {print-color-adjust: economy;}}`);
@@ -19,11 +19,14 @@ import type { CSSResultGroup } from 'lit';
19
19
  *
20
20
  * @cssproperty --qr-code-background-color - The fill behind the modules, including the quiet zone and the logo's box.
21
21
  * @cssproperty --qr-code-color - Color of the dark modules. Defaults to the dark media ink, which is the same in both color schemes so the code scans.
22
+ * @cssproperty --qr-code-fallback-padding - The space around the fallback inside the square.
22
23
  * @cssproperty --qr-code-finder-color - Color of the three corner squares. Defaults
23
24
  * to the color of the modules.
24
25
  * @cssproperty --qr-code-logo-padding - The clear space around the center logo.
26
+ * @cssproperty --qr-code-logo-radius - The corner radius of the logo's box.
25
27
  * @cssproperty --qr-code-logo-size - How much of the center a logo can cover.
26
28
  * Defaults to `27%`, which `H` correction allows, because it can lose thirty percent.
29
+ * @cssproperty --qr-code-radius - The corner radius of the square.
27
30
  * @cssproperty --qr-code-size - How wide the square is. Defaults to `12rem`.
28
31
  */
29
32
  export declare class HelixQrCode extends HelixHeadlessQrCode {
@@ -80,6 +80,11 @@ export type PreviewMessage = PreviewConsole | PreviewPress | PreviewReady | Prev
80
80
  * @cssstate loading - While the frame's document loads, until it can take the example.
81
81
  */
82
82
  export declare class HelixSandboxPreview extends HelixElement {
83
+ /**
84
+ * The key this part's words are registered under, its tag:
85
+ * `registerWords('de', { 'helix-sandbox-preview': { label: 'Vorschau' } })`.
86
+ */
87
+ static words: string;
83
88
  /**
84
89
  * The color mode the frame renders in.
85
90
  *
@@ -194,7 +199,15 @@ export declare class HelixSandboxPreview extends HelixElement {
194
199
  * thing on the page already entitled to both.
195
200
  */
196
201
  private static readonly target;
197
- /** Holds a coalesced send, so only one is ever queued, and drops it on disconnect. */
202
+ /**
203
+ * Holds a coalesced send, so only one is ever queued, and drops it on
204
+ * disconnect.
205
+ *
206
+ * **It renders nothing**, so it asks for no update when its wait starts or
207
+ * ends. One that did sent the source at once from that update, ahead of the
208
+ * wait, and the send at the end of the wait then cleared `failed` after the
209
+ * error it should have reported.
210
+ */
198
211
  private readonly settle;
199
212
  /**
200
213
  * Sends once the typing stops, replacing anything already waiting.
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  var HelixSandboxPreview_1;
8
- import { customElement, DelayController, HelixConsoleEvent, HelixElement, HelixResizeEvent, } from '@fusion.dev/helix-core';
8
+ import { customElement, DelayController, HelixConsoleEvent, HelixElement, HelixResizeEvent, words, } from '@fusion.dev/helix-core';
9
9
  const SETTLE = 120;
10
10
  import { html } from 'lit';
11
11
  import { property } from 'lit/decorators.js';
@@ -27,26 +27,28 @@ let HelixSandboxPreview = class HelixSandboxPreview extends HelixElement {
27
27
  if (event.source !== this.frame?.contentWindow || event.origin !== 'null') {
28
28
  return;
29
29
  }
30
- if (event.data?.type === 'helix-preview-ready') {
30
+ const data = event.data;
31
+ if (data?.type === 'helix-preview-ready') {
31
32
  this.handleFrameLoad();
32
33
  return;
33
34
  }
34
- if (event.data?.type === 'helix-preview-console') {
35
- this.dispatchEvent(new HelixConsoleEvent({ level: event.data.level, text: event.data.text }));
36
- if (event.data.uncaught) {
35
+ if (data?.type === 'helix-preview-console') {
36
+ this.dispatchEvent(new HelixConsoleEvent({ level: data.level, text: data.text }));
37
+ if (data.uncaught) {
37
38
  this.toggleState('failed', true);
38
39
  }
39
40
  }
40
- if (event.data?.type === 'helix-preview-press') {
41
+ if (data?.type === 'helix-preview-press') {
41
42
  this.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true, composed: true }));
42
43
  }
43
- if (event.data?.type === 'helix-preview-size') {
44
- this.dispatchEvent(new HelixResizeEvent({ size: event.data.size }));
44
+ if (data?.type === 'helix-preview-size') {
45
+ this.dispatchEvent(new HelixResizeEvent({ size: data.size }));
45
46
  }
46
47
  };
47
- this.settle = new DelayController(this);
48
+ this.settle = new DelayController(this, { renders: false });
48
49
  }
49
50
  static { HelixSandboxPreview_1 = this; }
51
+ static { this.words = 'helix-sandbox-preview'; }
50
52
  get frame() {
51
53
  return this.renderRoot.querySelector('iframe');
52
54
  }
@@ -123,6 +125,7 @@ __decorate([
123
125
  property()
124
126
  ], HelixSandboxPreview.prototype, "direction", void 0);
125
127
  __decorate([
128
+ words,
126
129
  property()
127
130
  ], HelixSandboxPreview.prototype, "label", void 0);
128
131
  __decorate([
@@ -55,6 +55,11 @@ import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
55
55
  * @cssstate panel-collapsed - While there is a panel and it is no taller than `panel-collapsed-size`.
56
56
  */
57
57
  export declare class HelixSandbox extends HelixElement {
58
+ /**
59
+ * The key this family's words are registered under, its tag:
60
+ * `registerWords('de', { 'helix-sandbox': { panelLabel: 'Bereich anpassen' } })`.
61
+ */
62
+ static words: string;
58
63
  /**
59
64
  * The name of the corner handle that moves both dividers at once, read by
60
65
  * screen readers.
@@ -132,9 +137,9 @@ export declare class HelixSandbox extends HelixElement {
132
137
  panelSize: number;
133
138
  /**
134
139
  * The name of the divider between the panes, read by screen readers.
135
- *
136
- * Empty names the lead pane, "Resize source pane" or "Resize preview pane",
137
- * since the divider's value is that pane's share.
140
+ * `{pane}` is the lead pane, `source` or `preview`, whose share the
141
+ * divider's value is, so each is a whole sentence: "Resize source pane" or
142
+ * "Resize preview pane".
138
143
  */
139
144
  separatorLabel: string;
140
145
  /**
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, HelixBeforePanelResizeEvent, HelixBeforeSplitEvent, HelixElement, HelixPanelResizeEvent, HelixSplitEvent, requestChange, } from '@fusion.dev/helix-core';
7
+ import { customElement, formatWords, HelixBeforePanelResizeEvent, HelixBeforeSplitEvent, HelixElement, HelixPanelResizeEvent, HelixSplitEvent, requestChange, words, } from '@fusion.dev/helix-core';
8
8
  import '../../splitter/index.js';
9
9
  import { html } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
@@ -22,7 +22,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
22
22
  this.panelCollapsedSize = 0;
23
23
  this.panelLabel = 'Resize panel';
24
24
  this.panelSize = DEFAULT_PANEL;
25
- this.separatorLabel = '';
25
+ this.separatorLabel = '{pane, select, preview {Resize preview pane} other {Resize source pane}}';
26
26
  this.split = DEFAULT_SPLIT;
27
27
  this.hasPanel = false;
28
28
  this.bodyHeight = 0;
@@ -98,6 +98,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
98
98
  this.hasPanel = this.querySelector(':scope > [slot="panel"]') !== null;
99
99
  };
100
100
  }
101
+ static { this.words = 'helix-sandbox'; }
101
102
  shareOf(size) {
102
103
  if (this.bodyHeight <= 0) {
103
104
  return 0;
@@ -249,7 +250,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
249
250
  const second = first === 'preview' ? 'source' : 'preview';
250
251
  const split = Number.isFinite(this.split) ? this.split : DEFAULT_SPLIT;
251
252
  const home = Number.isFinite(this.defaultSplit) ? this.defaultSplit : DEFAULT_SPLIT;
252
- const label = this.separatorLabel || (first === 'preview' ? 'Resize preview pane' : 'Resize source pane');
253
+ const label = formatWords(this, 'separatorLabel', { pane: first });
253
254
  return html `<slot name="toolbar"></slot>
254
255
  <helix-splitter part="body" ?data-panel=${this.hasPanel} exportparts="separator, corner"
255
256
  orientation="vertical" collapsed-size=${this.panelSliver} corner-label=${this.cornerLabel}
@@ -269,6 +270,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
269
270
  static { this.styles = styles; }
270
271
  };
271
272
  __decorate([
273
+ words,
272
274
  property({ attribute: 'corner-label' })
273
275
  ], HelixSandbox.prototype, "cornerLabel", void 0);
274
276
  __decorate([
@@ -287,12 +289,14 @@ __decorate([
287
289
  property({ attribute: 'panel-collapsed-size', type: Number })
288
290
  ], HelixSandbox.prototype, "panelCollapsedSize", void 0);
289
291
  __decorate([
292
+ words,
290
293
  property({ attribute: 'panel-label' })
291
294
  ], HelixSandbox.prototype, "panelLabel", void 0);
292
295
  __decorate([
293
296
  property({ attribute: 'panel-size', type: Number })
294
297
  ], HelixSandbox.prototype, "panelSize", void 0);
295
298
  __decorate([
299
+ words,
296
300
  property({ attribute: 'separator-label' })
297
301
  ], HelixSandbox.prototype, "separatorLabel", void 0);
298
302
  __decorate([
@@ -50,6 +50,11 @@ import { type SandboxTokenizer } from '../tokens.js';
50
50
  * @cssproperty --sandbox-source-tag-color - Color of a `tag` run, under `tokenize`. Defaults to `--helix-color-syntax-tag`.
51
51
  */
52
52
  export declare class HelixSandboxSource extends HelixElement {
53
+ /**
54
+ * The key this part's words are registered under, its tag:
55
+ * `registerWords('de', { 'helix-sandbox-source': { fieldLabel: 'Quelltext' } })`.
56
+ */
57
+ static words: string;
53
58
  /**
54
59
  * The editable region's name, read by screen readers.
55
60
  */
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, HelixBeforeEditEvent, HelixCaretEvent, HelixEditEvent, HelixElement, onUnlessFalse, restoreValue, } from '@fusion.dev/helix-core';
7
+ import { customElement, HelixBeforeEditEvent, HelixCaretEvent, HelixEditEvent, HelixElement, onUnlessFalse, restoreValue, words, } from '@fusion.dev/helix-core';
8
8
  import { html, nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { drawnRuns } from '../tokens.js';
@@ -54,6 +54,7 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
54
54
  this.edit(field, field.value);
55
55
  };
56
56
  }
57
+ static { this.words = 'helix-sandbox-source'; }
57
58
  edit(field, next) {
58
59
  const request = new HelixBeforeEditEvent({ value: next });
59
60
  const accepted = this.dispatchEvent(request);
@@ -101,9 +102,11 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
101
102
  static { this.styles = styles; }
102
103
  };
103
104
  __decorate([
105
+ words,
104
106
  property({ attribute: 'field-label' })
105
107
  ], HelixSandboxSource.prototype, "fieldLabel", void 0);
106
108
  __decorate([
109
+ words,
107
110
  property({ attribute: 'keys-description' })
108
111
  ], HelixSandboxSource.prototype, "keysDescription", void 0);
109
112
  __decorate([
@@ -29,6 +29,11 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
29
29
  * @cssproperty --sandbox-status-bar-color - Color of the bar's text.
30
30
  */
31
31
  export declare class HelixSandboxStatusBar extends HelixElement {
32
+ /**
33
+ * The key this part's words are registered under, its tag:
34
+ * `registerWords('de', { 'helix-sandbox-status-bar': { positionLabel: 'Z. {line}, Sp. {column}' } })`.
35
+ */
36
+ static words: string;
32
37
  /**
33
38
  * One-based column of the cursor.
34
39
  *
@@ -45,6 +50,11 @@ export declare class HelixSandboxStatusBar extends HelixElement {
45
50
  * Absent shows no readout.
46
51
  */
47
52
  line?: number;
53
+ /**
54
+ * How the cursor's place reads. `{line}` and `{column}` are the line and
55
+ * the column, written as an editor writes them, without grouping.
56
+ */
57
+ positionLabel: string;
48
58
  /** How the position reads, or nothing when there is no cursor to report. */
49
59
  private get position();
50
60
  protected render(): TemplateResult;
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, HelixElement } from '@fusion.dev/helix-core';
7
+ import { customElement, formatWords, HelixElement, words } from '@fusion.dev/helix-core';
8
8
  import { html, nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { styles } from './sandbox-status-bar.css.js';
@@ -15,11 +15,19 @@ const LABELS = {
15
15
  tsx: 'TSX',
16
16
  };
17
17
  let HelixSandboxStatusBar = class HelixSandboxStatusBar extends HelixElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.positionLabel = 'Ln {line}, Col {column}';
21
+ }
22
+ static { this.words = 'helix-sandbox-status-bar'; }
18
23
  get position() {
19
24
  if (this.line === undefined || this.column === undefined) {
20
25
  return undefined;
21
26
  }
22
- return `Ln ${this.line}, Col ${this.column}`;
27
+ return formatWords(this, 'positionLabel', {
28
+ column: String(this.column),
29
+ line: String(this.line),
30
+ });
23
31
  }
24
32
  render() {
25
33
  const language = this.language;
@@ -42,6 +50,10 @@ __decorate([
42
50
  __decorate([
43
51
  property({ type: Number })
44
52
  ], HelixSandboxStatusBar.prototype, "line", void 0);
53
+ __decorate([
54
+ words,
55
+ property({ attribute: 'position-label' })
56
+ ], HelixSandboxStatusBar.prototype, "positionLabel", void 0);
45
57
  HelixSandboxStatusBar = __decorate([
46
58
  customElement('helix-sandbox-status-bar')
47
59
  ], HelixSandboxStatusBar);
@@ -43,6 +43,11 @@ import { type ConsoleLevel } from '../levels.js';
43
43
  * @cssproperty --sandbox-terminal-size - Height of the scrolling region.
44
44
  */
45
45
  export declare class HelixSandboxTerminal extends HelixElement {
46
+ /**
47
+ * The key this part's words are registered under, its tag:
48
+ * `registerWords('de', { 'helix-sandbox-terminal': { clearLabel: 'Leeren' } })`.
49
+ */
50
+ static words: string;
46
51
  /**
47
52
  * The clear button's text, under `controls`.
48
53
  */
@@ -81,6 +86,12 @@ export declare class HelixSandboxTerminal extends HelixElement {
81
86
  * that does not parse is no words.
82
87
  */
83
88
  levelWords: Partial<Record<ConsoleLevel, string>>;
89
+ /**
90
+ * What a screen reader is told a repeated line's count is. `{count}` is how
91
+ * many times it was written, two or more, in the locale, and a language
92
+ * writes the forms it has: `{count, plural, few {# razy} other {# razy}}`.
93
+ */
94
+ timesLabel: string;
84
95
  private entries;
85
96
  /**
86
97
  * Whether the reader is at the bottom, and so wants to follow new output.