@ks-digital/designsystem-angular 0.0.1-alpha.75 → 0.0.1-alpha.77

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 (77) hide show
  1. package/.npmignore +25 -0
  2. package/fesm2022/ks-digital-designsystem-angular-__internals.mjs +148 -78
  3. package/fesm2022/ks-digital-designsystem-angular-__internals.mjs.map +1 -1
  4. package/fesm2022/ks-digital-designsystem-angular-alert.mjs +59 -33
  5. package/fesm2022/ks-digital-designsystem-angular-alert.mjs.map +1 -1
  6. package/fesm2022/ks-digital-designsystem-angular-breadcrumbs.mjs +79 -43
  7. package/fesm2022/ks-digital-designsystem-angular-breadcrumbs.mjs.map +1 -1
  8. package/fesm2022/ks-digital-designsystem-angular-button.mjs +187 -61
  9. package/fesm2022/ks-digital-designsystem-angular-button.mjs.map +1 -1
  10. package/fesm2022/ks-digital-designsystem-angular-card.mjs +136 -86
  11. package/fesm2022/ks-digital-designsystem-angular-card.mjs.map +1 -1
  12. package/fesm2022/ks-digital-designsystem-angular-chip.mjs +76 -42
  13. package/fesm2022/ks-digital-designsystem-angular-chip.mjs.map +1 -1
  14. package/fesm2022/ks-digital-designsystem-angular-details.mjs +148 -64
  15. package/fesm2022/ks-digital-designsystem-angular-details.mjs.map +1 -1
  16. package/fesm2022/ks-digital-designsystem-angular-dialog.mjs +106 -48
  17. package/fesm2022/ks-digital-designsystem-angular-dialog.mjs.map +1 -1
  18. package/fesm2022/ks-digital-designsystem-angular-dropdown.mjs +147 -45
  19. package/fesm2022/ks-digital-designsystem-angular-dropdown.mjs.map +1 -1
  20. package/fesm2022/ks-digital-designsystem-angular-error-summary.mjs +83 -48
  21. package/fesm2022/ks-digital-designsystem-angular-error-summary.mjs.map +1 -1
  22. package/fesm2022/ks-digital-designsystem-angular-forms.mjs +495 -210
  23. package/fesm2022/ks-digital-designsystem-angular-forms.mjs.map +1 -1
  24. package/fesm2022/ks-digital-designsystem-angular-heading.mjs +69 -39
  25. package/fesm2022/ks-digital-designsystem-angular-heading.mjs.map +1 -1
  26. package/fesm2022/ks-digital-designsystem-angular-link.mjs +59 -30
  27. package/fesm2022/ks-digital-designsystem-angular-link.mjs.map +1 -1
  28. package/fesm2022/ks-digital-designsystem-angular-pagination.mjs +324 -157
  29. package/fesm2022/ks-digital-designsystem-angular-pagination.mjs.map +1 -1
  30. package/fesm2022/ks-digital-designsystem-angular-paragraph.mjs +41 -24
  31. package/fesm2022/ks-digital-designsystem-angular-paragraph.mjs.map +1 -1
  32. package/fesm2022/ks-digital-designsystem-angular-popover.mjs +147 -45
  33. package/fesm2022/ks-digital-designsystem-angular-popover.mjs.map +1 -1
  34. package/fesm2022/ks-digital-designsystem-angular-search.mjs +266 -144
  35. package/fesm2022/ks-digital-designsystem-angular-search.mjs.map +1 -1
  36. package/fesm2022/ks-digital-designsystem-angular-skeleton.mjs +78 -34
  37. package/fesm2022/ks-digital-designsystem-angular-skeleton.mjs.map +1 -1
  38. package/fesm2022/ks-digital-designsystem-angular-spinner.mjs +132 -53
  39. package/fesm2022/ks-digital-designsystem-angular-spinner.mjs.map +1 -1
  40. package/fesm2022/ks-digital-designsystem-angular-suggestion.mjs +561 -297
  41. package/fesm2022/ks-digital-designsystem-angular-suggestion.mjs.map +1 -1
  42. package/fesm2022/ks-digital-designsystem-angular-table.mjs +219 -76
  43. package/fesm2022/ks-digital-designsystem-angular-table.mjs.map +1 -1
  44. package/fesm2022/ks-digital-designsystem-angular-tabs.mjs +269 -120
  45. package/fesm2022/ks-digital-designsystem-angular-tabs.mjs.map +1 -1
  46. package/fesm2022/ks-digital-designsystem-angular-tag.mjs +84 -37
  47. package/fesm2022/ks-digital-designsystem-angular-tag.mjs.map +1 -1
  48. package/fesm2022/ks-digital-designsystem-angular-validation-message.mjs +42 -24
  49. package/fesm2022/ks-digital-designsystem-angular-validation-message.mjs.map +1 -1
  50. package/fesm2022/ks-digital-designsystem-angular.mjs +1 -6
  51. package/fesm2022/ks-digital-designsystem-angular.mjs.map +1 -1
  52. package/package.json +6 -5
  53. package/types/ks-digital-designsystem-angular-__internals.d.ts +51 -37
  54. package/types/ks-digital-designsystem-angular-alert.d.ts +18 -9
  55. package/types/ks-digital-designsystem-angular-breadcrumbs.d.ts +29 -13
  56. package/types/ks-digital-designsystem-angular-button.d.ts +67 -32
  57. package/types/ks-digital-designsystem-angular-card.d.ts +38 -23
  58. package/types/ks-digital-designsystem-angular-chip.d.ts +30 -15
  59. package/types/ks-digital-designsystem-angular-details.d.ts +32 -18
  60. package/types/ks-digital-designsystem-angular-dialog.d.ts +40 -18
  61. package/types/ks-digital-designsystem-angular-dropdown.d.ts +44 -13
  62. package/types/ks-digital-designsystem-angular-error-summary.d.ts +17 -14
  63. package/types/ks-digital-designsystem-angular-forms.d.ts +136 -71
  64. package/types/ks-digital-designsystem-angular-heading.d.ts +22 -19
  65. package/types/ks-digital-designsystem-angular-link.d.ts +18 -9
  66. package/types/ks-digital-designsystem-angular-pagination.d.ts +131 -75
  67. package/types/ks-digital-designsystem-angular-paragraph.d.ts +5 -8
  68. package/types/ks-digital-designsystem-angular-popover.d.ts +44 -13
  69. package/types/ks-digital-designsystem-angular-search.d.ts +62 -38
  70. package/types/ks-digital-designsystem-angular-skeleton.d.ts +18 -15
  71. package/types/ks-digital-designsystem-angular-spinner.d.ts +42 -23
  72. package/types/ks-digital-designsystem-angular-suggestion.d.ts +182 -116
  73. package/types/ks-digital-designsystem-angular-table.d.ts +67 -42
  74. package/types/ks-digital-designsystem-angular-tabs.d.ts +85 -56
  75. package/types/ks-digital-designsystem-angular-tag.d.ts +30 -15
  76. package/types/ks-digital-designsystem-angular-validation-message.d.ts +5 -8
  77. package/types/ks-digital-designsystem-angular.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ks-digital-designsystem-angular-suggestion.mjs","sources":["../../../../packages/angular/suggestion/src/suggestion-list-empty.ts","../../../../packages/angular/suggestion/src/suggestion-list-option.ts","../../../../packages/angular/suggestion/src/suggestion-list.ts","../../../../packages/angular/suggestion/src/suggestion.utils.ts","../../../../packages/angular/suggestion/src/suggestion.ts","../../../../packages/angular/suggestion/src/ks-digital-designsystem-angular-suggestion.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n viewChild,\n} from '@angular/core'\n\n@Component({\n selector: 'ksd-suggestion-list-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ` <ng-template #tpl><ng-content /></ng-template> `,\n})\nexport class SuggestionListEmpty {\n /**\n * Hack to get the content from parent component so that we can\n * keep the dom structure needed without additional host elements\n */\n templateRef = viewChild<TemplateRef<unknown>>('tpl')\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n TemplateRef,\n viewChild,\n} from '@angular/core'\n\n@Component({\n selector: 'ksd-suggestion-list-option',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [],\n template: ` <ng-template #tpl><ng-content /></ng-template> `,\n})\nexport class SuggestionListOption {\n /**\n * Hack to get the content from parent component so that we can\n * keep the dom structure needed without additional host elements\n */\n templateRef = viewChild<TemplateRef<unknown>>('tpl')\n\n value = input.required<string>()\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n} from '@angular/core'\nimport { SuggestionListEmpty } from './suggestion-list-empty'\nimport { SuggestionListOption } from './suggestion-list-option'\n\n@Component({\n selector: 'ksd-suggestion-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n host: {\n style: 'display: none;',\n },\n template: ``,\n})\nexport class SuggestionList {\n /**\n * Screen reader announcement template for singular result count.\n *\n * @default '%d forslag'\n */\n readonly singular = input('%d forslag')\n\n /**\n * Screen reader announcement template for plural result count.\n *\n * @default '%d forslag'\n */\n readonly plural = input('%d forslag')\n\n readonly options = contentChildren(SuggestionListOption, {\n descendants: true,\n })\n\n readonly empty = contentChild(SuggestionListEmpty)\n}\n","import type {\n SuggestionItem,\n SuggestionSelected,\n SuggestionSelectedInput,\n SuggestionValue,\n} from './suggestion.types'\n\nexport const isSuggestionItem = (\n value: SuggestionItem | string | null | undefined,\n): value is SuggestionItem =>\n typeof value === 'object' &&\n value !== null &&\n 'label' in value &&\n 'value' in value\n\nconst sanitizeValues = (\n values: SuggestionSelectedInput,\n): Array<SuggestionItem | string> =>\n values == null ? [] : Array.isArray(values) ? values : [values]\n\nconst toValues = (value: SuggestionValue): string[] =>\n value == null ? [] : Array.isArray(value) ? value : [value]\n\n/** Option labels keyed by option value, learned from options and selections. */\nexport type SuggestionLabels = ReadonlyMap<string, string>\n\n/** Extracts the labels carried by any items passed to `[selected]`. */\nexport const labelEntries = (\n values: SuggestionSelectedInput,\n): Array<[string, string]> =>\n sanitizeValues(values)\n .filter(isSuggestionItem)\n .map((item) => [item.value, item.label])\n\n/** Normalizes anything accepted by `[selected]` into the primitive value model. */\nexport const toValue = (values: SuggestionSelectedInput): SuggestionValue => {\n if (values == null) return undefined\n\n const primitives = sanitizeValues(values).map((value) =>\n isSuggestionItem(value) ? value.value : value,\n )\n\n return Array.isArray(values) ? primitives : primitives[0]\n}\n\nexport const resolveItems = (\n value: SuggestionValue,\n labels: SuggestionLabels,\n): SuggestionItem[] =>\n toValues(value).map((optionValue) => ({\n label: labels.get(optionValue) ?? optionValue,\n value: optionValue,\n }))\n\n/** Resolves a primitive value into items, using known labels where available. */\nexport const toSelected = (\n value: SuggestionValue,\n labels: SuggestionLabels,\n): SuggestionSelected => {\n if (value == null) return undefined\n\n const items = resolveItems(value, labels)\n return Array.isArray(value) ? items : items[0]\n}\n\nexport const sameValue = (left: SuggestionValue, right: SuggestionValue) => {\n if (Array.isArray(left) && Array.isArray(right)) {\n return (\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n )\n }\n\n return left === right\n}\n\nexport const nextSelected = (\n data: HTMLDataElement,\n previous: SuggestionValue,\n multiple: boolean,\n): SuggestionValue => {\n const value = data.value\n\n if (!multiple) return data.isConnected ? undefined : value\n\n const previousValues = toValues(previous)\n\n return data.isConnected\n ? previousValues.filter((previousValue) => previousValue !== value)\n : [...previousValues, value]\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core'\nimport type { FormValueControl } from '@angular/forms/signals'\n// Main entrypoint on purpose: u-datalist, which ds-suggestion filtering needs, has no subpath export\nimport '@digdir/designsystemet-web'\nimport {\n HostColor,\n HostSize,\n} from '@ks-digital/designsystem-angular/__internals'\nimport { SuggestionList } from './suggestion-list'\nimport type {\n SuggestionFilter,\n SuggestionFilterArgs,\n SuggestionSelected,\n SuggestionSelectedInput,\n SuggestionValue,\n} from './suggestion.types'\nimport type { SuggestionLabels } from './suggestion.utils'\nimport {\n labelEntries,\n nextSelected,\n resolveItems,\n sameValue,\n toSelected,\n toValue,\n} from './suggestion.utils'\n\nconst defaultFilter = ({ label, input }: SuggestionFilterArgs) =>\n label.toLowerCase().includes(input.value.trim().toLowerCase())\n\n// Distinguishes an unbound `selected` from one explicitly bound to `undefined`.\nconst UNSET = Symbol('unset')\n\n@Component({\n selector: 'ksd-suggestion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: HostSize,\n inputs: ['data-size'],\n },\n {\n directive: HostColor,\n inputs: ['data-color'],\n },\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [NgTemplateOutlet],\n styles: `\n :host {\n display: block;\n }\n `,\n template: `\n <ds-suggestion\n #suggestionElement\n class=\"ds-suggestion\"\n [attr.data-multiple]=\"multiple() || undefined\"\n [attr.data-creatable]=\"creatable() || undefined\"\n (comboboxbeforeselect)=\"onSelect($event)\"\n (focusout)=\"onFocusOut($event)\"\n (input)=\"onInput($event)\"\n >\n @for (option of selectedArray(); track option.value) {\n <data [attr.value]=\"option.value\">{{ option.label }}</data>\n }\n <ng-content />\n <u-datalist\n popover=\"manual\"\n data-is-floating=\"true\"\n data-nofilter\n [attr.data-sr-singular]=\"suggestionList()?.singular()\"\n [attr.data-sr-plural]=\"suggestionList()?.plural()\"\n >\n @for (option of suggestionList()?.options() ?? []; track option) {\n <u-option [value]=\"option.value()\">\n <ng-container *ngTemplateOutlet=\"option.templateRef()\" />\n </u-option>\n }\n @if (suggestionList()?.empty()?.templateRef(); as emptyTpl) {\n <u-option data-empty value=\"\" hidden>\n <ng-container *ngTemplateOutlet=\"emptyTpl\" />\n </u-option>\n }\n </u-datalist>\n </ds-suggestion>\n `,\n})\nexport class Suggestion implements FormValueControl<SuggestionValue> {\n /**\n * Allows the user to select multiple items\n *\n * @default false\n */\n multiple = input(false, { transform: booleanAttribute })\n\n /**\n * Allows the user to create new items\n *\n * @default false\n */\n creatable = input(false, { transform: booleanAttribute })\n\n /**\n * Filter options; boolean or a custom callback.\n *\n * @default true\n */\n filter = input<boolean | SuggestionFilter>(true)\n\n /**\n * Current value, as primitive option values. Bound by Angular signal forms.\n *\n * @default undefined\n */\n readonly value = model<SuggestionValue>(undefined)\n\n /**\n * Controlled selection. Accepts items or raw option values.\n *\n * @default undefined\n */\n readonly selected = input<SuggestionSelectedInput | typeof UNSET>(UNSET)\n\n /**\n * Emits the resolved selection whenever the user changes it.\n */\n readonly selectedChange = output<SuggestionSelected>()\n\n /**\n * Form-control dirty state.\n *\n * @default false\n */\n readonly dirty = input(false, { transform: booleanAttribute })\n\n /**\n * Whether the control has been touched. Synced with Angular signal forms.\n *\n * @default false\n */\n readonly touched = model(false)\n\n protected selectedArray = computed(() =>\n resolveItems(this.value(), this.labels()),\n )\n private readonly suggestionElement =\n viewChild<ElementRef<HTMLElement>>('suggestionElement')\n private readonly labels = signal<SuggestionLabels>(new Map())\n private readonly query = signal('')\n protected readonly suggestionList = contentChild(SuggestionList)\n\n constructor() {\n // Runs after render, so projected options are present in the DOM.\n afterRenderEffect(() => {\n this.query()\n this.filter()\n this.suggestionList()?.options()\n this.syncOptions()\n })\n\n // Apply the controlled `selected` input, when bound, to the value model.\n effect(() => {\n const selected = this.selected()\n if (selected === UNSET) return\n\n untracked(() => this.learnLabels(labelEntries(selected)))\n\n const next = toValue(selected)\n if (\n sameValue(\n next,\n untracked(() => this.value()),\n )\n )\n return\n\n untracked(() => this.value.set(next))\n })\n }\n\n protected onSelect(event: Event) {\n const customEvent = event as CustomEvent<HTMLDataElement | undefined>\n customEvent.preventDefault()\n\n const data = customEvent.detail\n if (!data) return\n\n this.learnLabels([[data.value, data.textContent?.trim() || data.value]])\n this.setValue(nextSelected(data, this.value(), this.multiple()))\n }\n\n protected onFocusOut(event: FocusEvent) {\n const suggestionElement = this.suggestionElement()?.nativeElement\n const nextTarget = event.relatedTarget\n\n // Ignore focus changes within the composite widget; only mark touched\n // when focus leaves the suggestion control entirely.\n if (\n suggestionElement &&\n nextTarget instanceof Node &&\n suggestionElement.contains(nextTarget)\n ) {\n return\n }\n\n this.touched.set(true)\n }\n\n protected onInput(event: Event) {\n const inputElement = event.target as HTMLInputElement | null\n this.query.set(inputElement?.value ?? '')\n }\n\n private setValue(value: SuggestionValue) {\n if (sameValue(value, this.value())) return\n\n this.value.set(value)\n this.selectedChange.emit(toSelected(value, this.labels()))\n }\n\n private learnLabels(entries: Iterable<readonly [string, string]>) {\n this.labels.update((current) => {\n let next: Map<string, string> | null = null\n\n for (const [value, label] of entries) {\n if (current.get(value) === label) continue\n\n next ??= new Map(current)\n next.set(value, label)\n }\n\n return next ?? current\n })\n }\n\n private syncOptions() {\n const suggestionElement = this.suggestionElement()?.nativeElement\n if (!suggestionElement) return\n\n const input = suggestionElement.querySelector<HTMLInputElement>('input')\n\n const options = Array.from(\n suggestionElement.querySelectorAll<HTMLOptionElement>(\n 'u-option:not([data-empty])',\n ),\n )\n\n this.learnLabels(\n options.map((option) => [\n option.value,\n option.label ||\n option.text ||\n option.textContent?.trim() ||\n option.value,\n ]),\n )\n\n const filter = this.filter()\n const filterFn = filter === true ? defaultFilter : filter\n\n if (filterFn && input) {\n let index = 0\n for (const option of options) {\n option.disabled = !filterFn({\n index,\n input,\n label: option.label,\n optionElement: option,\n text: option.text,\n value: option.value,\n })\n index++\n }\n } else {\n for (const option of options) {\n option.disabled = false\n }\n }\n\n const visibleOptions = options.filter(\n (option) => !option.disabled && !option.hidden,\n )\n const emptyOption = suggestionElement.querySelector<HTMLOptionElement>(\n 'u-option[data-empty]',\n )\n\n if (!emptyOption) return\n\n if (visibleOptions.length === 0) {\n emptyOption.removeAttribute('hidden')\n return\n }\n\n emptyOption.setAttribute('hidden', '')\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAYa,mBAAmB,CAAA;AAC9B;;;AAGG;AACH,IAAA,WAAW,GAAG,SAAS,CAAuB,KAAK,kFAAC;uGALzC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,yMAFpB,CAAA,gDAAA,CAAkD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEjD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,CAAA,gDAAA,CAAkD;AAC7D,iBAAA;yEAM+C,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCDxC,oBAAoB,CAAA;AAC/B;;;AAGG;AACH,IAAA,WAAW,GAAG,SAAS,CAAuB,KAAK,kFAAC;AAEpD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;uGAPrB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,6UAFrB,CAAA,gDAAA,CAAkD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEjD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;oBACtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE,CAAA,gDAAA,CAAkD;AAC7D,iBAAA;yEAM+C,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCDxC,cAAc,CAAA;AACzB;;;;AAIG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAC,YAAY,+EAAC;AAEvC;;;;AAIG;AACM,IAAA,MAAM,GAAG,KAAK,CAAC,YAAY,6EAAC;IAE5B,OAAO,GAAG,eAAe,CAAC,oBAAoB,+EACrD,WAAW,EAAE,IAAI,EAAA,CACjB;AAEO,IAAA,KAAK,GAAG,YAAY,CAAC,mBAAmB,4EAAC;uGAnBvC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAeU,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIzB,mBAAmB,gEArBvC,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAED,cAAc,EAAA,UAAA,EAAA,CAAA;kBAT1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACxB,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,CAAE;AACb,iBAAA;AAgBoC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,oBAAoB,CAAA,EAAA,EAAA,GAAE;AACvD,4BAAA,WAAW,EAAE,IAAI;AAClB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAE6B,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChC5C,MAAM,gBAAgB,GAAG,CAC9B,KAAiD,KAEjD,OAAO,KAAK,KAAK,QAAQ;AACzB,IAAA,KAAK,KAAK,IAAI;AACd,IAAA,OAAO,IAAI,KAAK;IAChB,OAAO,IAAI,KAAK;AAElB,MAAM,cAAc,GAAG,CACrB,MAA+B,KAE/B,MAAM,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AAEjE,MAAM,QAAQ,GAAG,CAAC,KAAsB,KACtC,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AAK7D;AACO,MAAM,YAAY,GAAG,CAC1B,MAA+B,KAE/B,cAAc,CAAC,MAAM;KAClB,MAAM,CAAC,gBAAgB;AACvB,KAAA,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAE5C;AACO,MAAM,OAAO,GAAG,CAAC,MAA+B,KAAqB;IAC1E,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,SAAS;AAEpC,IAAA,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAClD,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAC9C;AAED,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC;AAEM,MAAM,YAAY,GAAG,CAC1B,KAAsB,EACtB,MAAwB,KAExB,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,MAAM;IACpC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW;AAC7C,IAAA,KAAK,EAAE,WAAW;AACnB,CAAA,CAAC,CAAC;AAEL;AACO,MAAM,UAAU,GAAG,CACxB,KAAsB,EACtB,MAAwB,KACF;IACtB,IAAI,KAAK,IAAI,IAAI;AAAE,QAAA,OAAO,SAAS;IAEnC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AACzC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAE,KAAsB,KAAI;AACzE,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/C,QAAA,QACE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;IAExD;IAEA,OAAO,IAAI,KAAK,KAAK;AACvB,CAAC;AAEM,MAAM,YAAY,GAAG,CAC1B,IAAqB,EACrB,QAAyB,EACzB,QAAiB,KACE;AACnB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,IAAA,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,KAAK;AAE1D,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEzC,OAAO,IAAI,CAAC;AACV,UAAE,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,aAAa,KAAK,KAAK;AAClE,UAAE,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC;AAChC,CAAC;;AC/CD,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAwB,KAC3D,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEhE;AACA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;MAyDhB,UAAU,CAAA;AACrB;;;;AAIG;IACH,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;;AAIG;IACH,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzD;;;;AAIG;AACH,IAAA,MAAM,GAAG,KAAK,CAA6B,IAAI,6EAAC;AAEhD;;;;AAIG;AACM,IAAA,KAAK,GAAG,KAAK,CAAkB,SAAS,4EAAC;AAElD;;;;AAIG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAyC,KAAK,+EAAC;AAExE;;AAEG;IACM,cAAc,GAAG,MAAM,EAAsB;AAEtD;;;;AAIG;IACM,KAAK,GAAG,KAAK,CAAC,KAAK,6EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE9D;;;;AAIG;AACM,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,8EAAC;AAErB,IAAA,aAAa,GAAG,QAAQ,CAAC,MACjC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,oFAC1C;AACgB,IAAA,iBAAiB,GAChC,SAAS,CAA0B,mBAAmB,wFAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAmB,IAAI,GAAG,EAAE,6EAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,4EAAC;AAChB,IAAA,cAAc,GAAG,YAAY,CAAC,cAAc,qFAAC;AAEhE,IAAA,WAAA,GAAA;;QAEE,iBAAiB,CAAC,MAAK;YACrB,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE;YAChC,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,QAAQ,KAAK,KAAK;gBAAE;AAExB,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEzD,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC9B,YAAA,IACE,SAAS,CACP,IAAI,EACJ,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAC9B;gBAED;AAEF,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC7B,MAAM,WAAW,GAAG,KAAiD;QACrE,WAAW,CAAC,cAAc,EAAE;AAE5B,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AAC/B,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;QACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa;AACjE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa;;;AAItC,QAAA,IACE,iBAAiB;AACjB,YAAA,UAAU,YAAY,IAAI;AAC1B,YAAA,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,EACtC;YACA;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAiC;QAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;IAC3C;AAEQ,IAAA,QAAQ,CAAC,KAAsB,EAAA;QACrC,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAE;AAEpC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D;AAEQ,IAAA,WAAW,CAAC,OAA4C,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,IAAI,GAA+B,IAAI;YAE3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AACpC,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK;oBAAE;AAElC,gBAAA,IAAI,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;YACxB;YAEA,OAAO,IAAI,IAAI,OAAO;AACxB,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;QACjB,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa;AACjE,QAAA,IAAI,CAAC,iBAAiB;YAAE;QAExB,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAAmB,OAAO,CAAC;AAExE,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,iBAAiB,CAAC,gBAAgB,CAChC,4BAA4B,CAC7B,CACF;QAED,IAAI,CAAC,WAAW,CACd,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACtB,YAAA,MAAM,CAAC,KAAK;AACZ,YAAA,MAAM,CAAC,KAAK;AACV,gBAAA,MAAM,CAAC,IAAI;AACX,gBAAA,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE;AAC1B,gBAAA,MAAM,CAAC,KAAK;AACf,SAAA,CAAC,CACH;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,GAAG,aAAa,GAAG,MAAM;AAEzD,QAAA,IAAI,QAAQ,IAAI,KAAK,EAAE;YACrB,IAAI,KAAK,GAAG,CAAC;AACb,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;oBAC1B,KAAK;oBACL,KAAK;oBACL,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,oBAAA,aAAa,EAAE,MAAM;oBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;AACpB,iBAAA,CAAC;AACF,gBAAA,KAAK,EAAE;YACT;QACF;aAAO;AACL,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;YACzB;QACF;QAEA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CACnC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAC/C;QACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CACjD,sBAAsB,CACvB;AAED,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC;YACrC;QACF;AAEA,QAAA,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACxC;uGA/MW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA8D4B,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvCS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyCf,UAAU,EAAA,UAAA,EAAA,CAAA;kBAvDtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,QAAQ;4BACnB,MAAM,EAAE,CAAC,WAAW,CAAC;AACtB,yBAAA;AACD,wBAAA;AACE,4BAAA,SAAS,EAAE,SAAS;4BACpB,MAAM,EAAE,CAAC,YAAY,CAAC;AACvB,yBAAA;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,sBAAsB,CAAC,WACxB,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;AA6DoC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,mBAAmB,+FAGP,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACtKjE;;AAEG;;;;"}
1
+ {"version":3,"file":"ks-digital-designsystem-angular-suggestion.mjs","names":[],"sources":["../../../../packages/angular/suggestion/src/suggestion-list-empty.ts","../../../../packages/angular/suggestion/src/suggestion-list-option.ts","../../../../packages/angular/suggestion/src/suggestion-list.ts","../../../../packages/angular/suggestion/src/suggestion.utils.ts","../../../../packages/angular/suggestion/src/suggestion.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n viewChild,\n} from '@angular/core'\n\n@Component({\n selector: 'ksd-suggestion-list-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ` <ng-template #tpl><ng-content /></ng-template> `,\n})\nexport class SuggestionListEmpty {\n /**\n * Hack to get the content from parent component so that we can\n * keep the dom structure needed without additional host elements\n */\n templateRef = viewChild<TemplateRef<unknown>>('tpl')\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n TemplateRef,\n viewChild,\n} from '@angular/core'\n\n@Component({\n selector: 'ksd-suggestion-list-option',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [],\n template: ` <ng-template #tpl><ng-content /></ng-template> `,\n})\nexport class SuggestionListOption {\n /**\n * Hack to get the content from parent component so that we can\n * keep the dom structure needed without additional host elements\n */\n templateRef = viewChild<TemplateRef<unknown>>('tpl')\n\n value = input.required<string>()\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n contentChildren,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n} from '@angular/core'\nimport { SuggestionListEmpty } from './suggestion-list-empty'\nimport { SuggestionListOption } from './suggestion-list-option'\n\n@Component({\n selector: 'ksd-suggestion-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n host: {\n style: 'display: none;',\n },\n template: ``,\n})\nexport class SuggestionList {\n /**\n * Screen reader announcement template for singular result count.\n *\n * @default '%d forslag'\n */\n readonly singular = input('%d forslag')\n\n /**\n * Screen reader announcement template for plural result count.\n *\n * @default '%d forslag'\n */\n readonly plural = input('%d forslag')\n\n readonly options = contentChildren(SuggestionListOption, {\n descendants: true,\n })\n\n readonly empty = contentChild(SuggestionListEmpty)\n}\n","import type {\n SuggestionItem,\n SuggestionSelected,\n SuggestionSelectedInput,\n SuggestionValue,\n} from './suggestion.types'\n\nexport const isSuggestionItem = (\n value: SuggestionItem | string | null | undefined,\n): value is SuggestionItem =>\n typeof value === 'object' &&\n value !== null &&\n 'label' in value &&\n 'value' in value\n\nconst sanitizeValues = (\n values: SuggestionSelectedInput,\n): Array<SuggestionItem | string> =>\n values == null ? [] : Array.isArray(values) ? values : [values]\n\nconst toValues = (value: SuggestionValue): string[] =>\n value == null ? [] : Array.isArray(value) ? value : [value]\n\n/** Option labels keyed by option value, learned from options and selections. */\nexport type SuggestionLabels = ReadonlyMap<string, string>\n\n/** Extracts the labels carried by any items passed to `[selected]`. */\nexport const labelEntries = (\n values: SuggestionSelectedInput,\n): Array<[string, string]> =>\n sanitizeValues(values)\n .filter(isSuggestionItem)\n .map((item) => [item.value, item.label])\n\n/** Normalizes anything accepted by `[selected]` into the primitive value model. */\nexport const toValue = (values: SuggestionSelectedInput): SuggestionValue => {\n if (values == null) return undefined\n\n const primitives = sanitizeValues(values).map((value) =>\n isSuggestionItem(value) ? value.value : value,\n )\n\n return Array.isArray(values) ? primitives : primitives[0]\n}\n\nexport const resolveItems = (\n value: SuggestionValue,\n labels: SuggestionLabels,\n): SuggestionItem[] =>\n toValues(value).map((optionValue) => ({\n label: labels.get(optionValue) ?? optionValue,\n value: optionValue,\n }))\n\n/** Resolves a primitive value into items, using known labels where available. */\nexport const toSelected = (\n value: SuggestionValue,\n labels: SuggestionLabels,\n): SuggestionSelected => {\n if (value == null) return undefined\n\n const items = resolveItems(value, labels)\n return Array.isArray(value) ? items : items[0]\n}\n\nexport const sameValue = (left: SuggestionValue, right: SuggestionValue) => {\n if (Array.isArray(left) && Array.isArray(right)) {\n return (\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n )\n }\n\n return left === right\n}\n\nexport const nextSelected = (\n data: HTMLDataElement,\n previous: SuggestionValue,\n multiple: boolean,\n): SuggestionValue => {\n const value = data.value\n\n if (!multiple) return data.isConnected ? undefined : value\n\n const previousValues = toValues(previous)\n\n return data.isConnected\n ? previousValues.filter((previousValue) => previousValue !== value)\n : [...previousValues, value]\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core'\nimport type { FormValueControl } from '@angular/forms/signals'\n// Main entrypoint on purpose: u-datalist, which ds-suggestion filtering needs, has no subpath export\nimport '@digdir/designsystemet-web'\nimport {\n HostColor,\n HostSize,\n} from '@ks-digital/designsystem-angular/__internals'\nimport { SuggestionList } from './suggestion-list'\nimport type {\n SuggestionFilter,\n SuggestionFilterArgs,\n SuggestionSelected,\n SuggestionSelectedInput,\n SuggestionValue,\n} from './suggestion.types'\nimport type { SuggestionLabels } from './suggestion.utils'\nimport {\n labelEntries,\n nextSelected,\n resolveItems,\n sameValue,\n toSelected,\n toValue,\n} from './suggestion.utils'\n\nconst defaultFilter = ({ label, input }: SuggestionFilterArgs) =>\n label.toLowerCase().includes(input.value.trim().toLowerCase())\n\n// Distinguishes an unbound `selected` from one explicitly bound to `undefined`.\nconst UNSET = Symbol('unset')\n\n@Component({\n selector: 'ksd-suggestion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: HostSize,\n inputs: ['data-size'],\n },\n {\n directive: HostColor,\n inputs: ['data-color'],\n },\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [NgTemplateOutlet],\n styles: `\n :host {\n display: block;\n }\n `,\n template: `\n <ds-suggestion\n #suggestionElement\n class=\"ds-suggestion\"\n [attr.data-multiple]=\"multiple() || undefined\"\n [attr.data-creatable]=\"creatable() || undefined\"\n (comboboxbeforeselect)=\"onSelect($event)\"\n (focusout)=\"onFocusOut($event)\"\n (input)=\"onInput($event)\"\n >\n @for (option of selectedArray(); track option.value) {\n <data [attr.value]=\"option.value\">{{ option.label }}</data>\n }\n <ng-content />\n <u-datalist\n popover=\"manual\"\n data-is-floating=\"true\"\n data-nofilter\n [attr.data-sr-singular]=\"suggestionList()?.singular()\"\n [attr.data-sr-plural]=\"suggestionList()?.plural()\"\n >\n @for (option of suggestionList()?.options() ?? []; track option) {\n <u-option [value]=\"option.value()\">\n <ng-container *ngTemplateOutlet=\"option.templateRef()\" />\n </u-option>\n }\n @if (suggestionList()?.empty()?.templateRef(); as emptyTpl) {\n <u-option data-empty value=\"\" hidden>\n <ng-container *ngTemplateOutlet=\"emptyTpl\" />\n </u-option>\n }\n </u-datalist>\n </ds-suggestion>\n `,\n})\nexport class Suggestion implements FormValueControl<SuggestionValue> {\n /**\n * Allows the user to select multiple items\n *\n * @default false\n */\n multiple = input(false, { transform: booleanAttribute })\n\n /**\n * Allows the user to create new items\n *\n * @default false\n */\n creatable = input(false, { transform: booleanAttribute })\n\n /**\n * Filter options; boolean or a custom callback.\n *\n * @default true\n */\n filter = input<boolean | SuggestionFilter>(true)\n\n /**\n * Current value, as primitive option values. Bound by Angular signal forms.\n *\n * @default undefined\n */\n readonly value = model<SuggestionValue>(undefined)\n\n /**\n * Controlled selection. Accepts items or raw option values.\n *\n * @default undefined\n */\n readonly selected = input<SuggestionSelectedInput | typeof UNSET>(UNSET)\n\n /**\n * Emits the resolved selection whenever the user changes it.\n */\n readonly selectedChange = output<SuggestionSelected>()\n\n /**\n * Form-control dirty state.\n *\n * @default false\n */\n readonly dirty = input(false, { transform: booleanAttribute })\n\n /**\n * Whether the control has been touched. Bound by Angular signal forms.\n *\n * @default false\n */\n readonly touched = input(false, { transform: booleanAttribute })\n\n /**\n * Emits when focus leaves the control, marking the bound form field as touched.\n */\n readonly touch = output<void>()\n\n protected selectedArray = computed(() =>\n resolveItems(this.value(), this.labels()),\n )\n private readonly suggestionElement =\n viewChild<ElementRef<HTMLElement>>('suggestionElement')\n private readonly labels = signal<SuggestionLabels>(new Map())\n private readonly query = signal('')\n protected readonly suggestionList = contentChild(SuggestionList)\n\n constructor() {\n // Runs after render, so projected options are present in the DOM.\n afterRenderEffect(() => {\n this.query()\n this.filter()\n this.suggestionList()?.options()\n this.syncOptions()\n })\n\n // Apply the controlled `selected` input, when bound, to the value model.\n effect(() => {\n const selected = this.selected()\n if (selected === UNSET) return\n\n untracked(() => this.learnLabels(labelEntries(selected)))\n\n const next = toValue(selected)\n if (\n sameValue(\n next,\n untracked(() => this.value()),\n )\n )\n return\n\n untracked(() => this.value.set(next))\n })\n }\n\n protected onSelect(event: Event) {\n const customEvent = event as CustomEvent<HTMLDataElement | undefined>\n customEvent.preventDefault()\n\n const data = customEvent.detail\n if (!data) return\n\n this.learnLabels([[data.value, data.textContent?.trim() || data.value]])\n this.setValue(nextSelected(data, this.value(), this.multiple()))\n }\n\n protected onFocusOut(event: FocusEvent) {\n const suggestionElement = this.suggestionElement()?.nativeElement\n const nextTarget = event.relatedTarget\n\n // Ignore focus changes within the composite widget; only mark touched\n // when focus leaves the suggestion control entirely.\n if (\n suggestionElement &&\n nextTarget instanceof Node &&\n suggestionElement.contains(nextTarget)\n ) {\n return\n }\n\n this.touch.emit()\n }\n\n protected onInput(event: Event) {\n const inputElement = event.target as HTMLInputElement | null\n this.query.set(inputElement?.value ?? '')\n }\n\n private setValue(value: SuggestionValue) {\n if (sameValue(value, this.value())) return\n\n this.value.set(value)\n this.selectedChange.emit(toSelected(value, this.labels()))\n }\n\n private learnLabels(entries: Iterable<readonly [string, string]>) {\n this.labels.update((current) => {\n let next: Map<string, string> | null = null\n\n for (const [value, label] of entries) {\n if (current.get(value) === label) continue\n\n next ??= new Map(current)\n next.set(value, label)\n }\n\n return next ?? current\n })\n }\n\n private syncOptions() {\n const suggestionElement = this.suggestionElement()?.nativeElement\n if (!suggestionElement) return\n\n const input = suggestionElement.querySelector<HTMLInputElement>('input')\n\n const options = Array.from(\n suggestionElement.querySelectorAll<HTMLOptionElement>(\n 'u-option:not([data-empty])',\n ),\n )\n\n this.learnLabels(\n options.map((option) => [\n option.value,\n option.label ||\n option.text ||\n option.textContent?.trim() ||\n option.value,\n ]),\n )\n\n const filter = this.filter()\n const filterFn = filter === true ? defaultFilter : filter\n\n if (filterFn && input) {\n let index = 0\n for (const option of options) {\n option.disabled = !filterFn({\n index,\n input,\n label: option.label,\n optionElement: option,\n text: option.text,\n value: option.value,\n })\n index++\n }\n } else {\n for (const option of options) {\n option.disabled = false\n }\n }\n\n const visibleOptions = options.filter(\n (option) => !option.disabled && !option.hidden,\n )\n const emptyOption = suggestionElement.querySelector<HTMLOptionElement>(\n 'u-option[data-empty]',\n )\n\n if (!emptyOption) return\n\n if (visibleOptions.length === 0) {\n emptyOption.removeAttribute('hidden')\n return\n }\n\n emptyOption.setAttribute('hidden', '')\n }\n}\n"],"mappings":"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"}
@@ -1,64 +1,172 @@
1
- import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, ChangeDetectionStrategy, Component, output } from '@angular/core';
3
- import { NgTemplateOutlet } from '@angular/common';
4
-
5
- class Table {
6
- /**
7
- * Will give the table a hover effect on rows
8
- * @default false
9
- */
10
- hover = input(false, { ...(ngDevMode ? { debugName: "hover" } : /* istanbul ignore next */ {}), alias: 'data-hover',
11
- transform: booleanAttribute });
12
- /**
13
- * Will give the table a rounded border
14
- * @default false
15
- */
16
- border = input(false, { ...(ngDevMode ? { debugName: "border" } : /* istanbul ignore next */ {}), alias: 'data-border',
17
- transform: booleanAttribute });
18
- /**
19
- * Will make the table header sticky
20
- * @default false
21
- */
22
- stickyHeader = input(false, { ...(ngDevMode ? { debugName: "stickyHeader" } : /* istanbul ignore next */ {}), alias: 'data-sticky-header',
23
- transform: booleanAttribute });
24
- /**
25
- * Will give the table zebra striping
26
- * @default false
27
- */
28
- zebra = input(false, { ...(ngDevMode ? { debugName: "zebra" } : /* istanbul ignore next */ {}), alias: 'data-zebra',
29
- transform: booleanAttribute });
30
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.8", type: Table, isStandalone: true, selector: "table[ksd-table]", inputs: { hover: { classPropertyName: "hover", publicName: "data-hover", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "data-border", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "data-sticky-header", isSignal: true, isRequired: false, transformFunction: null }, zebra: { classPropertyName: "zebra", publicName: "data-zebra", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-hover": "hover() || undefined", "attr.data-border": "border() || undefined", "attr.data-sticky-header": "stickyHeader() || undefined", "attr.data-zebra": "zebra() || undefined" }, classAttribute: "ds-table" }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Table, decorators: [{
34
- type: Component,
35
- args: [{
36
- selector: 'table[ksd-table]',
37
- changeDetection: ChangeDetectionStrategy.OnPush,
38
- template: `<ng-content />`,
39
- host: {
40
- class: 'ds-table',
41
- '[attr.data-hover]': 'hover() || undefined',
42
- '[attr.data-border]': 'border() || undefined',
43
- '[attr.data-sticky-header]': 'stickyHeader() || undefined',
44
- '[attr.data-zebra]': 'zebra() || undefined',
45
- },
46
- }]
47
- }], propDecorators: { hover: [{ type: i0.Input, args: [{ isSignal: true, alias: "data-hover", required: false }] }], border: [{ type: i0.Input, args: [{ isSignal: true, alias: "data-border", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "data-sticky-header", required: false }] }], zebra: [{ type: i0.Input, args: [{ isSignal: true, alias: "data-zebra", required: false }] }] } });
48
-
49
- class TableHeaderCell {
50
- /**
51
- * If 'none' | 'ascending' | 'descending' will add a button to the header cell and change aria-sort and icon
52
- * @default undefined
53
- */
54
- sort = input(undefined, { ...(ngDevMode ? { debugName: "sort" } : /* istanbul ignore next */ {}), alias: 'aria-sort' });
55
- /**
56
- * Emitted when the sort button is clicked
57
- * @emits void
58
- */
59
- sortChange = output();
60
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TableHeaderCell, deps: [], target: i0.ɵɵFactoryTarget.Component });
61
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: TableHeaderCell, isStandalone: true, selector: "th[ksd-header-cell]", inputs: { sort: { classPropertyName: "sort", publicName: "aria-sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange" }, host: { properties: { "attr.aria-sort": "sort()" } }, ngImport: i0, template: `
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, booleanAttribute, input, output } from "@angular/core";
3
+ import { NgTemplateOutlet } from "@angular/common";
4
+ var Table = class Table {
5
+ hover = input(false, {
6
+ ...ngDevMode ? { debugName: "hover" } : /* istanbul ignore next */ {},
7
+ alias: "data-hover",
8
+ transform: booleanAttribute
9
+ });
10
+ border = input(false, {
11
+ ...ngDevMode ? { debugName: "border" } : /* istanbul ignore next */ {},
12
+ alias: "data-border",
13
+ transform: booleanAttribute
14
+ });
15
+ stickyHeader = input(false, {
16
+ ...ngDevMode ? { debugName: "stickyHeader" } : /* istanbul ignore next */ {},
17
+ alias: "data-sticky-header",
18
+ transform: booleanAttribute
19
+ });
20
+ zebra = input(false, {
21
+ ...ngDevMode ? { debugName: "zebra" } : /* istanbul ignore next */ {},
22
+ alias: "data-zebra",
23
+ transform: booleanAttribute
24
+ });
25
+ static ɵfac = i0.ɵɵngDeclareFactory({
26
+ minVersion: "12.0.0",
27
+ version: "22.2.1",
28
+ ngImport: i0,
29
+ type: Table,
30
+ deps: [],
31
+ target: i0.ɵɵFactoryTarget.Component
32
+ });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({
34
+ minVersion: "17.1.0",
35
+ version: "22.2.1",
36
+ type: Table,
37
+ isStandalone: true,
38
+ selector: "table[ksd-table]",
39
+ inputs: {
40
+ hover: {
41
+ classPropertyName: "hover",
42
+ publicName: "data-hover",
43
+ isSignal: true,
44
+ isRequired: false,
45
+ transformFunction: null
46
+ },
47
+ border: {
48
+ classPropertyName: "border",
49
+ publicName: "data-border",
50
+ isSignal: true,
51
+ isRequired: false,
52
+ transformFunction: null
53
+ },
54
+ stickyHeader: {
55
+ classPropertyName: "stickyHeader",
56
+ publicName: "data-sticky-header",
57
+ isSignal: true,
58
+ isRequired: false,
59
+ transformFunction: null
60
+ },
61
+ zebra: {
62
+ classPropertyName: "zebra",
63
+ publicName: "data-zebra",
64
+ isSignal: true,
65
+ isRequired: false,
66
+ transformFunction: null
67
+ }
68
+ },
69
+ host: {
70
+ properties: {
71
+ "attr.data-hover": "hover() || undefined",
72
+ "attr.data-border": "border() || undefined",
73
+ "attr.data-sticky-header": "stickyHeader() || undefined",
74
+ "attr.data-zebra": "zebra() || undefined"
75
+ },
76
+ classAttribute: "ds-table"
77
+ },
78
+ ngImport: i0,
79
+ template: `<ng-content />`,
80
+ isInline: true,
81
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
82
+ });
83
+ };
84
+ i0.ɵɵngDeclareClassMetadata({
85
+ minVersion: "12.0.0",
86
+ version: "22.2.1",
87
+ ngImport: i0,
88
+ type: Table,
89
+ decorators: [{
90
+ type: Component,
91
+ args: [{
92
+ selector: "table[ksd-table]",
93
+ changeDetection: ChangeDetectionStrategy.OnPush,
94
+ template: `<ng-content />`,
95
+ host: {
96
+ class: "ds-table",
97
+ "[attr.data-hover]": "hover() || undefined",
98
+ "[attr.data-border]": "border() || undefined",
99
+ "[attr.data-sticky-header]": "stickyHeader() || undefined",
100
+ "[attr.data-zebra]": "zebra() || undefined"
101
+ }
102
+ }]
103
+ }],
104
+ propDecorators: {
105
+ hover: [{
106
+ type: i0.Input,
107
+ args: [{
108
+ isSignal: true,
109
+ alias: "data-hover",
110
+ required: false
111
+ }]
112
+ }],
113
+ border: [{
114
+ type: i0.Input,
115
+ args: [{
116
+ isSignal: true,
117
+ alias: "data-border",
118
+ required: false
119
+ }]
120
+ }],
121
+ stickyHeader: [{
122
+ type: i0.Input,
123
+ args: [{
124
+ isSignal: true,
125
+ alias: "data-sticky-header",
126
+ required: false
127
+ }]
128
+ }],
129
+ zebra: [{
130
+ type: i0.Input,
131
+ args: [{
132
+ isSignal: true,
133
+ alias: "data-zebra",
134
+ required: false
135
+ }]
136
+ }]
137
+ }
138
+ });
139
+ var TableHeaderCell = class TableHeaderCell {
140
+ sort = input(void 0, {
141
+ ...ngDevMode ? { debugName: "sort" } : /* istanbul ignore next */ {},
142
+ alias: "aria-sort"
143
+ });
144
+ sortChange = output();
145
+ static ɵfac = i0.ɵɵngDeclareFactory({
146
+ minVersion: "12.0.0",
147
+ version: "22.2.1",
148
+ ngImport: i0,
149
+ type: TableHeaderCell,
150
+ deps: [],
151
+ target: i0.ɵɵFactoryTarget.Component
152
+ });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({
154
+ minVersion: "17.0.0",
155
+ version: "22.2.1",
156
+ type: TableHeaderCell,
157
+ isStandalone: true,
158
+ selector: "th[ksd-header-cell]",
159
+ inputs: { sort: {
160
+ classPropertyName: "sort",
161
+ publicName: "aria-sort",
162
+ isSignal: true,
163
+ isRequired: false,
164
+ transformFunction: null
165
+ } },
166
+ outputs: { sortChange: "sortChange" },
167
+ host: { properties: { "attr.aria-sort": "sort()" } },
168
+ ngImport: i0,
169
+ template: `
62
170
  @if (sort()) {
63
171
  <button
64
172
  type="button"
@@ -73,11 +181,33 @@ class TableHeaderCell {
73
181
  <ng-template #headerTitle>
74
182
  <ng-content />
75
183
  </ng-template>
76
- `, isInline: true, styles: ["button{padding:var(--dsc-table-padding)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TableHeaderCell, decorators: [{
79
- type: Component,
80
- args: [{ selector: 'th[ksd-header-cell]', changeDetection: ChangeDetectionStrategy.OnPush, template: `
184
+ `,
185
+ isInline: true,
186
+ styles: ["button{padding:var(--dsc-table-padding)}\n"],
187
+ dependencies: [{
188
+ kind: "directive",
189
+ type: NgTemplateOutlet,
190
+ selector: "[ngTemplateOutlet]",
191
+ inputs: [
192
+ "ngTemplateOutletContext",
193
+ "ngTemplateOutlet",
194
+ "ngTemplateOutletInjector"
195
+ ]
196
+ }],
197
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
198
+ });
199
+ };
200
+ i0.ɵɵngDeclareClassMetadata({
201
+ minVersion: "12.0.0",
202
+ version: "22.2.1",
203
+ ngImport: i0,
204
+ type: TableHeaderCell,
205
+ decorators: [{
206
+ type: Component,
207
+ args: [{
208
+ selector: "th[ksd-header-cell]",
209
+ changeDetection: ChangeDetectionStrategy.OnPush,
210
+ template: `
81
211
  @if (sort()) {
82
212
  <button
83
213
  type="button"
@@ -92,14 +222,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
92
222
  <ng-template #headerTitle>
93
223
  <ng-content />
94
224
  </ng-template>
95
- `, imports: [NgTemplateOutlet], host: {
96
- '[attr.aria-sort]': 'sort()',
97
- }, styles: ["button{padding:var(--dsc-table-padding)}\n"] }]
98
- }], propDecorators: { sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-sort", required: false }] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }] } });
99
-
100
- /**
101
- * Generated bundle index. Do not edit.
102
- */
103
-
225
+ `,
226
+ imports: [NgTemplateOutlet],
227
+ host: { "[attr.aria-sort]": "sort()" },
228
+ styles: ["button{padding:var(--dsc-table-padding)}\n"]
229
+ }]
230
+ }],
231
+ propDecorators: {
232
+ sort: [{
233
+ type: i0.Input,
234
+ args: [{
235
+ isSignal: true,
236
+ alias: "aria-sort",
237
+ required: false
238
+ }]
239
+ }],
240
+ sortChange: [{
241
+ type: i0.Output,
242
+ args: ["sortChange"]
243
+ }]
244
+ }
245
+ });
104
246
  export { Table, TableHeaderCell };
