@slotted/angular 0.1.0-beta.6 → 0.1.0-beta.8

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 (70) hide show
  1. package/docs/calendar.json +1 -1
  2. package/docs/menu.json +12 -0
  3. package/docs/menu.md +2 -0
  4. package/docs/side-navigation.json +1 -0
  5. package/docs/side-navigation.md +1 -1
  6. package/docs/table.examples.md +2 -2
  7. package/docs/table.json +2 -2
  8. package/fesm2022/slotted-angular-action-bar.mjs +1 -1
  9. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
  10. package/fesm2022/slotted-angular-app-shell.mjs +2 -2
  11. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  12. package/fesm2022/slotted-angular-button.mjs +12 -12
  13. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  14. package/fesm2022/slotted-angular-calendar.mjs +14 -4
  15. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  16. package/fesm2022/slotted-angular-chart.mjs +2 -2
  17. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  18. package/fesm2022/slotted-angular-color-picker.mjs +1 -1
  19. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
  20. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  21. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  22. package/fesm2022/slotted-angular-command-palette.mjs +22 -3
  23. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
  24. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  25. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  26. package/fesm2022/slotted-angular-data-grid.mjs +2 -2
  27. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  28. package/fesm2022/slotted-angular-data-list.mjs +1 -1
  29. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  30. package/fesm2022/slotted-angular-date-field.mjs +2 -2
  31. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  32. package/fesm2022/slotted-angular-datetime-field.mjs +2 -2
  33. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
  34. package/fesm2022/slotted-angular-dialog.mjs +26 -4
  35. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  36. package/fesm2022/slotted-angular-drawer.mjs +6 -2
  37. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  38. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  39. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  40. package/fesm2022/slotted-angular-filter-bar.mjs +1 -1
  41. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-kbd.mjs +4 -4
  43. package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-menu.mjs +12 -4
  45. package/fesm2022/slotted-angular-menu.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  47. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-side-navigation.mjs +2 -2
  49. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  51. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-table.mjs +3 -1
  53. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-tabs.mjs +2 -2
  55. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-time-field.mjs +2 -2
  57. package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-toolbar.mjs +1 -1
  59. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
  60. package/package.json +3 -3
  61. package/types/slotted-angular-calendar.d.ts +2 -0
  62. package/types/slotted-angular-calendar.d.ts.map +1 -1
  63. package/types/slotted-angular-command-palette.d.ts +10 -1
  64. package/types/slotted-angular-command-palette.d.ts.map +1 -1
  65. package/types/slotted-angular-dialog.d.ts.map +1 -1
  66. package/types/slotted-angular-drawer.d.ts.map +1 -1
  67. package/types/slotted-angular-menu.d.ts +11 -2
  68. package/types/slotted-angular-menu.d.ts.map +1 -1
  69. package/types/slotted-angular-table.d.ts +3 -1
  70. package/types/slotted-angular-table.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-time-field.mjs","sources":["../../time-field/src/time-field-defaults.ts","../../time-field/src/time-field.ts","../../time-field/src/time-field-parts.ts","../../time-field/src/slotted-angular-time-field.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { TimeGranularity } from '@slotted/core/date';\n\n/** The type step the control sits at, matching the field around it. */\nexport type TimeFieldSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame the control shows. The three steps `text-field` set, so a form\n * holding a name and a time shows one frame twice rather than two frames.\n */\nexport type TimeFieldVariant = 'outline' | 'subtle' | 'plain';\n\n/**\n * The question a consumer asks about the clock. Which variant of each — `h11`\n * or `h12`, `h23` or `h24` — is the locale's own, and `Intl` answers it.\n */\nexport type TimeFieldHourCycle = 12 | 24;\n\nexport interface TimeFieldDefaults {\n granularity: TimeGranularity;\n /** Unset means the locale decides both the cycle and its variant. */\n hourCycle: TimeFieldHourCycle | undefined;\n /** Whether `+`, `-` and `=` open the duration expression. */\n relative: boolean;\n size: TimeFieldSize;\n /** Which zone answers \"what time is it now\". Unset means the runtime's own. */\n timeZone: string | undefined;\n variant: TimeFieldVariant;\n}\n\nconst FALLBACK: TimeFieldDefaults = {\n granularity: 'minute',\n hourCycle: undefined,\n relative: true,\n size: 'md',\n timeZone: undefined,\n variant: 'outline',\n};\n\nexport const TIME_FIELD_DEFAULTS = new InjectionToken<TimeFieldDefaults>(\n 'slotted time field defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its times look like, which clock they run\n * on and which zone answers \"now\", rather than repeating the same inputs on\n * every control in a form. A control that states any of them itself still\n * wins. The locale that writes the times, and the words, come from the\n * language in force (`provideSlotted`).\n */\nexport function provideTimeFieldDefaults(defaults: Partial<TimeFieldDefaults>) {\n return {\n provide: TIME_FIELD_DEFAULTS,\n useFactory: (): TimeFieldDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a time field renders as here, before it states anything of its own. */\nexport function injectTimeFieldDefaults(): TimeFieldDefaults {\n return inject(TIME_FIELD_DEFAULTS);\n}\n","import {\n boundSegment,\n clearSegment,\n commitTyping,\n createTimeFormat,\n EMPTY_SEGMENTS,\n fieldRange,\n isRelativeKey,\n isSameTime,\n isTimeInRange,\n nowIn,\n parseDuration,\n plainDate,\n resolveRelative,\n segmentsOfTime,\n stepSegment,\n timeOf,\n toISOTime,\n typeDayPeriod,\n typeDigit,\n} from '@slotted/core/date';\nimport type {\n PlainTime,\n SegmentReference,\n SegmentState,\n TimeFieldName,\n TimeGranularity,\n} from '@slotted/core/date';\nimport {\n timeFieldMessages,\n type PartialMessages,\n type TimeFieldMessages,\n} from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectTimeFieldDefaults } from './time-field-defaults';\nimport type { TimeFieldHourCycle, TimeFieldSize, TimeFieldVariant } from './time-field-defaults';\n\n/**\n * How far `PageUp` and `PageDown` move each field.\n *\n * The APG spin-button example pages every button by five. Fifteen minutes is\n * the page a reader of a time field means and the step a quarter-hour panel\n * offers, so the two agree; three hours is a quarter of a twelve-hour cycle.\n */\nconst PAGE_STEP: Record<TimeFieldName, number> = {\n hour: 3,\n minute: 15,\n second: 15,\n dayPeriod: 1,\n};\n\n/**\n * The date half of the reference, which a time field never draws and the engine\n * still asks for. One `SegmentState` holds both halves — that is what\n * `datetime-field` needs — so the reference carries both as well.\n */\nconst REFERENCE_DATE = plainDate(2000, 1, 1);\n\n/**\n * The hidden element carrying the whole time needs an identifier the group can\n * point `aria-labelledby` at, and Angular has no `useId`. A module counter is\n * what the framework leaves: stable for a given render order, which is what\n * hydration needs, and never on the public surface.\n */\nlet sequence = 0;\n\n/**\n * What a request carries beyond the value: the segments, so a half-typed time\n * can be saved, and whether the duration that produced it ran past midnight.\n */\nexport interface TimeFieldChangeRequest extends ChangeRequest<PlainTime | null> {\n readonly segments: SegmentState;\n readonly crossesMidnight: boolean;\n}\n\n/**\n * A segmented time control: one spin button per field, in the order the locale\n * writes them.\n *\n * **The frame is not the control.** The element carrying `data-ui` is the\n * consumer's own box with no role; `role=\"group\"` is on the row of segments,\n * which is what the APG's spin-button example names.\n *\n * **Angular is a component with a template and a `ControlValueAccessor`**,\n * because a time belongs in a Reactive Form and Angular has the integration\n * point for it. It also implements `Validator`: `min`, `max` and\n * `isTimeUnavailable` are validity this control owns and no other validator can\n * see. React has no equivalent, and `references/frameworks.md` asks for that\n * asymmetry to be recorded rather than levelled away.\n *\n * **A time can be written as a duration.** `+`, `-` and `=` open one expression\n * region in place of the segments, and what it resolves to is drawn beside it\n * before `Enter` commits anything.\n */\n@Component({\n selector: '[slTimeField]',\n standalone: true,\n exportAs: 'slTimeField',\n imports: [SlGlyph, SlIcon],\n template: `<ng-content select=\"[slTimeFieldStart]\" />\n @if (expression() !== null) {\n <input\n #duration\n data-part=\"duration\"\n type=\"text\"\n placeholder=\"+40m\"\n [attr.aria-label]=\"t('duration')\"\n [attr.aria-describedby]=\"describedBy()\"\n [value]=\"expression()\"\n (input)=\"onExpressionInput($event)\"\n (keydown)=\"onExpressionKeyDown($event)\"\n (blur)=\"commitExpression()\"\n />\n <span\n data-part=\"preview\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-resolved]=\"resolved() === null ? null : ''\"\n [attr.data-crosses-midnight]=\"crossesMidnight() ? '' : null\"\n ><span slIcon directional><svg slGlyph name=\"chevron-right\"></svg></span\n >{{ previewText() }}</span\n >\n } @else {\n <div\n data-part=\"segments\"\n role=\"group\"\n [attr.id]=\"controlId()\"\n [attr.aria-label]=\"label() ?? writtenLabel\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"ariaInvalid()\"\n [attr.aria-required]=\"ariaRequired()\"\n [attr.aria-readonly]=\"ariaReadonly()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (paste)=\"onPaste($event)\"\n >\n @for (part of format().pattern; track $index) {\n @if (part.type === 'literal') {\n <span data-part=\"literal\" aria-hidden=\"true\">{{ part.value }}</span>\n } @else {\n <div\n data-part=\"segment\"\n role=\"spinbutton\"\n [attr.data-field]=\"part.type\"\n [attr.data-placeholder]=\"valueOf(part.type) === null ? '' : null\"\n [attr.aria-label]=\"part.value\"\n [attr.aria-valuenow]=\"valueOf(part.type)\"\n [attr.aria-valuemin]=\"rangeOf(part.type).min\"\n [attr.aria-valuemax]=\"rangeOf(part.type).max\"\n [attr.aria-valuetext]=\"spokenOf(part.type)\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n [attr.aria-readonly]=\"ariaReadonly()\"\n [tabindex]=\"tabIndexOf(part.type)\"\n (mousedown)=\"onSegmentMouseDown($event)\"\n (focus)=\"activeField.set(part.type)\"\n (blur)=\"onBlur()\"\n >\n {{ textOf(part.type) }}\n </div>\n }\n }\n </div>\n }\n <span data-part=\"value-text\" hidden [attr.id]=\"valueTextId\">{{ spokenTime() }}</span>\n @if (showClear()) {\n <button\n data-part=\"clear\"\n type=\"button\"\n [attr.aria-label]=\"t('clear')\"\n (click)=\"clear($event)\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n <ng-content select=\"[slTimeFieldEnd]\" />\n <input data-part=\"hidden-input\" type=\"hidden\" readonly [attr.name]=\"name()\" [value]=\"iso()\" />`,\n styleUrl: '../../../styles/src/time-field/time-field.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlTimeField), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlTimeField), multi: true },\n ],\n host: {\n 'data-ui': 'time-field',\n 'data-part': 'root',\n '(mousedown)': 'onRootMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-cycle]': 'dataCycle()',\n '[attr.data-granularity]': 'resolvedGranularity()',\n '[attr.data-relative]': \"expression() === null ? null : ''\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-required]': \"resolvedRequired() === true ? '' : null\",\n },\n})\nexport class SlTimeField implements ControlValueAccessor, Validator, OnInit {\n /** Present means the consumer owns the value. */\n readonly value = input<PlainTime | null | undefined>(undefined);\n /** The value the control starts from when nobody else writes one. */\n readonly defaultValue = input<PlainTime | null | undefined>(undefined);\n\n /** The earliest time the control accepts. Also a form validity rule. */\n readonly min = input<PlainTime | undefined>(undefined);\n /** The latest time the control accepts. Also a form validity rule. */\n readonly max = input<PlainTime | undefined>(undefined);\n /** Refuses particular times — a lunch break, a booked slot, a closed shop. */\n readonly isTimeUnavailable = input<((time: PlainTime) => boolean) | undefined>(undefined);\n\n /**\n * BCP 47. Decides the field order, the separators and the placeholder.\n * Unset, the language in force (`provideSlotted`) decides.\n */\n readonly locale = input<string | undefined>(undefined);\n /** Which zone answers \"what time is it now\", and nothing else. */\n readonly timeZone = input<string | undefined>(undefined);\n readonly hourCycle = input<TimeFieldHourCycle | undefined>(undefined);\n readonly granularity = input<TimeGranularity | undefined>(undefined);\n /**\n * What an empty segment steps from, and what a duration resolves against.\n * Unset, both are the current time in `timeZone`.\n */\n readonly referenceTime = input<PlainTime | undefined>(undefined);\n\n readonly size = input<TimeFieldSize | undefined>(undefined);\n readonly variant = input<TimeFieldVariant | undefined>(undefined);\n\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n /** Draws a button that empties the value and returns focus to the control. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Whether `+`, `-` and `=` open the duration expression. */\n readonly relative = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * clear button, the duration region's name and the next-day preview.\n */\n readonly messages = input<PartialMessages<TimeFieldMessages> | undefined>(undefined);\n /** The name a plain form post carries the `HH:mm:ss` string under. */\n readonly name = input<string | undefined>(undefined);\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the segments, whether a duration crossed midnight, the reason, the\n * originating event and `cancel()`. There is no `[(value)]`, because a\n * two-way binding has one slot and can carry none of those.\n */\n /**\n * The accessible name, when it is bound rather than written: a static\n * `aria-label` is read once from the host, and a family naming this field\n * from its own input — `time-range-picker` names its two ends — has no\n * static attribute to write.\n */\n readonly label = input<string | undefined>(undefined);\n\n readonly valueChange = output<TimeFieldChangeRequest>();\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly defaults = injectTimeFieldDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this field's `messages` laid over them. */\n readonly t = injectMessages(timeFieldMessages, this.messages);\n private readonly field = inject(SlField, { optional: true });\n\n /** Read before the host binding computes, so it never writes over it. */\n protected readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n\n protected readonly valueTextId = `sl-time-field-${String((sequence += 1))}`;\n\n private readonly segments = signal<SegmentState>(EMPTY_SEGMENTS);\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n /**\n * What time it is, resolved after construction rather than during it, so a\n * server and a browser never disagree about the markup. Nothing is drawn from\n * it: it is the time an empty segment steps to and a duration resolves from.\n */\n private readonly clock = signal<PlainTime>({ hour: 12, minute: 0, second: 0 });\n protected readonly activeField = signal<TimeFieldName | undefined>(undefined);\n /** The duration being written, or `null` while the segments are showing. */\n protected readonly expression = signal<string | null>(null);\n\n private onChangeFn: (value: PlainTime | null) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n private onValidatorChangeFn: () => void = () => undefined;\n\n protected readonly resolvedGranularity = computed(\n () => this.granularity() ?? this.defaults.granularity,\n );\n\n protected readonly format = computed(() =>\n createTimeFormat({\n granularity: this.resolvedGranularity(),\n hourCycle: this.hourCycle() ?? this.defaults.hourCycle,\n locale: this.locale() ?? this.appLocale(),\n }),\n );\n\n protected readonly dataCycle = computed(() => (this.format().usesDayPeriod ? '12' : '24'));\n\n protected readonly fields = computed(() =>\n this.format()\n .pattern.filter((part) => part.type !== 'literal')\n .map((part) => part.type as TimeFieldName),\n );\n\n /** What an empty segment steps from, in the shape the engine reads. */\n private readonly reference = computed<SegmentReference>(() => {\n const anchor = this.anchor();\n const shown = this.format().toDisplay(anchor.hour);\n return {\n ...REFERENCE_DATE,\n dayPeriod: shown.dayPeriod ?? 0,\n hour: shown.hour,\n hourCycle: this.format().hourCycle,\n minute: anchor.minute,\n second: anchor.second,\n };\n });\n\n private readonly anchor = computed(() => this.referenceTime() ?? this.clock());\n\n /** The time the segments make, or `null` while any drawn field is unfilled. */\n readonly time = computed(() => timeOf(this.segments(), this.format()));\n protected readonly iso = computed(() => {\n const time = this.time();\n return time === null ? '' : toISOTime(time);\n });\n protected readonly spokenTime = computed(() => {\n const time = this.time();\n return time === null ? '' : this.format().describe(time);\n });\n\n /* ── The duration expression ─────────────────────────────────────────── */\n\n protected readonly resolved = computed(() => {\n const written = this.expression();\n if (written === null) return null;\n const seconds = parseDuration(written);\n return seconds === null ? null : resolveRelative(this.anchor(), seconds);\n });\n\n protected readonly crossesMidnight = computed(() => (this.resolved()?.days ?? 0) !== 0);\n\n protected readonly previewText = computed(() => {\n const step = this.resolved();\n if (step === null) return '';\n const written = this.format().format(step.time);\n return step.days === 0 ? written : this.t('nextDay', { time: written });\n });\n\n /* ── What the field around it decides ────────────────────────────────── */\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(() => this.readOnly() ?? this.field?.resolvedReadOnly());\n readonly resolvedRequired = computed(() => this.required() ?? this.field?.required());\n\n /**\n * Validity the family owns, beside the validity the consumer states. A time\n * outside the bounds or refused by the predicate is invalid whatever the\n * field around it says, because this control is the only thing that knows.\n */\n readonly resolvedInvalid = computed(() => {\n const time = this.time();\n if (time !== null && !isTimeInRange(time, this.min(), this.max())) return true;\n if (time !== null && this.isTimeUnavailable()?.(time) === true) return true;\n return this.invalid() ?? this.field?.invalid();\n });\n\n protected readonly controlId = computed(\n () => this.writtenId ?? this.field?.ids().control ?? null,\n );\n protected readonly labelledBy = computed(() => {\n if (this.label() !== undefined || this.writtenLabel !== null) return null;\n const merged = [this.writtenLabelledBy ?? this.field?.ids().label, this.valueTextId].filter(\n Boolean,\n );\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(() =>\n this.resolvedInvalid() === true ? 'true' : null,\n );\n protected readonly ariaRequired = computed(() =>\n this.resolvedRequired() === true ? 'true' : null,\n );\n protected readonly ariaReadonly = computed(() =>\n this.resolvedReadOnly() === true ? 'true' : null,\n );\n protected readonly ariaDisabled = computed(() =>\n this.resolvedDisabled() === true ? 'true' : null,\n );\n\n private readonly editable = computed(\n () => this.resolvedDisabled() !== true && this.resolvedReadOnly() !== true,\n );\n\n protected readonly showClear = computed(() => {\n if (!this.clearable() || !this.editable() || this.expression() !== null) return false;\n const held = this.segments();\n return this.fields().some((name) => held[name] !== null);\n });\n\n constructor() {\n /**\n * A consumer's own value writes the segments, and only when it names a\n * different time: written on every change detection it would throw away a\n * half-typed time on the keystroke that completes a different one.\n */\n effect(() => {\n const next = this.value();\n if (next === undefined) return;\n const segments = this.segments();\n /* A run of digits still being typed is not a value the consumer refused:\n with a controlled `null`, the first minute digit after a whole hour\n read as a time the consumer had not written back, and the segments\n were reset under the reader's fingers. Found by `time-range-picker`,\n which binds the field to its work. */\n if (segments.typing !== null) return;\n if (isSameTime(timeOf(segments, this.format()), next)) return;\n this.segments.set(segmentsOfTime(next, this.format()));\n });\n\n /* The expression region is focused the moment it replaces the segments,\n with the caret after the character that opened it. */\n effect(() => {\n if (this.expression() === null) return;\n queueMicrotask(() => {\n const input = this.element.querySelector<HTMLInputElement>('[data-part=\"duration\"]');\n if (input === null) return;\n input.focus();\n input.setSelectionRange(input.value.length, input.value.length);\n });\n });\n }\n\n ngOnInit() {\n this.segments.set(segmentsOfTime(this.value() ?? this.defaultValue() ?? null, this.format()));\n this.clock.set(nowIn(this.timeZone() ?? this.defaults.timeZone));\n }\n\n /* ── The value ───────────────────────────────────────────────────────── */\n\n writeValue(value: PlainTime | null | undefined) {\n this.segments.set(segmentsOfTime(value ?? null, this.format()));\n }\n\n registerOnChange(fn: (value: PlainTime | null) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n registerOnValidatorChange(fn: () => void) {\n this.onValidatorChangeFn = fn;\n }\n\n /**\n * The rules no other validator can see. `required` is left to Angular's own,\n * because a form already has a word for it and two would disagree.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const time = control.value as PlainTime | null;\n if (time === null || time === undefined) return null;\n\n const min = this.min();\n const max = this.max();\n if (!isTimeInRange(time, min, max)) {\n return { slottedTimeRange: { min, max, actual: time } };\n }\n if (this.isTimeUnavailable()?.(time) === true) {\n return { slottedTimeUnavailable: { actual: time } };\n }\n return null;\n }\n\n /** Puts focus on the first segment, which is where typing starts. */\n focus() {\n const first = this.fields()[0];\n if (first !== undefined) this.focusField(first);\n }\n\n /**\n * Where a press on the frame puts the reader: the first field still waiting\n * for a value, and the first field of the time when none is. Every text\n * control on the page answers a press anywhere inside its border.\n */\n focusEntry() {\n const held = this.segments();\n const empty = this.fields().find((name) => held[name] === null);\n const target = empty ?? this.fields()[0];\n if (target !== undefined) this.focusField(target);\n }\n\n protected onRootMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n if (target?.closest('[data-part=\"segment\"], button, a, input, select, textarea') != null) {\n return;\n }\n event.preventDefault();\n if (this.expression() === null) this.focusEntry();\n }\n\n /**\n * Safari does not focus a `div` on a press even when it carries a\n * `tabindex`, so the press says so itself rather than relying on it.\n */\n protected onSegmentMouseDown(event: MouseEvent) {\n event.preventDefault();\n (event.currentTarget as HTMLElement).focus();\n }\n\n /** Empties every segment, with the `clear` reason. */\n clear(source?: Event) {\n this.commit(EMPTY_SEGMENTS, 'clear', source);\n this.focus();\n }\n\n /* ── The keyboard ────────────────────────────────────────────────────── */\n\n /**\n * A key the field acted on is the field's, and nothing above it sees it. A\n * `div` with `role=\"spinbutton\"` is invisible to every \"is the target\n * editable\" guard an application writes, and `preventDefault` alone does not\n * help: a shortcut handler reads the key, not the default.\n */\n private consume(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * The keys are handled on the host rather than on each segment, so a\n * consumer's own `(keydown)` on the same element still runs before the family\n * stops the event — which is the composition React gets by calling the\n * consumer's handler first.\n */\n protected onKeyDown(event: KeyboardEvent) {\n const segment = (event.target as HTMLElement | null)?.closest<HTMLElement>(\n '[data-part=\"segment\"]',\n );\n const name = segment?.dataset['field'] as TimeFieldName | undefined;\n if (name === undefined) return;\n\n /* An inline direction is a physical pair of keys and a logical order, so\n the arrow that walks forward is the one pointing along the writing\n direction rather than the one pointing right. */\n const rtl = getComputedStyle(this.element).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key === forward) {\n this.consume(event);\n this.moveBy(name, 1);\n return;\n }\n if (event.key === backward) {\n this.consume(event);\n this.moveBy(name, -1);\n return;\n }\n\n if (!this.editable()) return;\n\n /**\n * `Alt` with an arrow is not this control's chord. `time-picker` opens its\n * panel with `Alt`+`ArrowDown`, and a segment that stepped on it would eat\n * the only shortcut the surface has.\n */\n if (event.altKey) return;\n\n if ((this.relative() ?? this.defaults.relative) && isRelativeKey(event.key)) {\n this.consume(event);\n this.expression.set(event.key);\n return;\n }\n\n const held = this.segments();\n const reference = this.reference();\n\n switch (event.key) {\n case 'ArrowUp':\n this.consume(event);\n this.commit(stepSegment(held, name, 1, reference), 'keyboard', event);\n return;\n case 'ArrowDown':\n this.consume(event);\n this.commit(stepSegment(held, name, -1, reference), 'keyboard', event);\n return;\n case 'PageUp':\n this.consume(event);\n this.commit(stepSegment(held, name, PAGE_STEP[name], reference), 'keyboard', event);\n return;\n case 'PageDown':\n this.consume(event);\n this.commit(stepSegment(held, name, -PAGE_STEP[name], reference), 'keyboard', event);\n return;\n case 'Home':\n this.consume(event);\n this.commit(boundSegment(held, name, 'min', reference), 'keyboard', event);\n return;\n case 'End':\n this.consume(event);\n this.commit(boundSegment(held, name, 'max', reference), 'keyboard', event);\n return;\n case 'Backspace':\n case 'Delete':\n this.consume(event);\n this.commit(clearSegment(held, name), 'clear', event);\n return;\n default:\n break;\n }\n\n /* The day period holds two words rather than digits, and the platform's own\n control takes it by the first letter of either. */\n if (name === 'dayPeriod' && /^\\p{L}$/u.test(event.key)) {\n const typed = typeDayPeriod(held, event.key, this.format());\n if (typed === null) return;\n this.consume(event);\n this.commit(typed.segments, 'keyboard', event);\n if (typed.advance) this.moveBy(name, 1);\n return;\n }\n\n if (/^\\d$/.test(event.key)) {\n this.consume(event);\n const typed = typeDigit(held, name, Number(event.key), this.format(), reference);\n this.commit(typed.segments, 'keyboard', event);\n if (typed.advance) this.moveBy(name, 1);\n }\n }\n\n protected onExpressionInput(event: Event) {\n this.expression.set((event.target as HTMLInputElement).value);\n }\n\n protected onExpressionKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n /* An expression inside a form must not submit it: `Enter` is this\n control's commit and nothing above it needs to hear the key. */\n this.consume(event);\n this.commitExpression(event);\n this.focus();\n return;\n }\n\n if (event.key === 'Escape') {\n /* Abandoned whole, and the segments come back exactly as they were. The\n key is stopped so an overlay above does not close on the same press —\n the field takes it first while an expression is open. */\n this.consume(event);\n this.expression.set(null);\n this.focus();\n }\n }\n\n /** Commits the expression when it resolves, and abandons it when it does not. */\n protected commitExpression(source?: Event) {\n const step = this.resolved();\n if (step === null) {\n this.expression.set(null);\n return;\n }\n this.commit(segmentsOfTime(step.time, this.format()), 'keyboard', source, step.days !== 0);\n this.expression.set(null);\n }\n\n /**\n * A whole time, pasted. The locale's shape is read first and ISO 8601 after\n * it; text that is neither but reads as a duration opens the expression, so\n * pasting `+40m` does what typing it does.\n */\n protected onPaste(event: ClipboardEvent) {\n if (!this.editable()) return;\n const text = event.clipboardData?.getData('text/plain') ?? '';\n\n const parsed = this.format().parse(text);\n if (parsed !== null) {\n event.preventDefault();\n this.commit(segmentsOfTime(parsed, this.format()), 'keyboard', event);\n return;\n }\n\n if ((this.relative() ?? this.defaults.relative) && parseDuration(text) !== null) {\n event.preventDefault();\n this.expression.set(text.trim());\n }\n }\n\n /** A run of typed digits ends when focus leaves. */\n protected onBlur() {\n this.activeField.set(undefined);\n this.onTouchedFn();\n const held = this.segments();\n if (held.typing === null) return;\n this.commit(commitTyping(held, this.format(), this.reference()), 'blur', undefined);\n }\n\n /* ── What the template reads ─────────────────────────────────────────── */\n\n protected valueOf(field: TimeFieldName): number | null {\n return this.segments()[field];\n }\n\n protected rangeOf(field: TimeFieldName) {\n return fieldRange(field, { hourCycle: this.format().hourCycle });\n }\n\n /**\n * What a reader hears instead of the number. The day period is why it is not\n * optional: `aria-valuenow` there is `0` or `1`, which is not a name in any\n * language.\n */\n protected spokenOf(field: TimeFieldName): string | null {\n const raw = this.segments()[field];\n if (raw === null) return null;\n if (field !== 'dayPeriod') return String(raw);\n return this.format().dayPeriodNames()[raw === 1 ? 1 : 0];\n }\n\n /**\n * What one field shows. A finished value is padded to the field's width so\n * the columns hold their place; a value still being typed is not, because a\n * padded run shows numbers nobody typed.\n */\n protected textOf(field: TimeFieldName): string {\n const held = this.segments();\n const raw = held[field];\n if (raw === null) {\n return this.format().pattern.find((part) => part.type === field)?.value ?? '';\n }\n\n const typing = held.typing;\n if (typing !== null && typing.field === field) {\n return String(raw).padStart(typing.digits, '0');\n }\n\n return this.format().formatValue(raw, field);\n }\n\n /** Exactly one segment is in the tab sequence, which is the roving model. */\n protected tabIndexOf(field: TimeFieldName): number {\n if (this.resolvedDisabled() === true) return -1;\n return field === (this.activeField() ?? this.fields()[0]) ? 0 : -1;\n }\n\n /* ── The machinery ───────────────────────────────────────────────────── */\n\n private focusField(name: TimeFieldName) {\n this.activeField.set(name);\n this.element.querySelector<HTMLElement>(`[data-part=\"segment\"][data-field=\"${name}\"]`)?.focus();\n }\n\n private moveBy(name: TimeFieldName, step: number) {\n const next = this.fields()[this.fields().indexOf(name) + step];\n if (next !== undefined) this.focusField(next);\n }\n\n /**\n * Moves the segments, and asks before the derived value moves with them.\n *\n * A run of typed digits moves the display and not the value: typing `23` into\n * an hour passes through `2` on the way, and `2` is a time the arithmetic\n * accepts and nobody meant. The request is emitted when the run ends.\n */\n private commit(\n next: SegmentState,\n reason: ChangeReason,\n source: Event | undefined,\n crossesMidnight = false,\n ) {\n const previous = this.time();\n this.segments.set(next);\n if (next.typing !== null) return;\n\n const nextValue = timeOf(next, this.format());\n let cancelled = false;\n const state = createControllable<PlainTime | null>({\n controlled: undefined,\n initial: previous,\n equals: isSameTime,\n onRequest: (request) => {\n this.valueChange.emit({ ...request, crossesMidnight, segments: next });\n cancelled = request.cancelled;\n },\n });\n state.request(nextValue, reason, source);\n\n if (cancelled) return;\n this.onChangeFn(nextValue);\n this.onValidatorChangeFn();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * An adornment before the time in the reading direction: a clock mark, a label,\n * an icon. Named for the direction rather than for a side, so the same markup\n * puts the mark before the time in both directions.\n *\n * It is a directive on the consumer's own element, so an `icon`, a `kbd` or a\n * `span` all work and none of them loses its own semantics. The stylesheet\n * sizes any icon inside it from the control's own glyph scale.\n */\n@Directive({\n selector: '[slTimeFieldStart]',\n standalone: true,\n exportAs: 'slTimeFieldStart',\n host: { 'data-part': 'start' },\n})\nexport class SlTimeFieldStart {}\n\n/** An adornment after the time in the reading direction. */\n@Directive({\n selector: '[slTimeFieldEnd]',\n standalone: true,\n exportAs: 'slTimeFieldEnd',\n host: { 'data-part': 'end' },\n})\nexport class SlTimeFieldEnd {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AA8BA,MAAM,QAAQ,GAAsB;AAClC,IAAA,WAAW,EAAE,QAAQ;AACrB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,OAAO,EAAE,SAAS;CACnB;MAEY,mBAAmB,GAAG,IAAI,cAAc,CACnD,6BAA6B,EAC7B,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE;AAGjD;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,QAAoC,EAAA;IAC3E,OAAO;AACL,QAAA,OAAO,EAAE,mBAAmB;AAC5B,QAAA,UAAU,EAAE,OAA0B,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;KACpE;AACH;AAEA;SACgB,uBAAuB,GAAA;AACrC,IAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC;AACpC;;ACIA;;;;;;AAMG;AACH,MAAM,SAAS,GAAkC;AAC/C,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,CAAC;CACb;AAED;;;;AAIG;AACH,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5C;;;;;AAKG;AACH,IAAI,QAAQ,GAAG,CAAC;AAWhB;;;;;;;;;;;;;;;;;;AAkBG;MA0GU,WAAW,CAAA;;IAEb,KAAK,GAAG,KAAK,CAA+B,SAAS;8EAAC;;IAEtD,YAAY,GAAG,KAAK,CAA+B,SAAS;qFAAC;;IAG7D,GAAG,GAAG,KAAK,CAAwB,SAAS;4EAAC;;IAE7C,GAAG,GAAG,KAAK,CAAwB,SAAS;4EAAC;;IAE7C,iBAAiB,GAAG,KAAK,CAA6C,SAAS;0FAAC;AAEzF;;;AAGG;IACM,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;;IAE7C,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;IAC/C,SAAS,GAAG,KAAK,CAAiC,SAAS;kFAAC;IAC5D,WAAW,GAAG,KAAK,CAA8B,SAAS;oFAAC;AACpE;;;AAGG;IACM,aAAa,GAAG,KAAK,CAAwB,SAAS;sFAAC;IAEvD,IAAI,GAAG,KAAK,CAA4B,SAAS;6EAAC;IAClD,OAAO,GAAG,KAAK,CAA+B,SAAS;gFAAC;;AAGxD,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACO,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACO,IAAA,OAAO,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EACnF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACO,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;;IAGO,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAEzD,IAAA,QAAQ,GAAG,KAAK,CAAoD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACjF;AACF;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAiD,SAAS;iFAAC;;IAE3E,IAAI,GAAG,KAAK,CAAqB,SAAS;6EAAC;AAEpD;;;;;AAKG;AACH;;;;;AAKG;IACM,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;IAE5C,WAAW,GAAG,MAAM,EAA0B;AAEtC,IAAA,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa;IACnE,QAAQ,GAAG,uBAAuB,EAAE;IACpC,SAAS,GAAG,YAAY,EAAE;;IAElC,CAAC,GAAG,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC5C,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGzC,YAAY,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;AAC7E,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;AACe,IAAA,SAAS,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpE,iBAAiB,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,EAAE;AACrF,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;IACe,kBAAkB,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE;AACvF,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;IAEiB,WAAW,GAAG,CAAA,cAAA,EAAiB,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAA,CAAE;IAE1D,QAAQ,GAAG,MAAM,CAAe,cAAc;iFAAC;IAC/C,YAAY,GAAG,MAAM,CAAsB,SAAS;qFAAC;AACtE;;;;AAIG;AACc,IAAA,KAAK,GAAG,MAAM,CAAY,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;8EAAC;IAC3D,WAAW,GAAG,MAAM,CAA4B,SAAS;oFAAC;;IAE1D,UAAU,GAAG,MAAM,CAAgB,IAAI;mFAAC;AAEnD,IAAA,UAAU,GAAsC,MAAM,SAAS;AAC/D,IAAA,WAAW,GAAe,MAAM,SAAS;AACzC,IAAA,mBAAmB,GAAe,MAAM,SAAS;AAEtC,IAAA,mBAAmB,GAAG,QAAQ,CAC/C,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW;4FACtD;AAEkB,IAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,gBAAgB,CAAC;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;QACtD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;KAC1C,CAAC;+EACH;IAEkB,SAAS,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;kFAAC;IAEvE,MAAM,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,MAAM;AACR,SAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS;SAChD,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAqB,CAAC;+EAC7C;;AAGgB,IAAA,SAAS,GAAG,QAAQ,CAAmB,MAAK;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAClD,OAAO;AACL,YAAA,GAAG,cAAc;AACjB,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB;IACH,CAAC;kFAAC;AAEe,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;+EAAC;;AAGrE,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;6EAAC;AACnD,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;IAC7C,CAAC;4EAAC;AACiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1D,CAAC;mFAAC;;AAIiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,OAAO,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;AACtC,QAAA,OAAO,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC;IAC1E,CAAC;iFAAC;AAEiB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC;wFAAC;AAEpE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzE,CAAC;oFAAC;;IAIO,YAAY,GAAG,QAAQ,CAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFACtE;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;wFAAC;IACzE,gBAAgB,GAAG,QAAQ,CAClC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE;yFAC/E;AACQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE;yFAAC;AACpF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;yFAAC;AAErF;;;;AAIG;AACM,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAAE,YAAA,OAAO,IAAI;AAC9E,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC3E,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;IAChD,CAAC;wFAAC;AAEiB,IAAA,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,IAAI;kFAC1D;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAC5C,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QACzE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CACzF,OAAO,CACR;AACD,QAAA,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACtD,CAAC;mFAAC;AACiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACnF,QAAA,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACtD,CAAC;oFAAC;AACiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;oFAChD;AACkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;qFACjD;AACkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;qFACjD;AACkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;qFACjD;AAEgB,IAAA,QAAQ,GAAG,QAAQ,CAClC,MAAM,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI;iFAC3E;AAEkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;AACrF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1D,CAAC;kFAAC;AAEF,IAAA,WAAA,GAAA;AACE;;;;AAIG;QACH,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,IAAI,KAAK,SAAS;gBAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC;;;;AAIwC;AACxC,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI;gBAAE;AAC9B,YAAA,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;gBAAE;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACxD,QAAA,CAAC,CAAC;AAEF;AACwD;QACxD,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;gBAAE;YAChC,cAAc,CAAC,MAAK;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAmB,wBAAwB,CAAC;gBACpF,IAAI,KAAK,KAAK,IAAI;oBAAE;gBACpB,KAAK,CAAC,KAAK,EAAE;AACb,gBAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACjE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7F,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE;;AAIA,IAAA,UAAU,CAAC,KAAmC,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE;AAEA,IAAA,gBAAgB,CAAC,EAAqC,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACvB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAyB;AAC9C,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAEpD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AAClC,YAAA,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACzD;QACA,IAAI,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;YAC7C,OAAO,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrD;AACA,QAAA,OAAO,IAAI;IACb;;IAGA,KAAK,GAAA;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACjD;AAEA;;;;AAIG;IACH,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACnD;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,IAAI,MAAM,EAAE,OAAO,CAAC,2DAA2D,CAAC,IAAI,IAAI,EAAE;YACxF;QACF;QACA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,UAAU,EAAE;IACnD;AAEA;;;AAGG;AACO,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAC5C,KAAK,CAAC,cAAc,EAAE;AACrB,QAAA,KAAK,CAAC,aAA6B,CAAC,KAAK,EAAE;IAC9C;;AAGA,IAAA,KAAK,CAAC,MAAc,EAAA;QAClB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE;IACd;;AAIA;;;;;AAKG;AACK,IAAA,OAAO,CAAC,KAAoB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEA;;;;;AAKG;AACO,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,MAAM,OAAO,GAAI,KAAK,CAAC,MAA6B,EAAE,OAAO,CAC3D,uBAAuB,CACxB;QACD,MAAM,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC,OAAO,CAA8B;QACnE,IAAI,IAAI,KAAK,SAAS;YAAE;AAExB;;AAEmD;AACnD,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,KAAK;QAC9D,MAAM,OAAO,GAAG,GAAG,GAAG,WAAW,GAAG,YAAY;QAChD,MAAM,QAAQ,GAAG,GAAG,GAAG,YAAY,GAAG,WAAW;AAEjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACpB;QACF;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE;AAEtB;;;;AAIG;QACH,IAAI,KAAK,CAAC,MAAM;YAAE;QAElB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC3E,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAElC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBACrE;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBACtE;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBACnF;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBACpF;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBAC1E;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;gBAC1E;AACF,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;gBACrD;AACF,YAAA;gBACE;;AAGJ;AACqD;AACrD,QAAA,IAAI,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,KAAK,KAAK,IAAI;gBAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvC;QACF;QAEA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC;IACF;AAEU,IAAA,iBAAiB,CAAC,KAAY,EAAA;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;IAC/D;AAEU,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AAChD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB;AACkE;AAClE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B;;AAE2D;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;;AAGU,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB;QACF;QACA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA;;;;AAIG;AACO,IAAA,OAAO,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE;AACtB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;QAE7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;YACrE;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC/E,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC;IACF;;IAGU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE;QAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC;IACrF;;AAIU,IAAA,OAAO,CAAC,KAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;IAC/B;AAEU,IAAA,OAAO,CAAC,KAAoB,EAAA;AACpC,QAAA,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;IAClE;AAEA;;;;AAIG;AACO,IAAA,QAAQ,CAAC,KAAoB,EAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;QAClC,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7B,IAAI,KAAK,KAAK,WAAW;AAAE,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC;QAC7C,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D;AAEA;;;;AAIG;AACO,IAAA,MAAM,CAAC,KAAoB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;QAC/E;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC7C,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACjD;QAEA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C;;AAGU,IAAA,UAAU,CAAC,KAAoB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,KAAK,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpE;;AAIQ,IAAA,UAAU,CAAC,IAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAc,CAAA,kCAAA,EAAqC,IAAI,CAAA,EAAA,CAAI,CAAC,EAAE,KAAK,EAAE;IACjG;IAEQ,MAAM,CAAC,IAAmB,EAAE,IAAY,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9D,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC/C;AAEA;;;;;;AAMG;IACK,MAAM,CACZ,IAAkB,EAClB,MAAoB,EACpB,MAAyB,EACzB,eAAe,GAAG,KAAK,EAAA;AAEvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE;QAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,KAAK;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAmB;AACjD,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,SAAS,EAAE,CAAC,OAAO,KAAI;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtE,gBAAA,SAAS,GAAG,OAAO,CAAC,SAAS;YAC/B,CAAC;AACF,SAAA,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;AAExC,QAAA,IAAI,SAAS;YAAE;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE;IAC5B;uGAznBW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,mCAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,mBAAA,EAAA,wCAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,SAAA,EApBX;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvF,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SACpF,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnFS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mGA4EuF,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,i3aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA7EvF,OAAO,oFAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqGd,WAAW,EAAA,UAAA,EAAA,CAAA;kBAzGvB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,QAAA,EACN,aAAa,EAAA,OAAA,EACd,CAAC,OAAO,EAAE,MAAM,CAAC,EAAA,QAAA,EAChB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EuF,kGAAA,CAAA,EAAA,eAAA,EAEhF,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvF,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;qBACpF,EAAA,IAAA,EACK;AACJ,wBAAA,SAAS,EAAE,YAAY;AACvB,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,aAAa,EAAE,yBAAyB;AACxC,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,kBAAkB,EAAE,gBAAgB;AACpC,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,sBAAsB,EAAE,mCAAmC;AAC3D,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,qBAAqB,EAAE,wCAAwC;AAC/D,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,sBAAsB,EAAE,yCAAyC;AAClE,qBAAA,EAAA,MAAA,EAAA,CAAA,i3aAAA,CAAA,EAAA;;;AC/NH;;;;;;;;AAQG;MAOU,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;AAC/B,iBAAA;;AAGD;MAOa,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,KAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AAC7B,iBAAA;;;ACzBD;;AAEG;;"}
