@area8975/ui 0.2.2-dev.49 → 0.2.2-dev.50

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 (182) hide show
  1. package/README.md +3 -2
  2. package/fesm2022/area8975-ui-alert.mjs +113 -0
  3. package/fesm2022/area8975-ui-alert.mjs.map +1 -0
  4. package/fesm2022/area8975-ui-avatar.mjs +157 -0
  5. package/fesm2022/area8975-ui-avatar.mjs.map +1 -0
  6. package/fesm2022/area8975-ui-badge.mjs +116 -0
  7. package/fesm2022/area8975-ui-badge.mjs.map +1 -0
  8. package/fesm2022/area8975-ui-button.mjs +314 -0
  9. package/fesm2022/area8975-ui-button.mjs.map +1 -0
  10. package/fesm2022/area8975-ui-calendar.mjs +549 -0
  11. package/fesm2022/area8975-ui-calendar.mjs.map +1 -0
  12. package/fesm2022/area8975-ui-card-header.mjs +96 -0
  13. package/fesm2022/area8975-ui-card-header.mjs.map +1 -0
  14. package/fesm2022/area8975-ui-card.mjs +73 -0
  15. package/fesm2022/area8975-ui-card.mjs.map +1 -0
  16. package/fesm2022/area8975-ui-chart-palette.mjs +225 -0
  17. package/fesm2022/area8975-ui-chart-palette.mjs.map +1 -0
  18. package/fesm2022/area8975-ui-charts.mjs +2813 -0
  19. package/fesm2022/area8975-ui-charts.mjs.map +1 -0
  20. package/fesm2022/area8975-ui-checkbox.mjs +202 -0
  21. package/fesm2022/area8975-ui-checkbox.mjs.map +1 -0
  22. package/fesm2022/area8975-ui-colour.mjs +200 -0
  23. package/fesm2022/area8975-ui-colour.mjs.map +1 -0
  24. package/fesm2022/area8975-ui-container.mjs +40 -0
  25. package/fesm2022/area8975-ui-container.mjs.map +1 -0
  26. package/fesm2022/area8975-ui-counter.mjs +246 -0
  27. package/fesm2022/area8975-ui-counter.mjs.map +1 -0
  28. package/fesm2022/area8975-ui-date-range-picker.mjs +554 -0
  29. package/fesm2022/area8975-ui-date-range-picker.mjs.map +1 -0
  30. package/fesm2022/area8975-ui-datepicker.mjs +547 -0
  31. package/fesm2022/area8975-ui-datepicker.mjs.map +1 -0
  32. package/fesm2022/area8975-ui-disclosure.mjs +279 -0
  33. package/fesm2022/area8975-ui-disclosure.mjs.map +1 -0
  34. package/fesm2022/area8975-ui-drawer.mjs +106 -0
  35. package/fesm2022/area8975-ui-drawer.mjs.map +1 -0
  36. package/fesm2022/area8975-ui-dropdown-button.mjs +141 -0
  37. package/fesm2022/area8975-ui-dropdown-button.mjs.map +1 -0
  38. package/fesm2022/area8975-ui-dropdown-menu.mjs +96 -0
  39. package/fesm2022/area8975-ui-dropdown-menu.mjs.map +1 -0
  40. package/fesm2022/area8975-ui-dropdown.mjs +208 -0
  41. package/fesm2022/area8975-ui-dropdown.mjs.map +1 -0
  42. package/fesm2022/area8975-ui-dropzone.mjs +332 -0
  43. package/fesm2022/area8975-ui-dropzone.mjs.map +1 -0
  44. package/fesm2022/area8975-ui-field.mjs +191 -0
  45. package/fesm2022/area8975-ui-field.mjs.map +1 -0
  46. package/fesm2022/area8975-ui-file-input.mjs +340 -0
  47. package/fesm2022/area8975-ui-file-input.mjs.map +1 -0
  48. package/fesm2022/area8975-ui-file.mjs +47 -0
  49. package/fesm2022/area8975-ui-file.mjs.map +1 -0
  50. package/fesm2022/area8975-ui-format.mjs +70 -0
  51. package/fesm2022/area8975-ui-format.mjs.map +1 -0
  52. package/fesm2022/area8975-ui-input-addon.mjs +42 -0
  53. package/fesm2022/area8975-ui-input-addon.mjs.map +1 -0
  54. package/fesm2022/area8975-ui-input-group.mjs +86 -0
  55. package/fesm2022/area8975-ui-input-group.mjs.map +1 -0
  56. package/fesm2022/area8975-ui-input.mjs +682 -0
  57. package/fesm2022/area8975-ui-input.mjs.map +1 -0
  58. package/fesm2022/area8975-ui-kpi.mjs +167 -0
  59. package/fesm2022/area8975-ui-kpi.mjs.map +1 -0
  60. package/fesm2022/area8975-ui-layout.mjs +63 -0
  61. package/fesm2022/area8975-ui-layout.mjs.map +1 -0
  62. package/fesm2022/area8975-ui-loading.mjs +76 -0
  63. package/fesm2022/area8975-ui-loading.mjs.map +1 -0
  64. package/fesm2022/area8975-ui-modal-close-btn.mjs +89 -0
  65. package/fesm2022/area8975-ui-modal-close-btn.mjs.map +1 -0
  66. package/fesm2022/area8975-ui-modal.mjs +235 -0
  67. package/fesm2022/area8975-ui-modal.mjs.map +1 -0
  68. package/fesm2022/area8975-ui-money.mjs +230 -0
  69. package/fesm2022/area8975-ui-money.mjs.map +1 -0
  70. package/fesm2022/area8975-ui-overlay.mjs +317 -0
  71. package/fesm2022/area8975-ui-overlay.mjs.map +1 -0
  72. package/fesm2022/area8975-ui-pagination.mjs +152 -0
  73. package/fesm2022/area8975-ui-pagination.mjs.map +1 -0
  74. package/fesm2022/area8975-ui-private.mjs +63 -0
  75. package/fesm2022/area8975-ui-private.mjs.map +1 -0
  76. package/fesm2022/area8975-ui-progress.mjs +307 -0
  77. package/fesm2022/area8975-ui-progress.mjs.map +1 -0
  78. package/fesm2022/area8975-ui-radio.mjs +199 -0
  79. package/fesm2022/area8975-ui-radio.mjs.map +1 -0
  80. package/fesm2022/area8975-ui-rich-text-editor.mjs +778 -0
  81. package/fesm2022/area8975-ui-rich-text-editor.mjs.map +1 -0
  82. package/fesm2022/area8975-ui-search.mjs +266 -0
  83. package/fesm2022/area8975-ui-search.mjs.map +1 -0
  84. package/fesm2022/area8975-ui-segmented.mjs +118 -0
  85. package/fesm2022/area8975-ui-segmented.mjs.map +1 -0
  86. package/fesm2022/area8975-ui-select.mjs +926 -0
  87. package/fesm2022/area8975-ui-select.mjs.map +1 -0
  88. package/fesm2022/area8975-ui-sidebar-group.mjs +60 -0
  89. package/fesm2022/area8975-ui-sidebar-group.mjs.map +1 -0
  90. package/fesm2022/area8975-ui-sidebar-item.mjs +107 -0
  91. package/fesm2022/area8975-ui-sidebar-item.mjs.map +1 -0
  92. package/fesm2022/area8975-ui-sidebar.mjs +109 -0
  93. package/fesm2022/area8975-ui-sidebar.mjs.map +1 -0
  94. package/fesm2022/area8975-ui-skeleton.mjs +116 -0
  95. package/fesm2022/area8975-ui-skeleton.mjs.map +1 -0
  96. package/fesm2022/area8975-ui-stat.mjs +55 -0
  97. package/fesm2022/area8975-ui-stat.mjs.map +1 -0
  98. package/fesm2022/area8975-ui-switch.mjs +132 -0
  99. package/fesm2022/area8975-ui-switch.mjs.map +1 -0
  100. package/fesm2022/area8975-ui-tab.mjs +217 -0
  101. package/fesm2022/area8975-ui-tab.mjs.map +1 -0
  102. package/fesm2022/area8975-ui-table-filters.mjs +499 -0
  103. package/fesm2022/area8975-ui-table-filters.mjs.map +1 -0
  104. package/fesm2022/area8975-ui-table.mjs +1237 -0
  105. package/fesm2022/area8975-ui-table.mjs.map +1 -0
  106. package/fesm2022/area8975-ui-textarea.mjs +375 -0
  107. package/fesm2022/area8975-ui-textarea.mjs.map +1 -0
  108. package/fesm2022/area8975-ui-theme.mjs +246 -0
  109. package/fesm2022/area8975-ui-theme.mjs.map +1 -0
  110. package/fesm2022/area8975-ui-time-select.mjs +170 -0
  111. package/fesm2022/area8975-ui-time-select.mjs.map +1 -0
  112. package/fesm2022/area8975-ui-toast.mjs +269 -0
  113. package/fesm2022/area8975-ui-toast.mjs.map +1 -0
  114. package/fesm2022/area8975-ui-toaster.mjs +117 -0
  115. package/fesm2022/area8975-ui-toaster.mjs.map +1 -0
  116. package/fesm2022/area8975-ui-tooltip.mjs +196 -0
  117. package/fesm2022/area8975-ui-tooltip.mjs.map +1 -0
  118. package/fesm2022/area8975-ui-user-menu.mjs +186 -0
  119. package/fesm2022/area8975-ui-user-menu.mjs.map +1 -0
  120. package/fesm2022/area8975-ui.mjs +0 -16520
  121. package/package.json +237 -1
  122. package/types/area8975-ui-alert.d.ts +25 -0
  123. package/types/area8975-ui-avatar.d.ts +40 -0
  124. package/types/area8975-ui-badge.d.ts +31 -0
  125. package/types/area8975-ui-button.d.ts +129 -0
  126. package/types/area8975-ui-calendar.d.ts +177 -0
  127. package/types/area8975-ui-card-header.d.ts +28 -0
  128. package/types/area8975-ui-card.d.ts +18 -0
  129. package/types/area8975-ui-chart-palette.d.ts +176 -0
  130. package/types/area8975-ui-charts.d.ts +747 -0
  131. package/types/area8975-ui-checkbox.d.ts +61 -0
  132. package/types/area8975-ui-colour.d.ts +31 -0
  133. package/types/area8975-ui-container.d.ts +5 -0
  134. package/types/area8975-ui-counter.d.ts +43 -0
  135. package/types/area8975-ui-date-range-picker.d.ts +132 -0
  136. package/types/area8975-ui-datepicker.d.ts +124 -0
  137. package/types/area8975-ui-disclosure.d.ts +79 -0
  138. package/types/area8975-ui-drawer.d.ts +25 -0
  139. package/types/area8975-ui-dropdown-button.d.ts +32 -0
  140. package/types/area8975-ui-dropdown-menu.d.ts +25 -0
  141. package/types/area8975-ui-dropdown.d.ts +56 -0
  142. package/types/area8975-ui-dropzone.d.ts +96 -0
  143. package/types/area8975-ui-field.d.ts +72 -0
  144. package/types/area8975-ui-file-input.d.ts +72 -0
  145. package/types/area8975-ui-file.d.ts +21 -0
  146. package/types/area8975-ui-format.d.ts +37 -0
  147. package/types/area8975-ui-input-addon.d.ts +10 -0
  148. package/types/area8975-ui-input-group.d.ts +18 -0
  149. package/types/area8975-ui-input.d.ts +224 -0
  150. package/types/area8975-ui-kpi.d.ts +36 -0
  151. package/types/area8975-ui-layout.d.ts +7 -0
  152. package/types/area8975-ui-loading.d.ts +16 -0
  153. package/types/area8975-ui-modal-close-btn.d.ts +14 -0
  154. package/types/area8975-ui-modal.d.ts +45 -0
  155. package/types/area8975-ui-money.d.ts +77 -0
  156. package/types/area8975-ui-overlay.d.ts +75 -0
  157. package/types/area8975-ui-pagination.d.ts +27 -0
  158. package/types/area8975-ui-private.d.ts +20 -0
  159. package/types/area8975-ui-progress.d.ts +127 -0
  160. package/types/area8975-ui-radio.d.ts +61 -0
  161. package/types/area8975-ui-rich-text-editor.d.ts +165 -0
  162. package/types/area8975-ui-search.d.ts +56 -0
  163. package/types/area8975-ui-segmented.d.ts +41 -0
  164. package/types/area8975-ui-select.d.ts +293 -0
  165. package/types/area8975-ui-sidebar-group.d.ts +15 -0
  166. package/types/area8975-ui-sidebar-item.d.ts +20 -0
  167. package/types/area8975-ui-sidebar.d.ts +16 -0
  168. package/types/area8975-ui-skeleton.d.ts +35 -0
  169. package/types/area8975-ui-stat.d.ts +13 -0
  170. package/types/area8975-ui-switch.d.ts +32 -0
  171. package/types/area8975-ui-tab.d.ts +45 -0
  172. package/types/area8975-ui-table-filters.d.ts +138 -0
  173. package/types/area8975-ui-table.d.ts +371 -0
  174. package/types/area8975-ui-textarea.d.ts +126 -0
  175. package/types/area8975-ui-theme.d.ts +61 -0
  176. package/types/area8975-ui-time-select.d.ts +35 -0
  177. package/types/area8975-ui-toast.d.ts +78 -0
  178. package/types/area8975-ui-toaster.d.ts +23 -0
  179. package/types/area8975-ui-tooltip.d.ts +47 -0
  180. package/types/area8975-ui-user-menu.d.ts +39 -0
  181. package/types/area8975-ui.d.ts +1 -4546
  182. package/fesm2022/area8975-ui.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area8975-ui-input.mjs","names":[],"sources":["../../../projects/ui/input/input.component.ts","../../../projects/ui/input/input.component.html","../../../projects/ui/input/input.types.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n contentChild,\n input,\n model,\n output,\n signal,\n TemplateRef\n} from '@angular/core';\n\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { heroEye, heroEyeSlash } from '@ng-icons/heroicons/outline';\n\nimport {\n type InputAriaAutocomplete,\n type InputAriaHasPopup,\n type InputMode,\n type InputType,\n type InputValidation\n} from './input.types';\n\n\n@Component({\n selector: 'ui-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.css',\n host: { '[attr.id]': 'null' },\n imports: [NgTemplateOutlet, NgIcon],\n providers: [provideIcons({\n heroEyeSlash,\n heroEye\n })]\n})\nexport class UiInputComponent<ValueType = string> {\n readonly value = model.required<ValueType>();\n\n readonly classes = input<string>('');\n\n readonly type = input<InputType>('text');\n readonly id = input<string>('');\n readonly name = input<string>('');\n readonly placeholder = input<string>('');\n readonly autocomplete = input<string>('');\n readonly inputmode = input<InputMode | ''>('');\n\n readonly required = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /** true/false shows valid/invalid styling. null means not validated yet. */\n readonly validationState = model<InputValidation>(null);\n\n // these values can be strings or numbers depending on the input type\n readonly min = input<string | number>('');\n readonly max = input<string | number>('');\n readonly step = input<string | number>('');\n readonly pattern = input<string>('');\n readonly minlength = input<number | null>(null);\n readonly maxlength = input<number | null>(null);\n\n readonly autofocus = input(false, { transform: booleanAttribute });\n readonly spellcheck = input(true, { transform: booleanAttribute });\n\n /** With `type=\"password\"`, adds a button to show and hide what's been typed. */\n readonly revealable = input(false, { transform: booleanAttribute });\n\n readonly list = input<string>('');\n readonly ariaLabel = input<string>('');\n readonly describedBy = input<string>('');\n\n // for inputs that drive a popup, e.g. a select's search box or a datepicker\n // not \"role\", a static role attribute would also land on the host element\n readonly inputRole = input<string>('');\n readonly ariaExpanded = input<boolean | null>(null);\n readonly ariaControls = input<string>('');\n readonly ariaActiveDescendant = input<string | null>(null);\n readonly ariaAutocomplete = input<InputAriaAutocomplete | ''>('');\n readonly ariaHasPopup = input<InputAriaHasPopup | ''>('');\n\n readonly focused = output<FocusEvent>();\n readonly blurred = output<FocusEvent>();\n\n // Leading/Trialing elements that appear inside of the input.\n readonly leadingElement = contentChild<TemplateRef<unknown>>('leading');\n readonly trailingElement = contentChild<TemplateRef<unknown>>('trailing');\n\n protected readonly revealed = signal(false);\n\n protected readonly canReveal = computed(() =>\n this.revealable() && this.type() === 'password'\n );\n\n protected readonly shownType = computed<InputType>(() =>\n this.canReveal() && this.revealed() ? 'text' : this.type()\n );\n\n readonly generatedClasses = computed(() =>\n [\n 'ui-input',\n 'ui-text-body',\n this.classes()\n ]\n .filter(Boolean)\n .join(' ')\n );\n\n protected handleInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n this.value.set(this.parseValue(target));\n }\n\n protected handleFocus(event: FocusEvent): void {\n this.focused.emit(event);\n }\n\n protected handleBlur(event: FocusEvent): void {\n this.blurred.emit(event);\n }\n\n private parseValue(element: HTMLInputElement): ValueType {\n if (this.type() !== 'number') {\n return element.value as ValueType;\n }\n\n if (!element.value) {\n return null as ValueType;\n }\n\n return element.valueAsNumber as ValueType;\n }\n}\n","<ng-container *ngTemplateOutlet=\"leadingElement()\"></ng-container>\n\n<input\n [value]=\"value()\"\n [class]=\"generatedClasses()\"\n [type]=\"shownType()\"\n [attr.id]=\"id() || null\"\n [attr.name]=\"name() || null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.min]=\"min() === '' ? null : min()\"\n [attr.max]=\"max() === '' ? null : max()\"\n [attr.step]=\"step() === '' ? null : step()\"\n [attr.pattern]=\"pattern() || null\"\n [attr.inputmode]=\"inputmode() || null\"\n [attr.maxlength]=\"maxlength()\"\n [attr.minlength]=\"minlength()\"\n \n [attr.spellcheck]=\"spellcheck()\"\n [attr.list]=\"list() || null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-describedby]=\"describedBy() || null\"\n [attr.role]=\"inputRole() || null\"\n [attr.aria-expanded]=\"ariaExpanded()\"\n [attr.aria-controls]=\"ariaControls() || null\"\n [attr.aria-activedescendant]=\"ariaActiveDescendant()\"\n [attr.aria-autocomplete]=\"ariaAutocomplete() || null\"\n [attr.aria-haspopup]=\"ariaHasPopup() || null\"\n [attr.data-invalid]=\"validationState() === false ? '' : null\"\n [attr.data-valid]=\"validationState() === true ? '' : null\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n/>\n\n<ng-container *ngTemplateOutlet=\"trailingElement()\"></ng-container>\n\n@if (canReveal()) {\n <button\n type=\"button\"\n class=\"ui-input-reveal\"\n [attr.aria-label]=\"revealed() ? 'Hide password' : 'Show password'\"\n [attr.aria-pressed]=\"revealed()\"\n [disabled]=\"disabled()\"\n (click)=\"revealed.set(!revealed())\"\n >\n <ng-icon [name]=\"revealed() ? 'heroEyeSlash' : 'heroEye'\" size=\"18\" class=\"shrink-0\" />\n </button>\n}\n","/** Native type values ui-input supports. File/checkbox/radio/range need their own components. */\nexport const InputTypes = [\n 'text',\n 'email',\n 'tel',\n 'url',\n 'search',\n 'password',\n 'number',\n 'date',\n 'time',\n 'datetime-local',\n 'month',\n 'week',\n 'color'\n] as const;\n\n/** @see {@link InputTypes} */\nexport type InputType = typeof InputTypes[number];\n\n/** Native inputmode values, hinting at the virtual keyboard to show. */\nexport const InputModes = [\n 'none',\n 'text',\n 'decimal',\n 'numeric',\n 'tel',\n 'search',\n 'email',\n 'url'\n] as const;\n\n/** @see {@link InputModes} */\nexport type InputMode = typeof InputModes[number];\n\n/** true is valid, false is invalid, null is not yet validated. */\nexport type InputValidation = boolean | null;\n\n/** Native aria-autocomplete values, for inputs that suggest as you type. */\nexport const InputAriaAutocompletes = ['none', 'inline', 'list', 'both'] as const;\n\n/** @see {@link InputAriaAutocompletes} */\nexport type InputAriaAutocomplete = typeof InputAriaAutocompletes[number];\n\n/** Native aria-haspopup values, for inputs that open something. */\nexport const InputAriaHasPopups = ['listbox', 'dialog', 'grid', 'menu', 'tree'] as const;\n\n/** @see {@link InputAriaHasPopups} */\nexport type InputAriaHasPopup = typeof InputAriaHasPopups[number];\n"],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Component, input } from "@angular/core";
3
+ import { UiCardComponent } from "@area8975/ui/card";
4
+ import { UiTooltipComponent } from "@area8975/ui/tooltip";
5
+ import { NgIcon, provideIcons } from "@ng-icons/core";
6
+ import { heroQuestionMarkCircle } from "@ng-icons/heroicons/outline";
7
+ var UiKpiComponent = class UiKpiComponent {
8
+ label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
9
+ value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
10
+ hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
11
+ icon = input(...ngDevMode ? [void 0, { debugName: "icon" }] : /* istanbul ignore next */ []);
12
+ iconPosition = input("left", ...ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []);
13
+ static ɵfac = i0.ɵɵngDeclareFactory({
14
+ minVersion: "12.0.0",
15
+ version: "22.2.1",
16
+ ngImport: i0,
17
+ type: UiKpiComponent,
18
+ deps: [],
19
+ target: i0.ɵɵFactoryTarget.Component
20
+ });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({
22
+ minVersion: "17.0.0",
23
+ version: "22.2.1",
24
+ type: UiKpiComponent,
25
+ isStandalone: true,
26
+ selector: "ui-kpi",
27
+ inputs: {
28
+ label: {
29
+ classPropertyName: "label",
30
+ publicName: "label",
31
+ isSignal: true,
32
+ isRequired: false,
33
+ transformFunction: null
34
+ },
35
+ value: {
36
+ classPropertyName: "value",
37
+ publicName: "value",
38
+ isSignal: true,
39
+ isRequired: false,
40
+ transformFunction: null
41
+ },
42
+ hint: {
43
+ classPropertyName: "hint",
44
+ publicName: "hint",
45
+ isSignal: true,
46
+ isRequired: false,
47
+ transformFunction: null
48
+ },
49
+ icon: {
50
+ classPropertyName: "icon",
51
+ publicName: "icon",
52
+ isSignal: true,
53
+ isRequired: false,
54
+ transformFunction: null
55
+ },
56
+ iconPosition: {
57
+ classPropertyName: "iconPosition",
58
+ publicName: "iconPosition",
59
+ isSignal: true,
60
+ isRequired: false,
61
+ transformFunction: null
62
+ }
63
+ },
64
+ host: { classAttribute: "block" },
65
+ providers: [provideIcons({ heroQuestionMarkCircle })],
66
+ ngImport: i0,
67
+ template: "<ui-card radius=\"xl\" class=\"h-full\">\n <div class=\"flex gap-x-4 p-4 md:p-5\">\n @if (icon() && iconPosition() === 'left') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n\n <div class=\"grow\">\n <div class=\"flex items-center gap-x-2 text-muted-foreground-2\">\n <span class=\"font-semibold ui-text-h4 text-sm uppercase\">\n {{ label() }}\n </span>\n\n @if (hint()) {\n <ui-tooltip\n [text]=\"hint()\"\n placement=\"top\"\n trigger=\"hover\"\n >\n <ng-icon name=\"heroQuestionMarkCircle\" size=\"18\" />\n </ui-tooltip>\n }\n </div>\n\n <div class=\"flex flex-wrap items-center gap-2 mt-1\">\n <h3 class=\"font-semibold text-foreground ui-text-h2\">\n <!-- falls back to the plain value when nothing is projected -->\n <ng-content select=\"[kpi-value]\">{{ value() }}</ng-content>\n </h3>\n <ng-content select=\"[kpi-badge]\"></ng-content>\n </div>\n </div>\n\n @if (icon() && iconPosition() === 'right') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n </div>\n</ui-card>\n",
68
+ dependencies: [
69
+ {
70
+ kind: "component",
71
+ type: UiCardComponent,
72
+ selector: "ui-card",
73
+ inputs: ["radius"]
74
+ },
75
+ {
76
+ kind: "component",
77
+ type: NgIcon,
78
+ selector: "ng-icon",
79
+ inputs: [
80
+ "name",
81
+ "svg",
82
+ "size",
83
+ "strokeWidth",
84
+ "color"
85
+ ]
86
+ },
87
+ {
88
+ kind: "component",
89
+ type: UiTooltipComponent,
90
+ selector: "ui-tooltip",
91
+ inputs: [
92
+ "text",
93
+ "placement",
94
+ "trigger",
95
+ "classes",
96
+ "isOpen"
97
+ ],
98
+ exportAs: ["uiTooltip"]
99
+ }
100
+ ]
101
+ });
102
+ };
103
+ i0.ɵɵngDeclareClassMetadata({
104
+ minVersion: "12.0.0",
105
+ version: "22.2.1",
106
+ ngImport: i0,
107
+ type: UiKpiComponent,
108
+ decorators: [{
109
+ type: Component,
110
+ args: [{
111
+ selector: "ui-kpi",
112
+ imports: [
113
+ UiCardComponent,
114
+ NgIcon,
115
+ UiTooltipComponent
116
+ ],
117
+ host: { class: "block" },
118
+ providers: [provideIcons({ heroQuestionMarkCircle })],
119
+ template: "<ui-card radius=\"xl\" class=\"h-full\">\n <div class=\"flex gap-x-4 p-4 md:p-5\">\n @if (icon() && iconPosition() === 'left') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n\n <div class=\"grow\">\n <div class=\"flex items-center gap-x-2 text-muted-foreground-2\">\n <span class=\"font-semibold ui-text-h4 text-sm uppercase\">\n {{ label() }}\n </span>\n\n @if (hint()) {\n <ui-tooltip\n [text]=\"hint()\"\n placement=\"top\"\n trigger=\"hover\"\n >\n <ng-icon name=\"heroQuestionMarkCircle\" size=\"18\" />\n </ui-tooltip>\n }\n </div>\n\n <div class=\"flex flex-wrap items-center gap-2 mt-1\">\n <h3 class=\"font-semibold text-foreground ui-text-h2\">\n <!-- falls back to the plain value when nothing is projected -->\n <ng-content select=\"[kpi-value]\">{{ value() }}</ng-content>\n </h3>\n <ng-content select=\"[kpi-badge]\"></ng-content>\n </div>\n </div>\n\n @if (icon() && iconPosition() === 'right') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n </div>\n</ui-card>\n"
120
+ }]
121
+ }],
122
+ propDecorators: {
123
+ label: [{
124
+ type: i0.Input,
125
+ args: [{
126
+ isSignal: true,
127
+ alias: "label",
128
+ required: false
129
+ }]
130
+ }],
131
+ value: [{
132
+ type: i0.Input,
133
+ args: [{
134
+ isSignal: true,
135
+ alias: "value",
136
+ required: false
137
+ }]
138
+ }],
139
+ hint: [{
140
+ type: i0.Input,
141
+ args: [{
142
+ isSignal: true,
143
+ alias: "hint",
144
+ required: false
145
+ }]
146
+ }],
147
+ icon: [{
148
+ type: i0.Input,
149
+ args: [{
150
+ isSignal: true,
151
+ alias: "icon",
152
+ required: false
153
+ }]
154
+ }],
155
+ iconPosition: [{
156
+ type: i0.Input,
157
+ args: [{
158
+ isSignal: true,
159
+ alias: "iconPosition",
160
+ required: false
161
+ }]
162
+ }]
163
+ }
164
+ });
165
+ export { UiKpiComponent };
166
+
167
+ //# sourceMappingURL=area8975-ui-kpi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area8975-ui-kpi.mjs","names":[],"sources":["../../../projects/ui/kpi/kpi.component.ts","../../../projects/ui/kpi/kpi.component.html"],"sourcesContent":["import { Component, input } from '@angular/core';\n\nimport { UiCardComponent } from '@area8975/ui/card';\nimport { UiTooltipComponent } from '@area8975/ui/tooltip';\nimport { IconName, NgIcon, provideIcons } from '@ng-icons/core';\nimport { heroQuestionMarkCircle } from '@ng-icons/heroicons/outline';\n\n\n@Component({\n selector: 'ui-kpi',\n templateUrl: './kpi.component.html',\n imports: [UiCardComponent, NgIcon, UiTooltipComponent],\n host: { class: 'block' },\n providers: [provideIcons({ heroQuestionMarkCircle })]\n})\nexport class UiKpiComponent {\n readonly label = input<string>('');\n readonly value = input<string>('');\n readonly hint = input<string>('');\n readonly icon = input<IconName>();\n readonly iconPosition = input<'left' | 'right'>('left');\n}\n","<ui-card radius=\"xl\" class=\"h-full\">\n <div class=\"flex gap-x-4 p-4 md:p-5\">\n @if (icon() && iconPosition() === 'left') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n\n <div class=\"grow\">\n <div class=\"flex items-center gap-x-2 text-muted-foreground-2\">\n <span class=\"font-semibold ui-text-h4 text-sm uppercase\">\n {{ label() }}\n </span>\n\n @if (hint()) {\n <ui-tooltip\n [text]=\"hint()\"\n placement=\"top\"\n trigger=\"hover\"\n >\n <ng-icon name=\"heroQuestionMarkCircle\" size=\"18\" />\n </ui-tooltip>\n }\n </div>\n\n <div class=\"flex flex-wrap items-center gap-2 mt-1\">\n <h3 class=\"font-semibold text-foreground ui-text-h2\">\n <!-- falls back to the plain value when nothing is projected -->\n <ng-content select=\"[kpi-value]\">{{ value() }}</ng-content>\n </h3>\n <ng-content select=\"[kpi-badge]\"></ng-content>\n </div>\n </div>\n\n @if (icon() && iconPosition() === 'right') {\n <div class=\"flex justify-center items-center bg-surface rounded-lg size-12 shrink-0\">\n <ng-icon\n [name]=\"icon()\"\n size=\"32\"\n class=\"size-8 text-muted-foreground-2 shrink-0\"\n strokeWidth=\"1.5\"\n />\n </div>\n }\n </div>\n</ui-card>\n"],"mappings":";;;;;;AAeA,IAAa,iBAAb,MAAa,eAAc;CACd,QAAQ,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACzB,QAAQ,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACzB,OAAO,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,OAAO,MAAiB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,eAAe,MAAwB,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAL9C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAc,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,gBAAA,QAAA;EAAA,WAFZ,CAAC,aAAa,EAAE,uBAAsB,CAAE,CAAC;EAAC,UAAA;EAAA,UCbzD;EAmDA,cAAA;GAAA;IAAA,MAAA;IAAA,MDxCc;IAAe,UAAA;IAAA,QAAA,CAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAM,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAkB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,WAAA;GAAA;EAAA;CAAA,CAAA;;AAI5C,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAP1B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAQ,SAET;IAAC;IAAiB;IAAQ;GAAkB;GAAC,MAChD,EAAE,OAAO,QAAO;GAAE,WACb,CAAC,aAAa,EAAE,uBAAsB,CAAE,CAAC;GAAC,UAAA;EAAA,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { NgTemplateOutlet } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, contentChild } from "@angular/core";
4
+ var UiLayoutComponent = class UiLayoutComponent {
5
+ sidebar = contentChild("sidebar", ...ngDevMode ? [{ debugName: "sidebar" }] : /* istanbul ignore next */ []);
6
+ static ɵfac = i0.ɵɵngDeclareFactory({
7
+ minVersion: "12.0.0",
8
+ version: "22.2.1",
9
+ ngImport: i0,
10
+ type: UiLayoutComponent,
11
+ deps: [],
12
+ target: i0.ɵɵFactoryTarget.Component
13
+ });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({
15
+ minVersion: "17.2.0",
16
+ version: "22.2.1",
17
+ type: UiLayoutComponent,
18
+ isStandalone: true,
19
+ selector: "ui-layout",
20
+ queries: [{
21
+ propertyName: "sidebar",
22
+ first: true,
23
+ predicate: ["sidebar"],
24
+ descendants: true,
25
+ isSignal: true
26
+ }],
27
+ ngImport: i0,
28
+ template: "<div class=\"shrink-0\">\n <ng-container *ngTemplateOutlet=\"sidebar()\" />\n</div>\n\n<main class=\"relative min-w-0 overflow-y-auto grow\">\n <ng-content />\n</main>\n",
29
+ styles: [":host{display:flex;height:100vh;width:100vw}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"],
30
+ dependencies: [{
31
+ kind: "directive",
32
+ type: NgTemplateOutlet,
33
+ selector: "[ngTemplateOutlet]",
34
+ inputs: [
35
+ "ngTemplateOutletContext",
36
+ "ngTemplateOutlet",
37
+ "ngTemplateOutletInjector"
38
+ ]
39
+ }]
40
+ });
41
+ };
42
+ i0.ɵɵngDeclareClassMetadata({
43
+ minVersion: "12.0.0",
44
+ version: "22.2.1",
45
+ ngImport: i0,
46
+ type: UiLayoutComponent,
47
+ decorators: [{
48
+ type: Component,
49
+ args: [{
50
+ selector: "ui-layout",
51
+ imports: [NgTemplateOutlet],
52
+ template: "<div class=\"shrink-0\">\n <ng-container *ngTemplateOutlet=\"sidebar()\" />\n</div>\n\n<main class=\"relative min-w-0 overflow-y-auto grow\">\n <ng-content />\n</main>\n",
53
+ styles: [":host{display:flex;height:100vh;width:100vw}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
54
+ }]
55
+ }],
56
+ propDecorators: { sidebar: [{
57
+ type: i0.ContentChild,
58
+ args: ["sidebar", { isSignal: true }]
59
+ }] }
60
+ });
61
+ export { UiLayoutComponent };
62
+
63
+ //# sourceMappingURL=area8975-ui-layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area8975-ui-layout.mjs","names":[],"sources":["../../../projects/ui/layout/layout.component.ts","../../../projects/ui/layout/layout.component.html"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChild, TemplateRef } from '@angular/core';\n\n\n@Component({\n selector: 'ui-layout',\n templateUrl: './layout.component.html',\n styleUrl: './layout.component.css',\n imports: [NgTemplateOutlet]\n})\nexport class UiLayoutComponent {\n readonly sidebar = contentChild<TemplateRef<unknown>>('sidebar');\n}\n","<div class=\"shrink-0\">\n <ng-container *ngTemplateOutlet=\"sidebar()\" />\n</div>\n\n<main class=\"relative min-w-0 overflow-y-auto grow\">\n <ng-content />\n</main>\n"],"mappings":";;;AAUA,IAAa,oBAAb,MAAa,kBAAiB;CACjB,UAAU,aAAmC,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CADvD,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,SAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,SAAA;GAAA,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UCV9B;EAOA,QAAA,CAAA,mHAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDCc;GAAgB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;GAAA;EAAA,CAAA;CAAA,CAAA;;AAEjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAN7B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAW,SAGZ,CAAC,gBAAgB;GAAC,UAAA;GAAA,QAAA,CAAA,mHAAA;EAAA,CAAA;CAG2B,CAAA;CAAA,gBAAA,EAAA,SAAA,CAAA;EAAA,MAAA,GAAA;EAAA,MAAA,CAAA,WAAS,EAAA,UAAA,KAAA,CAAA;CAAA,CAAA,EAAA;AAAA,CAAA"}
@@ -0,0 +1,76 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Component, computed, input } from "@angular/core";
3
+ const TEXT_TYPES = [
4
+ "blinking-caret",
5
+ "shimmer-text",
6
+ "loading-dots"
7
+ ];
8
+ var UiLoadingComponent = class UiLoadingComponent {
9
+ type = input("spinner", ...ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []);
10
+ hasText = computed(() => TEXT_TYPES.includes(this.type()), ...ngDevMode ? [{ debugName: "hasText" }] : /* istanbul ignore next */ []);
11
+ throbberSpokes = Array.from({ length: 12 }, (_, i) => i);
12
+ static ɵfac = i0.ɵɵngDeclareFactory({
13
+ minVersion: "12.0.0",
14
+ version: "22.2.1",
15
+ ngImport: i0,
16
+ type: UiLoadingComponent,
17
+ deps: [],
18
+ target: i0.ɵɵFactoryTarget.Component
19
+ });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({
21
+ minVersion: "17.0.0",
22
+ version: "22.2.1",
23
+ type: UiLoadingComponent,
24
+ isStandalone: true,
25
+ selector: "ui-loading",
26
+ inputs: { type: {
27
+ classPropertyName: "type",
28
+ publicName: "type",
29
+ isSignal: true,
30
+ isRequired: false,
31
+ transformFunction: null
32
+ } },
33
+ ngImport: i0,
34
+ template: "<div class=\"ui-loading\" role=\"status\">\n @switch (type()) {\n @case ('throbber') {\n <svg\n class=\"ui-loading--throbber\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n @for (i of throbberSpokes; track i) {\n <line\n x1=\"12\"\n y1=\"2.5\"\n x2=\"12\"\n y2=\"7\"\n [attr.transform]=\"'rotate(' + i * (360 / throbberSpokes.length) + ' 12 12)'\"\n [style.animation-delay.s]=\"i / throbberSpokes.length - 1\"\n />\n }\n </svg>\n }\n @case ('pulse-ring') {\n <span\n class=\"ui-loading--pulse-ring ui-loading--pulse\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('pulse-dot') {\n <span\n class=\"ui-loading--pulse ui-loading--pulse-dot\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('wave') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('equaliser') {\n <span\n class=\"ui-loading--row ui-loading--stagger ui-loading--bars\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('terminal') {\n <span class=\"ui-loading--prompt\" aria-hidden=\"true\">&gt;</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('blinking-caret') {\n <span>Loading</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('shimmer-text') {\n <span class=\"ui-loading--shimmer\">Loading</span>\n }\n @case ('loading-dots') {\n <span>Loading</span>\n <span\n class=\"ui-loading--text-dots ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--text-dot\">.</span>\n }\n </span>\n }\n @case ('bouncing-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-bounce\"></span>\n }\n </span>\n }\n @case ('fading-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-fade\"></span>\n }\n </span>\n }\n @default {\n <span class=\"ui-loading--spinner\" aria-hidden=\"true\"></span>\n }\n }\n\n @if (!hasText()) {\n <span class=\"sr-only\">Loading</span>\n }\n</div>\n",
35
+ styles: ["@layer properties;.ui-loading{display:inline-flex;align-items:center;column-gap:calc(var(--spacing, .25rem) * 2);--tw-leading: 1;line-height:1}.ui-loading--row{display:inline-flex;height:1em;align-items:center;column-gap:.2em}.ui-loading--spinner{display:inline-block;width:1em;height:1em;border-radius:var(--radius-full, calc(infinity * 1px));border-style:var(--tw-border-style);border-width:.15em;border-color:currentcolor;border-top-color:currentcolor;animation:ui-loading-spin .8s linear infinite}@supports (color: color-mix(in lab,red,red)){.ui-loading--spinner{border-color:color-mix(in oklab,currentcolor 20%,transparent)}}.ui-loading--throbber{width:1em;height:1em}.ui-loading--throbber line{stroke:currentColor;stroke-width:2;stroke-linecap:round;animation:ui-loading-spoke 1s linear infinite}.ui-loading--pulse{position:relative;display:inline-block;width:1em;height:1em}.ui-loading--pulse:before,.ui-loading--pulse:after{position:absolute;inset:0;border-radius:var(--radius-full, calc(infinity * 1px));content:\"\"}.ui-loading--pulse-ring:before,.ui-loading--pulse-ring:after{border-style:var(--tw-border-style);border-width:.12em;border-color:currentcolor}.ui-loading--pulse-dot:before,.ui-loading--pulse-dot:after{background-color:currentcolor}.ui-loading--pulse-dot:before{inset:.25em}.ui-loading--pulse:after{animation:ui-loading-echo 1.4s ease-out infinite}.ui-loading--bar{height:100%;width:.15em;border-radius:var(--radius-full, calc(infinity * 1px));background-color:currentcolor;animation:ui-loading-stretch 1s ease-in-out infinite}.ui-loading--bars{align-items:flex-end}.ui-loading--bars>.ui-loading--bar{transform-origin:bottom}.ui-loading--prompt{font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace)}.ui-loading--caret{margin-inline-start:calc(var(--spacing, .25rem) * -1.5);height:1em;width:.5em;background-color:currentcolor;animation:ui-loading-blink 1s steps(1) infinite}.ui-loading--prompt+.ui-loading--caret{margin-inline-start:0px}.ui-loading--shimmer{-webkit-background-clip:text;background-clip:text;--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-text-fill-color:transparent;background-image:linear-gradient(90deg,currentColor 35%,currentColor 50%,currentColor 65%);background-size:250% 100%;animation:ui-loading-shimmer 1.6s linear infinite}@supports (color: color-mix(in lab,red,red)){.ui-loading--shimmer{background-image:linear-gradient(90deg,color-mix(in oklab,currentColor 35%,transparent) 35%,currentColor 50%,color-mix(in oklab,currentColor 35%,transparent) 65%)}}.ui-loading--text-dots{margin-inline-start:calc(var(--spacing, .25rem) * -2)}.ui-loading--text-dot{display:inline-block;animation:ui-loading-bounce 1.2s ease-in-out infinite}.ui-loading--dot{width:.3em;height:.3em;border-radius:var(--radius-full, calc(infinity * 1px));background-color:currentcolor}.ui-loading--dot-bounce{opacity:60%;animation:ui-loading-bounce 1.2s ease-in-out infinite}.ui-loading--dot-fade{animation:ui-loading-fade 1.2s ease-in-out infinite}.ui-loading--stagger>:nth-child(2){animation-delay:.15s}.ui-loading--stagger>:nth-child(3){animation-delay:.3s}.ui-loading--stagger>:nth-child(4){animation-delay:.45s}.ui-loading--stagger>:nth-child(5){animation-delay:.6s}@keyframes ui-loading-spin{to{transform:rotate(360deg)}}@keyframes ui-loading-spoke{0%{opacity:1}to{opacity:.15}}@keyframes ui-loading-echo{0%{transform:scale(1);opacity:.6}to{transform:scale(2);opacity:0}}@keyframes ui-loading-stretch{0%,60%,to{transform:scaleY(.3)}30%{transform:scaleY(1)}}@keyframes ui-loading-bounce{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-.25em)}}@keyframes ui-loading-blink{0%{opacity:1}50%{opacity:0}}@keyframes ui-loading-shimmer{0%{background-position:100% 0}to{background-position:0 0}}@keyframes ui-loading-fade{0%,to{opacity:.25}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.ui-loading *,.ui-loading *:before,.ui-loading *:after{animation-duration:3s!important}}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
36
+ });
37
+ };
38
+ i0.ɵɵngDeclareClassMetadata({
39
+ minVersion: "12.0.0",
40
+ version: "22.2.1",
41
+ ngImport: i0,
42
+ type: UiLoadingComponent,
43
+ decorators: [{
44
+ type: Component,
45
+ args: [{
46
+ selector: "ui-loading",
47
+ template: "<div class=\"ui-loading\" role=\"status\">\n @switch (type()) {\n @case ('throbber') {\n <svg\n class=\"ui-loading--throbber\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n @for (i of throbberSpokes; track i) {\n <line\n x1=\"12\"\n y1=\"2.5\"\n x2=\"12\"\n y2=\"7\"\n [attr.transform]=\"'rotate(' + i * (360 / throbberSpokes.length) + ' 12 12)'\"\n [style.animation-delay.s]=\"i / throbberSpokes.length - 1\"\n />\n }\n </svg>\n }\n @case ('pulse-ring') {\n <span\n class=\"ui-loading--pulse-ring ui-loading--pulse\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('pulse-dot') {\n <span\n class=\"ui-loading--pulse ui-loading--pulse-dot\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('wave') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('equaliser') {\n <span\n class=\"ui-loading--row ui-loading--stagger ui-loading--bars\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('terminal') {\n <span class=\"ui-loading--prompt\" aria-hidden=\"true\">&gt;</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('blinking-caret') {\n <span>Loading</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('shimmer-text') {\n <span class=\"ui-loading--shimmer\">Loading</span>\n }\n @case ('loading-dots') {\n <span>Loading</span>\n <span\n class=\"ui-loading--text-dots ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--text-dot\">.</span>\n }\n </span>\n }\n @case ('bouncing-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-bounce\"></span>\n }\n </span>\n }\n @case ('fading-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-fade\"></span>\n }\n </span>\n }\n @default {\n <span class=\"ui-loading--spinner\" aria-hidden=\"true\"></span>\n }\n }\n\n @if (!hasText()) {\n <span class=\"sr-only\">Loading</span>\n }\n</div>\n",
48
+ styles: ["@layer properties;.ui-loading{display:inline-flex;align-items:center;column-gap:calc(var(--spacing, .25rem) * 2);--tw-leading: 1;line-height:1}.ui-loading--row{display:inline-flex;height:1em;align-items:center;column-gap:.2em}.ui-loading--spinner{display:inline-block;width:1em;height:1em;border-radius:var(--radius-full, calc(infinity * 1px));border-style:var(--tw-border-style);border-width:.15em;border-color:currentcolor;border-top-color:currentcolor;animation:ui-loading-spin .8s linear infinite}@supports (color: color-mix(in lab,red,red)){.ui-loading--spinner{border-color:color-mix(in oklab,currentcolor 20%,transparent)}}.ui-loading--throbber{width:1em;height:1em}.ui-loading--throbber line{stroke:currentColor;stroke-width:2;stroke-linecap:round;animation:ui-loading-spoke 1s linear infinite}.ui-loading--pulse{position:relative;display:inline-block;width:1em;height:1em}.ui-loading--pulse:before,.ui-loading--pulse:after{position:absolute;inset:0;border-radius:var(--radius-full, calc(infinity * 1px));content:\"\"}.ui-loading--pulse-ring:before,.ui-loading--pulse-ring:after{border-style:var(--tw-border-style);border-width:.12em;border-color:currentcolor}.ui-loading--pulse-dot:before,.ui-loading--pulse-dot:after{background-color:currentcolor}.ui-loading--pulse-dot:before{inset:.25em}.ui-loading--pulse:after{animation:ui-loading-echo 1.4s ease-out infinite}.ui-loading--bar{height:100%;width:.15em;border-radius:var(--radius-full, calc(infinity * 1px));background-color:currentcolor;animation:ui-loading-stretch 1s ease-in-out infinite}.ui-loading--bars{align-items:flex-end}.ui-loading--bars>.ui-loading--bar{transform-origin:bottom}.ui-loading--prompt{font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace)}.ui-loading--caret{margin-inline-start:calc(var(--spacing, .25rem) * -1.5);height:1em;width:.5em;background-color:currentcolor;animation:ui-loading-blink 1s steps(1) infinite}.ui-loading--prompt+.ui-loading--caret{margin-inline-start:0px}.ui-loading--shimmer{-webkit-background-clip:text;background-clip:text;--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-text-fill-color:transparent;background-image:linear-gradient(90deg,currentColor 35%,currentColor 50%,currentColor 65%);background-size:250% 100%;animation:ui-loading-shimmer 1.6s linear infinite}@supports (color: color-mix(in lab,red,red)){.ui-loading--shimmer{background-image:linear-gradient(90deg,color-mix(in oklab,currentColor 35%,transparent) 35%,currentColor 50%,color-mix(in oklab,currentColor 35%,transparent) 65%)}}.ui-loading--text-dots{margin-inline-start:calc(var(--spacing, .25rem) * -2)}.ui-loading--text-dot{display:inline-block;animation:ui-loading-bounce 1.2s ease-in-out infinite}.ui-loading--dot{width:.3em;height:.3em;border-radius:var(--radius-full, calc(infinity * 1px));background-color:currentcolor}.ui-loading--dot-bounce{opacity:60%;animation:ui-loading-bounce 1.2s ease-in-out infinite}.ui-loading--dot-fade{animation:ui-loading-fade 1.2s ease-in-out infinite}.ui-loading--stagger>:nth-child(2){animation-delay:.15s}.ui-loading--stagger>:nth-child(3){animation-delay:.3s}.ui-loading--stagger>:nth-child(4){animation-delay:.45s}.ui-loading--stagger>:nth-child(5){animation-delay:.6s}@keyframes ui-loading-spin{to{transform:rotate(360deg)}}@keyframes ui-loading-spoke{0%{opacity:1}to{opacity:.15}}@keyframes ui-loading-echo{0%{transform:scale(1);opacity:.6}to{transform:scale(2);opacity:0}}@keyframes ui-loading-stretch{0%,60%,to{transform:scaleY(.3)}30%{transform:scaleY(1)}}@keyframes ui-loading-bounce{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-.25em)}}@keyframes ui-loading-blink{0%{opacity:1}50%{opacity:0}}@keyframes ui-loading-shimmer{0%{background-position:100% 0}to{background-position:0 0}}@keyframes ui-loading-fade{0%,to{opacity:.25}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.ui-loading *,.ui-loading *:before,.ui-loading *:after{animation-duration:3s!important}}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
49
+ }]
50
+ }],
51
+ propDecorators: { type: [{
52
+ type: i0.Input,
53
+ args: [{
54
+ isSignal: true,
55
+ alias: "type",
56
+ required: false
57
+ }]
58
+ }] }
59
+ });
60
+ const UI_LOADING_TYPES = [
61
+ "spinner",
62
+ "throbber",
63
+ "pulse-ring",
64
+ "pulse-dot",
65
+ "wave",
66
+ "equaliser",
67
+ "terminal",
68
+ "blinking-caret",
69
+ "shimmer-text",
70
+ "loading-dots",
71
+ "bouncing-dots",
72
+ "fading-dots"
73
+ ];
74
+ export { UI_LOADING_TYPES, UiLoadingComponent };
75
+
76
+ //# sourceMappingURL=area8975-ui-loading.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area8975-ui-loading.mjs","names":[],"sources":["../../../projects/ui/loading/loading.component.ts","../../../projects/ui/loading/loading.component.html","../../../projects/ui/loading/loading.types.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { UiLoadingType } from './loading.types';\n\n\nconst TEXT_TYPES: UiLoadingType[] = [\n 'blinking-caret',\n 'shimmer-text',\n 'loading-dots'\n];\n\n@Component({\n selector: 'ui-loading',\n templateUrl: './loading.component.html',\n styleUrl: './loading.component.css'\n})\nexport class UiLoadingComponent {\n readonly type = input<UiLoadingType>('spinner');\n\n protected readonly hasText = computed(() =>\n TEXT_TYPES.includes(this.type())\n );\n\n protected readonly throbberSpokes = Array.from({ length: 12 }, (_, i) => i);\n}\n","<div class=\"ui-loading\" role=\"status\">\n @switch (type()) {\n @case ('throbber') {\n <svg\n class=\"ui-loading--throbber\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n @for (i of throbberSpokes; track i) {\n <line\n x1=\"12\"\n y1=\"2.5\"\n x2=\"12\"\n y2=\"7\"\n [attr.transform]=\"'rotate(' + i * (360 / throbberSpokes.length) + ' 12 12)'\"\n [style.animation-delay.s]=\"i / throbberSpokes.length - 1\"\n />\n }\n </svg>\n }\n @case ('pulse-ring') {\n <span\n class=\"ui-loading--pulse-ring ui-loading--pulse\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('pulse-dot') {\n <span\n class=\"ui-loading--pulse ui-loading--pulse-dot\"\n aria-hidden=\"true\"\n ></span>\n }\n @case ('wave') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('equaliser') {\n <span\n class=\"ui-loading--row ui-loading--stagger ui-loading--bars\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <span class=\"ui-loading--bar\"></span>\n }\n </span>\n }\n @case ('terminal') {\n <span class=\"ui-loading--prompt\" aria-hidden=\"true\">&gt;</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('blinking-caret') {\n <span>Loading</span>\n <span class=\"ui-loading--caret\" aria-hidden=\"true\"></span>\n }\n @case ('shimmer-text') {\n <span class=\"ui-loading--shimmer\">Loading</span>\n }\n @case ('loading-dots') {\n <span>Loading</span>\n <span\n class=\"ui-loading--text-dots ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--text-dot\">.</span>\n }\n </span>\n }\n @case ('bouncing-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-bounce\"></span>\n }\n </span>\n }\n @case ('fading-dots') {\n <span\n class=\"ui-loading--row ui-loading--stagger\"\n aria-hidden=\"true\"\n >\n @for (i of [1, 2, 3]; track i) {\n <span class=\"ui-loading--dot ui-loading--dot-fade\"></span>\n }\n </span>\n }\n @default {\n <span class=\"ui-loading--spinner\" aria-hidden=\"true\"></span>\n }\n }\n\n @if (!hasText()) {\n <span class=\"sr-only\">Loading</span>\n }\n</div>\n","export const UI_LOADING_TYPES = [\n 'spinner',\n 'throbber',\n 'pulse-ring',\n 'pulse-dot',\n 'wave',\n 'equaliser',\n 'terminal',\n 'blinking-caret',\n 'shimmer-text',\n 'loading-dots',\n 'bouncing-dots',\n 'fading-dots'\n] as const satisfies string[];\n\nexport type UiLoadingType = typeof UI_LOADING_TYPES[number];\n"],"mappings":";;AAKA,MAAM,aAA8B;CAChC;CACA;CACA;AACH;AAOD,IAAa,qBAAb,MAAa,mBAAkB;CAClB,OAAO,MAAqB,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,UAAU,eACzB,WAAW,SAAS,KAAK,KAAI,CAAE,GAClC,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAEkB,iBAAiB,MAAM,KAAK,EAAE,QAAQ,GAAE,IAAK,GAAG,MAAM,CAAC;CAPjE,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UChB/B;EAuGA,QAAA,CAAA,i3IAAA;CAAA,CAAA;;ADvFa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAL9B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAY,UAAA;GAAA,QAAA,CAAA,i3IAAA;EAAA,CAAA;;;;;;;;;;;AEZ1B,MAAa,mBAAmB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACyB"}
@@ -0,0 +1,89 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Component, model } from "@angular/core";
3
+ import { UiButtonComponent } from "@area8975/ui/button";
4
+ import { NgIcon, provideIcons } from "@ng-icons/core";
5
+ import { heroXMark } from "@ng-icons/heroicons/outline";
6
+ var UiModalCloseButtonComponent = class UiModalCloseButtonComponent {
7
+ isOpen = model.required(...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
8
+ static ɵfac = i0.ɵɵngDeclareFactory({
9
+ minVersion: "12.0.0",
10
+ version: "22.2.1",
11
+ ngImport: i0,
12
+ type: UiModalCloseButtonComponent,
13
+ deps: [],
14
+ target: i0.ɵɵFactoryTarget.Component
15
+ });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({
17
+ minVersion: "17.1.0",
18
+ version: "22.2.1",
19
+ type: UiModalCloseButtonComponent,
20
+ isStandalone: true,
21
+ selector: "ui-modal-close-btn",
22
+ inputs: { isOpen: {
23
+ classPropertyName: "isOpen",
24
+ publicName: "isOpen",
25
+ isSignal: true,
26
+ isRequired: true,
27
+ transformFunction: null
28
+ } },
29
+ outputs: { isOpen: "isOpenChange" },
30
+ providers: [provideIcons({ heroXMark })],
31
+ ngImport: i0,
32
+ template: "<ui-button\n appearance=\"white\"\n intent=\"secondary\"\n classes=\"p-2! border-transparent! shadow-none!\"\n (click)=\"isOpen.set(false)\"\n>\n <ng-icon name=\"heroXMark\" strokeWidth=\"2.5\" />\n</ui-button>\n",
33
+ dependencies: [{
34
+ kind: "component",
35
+ type: UiButtonComponent,
36
+ selector: "ui-button",
37
+ inputs: [
38
+ "appearance",
39
+ "intent",
40
+ "size",
41
+ "classes",
42
+ "type",
43
+ "ariaLabel",
44
+ "disabled",
45
+ "loading"
46
+ ]
47
+ }, {
48
+ kind: "component",
49
+ type: NgIcon,
50
+ selector: "ng-icon",
51
+ inputs: [
52
+ "name",
53
+ "svg",
54
+ "size",
55
+ "strokeWidth",
56
+ "color"
57
+ ]
58
+ }]
59
+ });
60
+ };
61
+ i0.ɵɵngDeclareClassMetadata({
62
+ minVersion: "12.0.0",
63
+ version: "22.2.1",
64
+ ngImport: i0,
65
+ type: UiModalCloseButtonComponent,
66
+ decorators: [{
67
+ type: Component,
68
+ args: [{
69
+ selector: "ui-modal-close-btn",
70
+ imports: [UiButtonComponent, NgIcon],
71
+ providers: [provideIcons({ heroXMark })],
72
+ template: "<ui-button\n appearance=\"white\"\n intent=\"secondary\"\n classes=\"p-2! border-transparent! shadow-none!\"\n (click)=\"isOpen.set(false)\"\n>\n <ng-icon name=\"heroXMark\" strokeWidth=\"2.5\" />\n</ui-button>\n"
73
+ }]
74
+ }],
75
+ propDecorators: { isOpen: [{
76
+ type: i0.Input,
77
+ args: [{
78
+ isSignal: true,
79
+ alias: "isOpen",
80
+ required: true
81
+ }]
82
+ }, {
83
+ type: i0.Output,
84
+ args: ["isOpenChange"]
85
+ }] }
86
+ });
87
+ export { UiModalCloseButtonComponent };
88
+
89
+ //# sourceMappingURL=area8975-ui-modal-close-btn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area8975-ui-modal-close-btn.mjs","names":[],"sources":["../../../projects/ui/modal-close-btn/modal-close-btn.component.ts","../../../projects/ui/modal-close-btn/modal-close-btn.component.html"],"sourcesContent":["import { Component, model } from '@angular/core';\n\nimport { UiButtonComponent } from '@area8975/ui/button';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { heroXMark } from '@ng-icons/heroicons/outline';\n\n\n@Component({\n selector: 'ui-modal-close-btn',\n templateUrl: './modal-close-btn.component.html',\n imports: [UiButtonComponent, NgIcon],\n providers: [provideIcons({ heroXMark })]\n})\nexport class UiModalCloseButtonComponent {\n readonly isOpen = model.required<boolean>();\n}\n","<ui-button\n appearance=\"white\"\n intent=\"secondary\"\n classes=\"p-2! border-transparent! shadow-none!\"\n (click)=\"isOpen.set(false)\"\n>\n <ng-icon name=\"heroXMark\" strokeWidth=\"2.5\" />\n</ui-button>\n"],"mappings":";;;;;AAaA,IAAa,8BAAb,MAAa,4BAA2B;CAC3B,SAAS,MAAM,SAAmB,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CADlC,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA2B,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA3B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA2B,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,QAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,SAAA,EAAA,QAAA,eAAA;EAAA,WAFzB,CAAC,aAAa,EAAE,UAAS,CAAE,CAAC;EAAC,UAAA;EAAA,UCX5C;EAQA,cAAA,CAAA;GAAA,MAAA;GAAA,MDEc;GAAiB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAM,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,CAAA;CAAA,CAAA;;AAG1B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA2B,YAAA,CAAA;EANvC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAoB,SAErB,CAAC,mBAAmB,MAAM;GAAC,WACzB,CAAC,aAAa,EAAE,UAAS,CAAE,CAAC;GAAC,UAAA;EAAA,CAAA"}