105
- //# sourceMappingURL=ks-digital-designsystem-angular-table.mjs.map
247
+
248
+ //# sourceMappingURL=ks-digital-designsystem-angular-table.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ks-digital-designsystem-angular-table.mjs","sources":["../../../../packages/angular/table/src/table.ts","../../../../packages/angular/table/src/table-header-cell.ts","../../../../packages/angular/table/src/ks-digital-designsystem-angular-table.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core'\n\n@Component({\n selector: 'table[ksd-table]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n host: {\n class: 'ds-table',\n '[attr.data-hover]': 'hover() || undefined',\n '[attr.data-border]': 'border() || undefined',\n '[attr.data-sticky-header]': 'stickyHeader() || undefined',\n '[attr.data-zebra]': 'zebra() || undefined',\n },\n})\nexport class Table {\n /**\n * Will give the table a hover effect on rows\n * @default false\n */\n readonly hover = input(false, {\n alias: 'data-hover',\n transform: booleanAttribute,\n })\n /**\n * Will give the table a rounded border\n * @default false\n */\n readonly border = input(false, {\n alias: 'data-border',\n transform: booleanAttribute,\n })\n /**\n * Will make the table header sticky\n * @default false\n */\n readonly stickyHeader = input(false, {\n alias: 'data-sticky-header',\n transform: booleanAttribute,\n })\n /**\n * Will give the table zebra striping\n * @default false\n */\n readonly zebra = input(false, {\n alias: 'data-zebra',\n transform: booleanAttribute,\n })\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core'\n@Component({\n selector: 'th[ksd-header-cell]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (sort()) {\n <button\n type=\"button\"\n (click)=\"sortChange.emit(); $event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"headerTitle\"></ng-container>\n </button>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTitle\"></ng-container>\n }\n\n <ng-template #headerTitle>\n <ng-content />\n </ng-template>\n `,\n imports: [NgTemplateOutlet],\n host: {\n '[attr.aria-sort]': 'sort()',\n },\n styles: `\n button {\n padding: var(--dsc-table-padding);\n }\n `,\n})\nexport class TableHeaderCell {\n /**\n * If 'none' | 'ascending' | 'descending' will add a button to the header cell and change aria-sort and icon\n * @default undefined\n */\n readonly sort = input<'none' | 'ascending' | 'descending'>(undefined, {\n alias: 'aria-sort',\n })\n /**\n * Emitted when the sort button is clicked\n * @emits void\n */\n readonly sortChange = output()\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ks-digital-designsystem-angular-table.mjs","names":[],"sources":["../../../../packages/angular/table/src/table.ts","../../../../packages/angular/table/src/table-header-cell.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core'\n\n@Component({\n selector: 'table[ksd-table]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n host: {\n class: 'ds-table',\n '[attr.data-hover]': 'hover() || undefined',\n '[attr.data-border]': 'border() || undefined',\n '[attr.data-sticky-header]': 'stickyHeader() || undefined',\n '[attr.data-zebra]': 'zebra() || undefined',\n },\n})\nexport class Table {\n /**\n * Will give the table a hover effect on rows\n * @default false\n */\n readonly hover = input(false, {\n alias: 'data-hover',\n transform: booleanAttribute,\n })\n /**\n * Will give the table a rounded border\n * @default false\n */\n readonly border = input(false, {\n alias: 'data-border',\n transform: booleanAttribute,\n })\n /**\n * Will make the table header sticky\n * @default false\n */\n readonly stickyHeader = input(false, {\n alias: 'data-sticky-header',\n transform: booleanAttribute,\n })\n /**\n * Will give the table zebra striping\n * @default false\n */\n readonly zebra = input(false, {\n alias: 'data-zebra',\n transform: booleanAttribute,\n })\n}\n","import { NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core'\n@Component({\n selector: 'th[ksd-header-cell]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (sort()) {\n <button\n type=\"button\"\n (click)=\"sortChange.emit(); $event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"headerTitle\"></ng-container>\n </button>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTitle\"></ng-container>\n }\n\n <ng-template #headerTitle>\n <ng-content />\n </ng-template>\n `,\n imports: [NgTemplateOutlet],\n host: {\n '[attr.aria-sort]': 'sort()',\n },\n styles: `\n button {\n padding: var(--dsc-table-padding);\n }\n `,\n})\nexport class TableHeaderCell {\n /**\n * If 'none' | 'ascending' | 'descending' will add a button to the header cell and change aria-sort and icon\n * @default undefined\n */\n readonly sort = input<'none' | 'ascending' | 'descending'>(undefined, {\n alias: 'aria-sort',\n })\n /**\n * Emitted when the sort button is clicked\n * @emits void\n */\n readonly sortChange = output()\n}\n"],"mappings":"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"}