@slotted/angular 0.1.0-beta.2 → 0.1.0-beta.4

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 (150) hide show
  1. package/docs/app-shell.json +1 -1
  2. package/docs/button-group.json +1 -0
  3. package/docs/button-group.md +1 -1
  4. package/docs/button.json +45 -11
  5. package/docs/button.md +10 -6
  6. package/docs/calendar.json +7 -0
  7. package/docs/calendar.md +1 -0
  8. package/docs/chart.json +7 -0
  9. package/docs/chart.md +1 -0
  10. package/docs/currency-field.json +32 -1
  11. package/docs/currency-field.md +4 -1
  12. package/docs/date-field.json +8 -1
  13. package/docs/date-field.md +2 -1
  14. package/docs/date-picker.examples.md +36 -0
  15. package/docs/date-picker.json +20 -5
  16. package/docs/date-picker.md +5 -4
  17. package/docs/dialog.examples.md +20 -0
  18. package/docs/dialog.json +14 -2
  19. package/docs/dialog.md +1 -1
  20. package/docs/guidelines/composition.md +10 -0
  21. package/docs/guidelines/index.md +2 -0
  22. package/docs/guidelines/list-pages.md +12 -1
  23. package/docs/list.json +19 -1
  24. package/docs/list.md +3 -1
  25. package/docs/page.json +1 -0
  26. package/docs/page.md +1 -0
  27. package/docs/popover.json +1 -1
  28. package/docs/segmented-control.json +29 -1
  29. package/docs/segmented-control.md +17 -1
  30. package/docs/skills/compose-screen/SKILL.md +7 -0
  31. package/docs/skills/theme-app/SKILL.md +5 -0
  32. package/docs/split-button.json +1 -0
  33. package/docs/split-button.md +1 -1
  34. package/docs/stat-card.json +1 -0
  35. package/docs/stat-card.md +1 -1
  36. package/docs/table.examples.md +1 -1
  37. package/docs/table.json +83 -1
  38. package/docs/table.md +12 -1
  39. package/docs/text-field.json +1 -1
  40. package/docs/text-field.md +1 -1
  41. package/docs/toggle-group.json +14 -3
  42. package/docs/toggle-group.md +3 -3
  43. package/docs/toggle.json +12 -3
  44. package/docs/toggle.md +3 -3
  45. package/docs/tokens.md +25 -1
  46. package/docs/tour.json +1 -1
  47. package/fesm2022/slotted-angular-app-shell.mjs +48 -16
  48. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  49. package/fesm2022/slotted-angular-button-group.mjs +4 -4
  50. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  51. package/fesm2022/slotted-angular-button.mjs +51 -19
  52. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  53. package/fesm2022/slotted-angular-calendar.mjs +158 -33
  54. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  55. package/fesm2022/slotted-angular-cascader.mjs +1 -1
  56. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  57. package/fesm2022/slotted-angular-chart.mjs +41 -20
  58. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  59. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  60. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  61. package/fesm2022/slotted-angular-combobox.mjs +25 -4
  62. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  63. package/fesm2022/slotted-angular-currency-field.mjs +59 -8
  64. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  65. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  66. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  67. package/fesm2022/slotted-angular-data-grid.mjs +4 -4
  68. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  69. package/fesm2022/slotted-angular-data-list.mjs +2 -2
  70. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  71. package/fesm2022/slotted-angular-date-field.mjs +35 -12
  72. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  73. package/fesm2022/slotted-angular-date-picker.mjs +91 -27
  74. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  75. package/fesm2022/slotted-angular-date-range-picker.mjs +1 -1
  76. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  77. package/fesm2022/slotted-angular-datetime-picker.mjs +1 -1
  78. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  79. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1 -1
  80. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  81. package/fesm2022/slotted-angular-dialog.mjs +4 -4
  82. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  83. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  84. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  85. package/fesm2022/slotted-angular-filter-bar.mjs +9 -9
  86. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  87. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  88. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  89. package/fesm2022/slotted-angular-list.mjs +28 -17
  90. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  91. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  92. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  93. package/fesm2022/slotted-angular-multi-select.mjs +24 -3
  94. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  95. package/fesm2022/slotted-angular-notification-center.mjs +1 -1
  96. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  97. package/fesm2022/slotted-angular-page.mjs +20 -1
  98. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  99. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  100. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  101. package/fesm2022/slotted-angular-segmented-control.mjs +25 -5
  102. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  103. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  104. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  105. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  106. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  107. package/fesm2022/slotted-angular-table.mjs +107 -9
  108. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  109. package/fesm2022/slotted-angular-toggle-group.mjs +17 -4
  110. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  111. package/fesm2022/slotted-angular-toggle.mjs +2 -2
  112. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  113. package/fesm2022/slotted-angular-tour.mjs +1 -1
  114. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  115. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  116. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  117. package/fesm2022/slotted-angular-wizard.mjs +1 -1
  118. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  119. package/package.json +3 -3
  120. package/types/slotted-angular-app-shell.d.ts +6 -0
  121. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  122. package/types/slotted-angular-button-group.d.ts +1 -1
  123. package/types/slotted-angular-button.d.ts +33 -13
  124. package/types/slotted-angular-button.d.ts.map +1 -1
  125. package/types/slotted-angular-calendar.d.ts +28 -2
  126. package/types/slotted-angular-calendar.d.ts.map +1 -1
  127. package/types/slotted-angular-chart.d.ts +9 -0
  128. package/types/slotted-angular-chart.d.ts.map +1 -1
  129. package/types/slotted-angular-combobox.d.ts +4 -0
  130. package/types/slotted-angular-combobox.d.ts.map +1 -1
  131. package/types/slotted-angular-currency-field.d.ts +25 -3
  132. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  133. package/types/slotted-angular-date-field.d.ts +11 -1
  134. package/types/slotted-angular-date-field.d.ts.map +1 -1
  135. package/types/slotted-angular-date-picker.d.ts +38 -11
  136. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  137. package/types/slotted-angular-list.d.ts +42 -27
  138. package/types/slotted-angular-list.d.ts.map +1 -1
  139. package/types/slotted-angular-multi-select.d.ts +4 -0
  140. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  141. package/types/slotted-angular-page.d.ts.map +1 -1
  142. package/types/slotted-angular-segmented-control.d.ts +15 -2
  143. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  144. package/types/slotted-angular-split-button.d.ts +2 -2
  145. package/types/slotted-angular-table.d.ts +59 -5
  146. package/types/slotted-angular-table.d.ts.map +1 -1
  147. package/types/slotted-angular-toggle-group.d.ts +8 -2
  148. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  149. package/types/slotted-angular-toggle.d.ts +1 -1
  150. package/types/slotted-angular-toggle.d.ts.map +1 -1
@@ -111,7 +111,7 @@ class SlList {
111
111
  resolvedInset = computed(() => (this.inset() ?? this.defaults.inset) === true, /* @ts-ignore */
112
112
  ...(ngDevMode ? [{ debugName: "resolvedInset" }] : /* istanbul ignore next */ []));
113
113
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlList, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlList, isStandalone: true, selector: "ul[slList], ol[slList]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, marker: { classPropertyName: "marker", publicName: "marker", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "list", "data-part": "root" }, properties: { "attr.role": "role()", "attr.data-variant": "resolvedVariant()", "attr.data-size": "resolvedSize()", "attr.data-marker": "resolvedMarker()", "attr.data-inset": "resolvedInset() ? '' : null", "attr.data-loading": "loading() ? '' : null", "attr.aria-busy": "loading() ? 'true' : null" } }, exportAs: ["slList"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@layer slotted.components{[data-ui=list][data-part=root],[data-ui=list] [data-part=section-list]{counter-reset:slotted-list-item;display:flex;flex-direction:column;list-style:none;margin-block:0;margin-inline:0;min-inline-size:0;padding-inline:0}[data-ui=list][data-part=root]{--_gap: var(--slotted-list-gap, var(--slotted-space-3, .375rem));--_frame-color: var(--slotted-list-border-color, var(--slotted-border-subtle, ButtonBorder));--_frame-width: var(--slotted-list-border-width, var(--slotted-border-width-thin, 1px));--_frame-radius: var(--slotted-list-radius, var(--slotted-radius-md, 6px));--_surface: var(--slotted-list-background, var(--slotted-surface, Canvas));--_section-color: var(--slotted-list-section-color, var(--slotted-text-muted, GrayText));--_section-font-size: var( --slotted-list-section-font-size, var(--slotted-font-size-xs, .75rem) );--_section-weight: var( --slotted-list-section-font-weight, var(--slotted-font-weight-semibold, 600) );--_section-inset-block: var( --slotted-list-section-padding-block, var(--slotted-space-4, .5rem) );--_row-inset-inline: var( --slotted-list-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_empty-color: var(--slotted-list-empty-color, var(--slotted-text-muted, GrayText));--_empty-inset: var(--slotted-list-empty-padding, var(--slotted-space-8, 1.5rem))}[data-ui=list][data-part=root][data-size=sm]{--_gap: var(--slotted-list-gap-sm, var(--slotted-space-2, .25rem));--_section-inset-block: var( --slotted-list-section-padding-block-sm, var(--slotted-space-3, .375rem) );--_row-inset-inline: var( --slotted-list-padding-inline-sm, var(--slotted-control-padding-inline-sm, 10px) );--_empty-inset: var(--slotted-list-empty-padding-sm, var(--slotted-space-6, 1rem))}[data-ui=list][data-part=root][data-size=lg]{--_gap: var(--slotted-list-gap-lg, var(--slotted-space-4, .5rem));--_section-inset-block: var( --slotted-list-section-padding-block-lg, var(--slotted-space-5, .75rem) );--_row-inset-inline: var( --slotted-list-padding-inline-lg, var(--slotted-control-padding-inline-lg, 16px) );--_empty-inset: var(--slotted-list-empty-padding-lg, var(--slotted-space-9, 2rem))}[data-ui=list][data-part=root][data-variant=framed]{background-color:var(--_surface);border:var(--_frame-width) solid var(--_frame-color);border-radius:var(--_frame-radius);overflow:clip}[data-ui=list][data-part=root][data-variant=separated]{row-gap:var(--_gap)}[data-ui=list] [data-part=section]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=list][data-variant=separated] [data-part=section],[data-ui=list][data-variant=separated] [data-part=section-list]{row-gap:var(--_gap)}[data-ui=list] [data-part=section-label]{color:var(--_section-color);font-size:var(--_section-font-size);font-weight:var(--_section-weight);letter-spacing:var(--slotted-list-section-letter-spacing, 0);line-height:var(--slotted-line-height-sm, 1.45);margin-block:0;min-inline-size:0;padding-block:var(--_section-inset-block);padding-inline:var(--_row-inset-inline)}[data-ui=list][data-inset] [data-part=section-label],[data-ui=list][data-inset] [data-part=empty]{padding-inline:0}[data-ui=list] [data-part=section-label][data-sticky]{background-color:var(--_surface);inset-block-start:0;position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=list] [data-part=empty]{align-items:center;color:var(--_empty-color);display:flex;flex-direction:column;justify-content:center;min-inline-size:0;padding-block:var(--_empty-inset);padding-inline:var(--_row-inset-inline);text-align:center}[data-ui=list][data-part=root][data-loading]{cursor:progress}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlList, isStandalone: true, selector: "ul[slList], ol[slList]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, marker: { classPropertyName: "marker", publicName: "marker", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "list", "data-part": "root" }, properties: { "attr.role": "role()", "attr.data-variant": "resolvedVariant()", "attr.data-size": "resolvedSize()", "attr.data-marker": "resolvedMarker()", "attr.data-inset": "resolvedInset() ? '' : null", "attr.data-loading": "loading() ? '' : null", "attr.aria-busy": "loading() ? 'true' : null" } }, exportAs: ["slList"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@layer slotted.components{[data-ui=list][data-part=root],[data-ui=list] [data-part=section-list]{counter-reset:slotted-list-item;display:flex;flex-direction:column;list-style:none;margin-block:0;margin-inline:0;min-inline-size:0;padding-inline:0}[data-ui=list][data-part=root]{--_gap: var(--slotted-list-gap, var(--slotted-space-3, .375rem));--_frame-color: var(--slotted-list-border-color, var(--slotted-border-subtle, ButtonBorder));--_frame-width: var(--slotted-list-border-width, var(--slotted-border-width-thin, 1px));--_frame-radius: var(--slotted-list-radius, var(--slotted-radius-md, 6px));--_surface: var(--slotted-list-background, var(--slotted-surface, Canvas));--_section-color: var(--slotted-list-section-color, var(--slotted-text-muted, GrayText));--_section-font-size: var( --slotted-list-section-font-size, var(--slotted-font-size-xs, .75rem) );--_section-weight: var( --slotted-list-section-font-weight, var(--slotted-font-weight-semibold, 600) );--_section-inset-block: var( --slotted-list-section-padding-block, var(--slotted-space-4, .5rem) );--_row-inset-inline: var( --slotted-list-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_empty-color: var(--slotted-list-empty-color, var(--slotted-text-muted, GrayText));--_empty-inset: var(--slotted-list-empty-padding, var(--slotted-space-8, 1.5rem))}[data-ui=list][data-part=root][data-size=sm]{--_gap: var(--slotted-list-gap-sm, var(--slotted-space-2, .25rem));--_section-inset-block: var( --slotted-list-section-padding-block-sm, var(--slotted-space-3, .375rem) );--_row-inset-inline: var( --slotted-list-padding-inline-sm, var(--slotted-control-padding-inline-sm, 10px) );--_empty-inset: var(--slotted-list-empty-padding-sm, var(--slotted-space-6, 1rem))}[data-ui=list][data-part=root][data-size=lg]{--_gap: var(--slotted-list-gap-lg, var(--slotted-space-4, .5rem));--_section-inset-block: var( --slotted-list-section-padding-block-lg, var(--slotted-space-5, .75rem) );--_row-inset-inline: var( --slotted-list-padding-inline-lg, var(--slotted-control-padding-inline-lg, 16px) );--_empty-inset: var(--slotted-list-empty-padding-lg, var(--slotted-space-9, 2rem))}[data-ui=list][data-part=root][data-variant=framed]{background-color:var(--_surface);border:var(--_frame-width) solid var(--_frame-color);border-radius:var(--_frame-radius);overflow:clip}[data-ui=list][data-part=root][data-variant=separated]{row-gap:var(--_gap)}[data-ui=list] [data-part=section]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=list][data-variant=separated] [data-part=section],[data-ui=list][data-variant=separated] [data-part=section-list]{row-gap:var(--_gap)}[data-ui=list] [data-part=section-label]{color:var(--_section-color);font-size:var(--_section-font-size);font-weight:var(--_section-weight);letter-spacing:var(--slotted-list-section-letter-spacing, 0);line-height:var(--slotted-line-height-sm, 1.45);margin-block:0;min-inline-size:0;padding-block:var(--_section-inset-block);padding-inline:var(--_row-inset-inline)}[data-ui=list][data-inset] [data-part=section-label],[data-ui=list][data-inset] [data-part=empty]{padding-inline:0}[data-ui=list] [data-part=section-label]:has(>[data-part=section-end]){align-items:baseline;display:flex;gap:var(--slotted-space-4, .5rem);justify-content:space-between}[data-ui=list] [data-part=section-end]{flex:none;font-variant-numeric:tabular-nums;white-space:nowrap}[data-ui=list] [data-part=section-label][data-variant=ruled]{border-block-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-list-section-rule-color, var(--slotted-border-subtle, GrayText));color:var(--slotted-list-section-ruled-color, var(--slotted-text, CanvasText));font-weight:var(--slotted-font-weight-medium, 500)}[data-ui=list] [data-part=section-label][data-sticky]{background-color:var(--_surface);inset-block-start:0;position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=list] [data-part=empty]{align-items:center;color:var(--_empty-color);display:flex;flex-direction:column;justify-content:center;min-inline-size:0;padding-block:var(--_empty-inset);padding-inline:var(--_row-inset-inline);text-align:center}[data-ui=list][data-part=root][data-loading]{cursor:progress}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
115
115
  }