1
+ {"version":3,"file":"slotted-angular-time-field.mjs","sources":["../../time-field/src/time-field-defaults.ts","../../time-field/src/time-field.ts","../../time-field/src/time-field-parts.ts","../../time-field/src/slotted-angular-time-field.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { TimeGranularity } from '@slotted/core/date';\n\n/** The type step the control sits at, matching the field around it. */\nexport type TimeFieldSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame the control shows. The three steps `text-field` set, so a form\n * holding a name and a time shows one frame twice rather than two frames.\n */\nexport type TimeFieldVariant = 'outline' | 'subtle' | 'plain';\n\n/**\n * The question a consumer asks about the clock. Which variant of each — `h11`\n * or `h12`, `h23` or `h24` — is the locale's own, and `Intl` answers it.\n */\nexport type TimeFieldHourCycle = 12 | 24;\n\nexport interface TimeFieldDefaults {\n granularity: TimeGranularity;\n /** Unset means the locale decides both the cycle and its variant. */\n hourCycle: TimeFieldHourCycle | undefined;\n /** Whether `+`, `-` and `=` open the duration expression. */\n relative: boolean;\n size: TimeFieldSize;\n /** Which zone answers \"what time is it now\". Unset means the runtime's own. */\n timeZone: string | undefined;\n variant: TimeFieldVariant;\n}\n\nconst FALLBACK: TimeFieldDefaults = {\n granularity: 'minute',\n hourCycle: undefined,\n relative: true,\n size: 'md',\n timeZone: undefined,\n variant: 'outline',\n};\n\nexport const TIME_FIELD_DEFAULTS = new InjectionToken<TimeFieldDefaults>(\n 'slotted time field defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its times look like, which clock they run\n * on and which zone answers \"now\", rather than repeating the same inputs on\n * every control in a form. A control that states any of them itself still\n * wins. The locale that writes the times, and the words, come from the\n * language in force (`provideSlotted`).\n */\nexport function provideTimeFieldDefaults(defaults: Partial<TimeFieldDefaults>) {\n return {\n provide: TIME_FIELD_DEFAULTS,\n useFactory: (): TimeFieldDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a time field renders as here, before it states anything of its own. */\nexport function injectTimeFieldDefaults(): TimeFieldDefaults {\n return inject(TIME_FIELD_DEFAULTS);\n}\n","import {\n boundSegment,\n clearSegment,\n commitTyping,\n createTimeFormat,\n EMPTY_SEGMENTS,\n fieldRange,\n isRelativeKey,\n isSameTime,\n isTimeInRange,\n nowIn,\n parseDuration,\n plainDate,\n resolveRelative,\n segmentsOfTime,\n stepSegment,\n timeOf,\n toISOTime,\n typeDayPeriod,\n typeDigit,\n} from '@slotted/core/date';\nimport type {\n PlainTime,\n SegmentReference,\n SegmentState,\n TimeFieldName,\n TimeGranularity,\n} from '@slotted/core/date';\nimport {\n timeFieldMessages,\n type PartialMessages,\n type TimeFieldMessages,\n} from '@slotted/core/i18n';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectTimeFieldDefaults } from './time-field-defaults';\nimport type { TimeFieldHourCycle, TimeFieldSize, TimeFieldVariant } from './time-field-defaults';\n\n/**\n * How far `PageUp` and `PageDown` move each field.\n *\n * The APG spin-button example pages every button by five. Fifteen minutes is\n * the page a reader of a time field means and the step a quarter-hour panel\n * offers, so the two agree; three hours is a quarter of a twelve-hour cycle.\n */\nconst PAGE_STEP: Record<TimeFieldName, number> = {\n hour: 3,\n minute: 15,\n second: 15,\n dayPeriod: 1,\n};\n\n/**\n * The date half of the reference, which a time field never draws and the engine\n * still asks for. One `SegmentState` holds both halves — that is what\n * `datetime-field` needs — so the reference carries both as well.\n */\nconst REFERENCE_DATE = plainDate(2000, 1, 1);\n\n/**\n * The hidden element carrying the whole time needs an identifier the group can\n * point `aria-labelledby` at, and Angular has no `useId`. A module counter is\n * what the framework leaves: stable for a given render order, which is what\n * hydration needs, and never on the public surface.\n */\nlet sequence = 0;\n\n/**\n * What a request carries beyond the value: the segments, so a half-typed time\n * can be saved, and whether the duration that produced it ran past midnight.\n */\nexport interface TimeFieldChangeRequest extends ChangeRequest<PlainTime | null> {\n readonly segments: SegmentState;\n readonly crossesMidnight: boolean;\n}\n\n/**\n * A segmented time control: one spin button per field, in the order the locale\n * writes them.\n *\n * **The frame is not the control.** The element carrying `data-ui` is the\n * consumer's own box with no role; `role=\"group\"` is on the row of segments,\n * which is what the APG's spin-button example names.\n *\n * **Angular is a component with a template and a `ControlValueAccessor`**,\n * because a time belongs in a Reactive Form and Angular has the integration\n * point for it. It also implements `Validator`: `min`, `max` and\n * `isTimeUnavailable` are validity this control owns and no other validator can\n * see. React has no equivalent, and `references/frameworks.md` asks for that\n * asymmetry to be recorded rather than levelled away.\n *\n * **A time can be written as a duration.** `+`, `-` and `=` open one expression\n * region in place of the segments, and what it resolves to is drawn beside it\n * before `Enter` commits anything.\n */\n@Component({\n selector: '[slTimeField]',\n standalone: true,\n exportAs: 'slTimeField',\n imports: [SlGlyph, SlIcon],\n template: `<ng-content select=\"[slTimeFieldStart]\" />\n @if (expression() !== null) {\n <input\n #duration\n data-part=\"duration\"\n type=\"text\"\n placeholder=\"+40m\"\n [attr.aria-label]=\"t('duration')\"\n [attr.aria-describedby]=\"describedBy()\"\n [value]=\"expression()\"\n (input)=\"onExpressionInput($event)\"\n (keydown)=\"onExpressionKeyDown($event)\"\n (blur)=\"commitExpression()\"\n />\n <span\n data-part=\"preview\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.data-resolved]=\"resolved() === null ? null : ''\"\n [attr.data-crosses-midnight]=\"crossesMidnight() ? '' : null\"\n ><span slIcon directional><svg slGlyph name=\"chevron-right\"></svg></span\n >{{ previewText() }}</span\n >\n } @else {\n <div\n data-part=\"segments\"\n role=\"group\"\n [attr.id]=\"controlId()\"\n [attr.aria-label]=\"label() ?? writtenLabel\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"ariaInvalid()\"\n [attr.aria-required]=\"ariaRequired()\"\n [attr.aria-readonly]=\"ariaReadonly()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (paste)=\"onPaste($event)\"\n >\n @for (part of format().pattern; track $index) {\n @if (part.type === 'literal') {\n <span data-part=\"literal\" aria-hidden=\"true\">{{ part.value }}</span>\n } @else {\n <div\n data-part=\"segment\"\n role=\"spinbutton\"\n [attr.data-field]=\"part.type\"\n [attr.data-placeholder]=\"valueOf(part.type) === null ? '' : null\"\n [attr.aria-label]=\"t(part.type)\"\n [attr.aria-valuenow]=\"valueOf(part.type)\"\n [attr.aria-valuemin]=\"rangeOf(part.type).min\"\n [attr.aria-valuemax]=\"rangeOf(part.type).max\"\n [attr.aria-valuetext]=\"spokenOf(part.type)\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n [attr.aria-readonly]=\"ariaReadonly()\"\n [tabindex]=\"tabIndexOf(part.type)\"\n (mousedown)=\"onSegmentMouseDown($event)\"\n (focus)=\"activeField.set(part.type)\"\n (blur)=\"onBlur()\"\n >\n {{ textOf(part.type) }}\n </div>\n }\n }\n </div>\n }\n <span data-part=\"value-text\" hidden [attr.id]=\"valueTextId\">{{ spokenTime() }}</span>\n @if (showClear()) {\n <button\n data-part=\"clear\"\n type=\"button\"\n [attr.aria-label]=\"t('clear')\"\n (click)=\"clear($event)\"\n >\n <span slIcon><svg slGlyph name=\"x\"></svg></span>\n </button>\n }\n <ng-content select=\"[slTimeFieldEnd]\" />\n <input data-part=\"hidden-input\" type=\"hidden\" readonly [attr.name]=\"name()\" [value]=\"iso()\" />`,\n styleUrl: '../../../styles/src/time-field/time-field.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlTimeField), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlTimeField), multi: true },\n ],\n host: {\n 'data-ui': 'time-field',\n 'data-part': 'root',\n '(mousedown)': 'onRootMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-cycle]': 'dataCycle()',\n '[attr.data-granularity]': 'resolvedGranularity()',\n '[attr.data-relative]': \"expression() === null ? null : ''\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-required]': \"resolvedRequired() === true ? '' : null\",\n },\n})\nexport class SlTimeField implements ControlValueAccessor, Validator, OnInit {\n /** Present means the consumer owns the value. */\n readonly value = input<PlainTime | null | undefined>(undefined);\n /** The value the control starts from when nobody else writes one. */\n readonly defaultValue = input<PlainTime | null | undefined>(undefined);\n\n /** The earliest time the control accepts. Also a form validity rule. */\n readonly min = input<PlainTime | undefined>(undefined);\n /** The latest time the control accepts. Also a form validity rule. */\n readonly max = input<PlainTime | undefined>(undefined);\n /** Refuses particular times — a lunch break, a booked slot, a closed shop. */\n readonly isTimeUnavailable = input<((time: PlainTime) => boolean) | undefined>(undefined);\n\n /**\n * BCP 47. Decides the field order, the separators and the placeholder.\n * Unset, the language in force (`provideSlotted`) decides.\n */\n readonly locale = input<string | undefined>(undefined);\n /** Which zone answers \"what time is it now\", and nothing else. */\n readonly timeZone = input<string | undefined>(undefined);\n readonly hourCycle = input<TimeFieldHourCycle | undefined>(undefined);\n readonly granularity = input<TimeGranularity | undefined>(undefined);\n /**\n * What an empty segment steps from, and what a duration resolves against.\n * Unset, both are the current time in `timeZone`.\n */\n readonly referenceTime = input<PlainTime | undefined>(undefined);\n\n readonly size = input<TimeFieldSize | undefined>(undefined);\n readonly variant = input<TimeFieldVariant | undefined>(undefined);\n\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n /** Draws a button that empties the value and returns focus to the control. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Whether `+`, `-` and `=` open the duration expression. */\n readonly relative = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * clear button, the duration region's name and the next-day preview.\n */\n readonly messages = input<PartialMessages<TimeFieldMessages> | undefined>(undefined);\n /** The name a plain form post carries the `HH:mm:ss` string under. */\n readonly name = input<string | undefined>(undefined);\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the segments, whether a duration crossed midnight, the reason, the\n * originating event and `cancel()`. There is no `[(value)]`, because a\n * two-way binding has one slot and can carry none of those.\n */\n /**\n * The accessible name, when it is bound rather than written: a static\n * `aria-label` is read once from the host, and a family naming this field\n * from its own input — `time-range-picker` names its two ends — has no\n * static attribute to write.\n */\n readonly label = input<string | undefined>(undefined);\n\n readonly valueChange = output<TimeFieldChangeRequest>();\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly defaults = injectTimeFieldDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this field's `messages` laid over them. */\n readonly t = injectMessages(timeFieldMessages, this.messages);\n private readonly field = inject(SlField, { optional: true });\n\n /** Read before the host binding computes, so it never writes over it. */\n protected readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenLabelledBy = inject(new HostAttributeToken('aria-labelledby'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n\n protected readonly valueTextId = `sl-time-field-${String((sequence += 1))}`;\n\n private readonly segments = signal<SegmentState>(EMPTY_SEGMENTS);\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n /**\n * What time it is, resolved after construction rather than during it, so a\n * server and a browser never disagree about the markup. Nothing is drawn from\n * it: it is the time an empty segment steps to and a duration resolves from.\n */\n private readonly clock = signal<PlainTime>({ hour: 12, minute: 0, second: 0 });\n protected readonly activeField = signal<TimeFieldName | undefined>(undefined);\n /** The duration being written, or `null` while the segments are showing. */\n protected readonly expression = signal<string | null>(null);\n\n private onChangeFn: (value: PlainTime | null) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n private onValidatorChangeFn: () => void = () => undefined;\n\n protected readonly resolvedGranularity = computed(\n () => this.granularity() ?? this.defaults.granularity,\n );\n\n protected readonly format = computed(() =>\n createTimeFormat({\n granularity: this.resolvedGranularity(),\n hourCycle: this.hourCycle() ?? this.defaults.hourCycle,\n locale: this.locale() ?? this.appLocale(),\n }),\n );\n\n protected readonly dataCycle = computed(() => (this.format().usesDayPeriod ? '12' : '24'));\n\n protected readonly fields = computed(() =>\n this.format()\n .pattern.filter((part) => part.type !== 'literal')\n .map((part) => part.type as TimeFieldName),\n );\n\n /** What an empty segment steps from, in the shape the engine reads. */\n private readonly reference = computed<SegmentReference>(() => {\n const anchor = this.anchor();\n const shown = this.format().toDisplay(anchor.hour);\n return {\n ...REFERENCE_DATE,\n dayPeriod: shown.dayPeriod ?? 0,\n hour: shown.hour,\n hourCycle: this.format().hourCycle,\n minute: anchor.minute,\n second: anchor.second,\n };\n });\n\n private readonly anchor = computed(() => this.referenceTime() ?? this.clock());\n\n /** The time the segments make, or `null` while any drawn field is unfilled. */\n readonly time = computed(() => timeOf(this.segments(), this.format()));\n protected readonly iso = computed(() => {\n const time = this.time();\n return time === null ? '' : toISOTime(time);\n });\n protected readonly spokenTime = computed(() => {\n const time = this.time();\n return time === null ? '' : this.format().describe(time);\n });\n\n /* ── The duration expression ─────────────────────────────────────────── */\n\n protected readonly resolved = computed(() => {\n const written = this.expression();\n if (written === null) return null;\n const seconds = parseDuration(written);\n return seconds === null ? null : resolveRelative(this.anchor(), seconds);\n });\n\n protected readonly crossesMidnight = computed(() => (this.resolved()?.days ?? 0) !== 0);\n\n protected readonly previewText = computed(() => {\n const step = this.resolved();\n if (step === null) return '';\n const written = this.format().format(step.time);\n return step.days === 0 ? written : this.t('nextDay', { time: written });\n });\n\n /* ── What the field around it decides ────────────────────────────────── */\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(() => this.readOnly() ?? this.field?.resolvedReadOnly());\n readonly resolvedRequired = computed(() => this.required() ?? this.field?.required());\n\n /**\n * Validity the family owns, beside the validity the consumer states. A time\n * outside the bounds or refused by the predicate is invalid whatever the\n * field around it says, because this control is the only thing that knows.\n */\n readonly resolvedInvalid = computed(() => {\n const time = this.time();\n if (time !== null && !isTimeInRange(time, this.min(), this.max())) return true;\n if (time !== null && this.isTimeUnavailable()?.(time) === true) return true;\n return this.invalid() ?? this.field?.invalid();\n });\n\n protected readonly controlId = computed(\n () => this.writtenId ?? this.field?.ids().control ?? null,\n );\n protected readonly labelledBy = computed(() => {\n if (this.label() !== undefined || this.writtenLabel !== null) return null;\n const merged = [this.writtenLabelledBy ?? this.field?.ids().label, this.valueTextId].filter(\n Boolean,\n );\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(() =>\n this.resolvedInvalid() === true ? 'true' : null,\n );\n protected readonly ariaRequired = computed(() =>\n this.resolvedRequired() === true ? 'true' : null,\n );\n protected readonly ariaReadonly = computed(() =>\n this.resolvedReadOnly() === true ? 'true' : null,\n );\n protected readonly ariaDisabled = computed(() =>\n this.resolvedDisabled() === true ? 'true' : null,\n );\n\n private readonly editable = computed(\n () => this.resolvedDisabled() !== true && this.resolvedReadOnly() !== true,\n );\n\n protected readonly showClear = computed(() => {\n if (!this.clearable() || !this.editable() || this.expression() !== null) return false;\n const held = this.segments();\n return this.fields().some((name) => held[name] !== null);\n });\n\n constructor() {\n /**\n * A consumer's own value writes the segments, and only when it names a\n * different time: written on every change detection it would throw away a\n * half-typed time on the keystroke that completes a different one.\n */\n effect(() => {\n const next = this.value();\n if (next === undefined) return;\n const segments = this.segments();\n /* A run of digits still being typed is not a value the consumer refused:\n with a controlled `null`, the first minute digit after a whole hour\n read as a time the consumer had not written back, and the segments\n were reset under the reader's fingers. Found by `time-range-picker`,\n which binds the field to its work. */\n if (segments.typing !== null) return;\n if (isSameTime(timeOf(segments, this.format()), next)) return;\n this.segments.set(segmentsOfTime(next, this.format()));\n });\n\n /* The expression region is focused the moment it replaces the segments,\n with the caret after the character that opened it. */\n effect(() => {\n if (this.expression() === null) return;\n queueMicrotask(() => {\n const input = this.element.querySelector<HTMLInputElement>('[data-part=\"duration\"]');\n if (input === null) return;\n input.focus();\n input.setSelectionRange(input.value.length, input.value.length);\n });\n });\n }\n\n ngOnInit() {\n this.segments.set(segmentsOfTime(this.value() ?? this.defaultValue() ?? null, this.format()));\n this.clock.set(nowIn(this.timeZone() ?? this.defaults.timeZone));\n }\n\n /* ── The value ───────────────────────────────────────────────────────── */\n\n writeValue(value: PlainTime | null | undefined) {\n this.segments.set(segmentsOfTime(value ?? null, this.format()));\n }\n\n registerOnChange(fn: (value: PlainTime | null) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n registerOnValidatorChange(fn: () => void) {\n this.onValidatorChangeFn = fn;\n }\n\n /**\n * The rules no other validator can see. `required` is left to Angular's own,\n * because a form already has a word for it and two would disagree.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const time = control.value as PlainTime | null;\n if (time === null || time === undefined) return null;\n\n const min = this.min();\n const max = this.max();\n if (!isTimeInRange(time, min, max)) {\n return { slottedTimeRange: { min, max, actual: time } };\n }\n if (this.isTimeUnavailable()?.(time) === true) {\n return { slottedTimeUnavailable: { actual: time } };\n }\n return null;\n }\n\n /** Puts focus on the first segment, which is where typing starts. */\n focus() {\n const first = this.fields()[0];\n if (first !== undefined) this.focusField(first);\n }\n\n /**\n * Where a press on the frame puts the reader: the first field still waiting\n * for a value, and the first field of the time when none is. Every text\n * control on the page answers a press anywhere inside its border.\n */\n focusEntry() {\n const held = this.segments();\n const empty = this.fields().find((name) => held[name] === null);\n const target = empty ?? this.fields()[0];\n if (target !== undefined) this.focusField(target);\n }\n\n protected onRootMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n if (target?.closest('[data-part=\"segment\"], button, a, input, select, textarea') != null) {\n return;\n }\n event.preventDefault();\n if (this.expression() === null) this.focusEntry();\n }\n\n /**\n * Safari does not focus a `div` on a press even when it carries a\n * `tabindex`, so the press says so itself rather than relying on it.\n */\n protected onSegmentMouseDown(event: MouseEvent) {\n event.preventDefault();\n (event.currentTarget as HTMLElement).focus();\n }\n\n /** Empties every segment, with the `clear` reason. */\n clear(source?: Event) {\n this.commit(EMPTY_SEGMENTS, 'clear', source);\n this.focus();\n }\n\n /* ── The keyboard ────────────────────────────────────────────────────── */\n\n /**\n * A key the field acted on is the field's, and nothing above it sees it. A\n * `div` with `role=\"spinbutton\"` is invisible to every \"is the target\n * editable\" guard an application writes, and `preventDefault` alone does not\n * help: a shortcut handler reads the key, not the default.\n */\n private consume(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * The keys are handled on the host rather than on each segment, so a\n * consumer's own `(keydown)` on the same element still runs before the family\n * stops the event — which is the composition React gets by calling the\n * consumer's handler first.\n */\n protected onKeyDown(event: KeyboardEvent) {\n const segment = (event.target as HTMLElement | null)?.closest<HTMLElement>(\n '[data-part=\"segment\"]',\n );\n const name = segment?.dataset['field'] as TimeFieldName | undefined;\n if (name === undefined) return;\n\n /* An inline direction is a physical pair of keys and a logical order, so\n the arrow that walks forward is the one pointing along the writing\n direction rather than the one pointing right. */\n const rtl = getComputedStyle(this.element).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key === forward) {\n this.consume(event);\n this.moveBy(name, 1);\n return;\n }\n if (event.key === backward) {\n this.consume(event);\n this.moveBy(name, -1);\n return;\n }\n\n if (!this.editable()) return;\n\n /**\n * `Alt` with an arrow is not this control's chord. `time-picker` opens its\n * panel with `Alt`+`ArrowDown`, and a segment that stepped on it would eat\n * the only shortcut the surface has.\n */\n if (event.altKey) return;\n\n if ((this.relative() ?? this.defaults.relative) && isRelativeKey(event.key)) {\n this.consume(event);\n this.expression.set(event.key);\n return;\n }\n\n const held = this.segments();\n const reference = this.reference();\n\n switch (event.key) {\n case 'ArrowUp':\n this.consume(event);\n this.commit(stepSegment(held, name, 1, reference), 'keyboard', event);\n return;\n case 'ArrowDown':\n this.consume(event);\n this.commit(stepSegment(held, name, -1, reference), 'keyboard', event);\n return;\n case 'PageUp':\n this.consume(event);\n this.commit(stepSegment(held, name, PAGE_STEP[name], reference), 'keyboard', event);\n return;\n case 'PageDown':\n this.consume(event);\n this.commit(stepSegment(held, name, -PAGE_STEP[name], reference), 'keyboard', event);\n return;\n case 'Home':\n this.consume(event);\n this.commit(boundSegment(held, name, 'min', reference), 'keyboard', event);\n return;\n case 'End':\n this.consume(event);\n this.commit(boundSegment(held, name, 'max', reference), 'keyboard', event);\n return;\n case 'Backspace':\n case 'Delete':\n this.consume(event);\n this.commit(clearSegment(held, name), 'clear', event);\n return;\n default:\n break;\n }\n\n /* The day period holds two words rather than digits, and the platform's own\n control takes it by the first letter of either. */\n if (name === 'dayPeriod' && /^\\p{L}$/u.test(event.key)) {\n const typed = typeDayPeriod(held, event.key, this.format());\n if (typed === null) return;\n this.consume(event);\n this.commit(typed.segments, 'keyboard', event);\n if (typed.advance) this.moveBy(name, 1);\n return;\n }\n\n if (/^\\d$/.test(event.key)) {\n this.consume(event);\n const typed = typeDigit(held, name, Number(event.key), this.format(), reference);\n this.commit(typed.segments, 'keyboard', event);\n if (typed.advance) this.moveBy(name, 1);\n }\n }\n\n protected onExpressionInput(event: Event) {\n this.expression.set((event.target as HTMLInputElement).value);\n }\n\n protected onExpressionKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n /* An expression inside a form must not submit it: `Enter` is this\n control's commit and nothing above it needs to hear the key. */\n this.consume(event);\n this.commitExpression(event);\n this.focus();\n return;\n }\n\n if (event.key === 'Escape') {\n /* Abandoned whole, and the segments come back exactly as they were. The\n key is stopped so an overlay above does not close on the same press —\n the field takes it first while an expression is open. */\n this.consume(event);\n this.expression.set(null);\n this.focus();\n }\n }\n\n /** Commits the expression when it resolves, and abandons it when it does not. */\n protected commitExpression(source?: Event) {\n const step = this.resolved();\n if (step === null) {\n this.expression.set(null);\n return;\n }\n this.commit(segmentsOfTime(step.time, this.format()), 'keyboard', source, step.days !== 0);\n this.expression.set(null);\n }\n\n /**\n * A whole time, pasted. The locale's shape is read first and ISO 8601 after\n * it; text that is neither but reads as a duration opens the expression, so\n * pasting `+40m` does what typing it does.\n */\n protected onPaste(event: ClipboardEvent) {\n if (!this.editable()) return;\n const text = event.clipboardData?.getData('text/plain') ?? '';\n\n const parsed = this.format().parse(text);\n if (parsed !== null) {\n event.preventDefault();\n this.commit(segmentsOfTime(parsed, this.format()), 'keyboard', event);\n return;\n }\n\n if ((this.relative() ?? this.defaults.relative) && parseDuration(text) !== null) {\n event.preventDefault();\n this.expression.set(text.trim());\n }\n }\n\n /** A run of typed digits ends when focus leaves. */\n protected onBlur() {\n this.activeField.set(undefined);\n this.onTouchedFn();\n const held = this.segments();\n if (held.typing === null) return;\n this.commit(commitTyping(held, this.format(), this.reference()), 'blur', undefined);\n }\n\n /* ── What the template reads ─────────────────────────────────────────── */\n\n protected valueOf(field: TimeFieldName): number | null {\n return this.segments()[field];\n }\n\n protected rangeOf(field: TimeFieldName) {\n return fieldRange(field, { hourCycle: this.format().hourCycle });\n }\n\n /**\n * What a reader hears instead of the number. The day period is why it is not\n * optional: `aria-valuenow` there is `0` or `1`, which is not a name in any\n * language.\n */\n protected spokenOf(field: TimeFieldName): string | null {\n const raw = this.segments()[field];\n if (raw === null) return null;\n if (field !== 'dayPeriod') return String(raw);\n return this.format().dayPeriodNames()[raw === 1 ? 1 : 0];\n }\n\n /**\n * What one field shows. A finished value is padded to the field's width so\n * the columns hold their place; a value still being typed is not, because a\n * padded run shows numbers nobody typed.\n */\n protected textOf(field: TimeFieldName): string {\n const held = this.segments();\n const raw = held[field];\n if (raw === null) {\n return this.format().pattern.find((part) => part.type === field)?.value ?? '';\n }\n\n const typing = held.typing;\n if (typing !== null && typing.field === field) {\n return String(raw).padStart(typing.digits, '0');\n }\n\n return this.format().formatValue(raw, field);\n }\n\n /** Exactly one segment is in the tab sequence, which is the roving model. */\n protected tabIndexOf(field: TimeFieldName): number {\n if (this.resolvedDisabled() === true) return -1;\n return field === (this.activeField() ?? this.fields()[0]) ? 0 : -1;\n }\n\n /* ── The machinery ───────────────────────────────────────────────────── */\n\n private focusField(name: TimeFieldName) {\n this.activeField.set(name);\n this.element.querySelector<HTMLElement>(`[data-part=\"segment\"][data-field=\"${name}\"]`)?.focus();\n }\n\n private moveBy(name: TimeFieldName, step: number) {\n const next = this.fields()[this.fields().indexOf(name) + step];\n if (next !== undefined) this.focusField(next);\n }\n\n /**\n * Moves the segments, and asks before the derived value moves with them.\n *\n * A run of typed digits moves the display and not the value: typing `23` into\n * an hour passes through `2` on the way, and `2` is a time the arithmetic\n * accepts and nobody meant. The request is emitted when the run ends.\n */\n private commit(\n next: SegmentState,\n reason: ChangeReason,\n source: Event | undefined,\n crossesMidnight = false,\n ) {\n const previous = this.time();\n this.segments.set(next);\n if (next.typing !== null) return;\n\n const nextValue = timeOf(next, this.format());\n let cancelled = false;\n const state = createControllable<PlainTime | null>({\n controlled: undefined,\n initial: previous,\n equals: isSameTime,\n onRequest: (request) => {\n this.valueChange.emit({ ...request, crossesMidnight, segments: next });\n cancelled = request.cancelled;\n },\n });\n state.request(nextValue, reason, source);\n\n if (cancelled) return;\n this.onChangeFn(nextValue);\n this.onValidatorChangeFn();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * An adornment before the time in the reading direction: a clock mark, a label,\n * an icon. Named for the direction rather than for a side, so the same markup\n * puts the mark before the time in both directions.\n *\n * It is a directive on the consumer's own element, so an `icon`, a `kbd` or a\n * `span` all work and none of them loses its own semantics. The stylesheet\n * sizes any icon inside it from the control's own glyph scale.\n */\n@Directive({\n selector: '[slTimeFieldStart]',\n standalone: true,\n exportAs: 'slTimeFieldStart',\n host: { 'data-part': 'start' },\n})\nexport class SlTimeFieldStart {}\n\n/** An adornment after the time in the reading direction. */\n@Directive({\n selector: '[slTimeFieldEnd]',\n standalone: true,\n exportAs: 'slTimeFieldEnd',\n host: { 'data-part': 'end' },\n})\nexport class SlTimeFieldEnd {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -492,7 +492,7 @@ class SlToolbarOverflow {
492
492
  />
493
493
  }
494
494
  </sl-menu>
495
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: SlMenu, selector: "sl-menu", inputs: ["value", "aria-label", "aria-describedby", "open", "align", "side", "size", "mount", "strategy", "sideOffset", "alignOffset", "collisionPadding", "submenuOpenDelay", "submenuCloseDelay", "typeaheadTimeout", "disabled", "loop", "typeahead", "openOnHover", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "loading"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slMenu"] }, { kind: "directive", type: SlMenuSeparator, selector: "hr[slMenuSeparator]" }, { kind: "directive", type: SlMenuTrigger, selector: "[slMenuTriggerFor]", inputs: ["slMenuTriggerFor"], exportAs: ["slMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
495
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: SlMenu, selector: "sl-menu", inputs: ["value", "aria-label", "aria-describedby", "open", "align", "side", "size", "width", "mount", "strategy", "sideOffset", "alignOffset", "collisionPadding", "submenuOpenDelay", "submenuCloseDelay", "typeaheadTimeout", "disabled", "loop", "typeahead", "openOnHover", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "loading"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slMenu"] }, { kind: "directive", type: SlMenuSeparator, selector: "hr[slMenuSeparator]" }, { kind: "directive", type: SlMenuTrigger, selector: "[slMenuTriggerFor]", inputs: ["slMenuTriggerFor"], exportAs: ["slMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
496
496
  }
497
497
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlToolbarOverflow, decorators: [{
498
498
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-toolbar.mjs","sources":["../../toolbar/src/toolbar-defaults.ts","../../toolbar/src/toolbar.ts","../../toolbar/src/toolbar-overflow.ts","../../toolbar/src/slotted-angular-toolbar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** Which way the bar runs. */\nexport type ToolbarOrientation = 'horizontal' | 'vertical';\n\n/** The step the bar's own inset, gap and separator sit at. */\nexport type ToolbarSize = 'sm' | 'md' | 'lg';\n\n/** Whether the bar paints a ground of its own. */\nexport type ToolbarVariant = 'plain' | 'outline';\n\n/**\n * What a bar does with more controls than it has room for. `wrap` keeps every\n * one of them visible on a second row, and the arrows wrap from row to row\n * because the item list is linear.\n */\nexport type ToolbarOverflowMode = 'wrap' | 'scroll' | 'menu';\n\nexport interface ToolbarDefaults {\n loop: boolean;\n orientation: ToolbarOrientation;\n overflow: ToolbarOverflowMode;\n size: ToolbarSize;\n variant: ToolbarVariant;\n}\n\nconst FALLBACK: ToolbarDefaults = {\n loop: true,\n orientation: 'horizontal',\n overflow: 'wrap',\n size: 'md',\n variant: 'plain',\n};\n\nexport const TOOLBAR_DEFAULTS = new InjectionToken<ToolbarDefaults>('slotted toolbar defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its bars are drawn and how they behave — a\n * product whose bars are all framed and compact says so in one place rather\n * than on every bar. A bar that states any of them itself still wins.\n */\nexport function provideToolbarDefaults(defaults: Partial<ToolbarDefaults>) {\n return {\n provide: TOOLBAR_DEFAULTS,\n useFactory: (): ToolbarDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a toolbar renders as here, before it states anything of its own. */\nexport function injectToolbarDefaults(): ToolbarDefaults {\n return inject(TOOLBAR_DEFAULTS);\n}\n","import { createRovingTabindex, TOOLBAR_ITEM_SELECTOR, toolbarOwnedKeys } from '@slotted/core/focus';\nimport type { RovingTabindexHandle } from '@slotted/core/focus';\nimport { createCollapse } from '@slotted/core/overflow';\nimport type { CollapseHandle } from '@slotted/core/overflow';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectToolbarDefaults } from './toolbar-defaults';\nimport type {\n ToolbarOrientation,\n ToolbarOverflowMode,\n ToolbarSize,\n ToolbarVariant,\n} from './toolbar-defaults';\n\nexport type {\n ToolbarDefaults,\n ToolbarOrientation,\n ToolbarOverflowMode,\n ToolbarSize,\n ToolbarVariant,\n} from './toolbar-defaults';\n\n/**\n * The accessible name of the control that holds what did not fit. A string is\n * used verbatim; a function is given the number of units behind the control,\n * because three dots say nothing about how much is behind them.\n */\nexport type ToolbarOverflowLabel = string | ((hidden: number) => string);\n\n/**\n * One unit that gave way, in the order the bar held it.\n *\n * `separatorBefore` is derived rather than declared: the bar is the participant\n * that hid the units, so it is the only one that knows which of its own rules\n * are now dividing two things that are both in the surface.\n */\nexport interface ToolbarCollapsedUnit {\n readonly id: string;\n readonly separatorBefore: boolean;\n}\n\n/** The attribute that says a unit has somewhere to go. */\nexport const TOOLBAR_UNIT_ATTRIBUTE = 'data-unit';\n\n/**\n * Everything the bar lays out, and nothing that is or holds the trigger: the\n * control the units give way *to* would otherwise be counted twice, and the\n * Angular trigger sits inside a `display: contents` host of its own.\n */\nfunction unitsOf(container: HTMLElement) {\n return [...container.children].filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement &&\n child.getAttribute('data-part') !== 'overflow' &&\n child.querySelector('[data-part=\"overflow\"]') === null,\n );\n}\n\n/**\n * Whether one of the bar's own rules sits between two units that both gave way.\n * It is read from the DOM because a separator is a sibling of the units it\n * divides and nothing in the component tree relates them.\n */\nfunction ruleBetween(from: Element, to: Element) {\n for (\n let node = from.nextElementSibling;\n node !== null && node !== to;\n node = node.nextElementSibling\n ) {\n if (node.getAttribute('data-part') === 'separator') return true;\n }\n return false;\n}\n\n/**\n * A set of controls that share one tab stop.\n *\n * **The keyboard is the whole point of the role.** `Tab` enters the bar once and\n * lands on the control that last had focus, the arrows of the flow axis move\n * between the controls and wrap — from row to row when the bar wrapped, because\n * the item list is linear — and `Home` and `End` reach the ends. The cross axis\n * duplicates the pair, which the APG permits and which is what gives focus a way\n * out of an item that keeps the flow arrows for itself.\n *\n * **The items are the consumer's own controls.** Anything focusable inside the\n * bar is an item, found through `TOOLBAR_ITEM_SELECTOR`, so this library's\n * `button`, `link`, `checkbox`, `switch` and `text-field` — and a menu trigger,\n * and a consumer's own control — drop in unwrapped.\n *\n * **The bar paints itself and nothing inside it.** A bar out of action is\n * `<fieldset disabled>` around it: the platform disables every control inside,\n * and a natively disabled control cannot be focused, so the arrows skip exactly\n * those.\n */\n@Component({\n selector: '[slToolbar]',\n standalone: true,\n exportAs: 'slToolbar',\n template: '<ng-content />',\n styleUrl: '../../../styles/src/toolbar/toolbar.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'toolbar',\n 'data-part': 'root',\n role: 'toolbar',\n '[attr.data-orientation]': 'resolvedOrientation()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-overflow]': 'resolvedOverflow()',\n '[attr.data-collapsed]': 'collapsedCount()',\n '[attr.aria-orientation]': 'ariaOrientation()',\n },\n})\nexport class SlToolbar {\n readonly orientation = input<ToolbarOrientation | undefined>(undefined);\n readonly size = input<ToolbarSize | undefined>(undefined);\n readonly variant = input<ToolbarVariant | undefined>(undefined);\n readonly overflow = input<ToolbarOverflowMode | undefined>(undefined);\n /** Whether the arrows wrap past the ends of the bar. */\n readonly loop = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (state) => (state === undefined ? undefined : booleanAttribute(state)),\n });\n\n /**\n * Reports how many units gave way, once per change. The collapsed set is a\n * measurement rather than a value, so there is no two-way binding over it: a\n * consumer who owned it could assert that a bar fits when the layout says it\n * does not.\n */\n readonly overflowChange = output<number>();\n\n private readonly defaults = injectToolbarDefaults();\n private readonly element = inject(ElementRef<HTMLElement>).nativeElement;\n\n private readonly counterparts = signal(new Map<string, TemplateRef<unknown>>());\n private readonly trigger = signal<HTMLElement | null>(null);\n private readonly ready = signal(false);\n private ring: RovingTabindexHandle | null = null;\n\n /** The units that gave way, in the order the bar held them. */\n readonly collapsedUnits = signal<readonly ToolbarCollapsedUnit[]>([]);\n\n readonly resolvedOrientation = computed(() => this.orientation() ?? this.defaults.orientation);\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedOverflow = computed(() => this.overflow() ?? this.defaults.overflow);\n readonly resolvedLoop = computed(() => this.loop() ?? this.defaults.loop);\n\n protected readonly ariaOrientation = computed(() =>\n this.resolvedOrientation() === 'vertical' ? 'vertical' : null,\n );\n\n protected readonly collapsedCount = computed(() =>\n this.resolvedOverflow() === 'menu' ? String(this.collapsedUnits().length) : null,\n );\n\n /** Records what a unit becomes in the surface. */\n registerUnit(id: string, template: TemplateRef<unknown>) {\n this.counterparts.update((held) => new Map(held).set(id, template));\n }\n\n releaseUnit(id: string) {\n this.counterparts.update((held) => {\n const next = new Map(held);\n next.delete(id);\n return next;\n });\n }\n\n counterpart(id: string) {\n return this.counterparts().get(id) ?? null;\n }\n\n /** The control that opens what did not fit. The bar measures it. */\n registerTrigger(element: HTMLElement | null) {\n this.trigger.set(element);\n }\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n const ring: RovingTabindexHandle = createRovingTabindex(this.element, {\n crossAxis: true,\n includeAriaDisabled: true,\n itemSelector: TOOLBAR_ITEM_SELECTOR,\n loop: () => this.resolvedLoop(),\n orientation: () => this.resolvedOrientation(),\n ownedKeys: (item) => toolbarOwnedKeys(item, this.resolvedOrientation()),\n });\n\n this.ring = ring;\n\n /**\n * A control arriving or leaving has to reach the tab stop, and neither\n * binding can be told by the other's change detection. The DOM is the one\n * thing they agree on — and the same event invalidates the measurement,\n * because a bar that grows a button collapses one.\n */\n const observer = new MutationObserver(() => {\n ring.refresh();\n this.collapse?.refresh();\n });\n observer.observe(this.element, { childList: true, subtree: true });\n\n this.ready.set(true);\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n ring.destroy();\n this.ring = null;\n });\n });\n\n /**\n * The collapse runs only under `overflow=\"menu\"`, and only once the bar\n * holds a trigger: with nothing to give way *to*, every unit is pinned and\n * the bar scrolls instead — the same degradation a bar of pinned units\n * gets.\n */\n effect((onCleanup) => {\n const trigger = this.trigger();\n const orientation = this.resolvedOrientation();\n if (!this.ready() || this.resolvedOverflow() !== 'menu') return;\n\n const handle: CollapseHandle = createCollapse(this.element, {\n collapsible: (unit) => unit.hasAttribute(TOOLBAR_UNIT_ATTRIBUTE),\n divides: (unit) => unit.getAttribute('data-part') === 'separator',\n /* A spacer grows into whatever is left, so its room is nought — and it\n is still one of the boxes the gaps run between. */\n fixedSize: (unit) => (unit.getAttribute('data-part') === 'spacer' ? 0 : undefined),\n onChange: (units) => {\n const named = units.filter((unit) => unit.hasAttribute(TOOLBAR_UNIT_ATTRIBUTE));\n this.collapsedUnits.set(\n named.map((unit, index) => {\n const previous = named[index - 1];\n return {\n id: unit.getAttribute(TOOLBAR_UNIT_ATTRIBUTE) ?? '',\n separatorBefore: previous !== undefined && ruleBetween(previous, unit),\n };\n }),\n );\n /* A unit that left the bar leaves the ring with it, and one that came\n back rejoins it. */\n this.ring?.refresh();\n this.overflowChange.emit(named.length);\n },\n orientation: () => orientation,\n trigger: () => trigger,\n units: () => unitsOf(this.element),\n });\n\n this.collapse = handle;\n onCleanup(() => {\n handle.destroy();\n this.collapse = null;\n this.collapsedUnits.set([]);\n });\n });\n }\n\n private collapse: CollapseHandle | null = null;\n}\n\n/**\n * A run of related controls, announced as a group.\n *\n * The distance inside it is half the bar's gap and the distance around it is a\n * gap and a half, so the boundary between two groups reads wider than the\n * boundary between two controls. Its accessible name is the consumer's own\n * `aria-label`.\n *\n * The arrows do not stop at its edge: a group is a label around a run, not a\n * second keyboard.\n */\n@Directive({\n selector: '[slToolbarGroup]',\n standalone: true,\n exportAs: 'slToolbarGroup',\n host: { 'data-part': 'group', role: 'group', '[attr.data-unit]': 'unit.id()' },\n})\nexport class SlToolbarGroup {\n /**\n * What the whole run becomes when the bar has no room for it, under\n * `overflow=\"menu\"`. A group that declares none is pinned.\n */\n readonly counterpart = input<TemplateRef<unknown> | undefined>(undefined, {\n alias: 'slToolbarGroupCounterpart',\n });\n\n protected readonly unit = declareUnit(() => this.counterpart());\n}\n\n/**\n * One unit the bar may give up, and what it becomes when it does.\n *\n * A unit is a direct child of the root, which is deliberately not the same\n * thing as an item: the keyboard finds items by being focusable, at any depth,\n * and the collapse acts on the boxes the bar lays out. A `slButtonGroup` inside\n * one of these is one unit and four items.\n *\n * It is only needed under `overflow=\"menu\"`, and only around a control the bar\n * is allowed to hide. A control placed in a bar unwrapped is a unit too — a\n * pinned one, because it declares nothing to become.\n */\n@Directive({\n selector: '[slToolbarItem]',\n standalone: true,\n exportAs: 'slToolbarItem',\n host: { 'data-part': 'item', '[attr.data-unit]': 'unit.id()' },\n})\nexport class SlToolbarItem {\n /**\n * What the control becomes in the surface. An item that declares none cannot\n * be hidden, which is how a primary action stays visible: it has nowhere to\n * go, rather than a rank above the others.\n */\n readonly counterpart = input<TemplateRef<unknown> | undefined>(undefined, {\n alias: 'slToolbarItemCounterpart',\n });\n\n protected readonly unit = declareUnit(() => this.counterpart());\n}\n\n/**\n * Records what a unit becomes in the surface, and says so in the DOM.\n *\n * The attribute is what the measurement reads: a unit carrying it has somewhere\n * to go, and one without it is pinned. Pinning is therefore the absence of a\n * counterpart rather than a second input — one fact, in the place a reader is\n * already looking, and no way for the two to disagree.\n */\nlet unitCount = 0;\n\nfunction declareUnit(counterpart: () => TemplateRef<unknown> | undefined) {\n const toolbar = inject(SlToolbar, { optional: true });\n const destroyRef = inject(DestroyRef);\n const identity = `slotted-toolbar-unit-${(unitCount += 1)}`;\n\n const id = computed(() => (counterpart() === undefined ? null : identity));\n\n effect(() => {\n const template = counterpart();\n if (toolbar === null) return;\n if (template === undefined) toolbar.releaseUnit(identity);\n else toolbar.registerUnit(identity, template);\n });\n\n destroyRef.onDestroy(() => toolbar?.releaseUnit(identity));\n\n return { id };\n}\n\n/**\n * A hairline between two runs.\n *\n * It is a part of this family rather than a `divider`, because its geometry\n * belongs to the bar: it is measured against the controls beside it, and it\n * turns with the bar. `aria-orientation` states the axis of the rule itself,\n * which is perpendicular to the one the controls run along.\n */\n@Directive({\n selector: '[slToolbarSeparator]',\n standalone: true,\n exportAs: 'slToolbarSeparator',\n host: {\n 'data-part': 'separator',\n role: 'separator',\n '[attr.aria-orientation]': 'ariaOrientation()',\n },\n})\nexport class SlToolbarSeparator {\n private readonly toolbar = inject(SlToolbar);\n\n protected readonly ariaOrientation = computed(() =>\n this.toolbar.resolvedOrientation() === 'vertical' ? 'horizontal' : 'vertical',\n );\n}\n\n/**\n * The free space between two runs, so what follows sits at the end of the bar.\n *\n * It replaces a `justify` axis: an axis decides the placement of every control\n * at once, and what a bar needs is one boundary — the editing controls at the\n * start, the destructive one at the end.\n */\n@Directive({\n selector: '[slToolbarSpacer]',\n standalone: true,\n exportAs: 'slToolbarSpacer',\n host: { 'data-part': 'spacer', 'aria-hidden': 'true' },\n})\nexport class SlToolbarSpacer {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n ViewEncapsulation,\n viewChild,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { MenuAlign, MenuSide, MenuSize } from '@slotted/angular/menu';\n\nimport { SlToolbar } from './toolbar';\nimport type { ToolbarOverflowLabel } from './toolbar';\n\n/**\n * The control that opens what did not fit, and the surface holding it.\n *\n * It is `menu`'s own trigger and surface wearing this family's geometry, so the\n * keyboard, the dismissal and the focus return are `menu`'s and are not written\n * twice. What this family adds is the measurement: the bar decides which units\n * give way, and the counterparts they declared are rendered here in the order\n * the bar held them, with a separator wherever one of the bar's own rules sat\n * between two of them.\n *\n * The counterpart is an `ng-template` rendered through `NgTemplateOutlet` only\n * while its unit is collapsed, so a menu item that is never reached builds\n * nothing. That is where the two bindings differ most, and it is idiom rather\n * than asymmetry: React's `ReactNode` is built with the element that declares\n * it, which is React's own answer and its own cost.\n *\n * **A template resolves its dependencies where it was written, not where it is\n * rendered.** The counterpart is authored beside the control it replaces, which\n * is outside the surface, so `slMenuItem` looked for the `SlMenu` above the bar\n * and found none — `NG0201`. The outlet is therefore given an injector that\n * provides the surface this component draws, and the item finds the menu it is\n * actually inside. The DOM was never wrong; only the injector was.\n *\n * The host is `display: contents`, so the `button` below is a child of the bar\n * itself: the part that carries the geometry has to be the box the bar lays\n * out, and a wrapper between them would be a unit the collapse would try to\n * measure.\n *\n * **The `hidden` attribute on the trigger belongs to the bar.** `createCollapse`\n * writes it, because the same measurement that decides whether the control is\n * needed is the one that has to reveal it to read its width.\n */\n@Component({\n selector: 'sl-toolbar-overflow',\n standalone: true,\n exportAs: 'slToolbarOverflow',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon, SlMenu, SlMenuSeparator, SlMenuTrigger],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n template: `\n <button\n #trigger\n data-part=\"overflow\"\n type=\"button\"\n [slMenuTriggerFor]=\"surface\"\n [attr.aria-label]=\"name()\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu #surface [align]=\"align()\" [side]=\"side()\" [size]=\"size()\">\n @for (unit of toolbar.collapsedUnits(); track unit.id) {\n @if (unit.separatorBefore) {\n <hr slMenuSeparator />\n }\n <ng-container\n *ngTemplateOutlet=\"toolbar.counterpart(unit.id)!; injector: surfaceInjector()\"\n />\n }\n </sl-menu>\n `,\n})\nexport class SlToolbarOverflow {\n /** Where the surface sits against the trigger. */\n readonly align = input<MenuAlign | undefined>(undefined);\n readonly side = input<MenuSide | undefined>(undefined);\n /** The surface's own measure, which is `menu`'s axis rather than the bar's. */\n readonly size = input<MenuSize | undefined>(undefined);\n /**\n * The accessible name. Defaults to a count — \"3 more actions\" — because the\n * mark says nothing about how much is behind it.\n */\n readonly label = input<ToolbarOverflowLabel | undefined>(undefined);\n\n protected readonly toolbar = inject(SlToolbar);\n\n /** A name the consumer wrote on the host survives the counted default. */\n private readonly stated = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly name = computed(() => {\n if (this.stated !== null) return this.stated;\n const given = this.label();\n const hidden = this.toolbar.collapsedUnits().length;\n if (typeof given === 'function') return given(hidden);\n if (given !== undefined) return given;\n return `${hidden} more ${hidden === 1 ? 'action' : 'actions'}`;\n });\n\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly surface = viewChild(SlMenu);\n private readonly injector = inject(Injector);\n\n /**\n * `null` until the view exists, which is also while nothing has collapsed and\n * the outlet renders nothing.\n */\n protected readonly surfaceInjector = computed(() => {\n const menu = this.surface();\n if (menu === undefined) return null;\n return Injector.create({\n parent: this.injector,\n providers: [{ provide: SlMenu, useValue: menu }],\n });\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n const element = this.trigger().nativeElement;\n\n /**\n * `slMenuTriggerFor` binds `[attr.data-part]` and resolves it to `null`\n * for a trigger that is neither a bar's item nor a submenu's, and a host\n * binding of `null` removes the attribute the author wrote. The part is\n * therefore written back after the first change detection, where nothing\n * writes over it again: the expression is a constant, so Angular applies\n * it once.\n *\n * React does not have the problem because the family's own props are\n * spread after the menu's; here the two writers are directives on one\n * element and the last one wins.\n */\n element.setAttribute('data-part', 'overflow');\n\n /* The bar measures the control, so it has to hold it. */\n this.toolbar.registerTrigger(element);\n });\n destroyRef.onDestroy(() => this.toolbar.registerTrigger(null));\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-toolbar.mjs","sources":["../../toolbar/src/toolbar-defaults.ts","../../toolbar/src/toolbar.ts","../../toolbar/src/toolbar-overflow.ts","../../toolbar/src/slotted-angular-toolbar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** Which way the bar runs. */\nexport type ToolbarOrientation = 'horizontal' | 'vertical';\n\n/** The step the bar's own inset, gap and separator sit at. */\nexport type ToolbarSize = 'sm' | 'md' | 'lg';\n\n/** Whether the bar paints a ground of its own. */\nexport type ToolbarVariant = 'plain' | 'outline';\n\n/**\n * What a bar does with more controls than it has room for. `wrap` keeps every\n * one of them visible on a second row, and the arrows wrap from row to row\n * because the item list is linear.\n */\nexport type ToolbarOverflowMode = 'wrap' | 'scroll' | 'menu';\n\nexport interface ToolbarDefaults {\n loop: boolean;\n orientation: ToolbarOrientation;\n overflow: ToolbarOverflowMode;\n size: ToolbarSize;\n variant: ToolbarVariant;\n}\n\nconst FALLBACK: ToolbarDefaults = {\n loop: true,\n orientation: 'horizontal',\n overflow: 'wrap',\n size: 'md',\n variant: 'plain',\n};\n\nexport const TOOLBAR_DEFAULTS = new InjectionToken<ToolbarDefaults>('slotted toolbar defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its bars are drawn and how they behave — a\n * product whose bars are all framed and compact says so in one place rather\n * than on every bar. A bar that states any of them itself still wins.\n */\nexport function provideToolbarDefaults(defaults: Partial<ToolbarDefaults>) {\n return {\n provide: TOOLBAR_DEFAULTS,\n useFactory: (): ToolbarDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a toolbar renders as here, before it states anything of its own. */\nexport function injectToolbarDefaults(): ToolbarDefaults {\n return inject(TOOLBAR_DEFAULTS);\n}\n","import { createRovingTabindex, TOOLBAR_ITEM_SELECTOR, toolbarOwnedKeys } from '@slotted/core/focus';\nimport type { RovingTabindexHandle } from '@slotted/core/focus';\nimport { createCollapse } from '@slotted/core/overflow';\nimport type { CollapseHandle } from '@slotted/core/overflow';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectToolbarDefaults } from './toolbar-defaults';\nimport type {\n ToolbarOrientation,\n ToolbarOverflowMode,\n ToolbarSize,\n ToolbarVariant,\n} from './toolbar-defaults';\n\nexport type {\n ToolbarDefaults,\n ToolbarOrientation,\n ToolbarOverflowMode,\n ToolbarSize,\n ToolbarVariant,\n} from './toolbar-defaults';\n\n/**\n * The accessible name of the control that holds what did not fit. A string is\n * used verbatim; a function is given the number of units behind the control,\n * because three dots say nothing about how much is behind them.\n */\nexport type ToolbarOverflowLabel = string | ((hidden: number) => string);\n\n/**\n * One unit that gave way, in the order the bar held it.\n *\n * `separatorBefore` is derived rather than declared: the bar is the participant\n * that hid the units, so it is the only one that knows which of its own rules\n * are now dividing two things that are both in the surface.\n */\nexport interface ToolbarCollapsedUnit {\n readonly id: string;\n readonly separatorBefore: boolean;\n}\n\n/** The attribute that says a unit has somewhere to go. */\nexport const TOOLBAR_UNIT_ATTRIBUTE = 'data-unit';\n\n/**\n * Everything the bar lays out, and nothing that is or holds the trigger: the\n * control the units give way *to* would otherwise be counted twice, and the\n * Angular trigger sits inside a `display: contents` host of its own.\n */\nfunction unitsOf(container: HTMLElement) {\n return [...container.children].filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement &&\n child.getAttribute('data-part') !== 'overflow' &&\n child.querySelector('[data-part=\"overflow\"]') === null,\n );\n}\n\n/**\n * Whether one of the bar's own rules sits between two units that both gave way.\n * It is read from the DOM because a separator is a sibling of the units it\n * divides and nothing in the component tree relates them.\n */\nfunction ruleBetween(from: Element, to: Element) {\n for (\n let node = from.nextElementSibling;\n node !== null && node !== to;\n node = node.nextElementSibling\n ) {\n if (node.getAttribute('data-part') === 'separator') return true;\n }\n return false;\n}\n\n/**\n * A set of controls that share one tab stop.\n *\n * **The keyboard is the whole point of the role.** `Tab` enters the bar once and\n * lands on the control that last had focus, the arrows of the flow axis move\n * between the controls and wrap — from row to row when the bar wrapped, because\n * the item list is linear — and `Home` and `End` reach the ends. The cross axis\n * duplicates the pair, which the APG permits and which is what gives focus a way\n * out of an item that keeps the flow arrows for itself.\n *\n * **The items are the consumer's own controls.** Anything focusable inside the\n * bar is an item, found through `TOOLBAR_ITEM_SELECTOR`, so this library's\n * `button`, `link`, `checkbox`, `switch` and `text-field` — and a menu trigger,\n * and a consumer's own control — drop in unwrapped.\n *\n * **The bar paints itself and nothing inside it.** A bar out of action is\n * `<fieldset disabled>` around it: the platform disables every control inside,\n * and a natively disabled control cannot be focused, so the arrows skip exactly\n * those.\n */\n@Component({\n selector: '[slToolbar]',\n standalone: true,\n exportAs: 'slToolbar',\n template: '<ng-content />',\n styleUrl: '../../../styles/src/toolbar/toolbar.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'toolbar',\n 'data-part': 'root',\n role: 'toolbar',\n '[attr.data-orientation]': 'resolvedOrientation()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-overflow]': 'resolvedOverflow()',\n '[attr.data-collapsed]': 'collapsedCount()',\n '[attr.aria-orientation]': 'ariaOrientation()',\n },\n})\nexport class SlToolbar {\n readonly orientation = input<ToolbarOrientation | undefined>(undefined);\n readonly size = input<ToolbarSize | undefined>(undefined);\n readonly variant = input<ToolbarVariant | undefined>(undefined);\n readonly overflow = input<ToolbarOverflowMode | undefined>(undefined);\n /** Whether the arrows wrap past the ends of the bar. */\n readonly loop = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (state) => (state === undefined ? undefined : booleanAttribute(state)),\n });\n\n /**\n * Reports how many units gave way, once per change. The collapsed set is a\n * measurement rather than a value, so there is no two-way binding over it: a\n * consumer who owned it could assert that a bar fits when the layout says it\n * does not.\n */\n readonly overflowChange = output<number>();\n\n private readonly defaults = injectToolbarDefaults();\n private readonly element = inject(ElementRef<HTMLElement>).nativeElement;\n\n private readonly counterparts = signal(new Map<string, TemplateRef<unknown>>());\n private readonly trigger = signal<HTMLElement | null>(null);\n private readonly ready = signal(false);\n private ring: RovingTabindexHandle | null = null;\n\n /** The units that gave way, in the order the bar held them. */\n readonly collapsedUnits = signal<readonly ToolbarCollapsedUnit[]>([]);\n\n readonly resolvedOrientation = computed(() => this.orientation() ?? this.defaults.orientation);\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedOverflow = computed(() => this.overflow() ?? this.defaults.overflow);\n readonly resolvedLoop = computed(() => this.loop() ?? this.defaults.loop);\n\n protected readonly ariaOrientation = computed(() =>\n this.resolvedOrientation() === 'vertical' ? 'vertical' : null,\n );\n\n protected readonly collapsedCount = computed(() =>\n this.resolvedOverflow() === 'menu' ? String(this.collapsedUnits().length) : null,\n );\n\n /** Records what a unit becomes in the surface. */\n registerUnit(id: string, template: TemplateRef<unknown>) {\n this.counterparts.update((held) => new Map(held).set(id, template));\n }\n\n releaseUnit(id: string) {\n this.counterparts.update((held) => {\n const next = new Map(held);\n next.delete(id);\n return next;\n });\n }\n\n counterpart(id: string) {\n return this.counterparts().get(id) ?? null;\n }\n\n /** The control that opens what did not fit. The bar measures it. */\n registerTrigger(element: HTMLElement | null) {\n this.trigger.set(element);\n }\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n const ring: RovingTabindexHandle = createRovingTabindex(this.element, {\n crossAxis: true,\n includeAriaDisabled: true,\n itemSelector: TOOLBAR_ITEM_SELECTOR,\n loop: () => this.resolvedLoop(),\n orientation: () => this.resolvedOrientation(),\n ownedKeys: (item) => toolbarOwnedKeys(item, this.resolvedOrientation()),\n });\n\n this.ring = ring;\n\n /**\n * A control arriving or leaving has to reach the tab stop, and neither\n * binding can be told by the other's change detection. The DOM is the one\n * thing they agree on — and the same event invalidates the measurement,\n * because a bar that grows a button collapses one.\n */\n const observer = new MutationObserver(() => {\n ring.refresh();\n this.collapse?.refresh();\n });\n observer.observe(this.element, { childList: true, subtree: true });\n\n this.ready.set(true);\n\n destroyRef.onDestroy(() => {\n observer.disconnect();\n ring.destroy();\n this.ring = null;\n });\n });\n\n /**\n * The collapse runs only under `overflow=\"menu\"`, and only once the bar\n * holds a trigger: with nothing to give way *to*, every unit is pinned and\n * the bar scrolls instead — the same degradation a bar of pinned units\n * gets.\n */\n effect((onCleanup) => {\n const trigger = this.trigger();\n const orientation = this.resolvedOrientation();\n if (!this.ready() || this.resolvedOverflow() !== 'menu') return;\n\n const handle: CollapseHandle = createCollapse(this.element, {\n collapsible: (unit) => unit.hasAttribute(TOOLBAR_UNIT_ATTRIBUTE),\n divides: (unit) => unit.getAttribute('data-part') === 'separator',\n /* A spacer grows into whatever is left, so its room is nought — and it\n is still one of the boxes the gaps run between. */\n fixedSize: (unit) => (unit.getAttribute('data-part') === 'spacer' ? 0 : undefined),\n onChange: (units) => {\n const named = units.filter((unit) => unit.hasAttribute(TOOLBAR_UNIT_ATTRIBUTE));\n this.collapsedUnits.set(\n named.map((unit, index) => {\n const previous = named[index - 1];\n return {\n id: unit.getAttribute(TOOLBAR_UNIT_ATTRIBUTE) ?? '',\n separatorBefore: previous !== undefined && ruleBetween(previous, unit),\n };\n }),\n );\n /* A unit that left the bar leaves the ring with it, and one that came\n back rejoins it. */\n this.ring?.refresh();\n this.overflowChange.emit(named.length);\n },\n orientation: () => orientation,\n trigger: () => trigger,\n units: () => unitsOf(this.element),\n });\n\n this.collapse = handle;\n onCleanup(() => {\n handle.destroy();\n this.collapse = null;\n this.collapsedUnits.set([]);\n });\n });\n }\n\n private collapse: CollapseHandle | null = null;\n}\n\n/**\n * A run of related controls, announced as a group.\n *\n * The distance inside it is half the bar's gap and the distance around it is a\n * gap and a half, so the boundary between two groups reads wider than the\n * boundary between two controls. Its accessible name is the consumer's own\n * `aria-label`.\n *\n * The arrows do not stop at its edge: a group is a label around a run, not a\n * second keyboard.\n */\n@Directive({\n selector: '[slToolbarGroup]',\n standalone: true,\n exportAs: 'slToolbarGroup',\n host: { 'data-part': 'group', role: 'group', '[attr.data-unit]': 'unit.id()' },\n})\nexport class SlToolbarGroup {\n /**\n * What the whole run becomes when the bar has no room for it, under\n * `overflow=\"menu\"`. A group that declares none is pinned.\n */\n readonly counterpart = input<TemplateRef<unknown> | undefined>(undefined, {\n alias: 'slToolbarGroupCounterpart',\n });\n\n protected readonly unit = declareUnit(() => this.counterpart());\n}\n\n/**\n * One unit the bar may give up, and what it becomes when it does.\n *\n * A unit is a direct child of the root, which is deliberately not the same\n * thing as an item: the keyboard finds items by being focusable, at any depth,\n * and the collapse acts on the boxes the bar lays out. A `slButtonGroup` inside\n * one of these is one unit and four items.\n *\n * It is only needed under `overflow=\"menu\"`, and only around a control the bar\n * is allowed to hide. A control placed in a bar unwrapped is a unit too — a\n * pinned one, because it declares nothing to become.\n */\n@Directive({\n selector: '[slToolbarItem]',\n standalone: true,\n exportAs: 'slToolbarItem',\n host: { 'data-part': 'item', '[attr.data-unit]': 'unit.id()' },\n})\nexport class SlToolbarItem {\n /**\n * What the control becomes in the surface. An item that declares none cannot\n * be hidden, which is how a primary action stays visible: it has nowhere to\n * go, rather than a rank above the others.\n */\n readonly counterpart = input<TemplateRef<unknown> | undefined>(undefined, {\n alias: 'slToolbarItemCounterpart',\n });\n\n protected readonly unit = declareUnit(() => this.counterpart());\n}\n\n/**\n * Records what a unit becomes in the surface, and says so in the DOM.\n *\n * The attribute is what the measurement reads: a unit carrying it has somewhere\n * to go, and one without it is pinned. Pinning is therefore the absence of a\n * counterpart rather than a second input — one fact, in the place a reader is\n * already looking, and no way for the two to disagree.\n */\nlet unitCount = 0;\n\nfunction declareUnit(counterpart: () => TemplateRef<unknown> | undefined) {\n const toolbar = inject(SlToolbar, { optional: true });\n const destroyRef = inject(DestroyRef);\n const identity = `slotted-toolbar-unit-${(unitCount += 1)}`;\n\n const id = computed(() => (counterpart() === undefined ? null : identity));\n\n effect(() => {\n const template = counterpart();\n if (toolbar === null) return;\n if (template === undefined) toolbar.releaseUnit(identity);\n else toolbar.registerUnit(identity, template);\n });\n\n destroyRef.onDestroy(() => toolbar?.releaseUnit(identity));\n\n return { id };\n}\n\n/**\n * A hairline between two runs.\n *\n * It is a part of this family rather than a `divider`, because its geometry\n * belongs to the bar: it is measured against the controls beside it, and it\n * turns with the bar. `aria-orientation` states the axis of the rule itself,\n * which is perpendicular to the one the controls run along.\n */\n@Directive({\n selector: '[slToolbarSeparator]',\n standalone: true,\n exportAs: 'slToolbarSeparator',\n host: {\n 'data-part': 'separator',\n role: 'separator',\n '[attr.aria-orientation]': 'ariaOrientation()',\n },\n})\nexport class SlToolbarSeparator {\n private readonly toolbar = inject(SlToolbar);\n\n protected readonly ariaOrientation = computed(() =>\n this.toolbar.resolvedOrientation() === 'vertical' ? 'horizontal' : 'vertical',\n );\n}\n\n/**\n * The free space between two runs, so what follows sits at the end of the bar.\n *\n * It replaces a `justify` axis: an axis decides the placement of every control\n * at once, and what a bar needs is one boundary — the editing controls at the\n * start, the destructive one at the end.\n */\n@Directive({\n selector: '[slToolbarSpacer]',\n standalone: true,\n exportAs: 'slToolbarSpacer',\n host: { 'data-part': 'spacer', 'aria-hidden': 'true' },\n})\nexport class SlToolbarSpacer {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n ViewEncapsulation,\n viewChild,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { MenuAlign, MenuSide, MenuSize } from '@slotted/angular/menu';\n\nimport { SlToolbar } from './toolbar';\nimport type { ToolbarOverflowLabel } from './toolbar';\n\n/**\n * The control that opens what did not fit, and the surface holding it.\n *\n * It is `menu`'s own trigger and surface wearing this family's geometry, so the\n * keyboard, the dismissal and the focus return are `menu`'s and are not written\n * twice. What this family adds is the measurement: the bar decides which units\n * give way, and the counterparts they declared are rendered here in the order\n * the bar held them, with a separator wherever one of the bar's own rules sat\n * between two of them.\n *\n * The counterpart is an `ng-template` rendered through `NgTemplateOutlet` only\n * while its unit is collapsed, so a menu item that is never reached builds\n * nothing. That is where the two bindings differ most, and it is idiom rather\n * than asymmetry: React's `ReactNode` is built with the element that declares\n * it, which is React's own answer and its own cost.\n *\n * **A template resolves its dependencies where it was written, not where it is\n * rendered.** The counterpart is authored beside the control it replaces, which\n * is outside the surface, so `slMenuItem` looked for the `SlMenu` above the bar\n * and found none — `NG0201`. The outlet is therefore given an injector that\n * provides the surface this component draws, and the item finds the menu it is\n * actually inside. The DOM was never wrong; only the injector was.\n *\n * The host is `display: contents`, so the `button` below is a child of the bar\n * itself: the part that carries the geometry has to be the box the bar lays\n * out, and a wrapper between them would be a unit the collapse would try to\n * measure.\n *\n * **The `hidden` attribute on the trigger belongs to the bar.** `createCollapse`\n * writes it, because the same measurement that decides whether the control is\n * needed is the one that has to reveal it to read its width.\n */\n@Component({\n selector: 'sl-toolbar-overflow',\n standalone: true,\n exportAs: 'slToolbarOverflow',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon, SlMenu, SlMenuSeparator, SlMenuTrigger],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n template: `\n <button\n #trigger\n data-part=\"overflow\"\n type=\"button\"\n [slMenuTriggerFor]=\"surface\"\n [attr.aria-label]=\"name()\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu #surface [align]=\"align()\" [side]=\"side()\" [size]=\"size()\">\n @for (unit of toolbar.collapsedUnits(); track unit.id) {\n @if (unit.separatorBefore) {\n <hr slMenuSeparator />\n }\n <ng-container\n *ngTemplateOutlet=\"toolbar.counterpart(unit.id)!; injector: surfaceInjector()\"\n />\n }\n </sl-menu>\n `,\n})\nexport class SlToolbarOverflow {\n /** Where the surface sits against the trigger. */\n readonly align = input<MenuAlign | undefined>(undefined);\n readonly side = input<MenuSide | undefined>(undefined);\n /** The surface's own measure, which is `menu`'s axis rather than the bar's. */\n readonly size = input<MenuSize | undefined>(undefined);\n /**\n * The accessible name. Defaults to a count — \"3 more actions\" — because the\n * mark says nothing about how much is behind it.\n */\n readonly label = input<ToolbarOverflowLabel | undefined>(undefined);\n\n protected readonly toolbar = inject(SlToolbar);\n\n /** A name the consumer wrote on the host survives the counted default. */\n private readonly stated = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly name = computed(() => {\n if (this.stated !== null) return this.stated;\n const given = this.label();\n const hidden = this.toolbar.collapsedUnits().length;\n if (typeof given === 'function') return given(hidden);\n if (given !== undefined) return given;\n return `${hidden} more ${hidden === 1 ? 'action' : 'actions'}`;\n });\n\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly surface = viewChild(SlMenu);\n private readonly injector = inject(Injector);\n\n /**\n * `null` until the view exists, which is also while nothing has collapsed and\n * the outlet renders nothing.\n */\n protected readonly surfaceInjector = computed(() => {\n const menu = this.surface();\n if (menu === undefined) return null;\n return Injector.create({\n parent: this.injector,\n providers: [{ provide: SlMenu, useValue: menu }],\n });\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n const element = this.trigger().nativeElement;\n\n /**\n * `slMenuTriggerFor` binds `[attr.data-part]` and resolves it to `null`\n * for a trigger that is neither a bar's item nor a submenu's, and a host\n * binding of `null` removes the attribute the author wrote. The part is\n * therefore written back after the first change detection, where nothing\n * writes over it again: the expression is a constant, so Angular applies\n * it once.\n *\n * React does not have the problem because the family's own props are\n * spread after the menu's; here the two writers are directives on one\n * element and the last one wins.\n */\n element.setAttribute('data-part', 'overflow');\n\n /* The bar measures the control, so it has to hold it. */\n this.toolbar.registerTrigger(element);\n });\n destroyRef.onDestroy(() => this.toolbar.registerTrigger(null));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slotted/angular",
3
- "version": "0.1.0-beta.6",
3
+ "version": "0.1.0-beta.8",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,8 +16,8 @@
16
16
  "@angular/common": ">=22.1.0 <23",
17
17
  "@angular/core": ">=22.1.0 <23",
18
18
  "@angular/forms": ">=22.1.0 <23",
19
- "@slotted/core": "0.1.0-beta.6",
20
- "@slotted/theme": "0.1.0-beta.6"
19
+ "@slotted/core": "0.1.0-beta.8",
20
+ "@slotted/theme": "0.1.0-beta.8"
21
21
  },
22
22
  "module": "fesm2022/slotted-angular.mjs",
23
23
  "typings": "types/slotted-angular.d.ts",
@@ -179,6 +179,8 @@ declare class SlCalendar implements OnInit {
179
179
  protected readonly weekdayLong: _angular_core.Signal<string[]>;
180
180
  protected readonly weekdayNarrow: _angular_core.Signal<string[]>;
181
181
  protected readonly monthNames: _angular_core.Signal<string[]>;
182
+ /** Each paging button is named for the step it takes in the view showing. */
183
+ protected readonly pageNames: _angular_core.Signal<string[]>;
182
184
  protected readonly years: _angular_core.Signal<number[]>;
183
185
  protected readonly shownMonths: _angular_core.Signal<{
184
186
  year: number;
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-calendar.d.ts","sources":["../../calendar/src/calendar-defaults.ts","../../calendar/src/calendar.ts","../../calendar/src/calendar-selection.ts"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"slotted-angular-calendar.d.ts","sources":["../../calendar/src/calendar-defaults.ts","../../calendar/src/calendar.ts","../../calendar/src/calendar-selection.ts"],"mappings":"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","names":[]}
@@ -195,6 +195,8 @@ declare class SlCommandPalette<Item extends CommandPaletteItem = CommandPaletteI
195
195
  constructor();
196
196
  setOpen(next: boolean, reason: CommandPaletteOpenReason, source?: Event): void;
197
197
  setQuery(next: string, reason: CommandPaletteQueryReason, source?: Event): void;
198
+ /** The row the pointer last highlighted, which never scrolls the list. */
199
+ private pointerHighlight;
198
200
  setHighlighted(next: string | null, reason: CommandPaletteHighlightReason, source?: Event): void;
199
201
  setPages(next: readonly string[], reason: CommandPalettePagesReason, source?: Event): void;
200
202
  private setRecent;
@@ -226,7 +228,14 @@ declare class SlCommandPalette<Item extends CommandPaletteItem = CommandPaletteI
226
228
  protected onInput(event: Event): void;
227
229
  protected clear(event: Event): void;
228
230
  protected returnTo(index: number, event: Event): void;
229
- protected hover(item: Item, event: Event): void;
231
+ /**
232
+ * Focus stays in the input while the palette is open, as in a platform
233
+ * search field: a press anywhere else — a group label, the list's empty
234
+ * space, a row — keeps it there, and on a phone the keyboard stays up. The
235
+ * press's click still runs.
236
+ */
237
+ protected keepFocus(event: MouseEvent): void;
238
+ protected hover(item: Item, event: PointerEvent): void;
230
239
  protected press(item: Item, event: MouseEvent): void;
231
240
  protected onDialogRequest(request: DialogChangeRequest): void;
232
241
  private move;