116
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlList, decorators: [{
117
117
  type: Component,
@@ -125,21 +125,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
125
125
  '[attr.data-inset]': "resolvedInset() ? '' : null",
126
126
  '[attr.data-loading]': "loading() ? '' : null",
127
127
  '[attr.aria-busy]': "loading() ? 'true' : null",
128
- }, styles: ["@layer slotted.components{[data-ui=list][data-part=root],[data-ui=list] [data-part=section-list]{counter-reset:slotted-list-item;display:flex;flex-direction:column;list-style:none;margin-block:0;margin-inline:0;min-inline-size:0;padding-inline:0}[data-ui=list][data-part=root]{--_gap: var(--slotted-list-gap, var(--slotted-space-3, .375rem));--_frame-color: var(--slotted-list-border-color, var(--slotted-border-subtle, ButtonBorder));--_frame-width: var(--slotted-list-border-width, var(--slotted-border-width-thin, 1px));--_frame-radius: var(--slotted-list-radius, var(--slotted-radius-md, 6px));--_surface: var(--slotted-list-background, var(--slotted-surface, Canvas));--_section-color: var(--slotted-list-section-color, var(--slotted-text-muted, GrayText));--_section-font-size: var( --slotted-list-section-font-size, var(--slotted-font-size-xs, .75rem) );--_section-weight: var( --slotted-list-section-font-weight, var(--slotted-font-weight-semibold, 600) );--_section-inset-block: var( --slotted-list-section-padding-block, var(--slotted-space-4, .5rem) );--_row-inset-inline: var( --slotted-list-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_empty-color: var(--slotted-list-empty-color, var(--slotted-text-muted, GrayText));--_empty-inset: var(--slotted-list-empty-padding, var(--slotted-space-8, 1.5rem))}[data-ui=list][data-part=root][data-size=sm]{--_gap: var(--slotted-list-gap-sm, var(--slotted-space-2, .25rem));--_section-inset-block: var( --slotted-list-section-padding-block-sm, var(--slotted-space-3, .375rem) );--_row-inset-inline: var( --slotted-list-padding-inline-sm, var(--slotted-control-padding-inline-sm, 10px) );--_empty-inset: var(--slotted-list-empty-padding-sm, var(--slotted-space-6, 1rem))}[data-ui=list][data-part=root][data-size=lg]{--_gap: var(--slotted-list-gap-lg, var(--slotted-space-4, .5rem));--_section-inset-block: var( --slotted-list-section-padding-block-lg, var(--slotted-space-5, .75rem) );--_row-inset-inline: var( --slotted-list-padding-inline-lg, var(--slotted-control-padding-inline-lg, 16px) );--_empty-inset: var(--slotted-list-empty-padding-lg, var(--slotted-space-9, 2rem))}[data-ui=list][data-part=root][data-variant=framed]{background-color:var(--_surface);border:var(--_frame-width) solid var(--_frame-color);border-radius:var(--_frame-radius);overflow:clip}[data-ui=list][data-part=root][data-variant=separated]{row-gap:var(--_gap)}[data-ui=list] [data-part=section]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=list][data-variant=separated] [data-part=section],[data-ui=list][data-variant=separated] [data-part=section-list]{row-gap:var(--_gap)}[data-ui=list] [data-part=section-label]{color:var(--_section-color);font-size:var(--_section-font-size);font-weight:var(--_section-weight);letter-spacing:var(--slotted-list-section-letter-spacing, 0);line-height:var(--slotted-line-height-sm, 1.45);margin-block:0;min-inline-size:0;padding-block:var(--_section-inset-block);padding-inline:var(--_row-inset-inline)}[data-ui=list][data-inset] [data-part=section-label],[data-ui=list][data-inset] [data-part=empty]{padding-inline:0}[data-ui=list] [data-part=section-label][data-sticky]{background-color:var(--_surface);inset-block-start:0;position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=list] [data-part=empty]{align-items:center;color:var(--_empty-color);display:flex;flex-direction:column;justify-content:center;min-inline-size:0;padding-block:var(--_empty-inset);padding-inline:var(--_row-inset-inline);text-align:center}[data-ui=list][data-part=root][data-loading]{cursor:progress}}\n"] }]
128
+ }, styles: ["@layer slotted.components{[data-ui=list][data-part=root],[data-ui=list] [data-part=section-list]{counter-reset:slotted-list-item;display:flex;flex-direction:column;list-style:none;margin-block:0;margin-inline:0;min-inline-size:0;padding-inline:0}[data-ui=list][data-part=root]{--_gap: var(--slotted-list-gap, var(--slotted-space-3, .375rem));--_frame-color: var(--slotted-list-border-color, var(--slotted-border-subtle, ButtonBorder));--_frame-width: var(--slotted-list-border-width, var(--slotted-border-width-thin, 1px));--_frame-radius: var(--slotted-list-radius, var(--slotted-radius-md, 6px));--_surface: var(--slotted-list-background, var(--slotted-surface, Canvas));--_section-color: var(--slotted-list-section-color, var(--slotted-text-muted, GrayText));--_section-font-size: var( --slotted-list-section-font-size, var(--slotted-font-size-xs, .75rem) );--_section-weight: var( --slotted-list-section-font-weight, var(--slotted-font-weight-semibold, 600) );--_section-inset-block: var( --slotted-list-section-padding-block, var(--slotted-space-4, .5rem) );--_row-inset-inline: var( --slotted-list-padding-inline, var(--slotted-control-padding-inline-md, 13px) );--_empty-color: var(--slotted-list-empty-color, var(--slotted-text-muted, GrayText));--_empty-inset: var(--slotted-list-empty-padding, var(--slotted-space-8, 1.5rem))}[data-ui=list][data-part=root][data-size=sm]{--_gap: var(--slotted-list-gap-sm, var(--slotted-space-2, .25rem));--_section-inset-block: var( --slotted-list-section-padding-block-sm, var(--slotted-space-3, .375rem) );--_row-inset-inline: var( --slotted-list-padding-inline-sm, var(--slotted-control-padding-inline-sm, 10px) );--_empty-inset: var(--slotted-list-empty-padding-sm, var(--slotted-space-6, 1rem))}[data-ui=list][data-part=root][data-size=lg]{--_gap: var(--slotted-list-gap-lg, var(--slotted-space-4, .5rem));--_section-inset-block: var( --slotted-list-section-padding-block-lg, var(--slotted-space-5, .75rem) );--_row-inset-inline: var( --slotted-list-padding-inline-lg, var(--slotted-control-padding-inline-lg, 16px) );--_empty-inset: var(--slotted-list-empty-padding-lg, var(--slotted-space-9, 2rem))}[data-ui=list][data-part=root][data-variant=framed]{background-color:var(--_surface);border:var(--_frame-width) solid var(--_frame-color);border-radius:var(--_frame-radius);overflow:clip}[data-ui=list][data-part=root][data-variant=separated]{row-gap:var(--_gap)}[data-ui=list] [data-part=section]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=list][data-variant=separated] [data-part=section],[data-ui=list][data-variant=separated] [data-part=section-list]{row-gap:var(--_gap)}[data-ui=list] [data-part=section-label]{color:var(--_section-color);font-size:var(--_section-font-size);font-weight:var(--_section-weight);letter-spacing:var(--slotted-list-section-letter-spacing, 0);line-height:var(--slotted-line-height-sm, 1.45);margin-block:0;min-inline-size:0;padding-block:var(--_section-inset-block);padding-inline:var(--_row-inset-inline)}[data-ui=list][data-inset] [data-part=section-label],[data-ui=list][data-inset] [data-part=empty]{padding-inline:0}[data-ui=list] [data-part=section-label]:has(>[data-part=section-end]){align-items:baseline;display:flex;gap:var(--slotted-space-4, .5rem);justify-content:space-between}[data-ui=list] [data-part=section-end]{flex:none;font-variant-numeric:tabular-nums;white-space:nowrap}[data-ui=list] [data-part=section-label][data-variant=ruled]{border-block-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-list-section-rule-color, var(--slotted-border-subtle, GrayText));color:var(--slotted-list-section-ruled-color, var(--slotted-text, CanvasText));font-weight:var(--slotted-font-weight-medium, 500)}[data-ui=list] [data-part=section-label][data-sticky]{background-color:var(--_surface);inset-block-start:0;position:sticky;z-index:var(--slotted-z-index-sticky, 100)}[data-ui=list] [data-part=empty]{align-items:center;color:var(--_empty-color);display:flex;flex-direction:column;justify-content:center;min-inline-size:0;padding-block:var(--_empty-inset);padding-inline:var(--_row-inset-inline);text-align:center}[data-ui=list][data-part=root][data-loading]{cursor:progress}}\n"] }]
129
129
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], marker: [{ type: i0.Input, args: [{ isSignal: true, alias: "marker", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
130
130
 
131
- /**
132
- * A group inside the set: the `li` holding a heading and a nested list, which
133
- * is the grouping HTML already has. MUI, Angular Material, Primer and React
134
- * Aria each leave the heading loose among the rows instead, so a reader hears a
135
- * heading inside a set rather than a set with a name.
136
- *
137
- * The three elements are the consumer's own, which is what this ecosystem
138
- * composes with: the heading keeps whichever level the document needs, and the
139
- * nested list keeps `ul` or `ol` to match the set around it. React reads the
140
- * heading element off a `level` input instead, because there the component owns
141
- * the tag; both reach the same accessibility tree.
142
- */
143
131
  class SlListSection {
144
132
  /**
145
133
  * The id the heading carries and the nested list names itself by. It is held
@@ -166,6 +154,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
166
154
  * read as one list rather than as several.
167
155
  */
168
156
  class SlListSectionLabel {
157
+ /**
158
+ * How the heading is drawn. `caption` is the small muted name; `ruled` is the
159
+ * name in the text colour over a rule, with no ground behind it.
160
+ */
161
+ variant = input('caption', /* @ts-ignore */
162
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
169
163
  /**
170
164
  * Keeps the name in place while its own rows scroll past it. It takes the
171
165
  * set's surface and the library's sticky stack level, which is what a
@@ -180,7 +174,7 @@ class SlListSectionLabel {
180
174
  this.section?.labelId.set(this.id);
181
175
  }
182
176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListSectionLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
183
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlListSectionLabel, isStandalone: true, selector: "[slListSectionLabel]", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "section-label" }, properties: { "attr.id": "id", "attr.data-sticky": "sticky() ? '' : null" } }, exportAs: ["slListSectionLabel"], ngImport: i0 });
177
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlListSectionLabel, isStandalone: true, selector: "[slListSectionLabel]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "section-label" }, properties: { "attr.id": "id", "attr.data-sticky": "sticky() ? '' : null", "attr.data-variant": "variant()" } }, exportAs: ["slListSectionLabel"], ngImport: i0 });
184
178
  }
185
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListSectionLabel, decorators: [{
186
180
  type: Directive,
@@ -192,9 +186,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
192
186
  'data-part': 'section-label',
193
187
  '[attr.id]': 'id',
194
188
  '[attr.data-sticky]': "sticky() ? '' : null",
189
+ '[attr.data-variant]': 'variant()',
195
190
  },
196
191
  }]
197
- }], ctorParameters: () => [], propDecorators: { sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }] } });
192
+ }], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }] } });
193
+ /**
194
+ * What stands at the end of a group heading, on the line of the name: a day's
195
+ * balance, a count. Set in tabular figures.
196
+ */
197
+ class SlListSectionEnd {
198
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListSectionEnd, deps: [], target: i0.ɵɵFactoryTarget.Directive });
199
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListSectionEnd, isStandalone: true, selector: "[slListSectionEnd]", host: { attributes: { "data-part": "section-end" } }, ngImport: i0 });
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListSectionEnd, decorators: [{
202
+ type: Directive,
203
+ args: [{
204
+ selector: '[slListSectionEnd]',
205
+ standalone: true,
206
+ host: { 'data-part': 'section-end' },
207
+ }]
208
+ }] });
198
209
  /**
199
210
  * The rows of one group. `role="list"` for the same reason the set writes it:
200
211
  * the family draws its own marker, and the native one is what Safari and
@@ -252,5 +263,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
252
263
  * Generated bundle index. Do not edit.
253
264
  */
254
265
 
255
- export { LIST_DEFAULTS, SlList, SlListEmpty, SlListIdFactory, SlListSection, SlListSectionLabel, SlListSectionList, injectListDefaults, provideListDefaults };
266
+ export { LIST_DEFAULTS, SlList, SlListEmpty, SlListIdFactory, SlListSection, SlListSectionEnd, SlListSectionLabel, SlListSectionList, injectListDefaults, provideListDefaults };
256
267
  //# sourceMappingURL=slotted-angular-list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-list.mjs","sources":["../../list/src/list-defaults.ts","../../list/src/list.ts","../../list/src/list-parts.ts","../../list/src/slotted-angular-list.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\n\n/** How the rows are told apart. The vocabulary is `accordion`'s. */\nexport type ListVariant = 'plain' | 'ruled' | 'framed' | 'separated';\n\n/** The room a row gets. Density is the application's choice; this is not. */\nexport type ListSize = 'sm' | 'md' | 'lg';\n\n/**\n * What is painted in the marker column. It is a separate question from\n * `ordered`: an ordered set whose rows carry their own badges paints no number\n * and still reads in order.\n */\nexport type ListMarker = 'none' | 'bullet' | 'number';\n\nexport interface ListDefaults {\n inset: boolean;\n marker: ListMarker;\n size: ListSize;\n variant: ListVariant;\n}\n\nconst FALLBACK: ListDefaults = { inset: false, marker: 'none', size: 'md', variant: 'plain' };\n\nexport const LIST_DEFAULTS = new InjectionToken<ListDefaults>('slotted list defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its lists are told apart and how much room a\n * row gets, rather than repeating four inputs on every list. A list that states\n * any of them itself still wins: an explicit input is never overridden by the\n * token.\n */\nexport function provideListDefaults(defaults: Partial<ListDefaults>) {\n return {\n provide: LIST_DEFAULTS,\n useFactory: (): ListDefaults => ({\n inset: defaults.inset ?? FALLBACK.inset,\n marker: defaults.marker ?? FALLBACK.marker,\n size: defaults.size ?? FALLBACK.size,\n variant: defaults.variant ?? FALLBACK.variant,\n }),\n };\n}\n\n/** What a list renders as here, before it states anything of its own. */\nexport function injectListDefaults(): ListDefaults {\n return inject(LIST_DEFAULTS);\n}\n\n/**\n * A group's heading names its own nested list, so the heading needs an id and\n * the id has to be the same string on the server and in the browser. A counter\n * held by the injector produces one; `Math.random` would not match for\n * hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlListIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-list-${this.count}`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectListDefaults } from './list-defaults';\nimport type { ListMarker, ListSize, ListVariant } from './list-defaults';\n\nexport type { ListMarker, ListSize, ListVariant } from './list-defaults';\n\n/**\n * A vertical run of related rows. The rows are `slListItem`, a family of its\n * own; this one decides how they are told apart, how much room each gets, what\n * is painted in the marker column and whether they keep their inline padding,\n * and hands those four down through the injector.\n *\n * The directive goes on the element the page wrote — `<ul slList>` or\n * `<ol slList>` — because the element carries the reading order and that is the\n * page's decision, not the family's.\n *\n * **`role=\"list\"` is written, and it is not redundant.** The family draws its\n * own marker, because a row is a content box beside its independent targets and\n * CSS has no `display` that is both `list-item` and a grid. Safari and\n * VoiceOver drop list semantics the moment CSS removes the marker, so the role\n * restores what the layout costs. A `role` the consumer wrote themselves — a\n * `menu`, a `listbox` they are wiring — survives.\n *\n * The set holds no state a consumer can own. Selection with roving focus is\n * `listbox`'s and `table`'s: ARIA 1.2 does not allow `aria-selected` on\n * `listitem`, so a selection model here would announce nothing.\n */\n@Component({\n selector: 'ul[slList], ol[slList]',\n standalone: true,\n exportAs: 'slList',\n template: '<ng-content></ng-content>',\n styleUrl: '../../../styles/src/list/list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'list',\n 'data-part': 'root',\n '[attr.role]': 'role()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-marker]': 'resolvedMarker()',\n '[attr.data-inset]': \"resolvedInset() ? '' : null\",\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.aria-busy]': \"loading() ? 'true' : null\",\n },\n})\nexport class SlList {\n /** How the rows are told apart. Falls back to the injected default. */\n readonly variant = input<ListVariant>();\n /** The room a row gets. Falls back to the injected default. */\n readonly size = input<ListSize>();\n /** What is painted in the marker column. Falls back to the injected default. */\n readonly marker = input<ListMarker>();\n /**\n * Takes the rows' inline padding away, for a list inside a box that already\n * pads its own content. The rule and the fill still run edge to edge.\n */\n readonly inset = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (state) => (state === undefined ? undefined : booleanAttribute(state)),\n });\n /**\n * `aria-busy` on the set, which ARIA 1.2 §5.2.6 asks of a container whose\n * rows have not arrived. The family draws no placeholder: `skeleton` owns\n * that geometry and goes inside the rows.\n */\n readonly loading = input(false, { transform: booleanAttribute });\n\n private readonly defaults = injectListDefaults();\n\n /** A role the consumer wrote is never replaced by the family's. */\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n protected readonly role = computed(() => this.writtenRole ?? 'list');\n /* Public, because a row reads them: the set is what a row asks when it has\n not been told itself. `role` stays protected — it is the host's alone. */\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedMarker = computed(() => this.marker() ?? this.defaults.marker);\n\n /**\n * Read by every row under this set, and by the row's own input first. The\n * input stays `undefined` until it is written, so a list that states\n * `inset=\"false\"` under a provider that states `true` keeps its own answer —\n * `booleanAttribute` alone would fold the two together.\n */\n readonly resolvedInset = computed(() => (this.inset() ?? this.defaults.inset) === true);\n}\n","import {\n booleanAttribute,\n Directive,\n HostAttributeToken,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { SlListIdFactory } from './list-defaults';\n\n/**\n * A group inside the set: the `li` holding a heading and a nested list, which\n * is the grouping HTML already has. MUI, Angular Material, Primer and React\n * Aria each leave the heading loose among the rows instead, so a reader hears a\n * heading inside a set rather than a set with a name.\n *\n * The three elements are the consumer's own, which is what this ecosystem\n * composes with: the heading keeps whichever level the document needs, and the\n * nested list keeps `ul` or `ol` to match the set around it. React reads the\n * heading element off a `level` input instead, because there the component owns\n * the tag; both reach the same accessibility tree.\n */\n@Directive({\n selector: 'li[slListSection]',\n standalone: true,\n exportAs: 'slListSection',\n host: { 'data-part': 'section' },\n})\nexport class SlListSection {\n /**\n * The id the heading carries and the nested list names itself by. It is held\n * here rather than passed between the two, because the pair is the group and\n * neither half can name the other on its own.\n */\n readonly labelId = signal<string | undefined>(undefined);\n}\n\n/**\n * The group's name. It shares the row's inline inset, so the heading and the\n * titles under it stand in one column — the alignment that makes a grouped list\n * read as one list rather than as several.\n */\n@Directive({\n selector: '[slListSectionLabel]',\n standalone: true,\n exportAs: 'slListSectionLabel',\n host: {\n 'data-part': 'section-label',\n '[attr.id]': 'id',\n '[attr.data-sticky]': \"sticky() ? '' : null\",\n },\n})\nexport class SlListSectionLabel {\n /**\n * Keeps the name in place while its own rows scroll past it. It takes the\n * set's surface and the library's sticky stack level, which is what a\n * consumer writing `position: sticky` alone does not get.\n */\n readonly sticky = input(false, { transform: booleanAttribute });\n\n private readonly section = inject(SlListSection, { optional: true });\n /** An id the consumer wrote is never replaced by the family's. */\n private readonly written = inject(new HostAttributeToken('id'), { optional: true });\n\n readonly id = this.written ?? inject(SlListIdFactory).next();\n\n constructor() {\n this.section?.labelId.set(this.id);\n }\n}\n\n/**\n * The rows of one group. `role=\"list\"` for the same reason the set writes it:\n * the family draws its own marker, and the native one is what Safari and\n * VoiceOver read the semantics from.\n */\n@Directive({\n selector: 'ul[slListSectionList], ol[slListSectionList]',\n standalone: true,\n exportAs: 'slListSectionList',\n host: {\n 'data-part': 'section-list',\n '[attr.role]': 'role',\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n})\nexport class SlListSectionList {\n private readonly section = inject(SlListSection, { optional: true });\n /** A role the consumer wrote is never replaced by the family's. */\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n\n readonly role = this.writtenRole ?? 'list';\n\n readonly labelledBy = () => this.writtenLabelledBy ?? this.section?.labelId() ?? null;\n}\n\n/**\n * What the set says when it holds nothing. It is an `li`, so the reader hears\n * \"list, one item\" and then the message; a message outside the list leaves them\n * with \"list, zero items\" and silence, and leaves the words outside the box a\n * framed set paints.\n *\n * The family supplies the box, the height and the muted ink. The words are the\n * page's, and `result-state` is what goes in here.\n */\n@Directive({\n selector: 'li[slListEmpty]',\n standalone: true,\n exportAs: 'slListEmpty',\n host: { 'data-part': 'empty' },\n})\nexport class SlListEmpty {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAsBA,MAAM,QAAQ,GAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;MAEhF,aAAa,GAAG,IAAI,cAAc,CAAe,uBAAuB,EAAE;AACrF,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,QAAQ;AACxB,CAAA;AAED;;;;;AAKG;AACG,SAAU,mBAAmB,CAAC,QAA+B,EAAA;IACjE,OAAO;AACL,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,OAAqB;AAC/B,YAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;AACvC,YAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;AAC1C,YAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;AACpC,YAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;SAC9C,CAAC;KACH;AACH;AAEA;SACgB,kBAAkB,GAAA;AAChC,IAAA,OAAO,MAAM,CAAC,aAAa,CAAC;AAC9B;AAEA;;;;;AAKG;MAEU,eAAe,CAAA;IAClB,KAAK,GAAG,CAAC;IAEjB,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC;AACf,QAAA,OAAO,CAAA,aAAA,EAAgB,IAAI,CAAC,KAAK,EAAE;IACrC;uGANW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC1ClC;;;;;;;;;;;;;;;;;;;;AAoBG;MAqBU,MAAM,CAAA;;AAER,IAAA,OAAO,GAAG,KAAK;2FAAe;;AAE9B,IAAA,IAAI,GAAG,KAAK;wFAAY;;AAExB,IAAA,MAAM,GAAG,KAAK;0FAAc;AACrC;;;AAGG;AACM,IAAA,KAAK,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACjF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACF;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE/C,QAAQ,GAAG,kBAAkB,EAAE;;AAG/B,IAAA,WAAW,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEtE,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,MAAM;6EAAC;AACpE;AAC4E;AACnE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;wFAAC;AACzE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;AAChE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;uFAAC;AAE/E;;;;;AAKG;AACM,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI;sFAAC;uGAvC5E,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,skCAhBP,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ghHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAgB1B,MAAM,EAAA,UAAA,EAAA,CAAA;kBApBlB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,QAAA,EACN,QAAQ,YACR,2BAA2B,EAAA,eAAA,EAEpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,aAAa,EAAE,QAAQ;AACvB,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,kBAAkB,EAAE,gBAAgB;AACpC,wBAAA,oBAAoB,EAAE,kBAAkB;AACxC,wBAAA,mBAAmB,EAAE,6BAA6B;AAClD,wBAAA,qBAAqB,EAAE,uBAAuB;AAC9C,wBAAA,kBAAkB,EAAE,2BAA2B;AAChD,qBAAA,EAAA,MAAA,EAAA,CAAA,ghHAAA,CAAA,EAAA;;;AC5CH;;;;;;;;;;;AAWG;MAOU,aAAa,CAAA;AACxB;;;;AAIG;IACM,OAAO,GAAG,MAAM,CAAqB,SAAS;gFAAC;uGAN7C,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AACjC,iBAAA;;AAUD;;;;AAIG;MAWU,kBAAkB,CAAA;AAC7B;;;;AAIG;IACM,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE9C,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAEnD,IAAA,OAAO,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE1E,IAAA,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE;AAE5D,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACpC;uGAhBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,eAAe;AAC5B,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,oBAAoB,EAAE,sBAAsB;AAC7C,qBAAA;AACF,iBAAA;;AAoBD;;;;AAIG;MAWU,iBAAiB,CAAA;IACX,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAEnD,IAAA,WAAW,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE,iBAAiB,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,EAAE;AACrF,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;AAEO,IAAA,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM;AAEjC,IAAA,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI;uGAV1E,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8CAA8C;AACxD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,wBAAwB,EAAE,cAAc;AACzC,qBAAA;AACF,iBAAA;;AAcD;;;;;;;;AAQG;MAOU,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;AAC/B,iBAAA;;;AClHD;;AAEG;;"}
1
+ {"version":3,"file":"slotted-angular-list.mjs","sources":["../../list/src/list-defaults.ts","../../list/src/list.ts","../../list/src/list-parts.ts","../../list/src/slotted-angular-list.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\n\n/** How the rows are told apart. The vocabulary is `accordion`'s. */\nexport type ListVariant = 'plain' | 'ruled' | 'framed' | 'separated';\n\n/** The room a row gets. Density is the application's choice; this is not. */\nexport type ListSize = 'sm' | 'md' | 'lg';\n\n/**\n * What is painted in the marker column. It is a separate question from\n * `ordered`: an ordered set whose rows carry their own badges paints no number\n * and still reads in order.\n */\nexport type ListMarker = 'none' | 'bullet' | 'number';\n\nexport interface ListDefaults {\n inset: boolean;\n marker: ListMarker;\n size: ListSize;\n variant: ListVariant;\n}\n\nconst FALLBACK: ListDefaults = { inset: false, marker: 'none', size: 'md', variant: 'plain' };\n\nexport const LIST_DEFAULTS = new InjectionToken<ListDefaults>('slotted list defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its lists are told apart and how much room a\n * row gets, rather than repeating four inputs on every list. A list that states\n * any of them itself still wins: an explicit input is never overridden by the\n * token.\n */\nexport function provideListDefaults(defaults: Partial<ListDefaults>) {\n return {\n provide: LIST_DEFAULTS,\n useFactory: (): ListDefaults => ({\n inset: defaults.inset ?? FALLBACK.inset,\n marker: defaults.marker ?? FALLBACK.marker,\n size: defaults.size ?? FALLBACK.size,\n variant: defaults.variant ?? FALLBACK.variant,\n }),\n };\n}\n\n/** What a list renders as here, before it states anything of its own. */\nexport function injectListDefaults(): ListDefaults {\n return inject(LIST_DEFAULTS);\n}\n\n/**\n * A group's heading names its own nested list, so the heading needs an id and\n * the id has to be the same string on the server and in the browser. A counter\n * held by the injector produces one; `Math.random` would not match for\n * hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlListIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-list-${this.count}`;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectListDefaults } from './list-defaults';\nimport type { ListMarker, ListSize, ListVariant } from './list-defaults';\n\nexport type { ListMarker, ListSize, ListVariant } from './list-defaults';\n\n/**\n * A vertical run of related rows. The rows are `slListItem`, a family of its\n * own; this one decides how they are told apart, how much room each gets, what\n * is painted in the marker column and whether they keep their inline padding,\n * and hands those four down through the injector.\n *\n * The directive goes on the element the page wrote — `<ul slList>` or\n * `<ol slList>` — because the element carries the reading order and that is the\n * page's decision, not the family's.\n *\n * **`role=\"list\"` is written, and it is not redundant.** The family draws its\n * own marker, because a row is a content box beside its independent targets and\n * CSS has no `display` that is both `list-item` and a grid. Safari and\n * VoiceOver drop list semantics the moment CSS removes the marker, so the role\n * restores what the layout costs. A `role` the consumer wrote themselves — a\n * `menu`, a `listbox` they are wiring — survives.\n *\n * The set holds no state a consumer can own. Selection with roving focus is\n * `listbox`'s and `table`'s: ARIA 1.2 does not allow `aria-selected` on\n * `listitem`, so a selection model here would announce nothing.\n */\n@Component({\n selector: 'ul[slList], ol[slList]',\n standalone: true,\n exportAs: 'slList',\n template: '<ng-content></ng-content>',\n styleUrl: '../../../styles/src/list/list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'list',\n 'data-part': 'root',\n '[attr.role]': 'role()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-marker]': 'resolvedMarker()',\n '[attr.data-inset]': \"resolvedInset() ? '' : null\",\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.aria-busy]': \"loading() ? 'true' : null\",\n },\n})\nexport class SlList {\n /** How the rows are told apart. Falls back to the injected default. */\n readonly variant = input<ListVariant>();\n /** The room a row gets. Falls back to the injected default. */\n readonly size = input<ListSize>();\n /** What is painted in the marker column. Falls back to the injected default. */\n readonly marker = input<ListMarker>();\n /**\n * Takes the rows' inline padding away, for a list inside a box that already\n * pads its own content. The rule and the fill still run edge to edge.\n */\n readonly inset = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (state) => (state === undefined ? undefined : booleanAttribute(state)),\n });\n /**\n * `aria-busy` on the set, which ARIA 1.2 §5.2.6 asks of a container whose\n * rows have not arrived. The family draws no placeholder: `skeleton` owns\n * that geometry and goes inside the rows.\n */\n readonly loading = input(false, { transform: booleanAttribute });\n\n private readonly defaults = injectListDefaults();\n\n /** A role the consumer wrote is never replaced by the family's. */\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n\n protected readonly role = computed(() => this.writtenRole ?? 'list');\n /* Public, because a row reads them: the set is what a row asks when it has\n not been told itself. `role` stays protected — it is the host's alone. */\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedMarker = computed(() => this.marker() ?? this.defaults.marker);\n\n /**\n * Read by every row under this set, and by the row's own input first. The\n * input stays `undefined` until it is written, so a list that states\n * `inset=\"false\"` under a provider that states `true` keeps its own answer —\n * `booleanAttribute` alone would fold the two together.\n */\n readonly resolvedInset = computed(() => (this.inset() ?? this.defaults.inset) === true);\n}\n","import {\n booleanAttribute,\n Directive,\n HostAttributeToken,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { SlListIdFactory } from './list-defaults';\n\n/**\n * A group inside the set: the `li` holding a heading and a nested list, which\n * is the grouping HTML already has. MUI, Angular Material, Primer and React\n * Aria each leave the heading loose among the rows instead, so a reader hears a\n * heading inside a set rather than a set with a name.\n *\n * The three elements are the consumer's own, which is what this ecosystem\n * composes with: the heading keeps whichever level the document needs, and the\n * nested list keeps `ul` or `ol` to match the set around it. React reads the\n * heading element off a `level` input instead, because there the component owns\n * the tag; both reach the same accessibility tree.\n */\n/** How a group heading is drawn. */\nexport type ListSectionLabelVariant = 'caption' | 'ruled';\n\n@Directive({\n selector: 'li[slListSection]',\n standalone: true,\n exportAs: 'slListSection',\n host: { 'data-part': 'section' },\n})\nexport class SlListSection {\n /**\n * The id the heading carries and the nested list names itself by. It is held\n * here rather than passed between the two, because the pair is the group and\n * neither half can name the other on its own.\n */\n readonly labelId = signal<string | undefined>(undefined);\n}\n\n/**\n * The group's name. It shares the row's inline inset, so the heading and the\n * titles under it stand in one column — the alignment that makes a grouped list\n * read as one list rather than as several.\n */\n@Directive({\n selector: '[slListSectionLabel]',\n standalone: true,\n exportAs: 'slListSectionLabel',\n host: {\n 'data-part': 'section-label',\n '[attr.id]': 'id',\n '[attr.data-sticky]': \"sticky() ? '' : null\",\n '[attr.data-variant]': 'variant()',\n },\n})\nexport class SlListSectionLabel {\n /**\n * How the heading is drawn. `caption` is the small muted name; `ruled` is the\n * name in the text colour over a rule, with no ground behind it.\n */\n readonly variant = input<ListSectionLabelVariant>('caption');\n /**\n * Keeps the name in place while its own rows scroll past it. It takes the\n * set's surface and the library's sticky stack level, which is what a\n * consumer writing `position: sticky` alone does not get.\n */\n readonly sticky = input(false, { transform: booleanAttribute });\n\n private readonly section = inject(SlListSection, { optional: true });\n /** An id the consumer wrote is never replaced by the family's. */\n private readonly written = inject(new HostAttributeToken('id'), { optional: true });\n\n readonly id = this.written ?? inject(SlListIdFactory).next();\n\n constructor() {\n this.section?.labelId.set(this.id);\n }\n}\n\n/**\n * What stands at the end of a group heading, on the line of the name: a day's\n * balance, a count. Set in tabular figures.\n */\n@Directive({\n selector: '[slListSectionEnd]',\n standalone: true,\n host: { 'data-part': 'section-end' },\n})\nexport class SlListSectionEnd {}\n\n/**\n * The rows of one group. `role=\"list\"` for the same reason the set writes it:\n * the family draws its own marker, and the native one is what Safari and\n * VoiceOver read the semantics from.\n */\n@Directive({\n selector: 'ul[slListSectionList], ol[slListSectionList]',\n standalone: true,\n exportAs: 'slListSectionList',\n host: {\n 'data-part': 'section-list',\n '[attr.role]': 'role',\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n})\nexport class SlListSectionList {\n private readonly section = inject(SlListSection, { optional: true });\n /** A role the consumer wrote is never replaced by the family's. */\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n\n readonly role = this.writtenRole ?? 'list';\n\n readonly labelledBy = () => this.writtenLabelledBy ?? this.section?.labelId() ?? null;\n}\n\n/**\n * What the set says when it holds nothing. It is an `li`, so the reader hears\n * \"list, one item\" and then the message; a message outside the list leaves them\n * with \"list, zero items\" and silence, and leaves the words outside the box a\n * framed set paints.\n *\n * The family supplies the box, the height and the muted ink. The words are the\n * page's, and `result-state` is what goes in here.\n */\n@Directive({\n selector: 'li[slListEmpty]',\n standalone: true,\n exportAs: 'slListEmpty',\n host: { 'data-part': 'empty' },\n})\nexport class SlListEmpty {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -537,7 +537,7 @@ class SlMarkdown {
537
537
  >
538
538
  }
539
539
  </ng-template>
540
- `, isInline: true, styles: ["@layer slotted.components{[data-ui=markdown][data-part=root]{display:block;min-inline-size:0}[data-ui=markdown] [data-part=task]{display:grid;grid-template-columns:calc(var(--slotted-prose-list-inset, 1.5em) + var(--slotted-prose-marker-gap, .25em)) minmax(0,1fr);list-style:none;margin-inline-start:calc(-1 * var(--slotted-prose-list-inset, 1.5em));padding-inline-start:0}[data-ui=markdown] [data-part=task]>:first-child{justify-self:end;margin-block-start:calc((1lh - var(--slotted-control-font-size-md, 13px) * var(--slotted-line-height-md, 1.5)) / 2);margin-inline-end:var(--slotted-markdown-task-gap, var(--slotted-space-3))}[data-ui=markdown] [data-part=task-body]{min-inline-size:0}[data-ui=markdown] [data-part=embed]{margin-block:var(--slotted-prose-flow-normal, 1.15em) 0}[data-ui=markdown][data-flow=tight] [data-part=embed]{margin-block-start:var(--slotted-prose-flow-tight, .75em)}[data-ui=markdown][data-flow=loose] [data-part=embed]{margin-block-start:var(--slotted-prose-flow-loose, 1.6em)}[data-ui=markdown] [data-part=embed]:first-child,[data-ui=markdown] [data-part=alert-body]>:first-child{margin-block-start:0}[data-ui=markdown] :where(th,td)[data-align=start]{text-align:start}[data-ui=markdown] :where(th,td)[data-align=center]{text-align:center}[data-ui=markdown] :where(th,td)[data-align=end]{text-align:end}[data-ui=markdown] [data-part=backref]{--_glyph: var(--slotted-markdown-backref-size, .9em);--_box: var(--slotted-target-min, 24px);--slotted-icon-size: var(--_glyph);block-size:var(--_box);display:inline-block;inline-size:var(--_box);margin-inline-start:var(--slotted-space-1);position:relative;vertical-align:calc(.5cap - .5 * var(--_box))}[data-ui=markdown] [data-part=backref]>[data-ui=icon]{inset:0;margin:auto;position:absolute;rotate:90deg}[data-ui=markdown] [data-part=empty]{color:var(--slotted-text-muted);font-family:var(--slotted-font-family-sans);font-size:var(--slotted-font-size-md);line-height:var(--slotted-line-height-md);margin:0}[data-ui=markdown] [data-part=error]{align-items:center;display:flex;flex-wrap:wrap;gap:var(--slotted-space-3) var(--slotted-space-4)}@media print{[data-ui=markdown] a[href^=http]:after{content:\" (\" attr(href) \")\";font-size:.875em;overflow-wrap:anywhere}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlAlert, selector: "[slAlert]", inputs: ["tone", "variant", "reach", "live", "hideIcon", "dismissible", "messages", "open", "defaultOpen", "restoreFocus"], outputs: ["openChange"], exportAs: ["slAlert"] }, { kind: "directive", type: SlAlertContent, selector: "[slAlertContent]", exportAs: ["slAlertContent"] }, { kind: "directive", type: SlAlertDescription, selector: "[slAlertDescription]", exportAs: ["slAlertDescription"] }, { kind: "component", type: SlAlertTitle, selector: "[slAlertTitle]", exportAs: ["slAlertTitle"] }, { kind: "component", type: SlButton, selector: "button[slButton]", inputs: ["disabled", "focusableWhenDisabled", "fullWidth", "loading", "loadingDelay", "messages", "size", "tone", "type", "variant"], exportAs: ["slButton"] }, { kind: "component", type: SlCheckbox, selector: "[slCheckbox]", inputs: ["checked", "defaultChecked", "indeterminate", "parent", "value", "name", "tabIndex", "size", "labelPlacement", "variant", "disabled", "readOnly", "invalid"], outputs: ["checkedChange"], exportAs: ["slCheckbox"] }, { kind: "component", type: SlCodeBlock, selector: "[slCodeBlock]", inputs: ["code", "language", "highlight", "tokens", "title", "fileName", "lineNumbers", "start", "marks", "wrap", "defaultWrap", "collapseAfter", "revealed", "defaultRevealed", "maxLines", "copy", "copyRemoved", "loading", "messages", "tabSize"], outputs: ["wrapChange", "revealedChange", "wrapChangeRequest", "revealedChangeRequest", "copyRequest", "highlightError"], exportAs: ["slCodeBlock"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }, { kind: "component", type: SlInlineMessage, selector: "[slInlineMessage]", inputs: ["tone", "size", "live", "mark", "prefix", "hideIcon", "loading", "disabled", "reserve", "id"], exportAs: ["slInlineMessage"] }, { kind: "component", type: SlLink, selector: "a[slLink]", inputs: ["disabled", "external", "messages", "underline", "variant", "visited"], exportAs: ["slLink"] }, { kind: "component", type: SlProse, selector: "[slProse]", inputs: ["size", "flow"], exportAs: ["slProse"] }, { kind: "directive", type: SlProseAnchor, selector: "[slProseAnchor]", exportAs: ["slProseAnchor"] }, { kind: "directive", type: SlProseFootnotes, selector: "[slProseFootnotes]", exportAs: ["slProseFootnotes"] }, { kind: "directive", type: SlProseScroll, selector: "[slProseScroll]", inputs: ["messages", "labelledBy"], exportAs: ["slProseScroll"] }, { kind: "component", type: SlSkeletonRegion, selector: "[slSkeletonRegion]", inputs: ["loading", "animation", "live", "messages", "loadedLabel", "delay", "minDuration"], outputs: ["reveal"], exportAs: ["slSkeletonRegion"] }, { kind: "component", type: SlSkeletonText, selector: "[slSkeletonText]", inputs: ["lines", "animation", "loading", "lastLineSize", "inlineSize"], exportAs: ["slSkeletonText"] }, { kind: "component", type: SlVisuallyHidden, selector: "[slVisuallyHidden]", inputs: ["focusable"], exportAs: ["slVisuallyHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
540
+ `, isInline: true, styles: ["@layer slotted.components{[data-ui=markdown][data-part=root]{display:block;min-inline-size:0}[data-ui=markdown] [data-part=task]{display:grid;grid-template-columns:calc(var(--slotted-prose-list-inset, 1.5em) + var(--slotted-prose-marker-gap, .25em)) minmax(0,1fr);list-style:none;margin-inline-start:calc(-1 * var(--slotted-prose-list-inset, 1.5em));padding-inline-start:0}[data-ui=markdown] [data-part=task]>:first-child{justify-self:end;margin-block-start:calc((1lh - var(--slotted-control-font-size-md, 13px) * var(--slotted-line-height-md, 1.5)) / 2);margin-inline-end:var(--slotted-markdown-task-gap, var(--slotted-space-3))}[data-ui=markdown] [data-part=task-body]{min-inline-size:0}[data-ui=markdown] [data-part=embed]{margin-block:var(--slotted-prose-flow-normal, 1.15em) 0}[data-ui=markdown][data-flow=tight] [data-part=embed]{margin-block-start:var(--slotted-prose-flow-tight, .75em)}[data-ui=markdown][data-flow=loose] [data-part=embed]{margin-block-start:var(--slotted-prose-flow-loose, 1.6em)}[data-ui=markdown] [data-part=embed]:first-child,[data-ui=markdown] [data-part=alert-body]>:first-child{margin-block-start:0}[data-ui=markdown] :where(th,td)[data-align=start]{text-align:start}[data-ui=markdown] :where(th,td)[data-align=center]{text-align:center}[data-ui=markdown] :where(th,td)[data-align=end]{text-align:end}[data-ui=markdown] [data-part=backref]{--_glyph: var(--slotted-markdown-backref-size, .9em);--_box: var(--slotted-target-min, 24px);--slotted-icon-size: var(--_glyph);block-size:var(--_box);display:inline-block;inline-size:var(--_box);margin-inline-start:var(--slotted-space-1);position:relative;vertical-align:calc(.5cap - .5 * var(--_box))}[data-ui=markdown] [data-part=backref]>[data-ui=icon]{inset:0;margin:auto;position:absolute;rotate:90deg}[data-ui=markdown] [data-part=empty]{color:var(--slotted-text-muted);font-family:var(--slotted-font-family-sans);font-size:var(--slotted-font-size-md);line-height:var(--slotted-line-height-md);margin:0}[data-ui=markdown] [data-part=error]{align-items:center;display:flex;flex-wrap:wrap;gap:var(--slotted-space-3) var(--slotted-space-4)}@media print{[data-ui=markdown] a[href^=http]:after{content:\" (\" attr(href) \")\";font-size:.875em;overflow-wrap:anywhere}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlAlert, selector: "[slAlert]", inputs: ["tone", "variant", "reach", "live", "hideIcon", "dismissible", "messages", "open", "defaultOpen", "restoreFocus"], outputs: ["openChange"], exportAs: ["slAlert"] }, { kind: "directive", type: SlAlertContent, selector: "[slAlertContent]", exportAs: ["slAlertContent"] }, { kind: "directive", type: SlAlertDescription, selector: "[slAlertDescription]", exportAs: ["slAlertDescription"] }, { kind: "component", type: SlAlertTitle, selector: "[slAlertTitle]", exportAs: ["slAlertTitle"] }, { kind: "component", type: SlButton, selector: "button[slButton]", inputs: ["disabled", "focusableWhenDisabled", "fullWidth", "justify", "loading", "loadingDelay", "messages", "size", "tone", "type", "variant"], exportAs: ["slButton"] }, { kind: "component", type: SlCheckbox, selector: "[slCheckbox]", inputs: ["checked", "defaultChecked", "indeterminate", "parent", "value", "name", "tabIndex", "size", "labelPlacement", "variant", "disabled", "readOnly", "invalid"], outputs: ["checkedChange"], exportAs: ["slCheckbox"] }, { kind: "component", type: SlCodeBlock, selector: "[slCodeBlock]", inputs: ["code", "language", "highlight", "tokens", "title", "fileName", "lineNumbers", "start", "marks", "wrap", "defaultWrap", "collapseAfter", "revealed", "defaultRevealed", "maxLines", "copy", "copyRemoved", "loading", "messages", "tabSize"], outputs: ["wrapChange", "revealedChange", "wrapChangeRequest", "revealedChangeRequest", "copyRequest", "highlightError"], exportAs: ["slCodeBlock"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }, { kind: "component", type: SlInlineMessage, selector: "[slInlineMessage]", inputs: ["tone", "size", "live", "mark", "prefix", "hideIcon", "loading", "disabled", "reserve", "id"], exportAs: ["slInlineMessage"] }, { kind: "component", type: SlLink, selector: "a[slLink]", inputs: ["disabled", "external", "messages", "underline", "variant", "visited"], exportAs: ["slLink"] }, { kind: "component", type: SlProse, selector: "[slProse]", inputs: ["size", "flow"], exportAs: ["slProse"] }, { kind: "directive", type: SlProseAnchor, selector: "[slProseAnchor]", exportAs: ["slProseAnchor"] }, { kind: "directive", type: SlProseFootnotes, selector: "[slProseFootnotes]", exportAs: ["slProseFootnotes"] }, { kind: "directive", type: SlProseScroll, selector: "[slProseScroll]", inputs: ["messages", "labelledBy"], exportAs: ["slProseScroll"] }, { kind: "component", type: SlSkeletonRegion, selector: "[slSkeletonRegion]", inputs: ["loading", "animation", "live", "messages", "loadedLabel", "delay", "minDuration"], outputs: ["reveal"], exportAs: ["slSkeletonRegion"] }, { kind: "component", type: SlSkeletonText, selector: "[slSkeletonText]", inputs: ["lines", "animation", "loading", "lastLineSize", "inlineSize"], exportAs: ["slSkeletonText"] }, { kind: "component", type: SlVisuallyHidden, selector: "[slVisuallyHidden]", inputs: ["focusable"], exportAs: ["slVisuallyHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
541
541
  }
542
542
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMarkdown, decorators: [{
543
543
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-markdown.mjs","sources":["../../markdown/src/markdown-defaults.ts","../../markdown/src/markdown.ts","../../markdown/src/slotted-angular-markdown.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MarkdownNode, MarkdownUrlKind } from '@slotted/core/markdown';\n\n/** Where a link that leaves the application opens. */\nexport type MarkdownExternal = 'new-tab' | 'same-tab';\n\n/** What an application sets once for every document under it. */\nexport interface MarkdownDefaults {\n alerts?: boolean | undefined;\n allow?: readonly string[] | undefined;\n external?: MarkdownExternal | undefined;\n headingAnchors?: boolean | undefined;\n isExternal?: ((href: string) => boolean) | undefined;\n transformUrl?:\n ((url: string, kind: MarkdownUrlKind, node: MarkdownNode) => string | null) | undefined;\n}\n\nexport const MARKDOWN_DEFAULTS = new InjectionToken<MarkdownDefaults>('slotted markdown defaults', {\n providedIn: 'root',\n factory: (): MarkdownDefaults => ({}),\n});\n\n/**\n * An application decides once how its documents treat links, alerts, anchors\n * and URLs. A document that states any of them itself still wins. Its words\n * come from the language in force (`provideSlotted`).\n */\nexport function provideMarkdownDefaults(defaults: MarkdownDefaults) {\n return { provide: MARKDOWN_DEFAULTS, useValue: defaults };\n}\n\nexport function injectMarkdownDefaults(): MarkdownDefaults {\n return inject(MARKDOWN_DEFAULTS);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { initialLoadingVisibility, nextLoadingVisibility } from '@slotted/core/loading';\nimport { prepareMarkdown } from '@slotted/core/markdown';\nimport type {\n MarkdownAlertElement,\n MarkdownElement,\n MarkdownFootnote,\n MarkdownItemElement,\n MarkdownKind,\n MarkdownNode,\n MarkdownUrlKind,\n} from '@slotted/core/markdown';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { markdownMessages, type MarkdownMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { SlAlert, SlAlertContent, SlAlertDescription, SlAlertTitle } from '@slotted/angular/alert';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlCodeBlock } from '@slotted/angular/code-block';\nimport { SlInlineMessage } from '@slotted/angular/inline-message';\nimport { SlLink } from '@slotted/angular/link';\nimport type { ProseFlow, ProseSize } from '@slotted/angular/prose';\nimport {\n injectProseDefaults,\n SlProse,\n SlProseAnchor,\n SlProseFootnotes,\n SlProseScroll,\n} from '@slotted/angular/prose';\nimport {\n injectSkeletonDefaults,\n SlSkeletonRegion,\n SlSkeletonText,\n} from '@slotted/angular/skeleton';\nimport { SlVisuallyHidden } from '@slotted/angular/visually-hidden';\n\nimport { injectMarkdownDefaults, type MarkdownExternal } from './markdown-defaults';\n\n/** Whether the source arrived. `loading` is separate, because a refresh keeps what is on screen. */\nexport type MarkdownStatus = 'ready' | 'error';\n\n/** What a task checkbox asks for; the box moves when the consumer's tree does. */\nexport interface MarkdownTaskChange {\n index: number;\n checked: boolean;\n offset: number | null;\n request: ChangeRequest<boolean>;\n}\n\n/** Whether the retry was a press with a pointer or with a key. */\nexport type MarkdownRetryReason = 'pointer' | 'keyboard';\n\ntype KeysOf<U> = U extends unknown ? keyof U : never;\ntype ValueOf<U, K extends PropertyKey> = U extends unknown\n ? K extends keyof U\n ? U[K]\n : never\n : never;\n\n/**\n * A prepared element as a template reads it: every field any kind carries,\n * optional. A template names one kind, and Angular's type checker cannot\n * narrow a union on the string the directive was given, so the fields of the\n * kind it names have to be reachable without a cast.\n */\nexport type MarkdownTemplateElement = { readonly kind: MarkdownKind; readonly key: string } & {\n readonly [K in Exclude<KeysOf<MarkdownElement>, 'kind' | 'key'>]?: ValueOf<MarkdownElement, K>;\n};\n\n/** What a node template receives. */\nexport interface MarkdownNodeContext {\n $implicit: MarkdownTemplateElement;\n}\n\n/**\n * Replaces the family's element for one kind — `link`, `code`, `image` — or\n * renders a node type the family does not know — `math`, `html`, a directive\n * — by the node's own `type`. The template receives the prepared element; its\n * children are rendered with `slMarkdownChildren`.\n */\n@Directive({ selector: 'ng-template[slMarkdownNode]', standalone: true })\nexport class SlMarkdownNode {\n readonly kind = input.required<string>({ alias: 'slMarkdownNode' });\n readonly template = inject<TemplateRef<MarkdownNodeContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _directive: SlMarkdownNode,\n context: unknown,\n ): context is MarkdownNodeContext {\n return context !== null;\n }\n}\n\n/** The empty part's content, projected in place of `messages.empty`. */\n@Directive({ selector: '[slMarkdownEmpty]', standalone: true })\nexport class SlMarkdownEmpty {}\n\nconst KINDS = new Set<string>([\n 'heading',\n 'paragraph',\n 'blockquote',\n 'alert',\n 'list',\n 'item',\n 'code',\n 'thematicBreak',\n 'table',\n 'text',\n 'emphasis',\n 'strong',\n 'delete',\n 'inlineCode',\n 'break',\n 'link',\n 'image',\n 'footnoteReference',\n] satisfies MarkdownKind[]);\n\n/**\n * A document rendered from a tree, in `prose`'s typography.\n *\n * The family never receives HTML. It takes mdast — remark's output as it is,\n * or marked's through `fromMarkedTokens` — and `prepareMarkdown` from\n * `@slotted/core/markdown` decides everything that is not an element. This\n * component maps each prepared kind to an element, or to the family that\n * already owns it: `slLink`, `slCodeBlock`, `slAlert`, `slCheckbox`.\n *\n * The document is one recursive `ng-template` rendered through\n * `NgTemplateOutlet`, never a recursive component: a component host between\n * a `ul` and its `li`, or between the region and its first block, would break\n * `prose`'s child combinators.\n */\n@Component({\n selector: '[slMarkdown]',\n standalone: true,\n exportAs: 'slMarkdown',\n imports: [\n NgTemplateOutlet,\n SlAlert,\n SlAlertContent,\n SlAlertDescription,\n SlAlertTitle,\n SlButton,\n SlCheckbox,\n SlCodeBlock,\n SlGlyph,\n SlIcon,\n SlInlineMessage,\n SlLink,\n SlProse,\n SlProseAnchor,\n SlProseFootnotes,\n SlProseScroll,\n SlSkeletonRegion,\n SlSkeletonText,\n SlVisuallyHidden,\n ],\n template: `\n @if (status() === 'error') {\n <div data-part=\"error\">\n <p slInlineMessage tone=\"danger\">{{ t('error') }}</p>\n @if (retryable()) {\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"retry.emit($event.detail === 0 ? 'keyboard' : 'pointer')\"\n >\n {{ t('retry') }}\n </button>\n }\n </div>\n } @else if (painted()) {\n <div slSkeletonRegion [delay]=\"0\" [minDuration]=\"0\" [messages]=\"{ label: t('loading') }\">\n <div slProse [flow]=\"resolvedFlow()\" [size]=\"size()\">\n <div slSkeletonText lastLineSize=\"62%\" [lines]=\"3\"></div>\n </div>\n </div>\n } @else if (document().empty) {\n @if (!loading()) {\n <p data-part=\"empty\">\n <ng-content select=\"[slMarkdownEmpty]\">{{ t('empty') }}</ng-content>\n </p>\n }\n } @else {\n <div slProse [flow]=\"resolvedFlow()\" [size]=\"size()\">\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: document().children }\" />\n @if (document().footnotes.length > 0) {\n <section slProseFootnotes>\n <h2 slVisuallyHidden [id]=\"document().footnoteLabelId\">\n {{ t('footnotes') }}\n </h2>\n <ol>\n @for (footnote of document().footnotes; track footnote.key) {\n <li [id]=\"footnote.id\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: footnoteLead(footnote) }\"\n />\n @if (footnoteTail(footnote); as last) {\n <p>\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: last.children }\"\n /><ng-container\n *ngTemplateOutlet=\"backrefs; context: { $implicit: footnote }\"\n />\n </p>\n } @else {\n <ng-container *ngTemplateOutlet=\"backrefs; context: { $implicit: footnote }\" />\n }\n </li>\n }\n </ol>\n </section>\n }\n </div>\n }\n\n <ng-template #backrefs let-footnote>\n @for (reference of footnote.references; track reference; let index = $index) {\n <a\n data-part=\"backref\"\n [href]=\"'#' + reference\"\n [attr.aria-label]=\"t('backReference', { number: footnote.number, occurrence: index + 1 })\"\n ><span slIcon><svg slGlyph name=\"arrow-left\"></svg></span\n ></a>\n }\n </ng-template>\n\n <ng-template #nodes let-elements>\n @for (element of elements; track element.key) {\n @if (templateFor(element); as custom) {\n <ng-container *ngTemplateOutlet=\"custom; context: { $implicit: element }\" />\n } @else {\n @switch (element.kind) {\n @case ('text') {\n <ng-container>{{ element.value }}</ng-container>\n }\n @case ('inlineCode') {\n <code>{{ element.value }}</code>\n }\n @case ('break') {\n <br />\n }\n @case ('thematicBreak') {\n <hr />\n }\n @case ('paragraph') {\n <p>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n </p>\n }\n @case ('emphasis') {\n <em\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></em>\n }\n @case ('strong') {\n <strong\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></strong>\n }\n @case ('delete') {\n <del\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></del>\n }\n @case ('blockquote') {\n <blockquote>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n </blockquote>\n }\n @case ('heading') {\n @switch (element.level) {\n @case (1) {\n <h1 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h1>\n }\n @case (2) {\n <h2 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h2>\n }\n @case (3) {\n <h3 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h3>\n }\n @case (4) {\n <h4 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h4>\n }\n @case (5) {\n <h5 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h5>\n }\n @default {\n <h6 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h6>\n }\n }\n }\n @case ('alert') {\n <div data-part=\"embed\">\n <section slAlert reach=\"section\" live=\"off\" [tone]=\"element.tone\">\n <div slAlertContent>\n <div slAlertTitle>{{ alertTitle(element) }}</div>\n <div slAlertDescription>\n <div data-part=\"alert-body\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </div>\n </div>\n </div>\n </section>\n </div>\n }\n @case ('list') {\n @if (element.ordered) {\n <ol\n [attr.data-part]=\"element.task ? 'task-list' : null\"\n [attr.start]=\"element.start\"\n >\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </ol>\n } @else {\n <ul [attr.data-part]=\"element.task ? 'task-list' : null\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </ul>\n }\n }\n @case ('item') {\n @if (element.checked === null) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </li>\n } @else {\n <li data-part=\"task\">\n <div\n slCheckbox\n [checked]=\"element.checked\"\n [readOnly]=\"!editableTasks() || undefined\"\n (checkedChange)=\"onTask(element, $event)\"\n >\n <span slVisuallyHidden>{{ element.label }}</span>\n </div>\n <div data-part=\"task-body\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </div>\n </li>\n }\n }\n @case ('code') {\n <div data-part=\"embed\">\n <div\n slCodeBlock\n [code]=\"element.code\"\n [language]=\"element.language ?? 'text'\"\n [title]=\"element.title ?? undefined\"\n [lineNumbers]=\"element.lineNumbers || undefined\"\n [marks]=\"\n element.highlight === null ? undefined : { highlight: element.highlight }\n \"\n ></div>\n </div>\n }\n @case ('table') {\n <div slProseScroll>\n <table>\n <thead>\n <tr>\n @for (cell of element.head; track cell.key) {\n <th scope=\"col\" [attr.data-align]=\"cell.align\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: cell.children }\"\n />\n </th>\n }\n </tr>\n </thead>\n @if (element.rows.length > 0) {\n <tbody>\n @for (row of element.rows; track $index) {\n <tr>\n @for (cell of row; track cell.key) {\n <td [attr.data-align]=\"cell.align\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: cell.children }\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n }\n </table>\n </div>\n }\n @case ('link') {\n @if (element.external && resolvedExternal() === 'new-tab') {\n <a slLink external [href]=\"element.href\" [attr.title]=\"element.title\"\n ><ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></a>\n } @else {\n <a [href]=\"element.href\" [attr.title]=\"element.title\"\n ><ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></a>\n }\n }\n @case ('image') {\n <img\n [src]=\"element.src\"\n [alt]=\"element.alt\"\n [attr.title]=\"element.title\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n }\n @case ('footnoteReference') {\n <sup\n ><a\n data-footnote-ref=\"\"\n [id]=\"element.id\"\n [href]=\"'#' + element.target\"\n [attr.aria-describedby]=\"document().footnoteLabelId\"\n >{{ element.number }}</a\n ></sup\n >\n }\n @case ('custom') {\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n }\n }\n }\n }\n </ng-template>\n\n <ng-template #heading let-element>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n @if (resolvedHeadingAnchors()) {\n <a\n slProseAnchor\n [href]=\"'#' + element.id\"\n [attr.aria-label]=\"t('anchor', { heading: element.text })\"\n >#</a\n >\n }\n </ng-template>\n `,\n styleUrl: '../../../styles/src/markdown/markdown.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'markdown',\n 'data-part': 'root',\n '[attr.data-status]': 'status()',\n '[attr.data-flow]': 'resolvedFlow()',\n '[attr.data-loading]': \"painted() ? '' : null\",\n '[attr.data-empty]': \"status() === 'ready' && !painted() && document().empty ? '' : null\",\n '[attr.data-streaming]': \"streaming() ? '' : null\",\n '[attr.aria-busy]': \"streaming() || painted() ? 'true' : null\",\n },\n})\nexport class SlMarkdown {\n /** The document, as mdast — remark's `fromMarkdown`, or `fromMarkedTokens(marked.lexer(source))`. */\n readonly tree = input<MarkdownNode | null | undefined>(undefined);\n readonly size = input<ProseSize | undefined>(undefined);\n readonly flow = input<ProseFlow | undefined>(undefined);\n readonly status = input<MarkdownStatus>('ready');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly streaming = input(false, { transform: booleanAttribute });\n readonly external = input<MarkdownExternal | undefined>(undefined);\n readonly headingAnchors = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly headingOffset = input(0, { transform: numberAttribute });\n readonly idPrefix = input('');\n readonly alerts = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly allow = input<readonly string[] | undefined>(undefined);\n readonly unwrapDisallowed = input(false, { transform: booleanAttribute });\n readonly transformUrl = input<\n ((url: string, kind: MarkdownUrlKind, node: MarkdownNode) => string | null) | undefined\n >(undefined);\n readonly isExternal = input<((href: string) => boolean) | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * empty, error, retry and loading texts, the footnotes heading, the back\n * link, the heading permalink, and each alert's title (`alerts.note`).\n */\n readonly messages = input<PartialMessages<MarkdownMessages> | undefined>(undefined);\n /**\n * Enables the task checkboxes. React reads the presence of its handler; an\n * Angular output cannot tell whether anyone listens, so the template says so.\n */\n readonly editableTasks = input(false, { transform: booleanAttribute });\n /** Draws the retry button in the error part, for the same reason. */\n readonly retryable = input(false, { transform: booleanAttribute });\n\n /** A task the reader ticked, with its index; the box moves when the tree does. */\n readonly taskChange = output<MarkdownTaskChange>();\n readonly retry = output<MarkdownRetryReason>();\n\n private readonly templates = contentChildren(SlMarkdownNode);\n private readonly nodesTemplate = viewChild.required<TemplateRef<unknown>>('nodes');\n\n private readonly defaults = injectMarkdownDefaults();\n private readonly proseDefaults = injectProseDefaults();\n private readonly skeletonDefaults = injectSkeletonDefaults();\n\n protected readonly resolvedFlow = computed(() => this.flow() ?? this.proseDefaults.flow);\n protected readonly resolvedExternal = computed(\n () => this.external() ?? this.defaults.external ?? 'new-tab',\n );\n protected readonly resolvedHeadingAnchors = computed(\n () => this.headingAnchors() ?? this.defaults.headingAnchors ?? false,\n );\n /** The family's words in the language in force, with this document's `messages` laid over them. */\n readonly t = injectMessages(markdownMessages, this.messages);\n\n private readonly templateMap = computed(() => {\n const map = new Map<string, TemplateRef<MarkdownNodeContext>>();\n for (const node of this.templates()) map.set(node.kind(), node.template);\n return map;\n });\n\n /** The prepared document: headings, footnotes and the outline a table of contents reads. */\n readonly document = computed(() =>\n prepareMarkdown(this.tree(), {\n alerts: this.alerts() ?? this.defaults.alerts ?? true,\n allow: this.allow() ?? this.defaults.allow,\n custom: [...this.templateMap().keys()].filter((kind) => !KINDS.has(kind)),\n headingOffset: this.headingOffset(),\n idPrefix: this.idPrefix(),\n isExternal: this.isExternal() ?? this.defaults.isExternal,\n transformUrl: this.transformUrl() ?? this.defaults.transformUrl,\n unwrapDisallowed: this.unwrapDisallowed(),\n }),\n );\n\n /*\n * The placeholder and the document are two different trees, so the family\n * decides which one is on screen with the machine `skeleton` uses, reading\n * `skeleton`'s own defaults for how long to wait and how long to hold.\n */\n protected readonly painted = signal(false);\n private visibility = initialLoadingVisibility;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n effect(() => {\n const loading = this.loading();\n untracked(() => this.tick(loading));\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n /** @internal The template a node's children render through, for `slMarkdownChildren`. */\n childrenTemplate(): TemplateRef<unknown> {\n return this.nodesTemplate();\n }\n\n protected alertTitle(element: MarkdownAlertElement): string {\n return this.t(`alerts.${element.type}`);\n }\n\n protected templateFor(element: MarkdownElement): TemplateRef<MarkdownNodeContext> | undefined {\n return this.templateMap().get(element.kind === 'custom' ? element.type : element.kind);\n }\n\n protected footnoteLead(footnote: MarkdownFootnote): readonly MarkdownElement[] {\n return footnote.children.at(-1)?.kind === 'paragraph'\n ? footnote.children.slice(0, -1)\n : footnote.children;\n }\n\n protected footnoteTail(footnote: MarkdownFootnote) {\n const last = footnote.children.at(-1);\n return last?.kind === 'paragraph' ? last : null;\n }\n\n protected onTask(element: MarkdownItemElement, request: ChangeRequest<boolean>): void {\n this.taskChange.emit({\n checked: request.value,\n index: element.task ?? 0,\n offset: element.offset,\n request,\n });\n }\n\n private tick(loading: boolean): void {\n const answer = nextLoadingVisibility({\n delay: this.skeletonDefaults.delay ?? 0,\n loading,\n minDuration: this.skeletonDefaults.minDuration ?? 0,\n now: Date.now(),\n state: this.visibility,\n });\n this.visibility = answer.state;\n this.painted.set(answer.state.visible);\n clearTimeout(this.timer);\n if (answer.wait !== null) {\n this.timer = setTimeout(() => this.tick(this.loading()), answer.wait);\n }\n }\n}\n\n/**\n * Renders an element's children inside a node template, adding no element of\n * its own: `<ng-container [slMarkdownChildren]=\"element\" />`.\n */\n@Directive({ selector: '[slMarkdownChildren]', standalone: true })\nexport class SlMarkdownChildren {\n readonly element = input.required<{ readonly children?: readonly MarkdownElement[] }>({\n alias: 'slMarkdownChildren',\n });\n private readonly markdown = inject(SlMarkdown);\n private readonly container = inject(ViewContainerRef);\n\n constructor() {\n effect(() => {\n const children = this.element().children ?? [];\n untracked(() => {\n this.container.clear();\n this.container.createEmbeddedView(this.markdown.childrenTemplate(), {\n $implicit: children,\n });\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-markdown.mjs","sources":["../../markdown/src/markdown-defaults.ts","../../markdown/src/markdown.ts","../../markdown/src/slotted-angular-markdown.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { MarkdownNode, MarkdownUrlKind } from '@slotted/core/markdown';\n\n/** Where a link that leaves the application opens. */\nexport type MarkdownExternal = 'new-tab' | 'same-tab';\n\n/** What an application sets once for every document under it. */\nexport interface MarkdownDefaults {\n alerts?: boolean | undefined;\n allow?: readonly string[] | undefined;\n external?: MarkdownExternal | undefined;\n headingAnchors?: boolean | undefined;\n isExternal?: ((href: string) => boolean) | undefined;\n transformUrl?:\n ((url: string, kind: MarkdownUrlKind, node: MarkdownNode) => string | null) | undefined;\n}\n\nexport const MARKDOWN_DEFAULTS = new InjectionToken<MarkdownDefaults>('slotted markdown defaults', {\n providedIn: 'root',\n factory: (): MarkdownDefaults => ({}),\n});\n\n/**\n * An application decides once how its documents treat links, alerts, anchors\n * and URLs. A document that states any of them itself still wins. Its words\n * come from the language in force (`provideSlotted`).\n */\nexport function provideMarkdownDefaults(defaults: MarkdownDefaults) {\n return { provide: MARKDOWN_DEFAULTS, useValue: defaults };\n}\n\nexport function injectMarkdownDefaults(): MarkdownDefaults {\n return inject(MARKDOWN_DEFAULTS);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { initialLoadingVisibility, nextLoadingVisibility } from '@slotted/core/loading';\nimport { prepareMarkdown } from '@slotted/core/markdown';\nimport type {\n MarkdownAlertElement,\n MarkdownElement,\n MarkdownFootnote,\n MarkdownItemElement,\n MarkdownKind,\n MarkdownNode,\n MarkdownUrlKind,\n} from '@slotted/core/markdown';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { markdownMessages, type MarkdownMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { SlAlert, SlAlertContent, SlAlertDescription, SlAlertTitle } from '@slotted/angular/alert';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlCodeBlock } from '@slotted/angular/code-block';\nimport { SlInlineMessage } from '@slotted/angular/inline-message';\nimport { SlLink } from '@slotted/angular/link';\nimport type { ProseFlow, ProseSize } from '@slotted/angular/prose';\nimport {\n injectProseDefaults,\n SlProse,\n SlProseAnchor,\n SlProseFootnotes,\n SlProseScroll,\n} from '@slotted/angular/prose';\nimport {\n injectSkeletonDefaults,\n SlSkeletonRegion,\n SlSkeletonText,\n} from '@slotted/angular/skeleton';\nimport { SlVisuallyHidden } from '@slotted/angular/visually-hidden';\n\nimport { injectMarkdownDefaults, type MarkdownExternal } from './markdown-defaults';\n\n/** Whether the source arrived. `loading` is separate, because a refresh keeps what is on screen. */\nexport type MarkdownStatus = 'ready' | 'error';\n\n/** What a task checkbox asks for; the box moves when the consumer's tree does. */\nexport interface MarkdownTaskChange {\n index: number;\n checked: boolean;\n offset: number | null;\n request: ChangeRequest<boolean>;\n}\n\n/** Whether the retry was a press with a pointer or with a key. */\nexport type MarkdownRetryReason = 'pointer' | 'keyboard';\n\ntype KeysOf<U> = U extends unknown ? keyof U : never;\ntype ValueOf<U, K extends PropertyKey> = U extends unknown\n ? K extends keyof U\n ? U[K]\n : never\n : never;\n\n/**\n * A prepared element as a template reads it: every field any kind carries,\n * optional. A template names one kind, and Angular's type checker cannot\n * narrow a union on the string the directive was given, so the fields of the\n * kind it names have to be reachable without a cast.\n */\nexport type MarkdownTemplateElement = { readonly kind: MarkdownKind; readonly key: string } & {\n readonly [K in Exclude<KeysOf<MarkdownElement>, 'kind' | 'key'>]?: ValueOf<MarkdownElement, K>;\n};\n\n/** What a node template receives. */\nexport interface MarkdownNodeContext {\n $implicit: MarkdownTemplateElement;\n}\n\n/**\n * Replaces the family's element for one kind — `link`, `code`, `image` — or\n * renders a node type the family does not know — `math`, `html`, a directive\n * — by the node's own `type`. The template receives the prepared element; its\n * children are rendered with `slMarkdownChildren`.\n */\n@Directive({ selector: 'ng-template[slMarkdownNode]', standalone: true })\nexport class SlMarkdownNode {\n readonly kind = input.required<string>({ alias: 'slMarkdownNode' });\n readonly template = inject<TemplateRef<MarkdownNodeContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _directive: SlMarkdownNode,\n context: unknown,\n ): context is MarkdownNodeContext {\n return context !== null;\n }\n}\n\n/** The empty part's content, projected in place of `messages.empty`. */\n@Directive({ selector: '[slMarkdownEmpty]', standalone: true })\nexport class SlMarkdownEmpty {}\n\nconst KINDS = new Set<string>([\n 'heading',\n 'paragraph',\n 'blockquote',\n 'alert',\n 'list',\n 'item',\n 'code',\n 'thematicBreak',\n 'table',\n 'text',\n 'emphasis',\n 'strong',\n 'delete',\n 'inlineCode',\n 'break',\n 'link',\n 'image',\n 'footnoteReference',\n] satisfies MarkdownKind[]);\n\n/**\n * A document rendered from a tree, in `prose`'s typography.\n *\n * The family never receives HTML. It takes mdast — remark's output as it is,\n * or marked's through `fromMarkedTokens` — and `prepareMarkdown` from\n * `@slotted/core/markdown` decides everything that is not an element. This\n * component maps each prepared kind to an element, or to the family that\n * already owns it: `slLink`, `slCodeBlock`, `slAlert`, `slCheckbox`.\n *\n * The document is one recursive `ng-template` rendered through\n * `NgTemplateOutlet`, never a recursive component: a component host between\n * a `ul` and its `li`, or between the region and its first block, would break\n * `prose`'s child combinators.\n */\n@Component({\n selector: '[slMarkdown]',\n standalone: true,\n exportAs: 'slMarkdown',\n imports: [\n NgTemplateOutlet,\n SlAlert,\n SlAlertContent,\n SlAlertDescription,\n SlAlertTitle,\n SlButton,\n SlCheckbox,\n SlCodeBlock,\n SlGlyph,\n SlIcon,\n SlInlineMessage,\n SlLink,\n SlProse,\n SlProseAnchor,\n SlProseFootnotes,\n SlProseScroll,\n SlSkeletonRegion,\n SlSkeletonText,\n SlVisuallyHidden,\n ],\n template: `\n @if (status() === 'error') {\n <div data-part=\"error\">\n <p slInlineMessage tone=\"danger\">{{ t('error') }}</p>\n @if (retryable()) {\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"retry.emit($event.detail === 0 ? 'keyboard' : 'pointer')\"\n >\n {{ t('retry') }}\n </button>\n }\n </div>\n } @else if (painted()) {\n <div slSkeletonRegion [delay]=\"0\" [minDuration]=\"0\" [messages]=\"{ label: t('loading') }\">\n <div slProse [flow]=\"resolvedFlow()\" [size]=\"size()\">\n <div slSkeletonText lastLineSize=\"62%\" [lines]=\"3\"></div>\n </div>\n </div>\n } @else if (document().empty) {\n @if (!loading()) {\n <p data-part=\"empty\">\n <ng-content select=\"[slMarkdownEmpty]\">{{ t('empty') }}</ng-content>\n </p>\n }\n } @else {\n <div slProse [flow]=\"resolvedFlow()\" [size]=\"size()\">\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: document().children }\" />\n @if (document().footnotes.length > 0) {\n <section slProseFootnotes>\n <h2 slVisuallyHidden [id]=\"document().footnoteLabelId\">\n {{ t('footnotes') }}\n </h2>\n <ol>\n @for (footnote of document().footnotes; track footnote.key) {\n <li [id]=\"footnote.id\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: footnoteLead(footnote) }\"\n />\n @if (footnoteTail(footnote); as last) {\n <p>\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: last.children }\"\n /><ng-container\n *ngTemplateOutlet=\"backrefs; context: { $implicit: footnote }\"\n />\n </p>\n } @else {\n <ng-container *ngTemplateOutlet=\"backrefs; context: { $implicit: footnote }\" />\n }\n </li>\n }\n </ol>\n </section>\n }\n </div>\n }\n\n <ng-template #backrefs let-footnote>\n @for (reference of footnote.references; track reference; let index = $index) {\n <a\n data-part=\"backref\"\n [href]=\"'#' + reference\"\n [attr.aria-label]=\"t('backReference', { number: footnote.number, occurrence: index + 1 })\"\n ><span slIcon><svg slGlyph name=\"arrow-left\"></svg></span\n ></a>\n }\n </ng-template>\n\n <ng-template #nodes let-elements>\n @for (element of elements; track element.key) {\n @if (templateFor(element); as custom) {\n <ng-container *ngTemplateOutlet=\"custom; context: { $implicit: element }\" />\n } @else {\n @switch (element.kind) {\n @case ('text') {\n <ng-container>{{ element.value }}</ng-container>\n }\n @case ('inlineCode') {\n <code>{{ element.value }}</code>\n }\n @case ('break') {\n <br />\n }\n @case ('thematicBreak') {\n <hr />\n }\n @case ('paragraph') {\n <p>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n </p>\n }\n @case ('emphasis') {\n <em\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></em>\n }\n @case ('strong') {\n <strong\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></strong>\n }\n @case ('delete') {\n <del\n ><ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></del>\n }\n @case ('blockquote') {\n <blockquote>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n </blockquote>\n }\n @case ('heading') {\n @switch (element.level) {\n @case (1) {\n <h1 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h1>\n }\n @case (2) {\n <h2 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h2>\n }\n @case (3) {\n <h3 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h3>\n }\n @case (4) {\n <h4 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h4>\n }\n @case (5) {\n <h5 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h5>\n }\n @default {\n <h6 [id]=\"element.id\">\n <ng-container *ngTemplateOutlet=\"heading; context: { $implicit: element }\" />\n </h6>\n }\n }\n }\n @case ('alert') {\n <div data-part=\"embed\">\n <section slAlert reach=\"section\" live=\"off\" [tone]=\"element.tone\">\n <div slAlertContent>\n <div slAlertTitle>{{ alertTitle(element) }}</div>\n <div slAlertDescription>\n <div data-part=\"alert-body\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </div>\n </div>\n </div>\n </section>\n </div>\n }\n @case ('list') {\n @if (element.ordered) {\n <ol\n [attr.data-part]=\"element.task ? 'task-list' : null\"\n [attr.start]=\"element.start\"\n >\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </ol>\n } @else {\n <ul [attr.data-part]=\"element.task ? 'task-list' : null\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </ul>\n }\n }\n @case ('item') {\n @if (element.checked === null) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </li>\n } @else {\n <li data-part=\"task\">\n <div\n slCheckbox\n [checked]=\"element.checked\"\n [readOnly]=\"!editableTasks() || undefined\"\n (checkedChange)=\"onTask(element, $event)\"\n >\n <span slVisuallyHidden>{{ element.label }}</span>\n </div>\n <div data-part=\"task-body\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n />\n </div>\n </li>\n }\n }\n @case ('code') {\n <div data-part=\"embed\">\n <div\n slCodeBlock\n [code]=\"element.code\"\n [language]=\"element.language ?? 'text'\"\n [title]=\"element.title ?? undefined\"\n [lineNumbers]=\"element.lineNumbers || undefined\"\n [marks]=\"\n element.highlight === null ? undefined : { highlight: element.highlight }\n \"\n ></div>\n </div>\n }\n @case ('table') {\n <div slProseScroll>\n <table>\n <thead>\n <tr>\n @for (cell of element.head; track cell.key) {\n <th scope=\"col\" [attr.data-align]=\"cell.align\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: cell.children }\"\n />\n </th>\n }\n </tr>\n </thead>\n @if (element.rows.length > 0) {\n <tbody>\n @for (row of element.rows; track $index) {\n <tr>\n @for (cell of row; track cell.key) {\n <td [attr.data-align]=\"cell.align\">\n <ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: cell.children }\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n }\n </table>\n </div>\n }\n @case ('link') {\n @if (element.external && resolvedExternal() === 'new-tab') {\n <a slLink external [href]=\"element.href\" [attr.title]=\"element.title\"\n ><ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></a>\n } @else {\n <a [href]=\"element.href\" [attr.title]=\"element.title\"\n ><ng-container\n *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\"\n /></a>\n }\n }\n @case ('image') {\n <img\n [src]=\"element.src\"\n [alt]=\"element.alt\"\n [attr.title]=\"element.title\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n }\n @case ('footnoteReference') {\n <sup\n ><a\n data-footnote-ref=\"\"\n [id]=\"element.id\"\n [href]=\"'#' + element.target\"\n [attr.aria-describedby]=\"document().footnoteLabelId\"\n >{{ element.number }}</a\n ></sup\n >\n }\n @case ('custom') {\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n }\n }\n }\n }\n </ng-template>\n\n <ng-template #heading let-element>\n <ng-container *ngTemplateOutlet=\"nodes; context: { $implicit: element.children }\" />\n @if (resolvedHeadingAnchors()) {\n <a\n slProseAnchor\n [href]=\"'#' + element.id\"\n [attr.aria-label]=\"t('anchor', { heading: element.text })\"\n >#</a\n >\n }\n </ng-template>\n `,\n styleUrl: '../../../styles/src/markdown/markdown.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'markdown',\n 'data-part': 'root',\n '[attr.data-status]': 'status()',\n '[attr.data-flow]': 'resolvedFlow()',\n '[attr.data-loading]': \"painted() ? '' : null\",\n '[attr.data-empty]': \"status() === 'ready' && !painted() && document().empty ? '' : null\",\n '[attr.data-streaming]': \"streaming() ? '' : null\",\n '[attr.aria-busy]': \"streaming() || painted() ? 'true' : null\",\n },\n})\nexport class SlMarkdown {\n /** The document, as mdast — remark's `fromMarkdown`, or `fromMarkedTokens(marked.lexer(source))`. */\n readonly tree = input<MarkdownNode | null | undefined>(undefined);\n readonly size = input<ProseSize | undefined>(undefined);\n readonly flow = input<ProseFlow | undefined>(undefined);\n readonly status = input<MarkdownStatus>('ready');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly streaming = input(false, { transform: booleanAttribute });\n readonly external = input<MarkdownExternal | undefined>(undefined);\n readonly headingAnchors = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly headingOffset = input(0, { transform: numberAttribute });\n readonly idPrefix = input('');\n readonly alerts = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly allow = input<readonly string[] | undefined>(undefined);\n readonly unwrapDisallowed = input(false, { transform: booleanAttribute });\n readonly transformUrl = input<\n ((url: string, kind: MarkdownUrlKind, node: MarkdownNode) => string | null) | undefined\n >(undefined);\n readonly isExternal = input<((href: string) => boolean) | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * empty, error, retry and loading texts, the footnotes heading, the back\n * link, the heading permalink, and each alert's title (`alerts.note`).\n */\n readonly messages = input<PartialMessages<MarkdownMessages> | undefined>(undefined);\n /**\n * Enables the task checkboxes. React reads the presence of its handler; an\n * Angular output cannot tell whether anyone listens, so the template says so.\n */\n readonly editableTasks = input(false, { transform: booleanAttribute });\n /** Draws the retry button in the error part, for the same reason. */\n readonly retryable = input(false, { transform: booleanAttribute });\n\n /** A task the reader ticked, with its index; the box moves when the tree does. */\n readonly taskChange = output<MarkdownTaskChange>();\n readonly retry = output<MarkdownRetryReason>();\n\n private readonly templates = contentChildren(SlMarkdownNode);\n private readonly nodesTemplate = viewChild.required<TemplateRef<unknown>>('nodes');\n\n private readonly defaults = injectMarkdownDefaults();\n private readonly proseDefaults = injectProseDefaults();\n private readonly skeletonDefaults = injectSkeletonDefaults();\n\n protected readonly resolvedFlow = computed(() => this.flow() ?? this.proseDefaults.flow);\n protected readonly resolvedExternal = computed(\n () => this.external() ?? this.defaults.external ?? 'new-tab',\n );\n protected readonly resolvedHeadingAnchors = computed(\n () => this.headingAnchors() ?? this.defaults.headingAnchors ?? false,\n );\n /** The family's words in the language in force, with this document's `messages` laid over them. */\n readonly t = injectMessages(markdownMessages, this.messages);\n\n private readonly templateMap = computed(() => {\n const map = new Map<string, TemplateRef<MarkdownNodeContext>>();\n for (const node of this.templates()) map.set(node.kind(), node.template);\n return map;\n });\n\n /** The prepared document: headings, footnotes and the outline a table of contents reads. */\n readonly document = computed(() =>\n prepareMarkdown(this.tree(), {\n alerts: this.alerts() ?? this.defaults.alerts ?? true,\n allow: this.allow() ?? this.defaults.allow,\n custom: [...this.templateMap().keys()].filter((kind) => !KINDS.has(kind)),\n headingOffset: this.headingOffset(),\n idPrefix: this.idPrefix(),\n isExternal: this.isExternal() ?? this.defaults.isExternal,\n transformUrl: this.transformUrl() ?? this.defaults.transformUrl,\n unwrapDisallowed: this.unwrapDisallowed(),\n }),\n );\n\n /*\n * The placeholder and the document are two different trees, so the family\n * decides which one is on screen with the machine `skeleton` uses, reading\n * `skeleton`'s own defaults for how long to wait and how long to hold.\n */\n protected readonly painted = signal(false);\n private visibility = initialLoadingVisibility;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n effect(() => {\n const loading = this.loading();\n untracked(() => this.tick(loading));\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n /** @internal The template a node's children render through, for `slMarkdownChildren`. */\n childrenTemplate(): TemplateRef<unknown> {\n return this.nodesTemplate();\n }\n\n protected alertTitle(element: MarkdownAlertElement): string {\n return this.t(`alerts.${element.type}`);\n }\n\n protected templateFor(element: MarkdownElement): TemplateRef<MarkdownNodeContext> | undefined {\n return this.templateMap().get(element.kind === 'custom' ? element.type : element.kind);\n }\n\n protected footnoteLead(footnote: MarkdownFootnote): readonly MarkdownElement[] {\n return footnote.children.at(-1)?.kind === 'paragraph'\n ? footnote.children.slice(0, -1)\n : footnote.children;\n }\n\n protected footnoteTail(footnote: MarkdownFootnote) {\n const last = footnote.children.at(-1);\n return last?.kind === 'paragraph' ? last : null;\n }\n\n protected onTask(element: MarkdownItemElement, request: ChangeRequest<boolean>): void {\n this.taskChange.emit({\n checked: request.value,\n index: element.task ?? 0,\n offset: element.offset,\n request,\n });\n }\n\n private tick(loading: boolean): void {\n const answer = nextLoadingVisibility({\n delay: this.skeletonDefaults.delay ?? 0,\n loading,\n minDuration: this.skeletonDefaults.minDuration ?? 0,\n now: Date.now(),\n state: this.visibility,\n });\n this.visibility = answer.state;\n this.painted.set(answer.state.visible);\n clearTimeout(this.timer);\n if (answer.wait !== null) {\n this.timer = setTimeout(() => this.tick(this.loading()), answer.wait);\n }\n }\n}\n\n/**\n * Renders an element's children inside a node template, adding no element of\n * its own: `<ng-container [slMarkdownChildren]=\"element\" />`.\n */\n@Directive({ selector: '[slMarkdownChildren]', standalone: true })\nexport class SlMarkdownChildren {\n readonly element = input.required<{ readonly children?: readonly MarkdownElement[] }>({\n alias: 'slMarkdownChildren',\n });\n private readonly markdown = inject(SlMarkdown);\n private readonly container = inject(ViewContainerRef);\n\n constructor() {\n effect(() => {\n const children = this.element().children ?? [];\n untracked(() => {\n this.container.clear();\n this.container.createEmbeddedView(this.markdown.childrenTemplate(), {\n $implicit: children,\n });\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -224,6 +224,9 @@ class SlMultiSelect {
224
224
  ownId = `sl-multi-select-input-${this.identifier}`;
225
225
  registry = signal(new Map(), /* @ts-ignore */
226
226
  ...(ngDevMode ? [{ debugName: "registry" }] : /* istanbul ignore next */ []));
227
+ /** Bumped by an option whose presence or visibility changed; read once per render. */
228
+ collection = signal(0, /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "collection" }] : /* istanbul ignore next */ []));
227
230
  optionCount = signal(0, /* @ts-ignore */
228
231
  ...(ngDevMode ? [{ debugName: "optionCount" }] : /* istanbul ignore next */ []));
229
232
  hiddenCount = signal(0, /* @ts-ignore */
@@ -410,6 +413,13 @@ class SlMultiSelect {
410
413
  this.collapse?.refresh();
411
414
  });
412
415
  });
416
+ /* One count per render, however many options changed in it. Each option
417
+ counting the popup itself read the whole collection once per option —
418
+ quadratic in the option count on every keystroke that filters. */
419
+ afterRenderEffect(() => {
420
+ this.collection();
421
+ untracked(() => this.recount());
422
+ });
413
423
  destroyRef.onDestroy(() => {
414
424
  this.teardown();
415
425
  this.ring?.destroy();
@@ -462,6 +472,10 @@ class SlMultiSelect {
462
472
  refuses(value) {
463
473
  return this.full() && !this.value().includes(value);
464
474
  }
475
+ /** An option says the collection changed; the count follows after the render. */
476
+ collectionChanged() {
477
+ this.collection.update((version) => version + 1);
478
+ }
465
479
  recount() {
466
480
  this.optionCount.set(this.options().filter((option) => option.dataset['create'] === undefined).length);
467
481
  this.dropStaleHighlight();
@@ -1764,10 +1778,17 @@ class SlMultiSelectItem {
1764
1778
  */
1765
1779
  afterRenderEffect(() => {
1766
1780
  this.visible();
1767
- this.multiSelect.registerLabel(this.value(), this.label());
1768
- this.multiSelect.recount();
1781
+ const value = this.value();
1782
+ const label = this.label();
1783
+ /* Untracked: what the parent reads while registering is its state, not
1784
+ this option's, and tracking it re-ran every option's effect on every
1785
+ open and every highlight move. */
1786
+ untracked(() => {
1787
+ this.multiSelect.registerLabel(value, label);
1788
+ this.multiSelect.collectionChanged();
1789
+ });
1769
1790
  });
1770
- inject(DestroyRef).onDestroy(() => this.multiSelect.recount());
1791
+ inject(DestroyRef).onDestroy(() => this.multiSelect.collectionChanged());
1771
1792
  }
1772
1793
  onPointerEnter(event) {
1773
1794
  if (this.inert())