@star-ng/ui 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -2
  3. package/fesm2022/star-ng-ui-accordion.mjs +376 -0
  4. package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/star-ng-ui-autocomplete.mjs +782 -0
  6. package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
  7. package/fesm2022/star-ng-ui-avatar.mjs +154 -0
  8. package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
  9. package/fesm2022/star-ng-ui-badge.mjs +153 -0
  10. package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
  11. package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
  12. package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
  13. package/fesm2022/star-ng-ui-button.mjs +282 -0
  14. package/fesm2022/star-ng-ui-button.mjs.map +1 -0
  15. package/fesm2022/star-ng-ui-card.mjs +112 -0
  16. package/fesm2022/star-ng-ui-card.mjs.map +1 -0
  17. package/fesm2022/star-ng-ui-chart.mjs +1904 -0
  18. package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
  19. package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
  20. package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
  21. package/fesm2022/star-ng-ui-core.mjs +392 -0
  22. package/fesm2022/star-ng-ui-core.mjs.map +1 -0
  23. package/fesm2022/star-ng-ui-data-display.mjs +1556 -0
  24. package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
  25. package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
  26. package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
  27. package/fesm2022/star-ng-ui-dialog.mjs +948 -0
  28. package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
  29. package/fesm2022/star-ng-ui-drawer.mjs +158 -0
  30. package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
  31. package/fesm2022/star-ng-ui-editor.mjs +416 -0
  32. package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
  33. package/fesm2022/star-ng-ui-field.mjs +378 -0
  34. package/fesm2022/star-ng-ui-field.mjs.map +1 -0
  35. package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
  36. package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
  37. package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
  38. package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
  39. package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
  40. package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
  41. package/fesm2022/star-ng-ui-input-group.mjs +188 -0
  42. package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
  43. package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
  44. package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
  45. package/fesm2022/star-ng-ui-input-number.mjs +691 -0
  46. package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
  47. package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
  48. package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
  49. package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
  50. package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
  51. package/fesm2022/star-ng-ui-knob.mjs +514 -0
  52. package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
  53. package/fesm2022/star-ng-ui-layout.mjs +608 -0
  54. package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
  55. package/fesm2022/star-ng-ui-listbox.mjs +978 -0
  56. package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
  57. package/fesm2022/star-ng-ui-media.mjs +833 -0
  58. package/fesm2022/star-ng-ui-media.mjs.map +1 -0
  59. package/fesm2022/star-ng-ui-menu.mjs +1840 -0
  60. package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
  61. package/fesm2022/star-ng-ui-message.mjs +191 -0
  62. package/fesm2022/star-ng-ui-message.mjs.map +1 -0
  63. package/fesm2022/star-ng-ui-paginator.mjs +387 -0
  64. package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
  65. package/fesm2022/star-ng-ui-panel.mjs +324 -0
  66. package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
  67. package/fesm2022/star-ng-ui-password.mjs +517 -0
  68. package/fesm2022/star-ng-ui-password.mjs.map +1 -0
  69. package/fesm2022/star-ng-ui-popover.mjs +241 -0
  70. package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
  71. package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
  72. package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
  73. package/fesm2022/star-ng-ui-radio.mjs +411 -0
  74. package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
  75. package/fesm2022/star-ng-ui-rating.mjs +211 -0
  76. package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
  77. package/fesm2022/star-ng-ui-select-button.mjs +613 -0
  78. package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
  79. package/fesm2022/star-ng-ui-select.mjs +2523 -0
  80. package/fesm2022/star-ng-ui-select.mjs.map +1 -0
  81. package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
  82. package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
  83. package/fesm2022/star-ng-ui-slider.mjs +552 -0
  84. package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
  85. package/fesm2022/star-ng-ui-spinner.mjs +148 -0
  86. package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
  87. package/fesm2022/star-ng-ui-stepper.mjs +360 -0
  88. package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
  89. package/fesm2022/star-ng-ui-table.mjs +3477 -0
  90. package/fesm2022/star-ng-ui-table.mjs.map +1 -0
  91. package/fesm2022/star-ng-ui-tabs.mjs +464 -0
  92. package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
  93. package/fesm2022/star-ng-ui-tag.mjs +129 -0
  94. package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
  95. package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
  96. package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
  97. package/fesm2022/star-ng-ui-theme.mjs +98 -0
  98. package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
  99. package/fesm2022/star-ng-ui-toast.mjs +298 -0
  100. package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
  101. package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
  102. package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
  103. package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
  104. package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
  105. package/fesm2022/star-ng-ui-transloco.mjs +40 -0
  106. package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
  107. package/fesm2022/star-ng-ui-tree.mjs +1446 -0
  108. package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
  109. package/fesm2022/star-ng-ui-utility.mjs +2134 -0
  110. package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
  111. package/fesm2022/star-ng-ui.mjs +51 -0
  112. package/package.json +281 -3
  113. package/styles/_base.scss +70 -0
  114. package/styles/_shared.scss +2 -0
  115. package/styles/_tokens.scss +190 -0
  116. package/styles/controls/_accordion.scss +75 -0
  117. package/styles/controls/_autocomplete.scss +44 -0
  118. package/styles/controls/_avatar.scss +39 -0
  119. package/styles/controls/_breadcrumb.scss +45 -0
  120. package/styles/controls/_button.scss +137 -0
  121. package/styles/controls/_card.scss +38 -0
  122. package/styles/controls/_chart.scss +214 -0
  123. package/styles/controls/_chip.scss +51 -0
  124. package/styles/controls/_choice.scss +153 -0
  125. package/styles/controls/_data-display.scss +118 -0
  126. package/styles/controls/_date-picker.scss +300 -0
  127. package/styles/controls/_dialog.scss +123 -0
  128. package/styles/controls/_drawer.scss +118 -0
  129. package/styles/controls/_editor.scss +74 -0
  130. package/styles/controls/_field.scss +92 -0
  131. package/styles/controls/_file-upload.scss +136 -0
  132. package/styles/controls/_input-group.scss +104 -0
  133. package/styles/controls/_input-mask.scss +46 -0
  134. package/styles/controls/_input-number.scss +125 -0
  135. package/styles/controls/_knob.scss +76 -0
  136. package/styles/controls/_layout.scss +182 -0
  137. package/styles/controls/_listbox.scss +38 -0
  138. package/styles/controls/_media.scss +222 -0
  139. package/styles/controls/_menu.scss +254 -0
  140. package/styles/controls/_message.scss +48 -0
  141. package/styles/controls/_org-chart.scss +128 -0
  142. package/styles/controls/_paginator.scss +59 -0
  143. package/styles/controls/_panel.scss +83 -0
  144. package/styles/controls/_popover.scss +40 -0
  145. package/styles/controls/_progress-bar.scss +74 -0
  146. package/styles/controls/_select-button.scss +61 -0
  147. package/styles/controls/_select.scss +216 -0
  148. package/styles/controls/_skeleton.scss +43 -0
  149. package/styles/controls/_slider.scss +163 -0
  150. package/styles/controls/_spinner.scss +34 -0
  151. package/styles/controls/_stepper.scss +109 -0
  152. package/styles/controls/_table.scss +523 -0
  153. package/styles/controls/_tabs.scss +93 -0
  154. package/styles/controls/_tag.scss +84 -0
  155. package/styles/controls/_toast.scss +141 -0
  156. package/styles/controls/_tooltip.scss +14 -0
  157. package/styles/controls/_tree.scss +113 -0
  158. package/styles/controls/_utility.scss +654 -0
  159. package/styles/star-ng.css +5803 -0
  160. package/styles/star-ng.min.css +1 -0
  161. package/styles/star-ng.scss +50 -0
  162. package/theme/star-theme-first-paint.js +1 -0
  163. package/types/star-ng-ui-accordion.d.ts +82 -0
  164. package/types/star-ng-ui-autocomplete.d.ts +171 -0
  165. package/types/star-ng-ui-avatar.d.ts +43 -0
  166. package/types/star-ng-ui-badge.d.ts +46 -0
  167. package/types/star-ng-ui-breadcrumb.d.ts +39 -0
  168. package/types/star-ng-ui-button.d.ts +79 -0
  169. package/types/star-ng-ui-card.d.ts +29 -0
  170. package/types/star-ng-ui-chart.d.ts +337 -0
  171. package/types/star-ng-ui-checkbox.d.ts +92 -0
  172. package/types/star-ng-ui-core.d.ts +310 -0
  173. package/types/star-ng-ui-data-display.d.ts +339 -0
  174. package/types/star-ng-ui-date-picker.d.ts +701 -0
  175. package/types/star-ng-ui-dialog.d.ts +254 -0
  176. package/types/star-ng-ui-drawer.d.ts +29 -0
  177. package/types/star-ng-ui-editor.d.ts +96 -0
  178. package/types/star-ng-ui-field.d.ts +146 -0
  179. package/types/star-ng-ui-file-upload.d.ts +192 -0
  180. package/types/star-ng-ui-i18n-de.d.ts +7 -0
  181. package/types/star-ng-ui-i18n-es.d.ts +7 -0
  182. package/types/star-ng-ui-input-group.d.ts +58 -0
  183. package/types/star-ng-ui-input-mask.d.ts +126 -0
  184. package/types/star-ng-ui-input-number.d.ts +193 -0
  185. package/types/star-ng-ui-input-otp.d.ts +86 -0
  186. package/types/star-ng-ui-input-tags.d.ts +159 -0
  187. package/types/star-ng-ui-knob.d.ts +121 -0
  188. package/types/star-ng-ui-layout.d.ts +154 -0
  189. package/types/star-ng-ui-listbox.d.ts +197 -0
  190. package/types/star-ng-ui-media.d.ts +161 -0
  191. package/types/star-ng-ui-menu.d.ts +332 -0
  192. package/types/star-ng-ui-message.d.ts +52 -0
  193. package/types/star-ng-ui-paginator.d.ts +85 -0
  194. package/types/star-ng-ui-panel.d.ts +65 -0
  195. package/types/star-ng-ui-password.d.ts +129 -0
  196. package/types/star-ng-ui-popover.d.ts +57 -0
  197. package/types/star-ng-ui-progress-bar.d.ts +49 -0
  198. package/types/star-ng-ui-radio.d.ts +116 -0
  199. package/types/star-ng-ui-rating.d.ts +52 -0
  200. package/types/star-ng-ui-select-button.d.ts +169 -0
  201. package/types/star-ng-ui-select.d.ts +540 -0
  202. package/types/star-ng-ui-skeleton.d.ts +47 -0
  203. package/types/star-ng-ui-slider.d.ts +145 -0
  204. package/types/star-ng-ui-spinner.d.ts +29 -0
  205. package/types/star-ng-ui-stepper.d.ts +89 -0
  206. package/types/star-ng-ui-table.d.ts +829 -0
  207. package/types/star-ng-ui-tabs.d.ts +109 -0
  208. package/types/star-ng-ui-tag.d.ts +35 -0
  209. package/types/star-ng-ui-theme-switch.d.ts +36 -0
  210. package/types/star-ng-ui-theme.d.ts +95 -0
  211. package/types/star-ng-ui-toast.d.ts +84 -0
  212. package/types/star-ng-ui-toggle-switch.d.ts +81 -0
  213. package/types/star-ng-ui-tooltip.d.ts +66 -0
  214. package/types/star-ng-ui-transloco.d.ts +14 -0
  215. package/types/star-ng-ui-tree.d.ts +310 -0
  216. package/types/star-ng-ui-utility.d.ts +533 -0
  217. package/types/star-ng-ui.d.ts +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-file-upload.mjs","names":[],"sources":["../../../projects/star-ng/file-upload/file-upload.ts","../../../projects/star-ng/file-upload/upload-status.ts"],"sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { STAR_UI_TEXT } from '@star-ng/ui/core';\n\nexport interface StarRejectedFile {\n readonly file: File;\n readonly reason: 'type' | 'size' | 'limit';\n}\n\n/** Upload state of one file. The page that uploads the files owns this state. */\nexport interface StarFileStatus {\n /** Percent sent, 0 to 100. Shows a progress bar while `state` is `'uploading'`. */\n readonly progress?: number;\n readonly state?: 'uploading' | 'done' | 'error';\n /** Error text, shown with `state: 'error'`. */\n readonly message?: string;\n}\n\n/** Human-readable size with `Intl.NumberFormat` byte units (kB, MB). */\nexport function formatFileSize(bytes: number, locale?: string): string {\n const units = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const;\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return new Intl.NumberFormat(locale, {\n style: 'unit',\n unit: units[unit],\n unitDisplay: 'short',\n maximumFractionDigits: unit === 0 ? 0 : 1,\n }).format(value);\n}\n\n/** Matches a file against an `accept` list such as `.pdf,image/*,application/msword`. */\nexport function fileMatchesAccept(file: File, accept: string): boolean {\n if (!accept.trim()) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return accept\n .split(',')\n .map((rule) => rule.trim().toLowerCase())\n .some((rule) =>\n rule.startsWith('.')\n ? name.endsWith(rule)\n : rule.endsWith('/*')\n ? type.startsWith(rule.slice(0, -1))\n : type === rule,\n );\n}\n\n/**\n * File picker with drag and drop (PrimeNG `p-fileupload`, \"advanced\" mode without the HTTP\n * part). The value is the list of chosen `File`s; upload them in your own service.\n * Validates `accept`, `maxFileSize` and `fileLimit`, and lists rejected files with a reason.\n *\n * `fileStatus` shows the upload state of each file (progress bar, done, error); the control\n * does not upload (`toUploadStatus()` maps an `HttpClient` upload to that state).\n * `reorderable` lets the user change the file order (buttons or drag). `thumbnails` shows a\n * picture for image files. Files pasted while focus is in the control are added.\n *\n * `<star-file-upload [formField]=\"form.attachments\" accept=\".pdf,image/*\" [maxFileSize]=\"10_000_000\" multiple />`\n */\n@Component({\n selector: 'star-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'star-upload',\n '[class.star-upload--dragging]': 'dragging()',\n '[class.star-upload--disabled]': 'disabled()',\n '[class.star-upload--invalid]': 'invalid() && touched()',\n '(paste)': 'onPaste($event)',\n },\n template: `\n <div\n class=\"star-upload__zone\"\n (dragenter)=\"onDrag($event, true)\"\n (dragover)=\"onDrag($event, true)\"\n (dragleave)=\"onDrag($event, false)\"\n (drop)=\"onDrop($event)\"\n >\n <i class=\"ph-bold ph-cloud-arrow-up star-upload__icon\" aria-hidden=\"true\"></i>\n <p class=\"star-upload__lead\">{{ text.dropFiles }}</p>\n <label class=\"star-btn star-btn--secondary star-btn--sm star-upload__choose\" [for]=\"inputId\">\n {{ text.chooseFiles }}\n </label>\n <input\n #input\n type=\"file\"\n class=\"star-sr-only\"\n [id]=\"inputId\"\n [attr.accept]=\"accept() || null\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || readonly()\"\n [attr.aria-describedby]=\"hintId\"\n (change)=\"onPicked(input)\"\n (blur)=\"touch.emit()\"\n />\n @if (hint()) {\n <p class=\"star-upload__hint\" [id]=\"hintId\">{{ hint() }}</p>\n }\n </div>\n\n @if (value().length) {\n <ul class=\"star-upload__list\" [attr.aria-label]=\"text.chooseFiles\">\n @for (file of value(); track file; let i = $index; let first = $first; let last = $last) {\n @let status = statusOf(file);\n <li\n class=\"star-upload__file\"\n [class.star-upload__file--error]=\"status?.state === 'error'\"\n [class.star-upload__file--drop]=\"dropIndex() === i\"\n [attr.draggable]=\"canReorder() ? 'true' : null\"\n (dragstart)=\"onFileDragStart(i, $event)\"\n (dragover)=\"onFileDragOver(i, $event)\"\n (drop)=\"onFileDrop(i, $event)\"\n (dragend)=\"endFileDrag()\"\n >\n @if (status?.state === 'done') {\n <i class=\"ph-fill ph-check-circle star-upload__state--done\" aria-hidden=\"true\"></i>\n } @else if (status?.state === 'error') {\n <i class=\"ph-fill ph-warning-circle star-upload__state--error\" aria-hidden=\"true\"></i>\n } @else if (thumbnailOf(file); as thumbnail) {\n <img class=\"star-upload__thumb\" alt=\"\" [src]=\"thumbnail\" />\n } @else {\n <i class=\"ph-bold ph-file star-upload__file-icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"star-upload__main\">\n <span class=\"star-upload__name\">{{ file.name }}</span>\n @if (status?.state === 'uploading') {\n <span\n class=\"star-upload__progress\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percent(status)\"\n [attr.aria-label]=\"text.uploadingFile(file.name)\"\n >\n <span class=\"star-upload__progress-bar\" [style.width.%]=\"percent(status)\"></span>\n </span>\n } @else if (status?.state === 'error' && status?.message) {\n <span class=\"star-upload__message\">{{ status?.message }}</span>\n } @else if (status?.state === 'done') {\n <span class=\"star-sr-only\">{{ text.uploaded }}</span>\n }\n </span>\n @if (status?.state === 'uploading') {\n <span class=\"star-upload__size\">{{ percent(status) }}%</span>\n } @else {\n <span class=\"star-upload__size\">{{ size(file) }}</span>\n }\n @if (canReorder()) {\n <button\n type=\"button\"\n class=\"star-select__icon-btn\"\n [disabled]=\"first\"\n [attr.aria-label]=\"text.moveUp + ': ' + file.name\"\n (click)=\"move(i, i - 1)\"\n >\n <i class=\"ph-bold ph-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"star-select__icon-btn\"\n [disabled]=\"last\"\n [attr.aria-label]=\"text.moveDown + ': ' + file.name\"\n (click)=\"move(i, i + 1)\"\n >\n <i class=\"ph-bold ph-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (!disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"star-select__icon-btn\"\n [attr.aria-label]=\"text.removeItem(file.name)\"\n (click)=\"remove(file)\"\n >\n <i class=\"ph-bold ph-x\" aria-hidden=\"true\"></i>\n </button>\n }\n </li>\n }\n </ul>\n }\n\n @if (rejected().length) {\n <div role=\"alert\">\n <ul class=\"star-upload__errors\">\n @for (item of rejected(); track $index) {\n <li>{{ rejectionText(item) }}</li>\n }\n </ul>\n </div>\n }\n `,\n})\nexport class StarFileUpload implements FormValueControl<readonly File[]> {\n protected readonly text = inject(STAR_UI_TEXT);\n private readonly ids = inject(_IdGenerator);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n for (const url of this.thumbnailUrls.values()) URL.revokeObjectURL(url);\n });\n }\n\n /** The chosen files, in list order. */\n readonly value = model<readonly File[]>([]);\n /** Allowed files: extensions and MIME types such as `.pdf,image/*`. Empty allows every file. */\n readonly accept = input('');\n /** Allows more than one file. Without it a new file replaces the old one. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Bytes (0 = no limit). */\n readonly maxFileSize = input(0);\n /** Maximum number of files (0 = no limit). */\n readonly fileLimit = input(0);\n /** Locale for the file sizes (default: the application locale). */\n readonly locale = input<string | undefined>(undefined);\n /**\n * Upload state of a file, or `null`. Read your own signal in the function: the list then\n * follows the upload.\n */\n readonly fileStatus = input<((file: File) => StarFileStatus | null | undefined) | null>(null);\n /** The user can change the order of the files. */\n readonly reorderable = input(false, { transform: booleanAttribute });\n /** Shows a small picture in place of the file icon for image files. */\n readonly thumbnails = input(false, { transform: booleanAttribute });\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n /** Emits the files that passed the checks, each time files are added. */\n readonly selected = output<readonly File[]>();\n /** Emits the files that failed a check, with the reason (`type`, `size` or `limit`). */\n readonly rejectedChange = output<readonly StarRejectedFile[]>();\n\n protected readonly inputId = this.ids.getId('star-upload-');\n protected readonly hintId = this.ids.getId('star-upload-hint-');\n protected readonly dragging = signal(false);\n protected readonly rejected = signal<readonly StarRejectedFile[]>([]);\n protected readonly dropIndex = signal<number | null>(null);\n private dragIndex: number | null = null;\n protected readonly canReorder = computed(\n () => this.reorderable() && !this.disabled() && !this.readonly() && this.value().length > 1,\n );\n private readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n protected readonly hint = computed(() => {\n const parts: string[] = [];\n if (this.accept()) parts.push(this.accept().split(',').join(', '));\n if (this.maxFileSize())\n parts.push(this.text.fileMaxSize(formatFileSize(this.maxFileSize(), this.locale())));\n if (this.fileLimit()) parts.push(this.text.fileUpTo(this.fileLimit()));\n return parts.join(' · ');\n });\n\n protected statusOf(file: File): StarFileStatus | null {\n return this.fileStatus()?.(file) ?? null;\n }\n\n protected percent(status: StarFileStatus | null): number {\n return Math.round(Math.min(100, Math.max(0, status?.progress ?? 0)));\n }\n\n /** Moves the file at index `from` to index `to`. */\n move(from: number, to: number): void {\n const files = [...this.value()];\n if (from === to || from < 0 || to < 0 || from >= files.length || to >= files.length) return;\n files.splice(to, 0, ...files.splice(from, 1));\n this.value.set(files);\n }\n\n protected onFileDragStart(index: number, event: DragEvent): void {\n if (!this.canReorder()) return;\n this.dragIndex = index;\n event.dataTransfer?.setData('text/plain', String(index));\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n }\n\n protected onFileDragOver(index: number, event: DragEvent): void {\n if (this.dragIndex === null || this.dragIndex === index) return;\n event.preventDefault();\n this.dropIndex.set(index);\n }\n\n protected onFileDrop(index: number, event: DragEvent): void {\n if (this.dragIndex === null) return;\n event.preventDefault();\n event.stopPropagation();\n this.move(this.dragIndex, index);\n this.endFileDrag();\n }\n\n protected endFileDrag(): void {\n this.dragIndex = null;\n this.dropIndex.set(null);\n }\n\n protected size(file: File): string {\n return formatFileSize(file.size, this.locale());\n }\n\n protected rejectionText(item: StarRejectedFile): string {\n switch (item.reason) {\n case 'type':\n return this.text.fileTypeNotAllowed(item.file.name);\n case 'size':\n return this.text.fileTooLarge(\n item.file.name,\n formatFileSize(this.maxFileSize(), this.locale()),\n );\n default:\n return this.text.fileLimitReached(this.fileLimit());\n }\n }\n\n protected onDrag(event: DragEvent, over: boolean): void {\n if (this.disabled() || this.readonly()) return;\n event.preventDefault();\n this.dragging.set(over);\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragging.set(false);\n if (this.disabled() || this.readonly() || this.dragIndex !== null) return;\n this.add([...(event.dataTransfer?.files ?? [])]);\n }\n\n protected onPicked(input: HTMLInputElement): void {\n this.add([...(input.files ?? [])]);\n input.value = '';\n }\n\n /** Validates and adds files (also usable from code, for example paste handlers). */\n add(files: readonly File[]): void {\n const accepted: File[] = [];\n const rejected: StarRejectedFile[] = [];\n const current = this.multiple() ? this.value() : [];\n const limit = this.multiple() ? this.fileLimit() : 1;\n for (const file of this.multiple() ? files : files.slice(0, 1)) {\n if (!fileMatchesAccept(file, this.accept())) rejected.push({ file, reason: 'type' });\n else if (this.maxFileSize() && file.size > this.maxFileSize())\n rejected.push({ file, reason: 'size' });\n else if (limit && current.length + accepted.length >= limit)\n rejected.push({ file, reason: 'limit' });\n else accepted.push(file);\n }\n this.rejected.set(rejected);\n if (rejected.length) this.rejectedChange.emit(rejected);\n if (accepted.length) {\n this.value.set([...current, ...accepted]);\n this.selected.emit(accepted);\n }\n this.touch.emit();\n }\n\n remove(file: File): void {\n this.value.update((files) => files.filter((f) => f !== file));\n this.rejected.set([]);\n this.releaseThumbnail(file);\n }\n\n /** Object URL per image file, made when first shown and released when the file goes. */\n private readonly thumbnailUrls = new Map<File, string>();\n\n protected thumbnailOf(file: File): string | null {\n if (!this.thumbnails() || !file.type.startsWith('image/')) return null;\n let url = this.thumbnailUrls.get(file);\n if (!url && typeof URL.createObjectURL === 'function') {\n url = URL.createObjectURL(file);\n this.thumbnailUrls.set(file, url);\n }\n return url ?? null;\n }\n\n private releaseThumbnail(file: File): void {\n const url = this.thumbnailUrls.get(file);\n if (!url) return;\n URL.revokeObjectURL(url);\n this.thumbnailUrls.delete(file);\n }\n\n /** Files on the clipboard (a screenshot, a copied file) are added while focus is in the control. */\n protected onPaste(event: ClipboardEvent): void {\n const files = [...(event.clipboardData?.files ?? [])];\n if (!files.length || this.disabled() || this.readonly()) return;\n event.preventDefault();\n this.add(files);\n }\n\n focus(): void {\n this.input().nativeElement.focus();\n }\n}\n","import { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { catchError, filter, map, Observable, of } from 'rxjs';\nimport type { StarFileStatus } from './file-upload';\n\n/** Upload state of one file, with the server response when the upload is done. */\nexport interface StarUploadResult<T> extends StarFileStatus {\n readonly response?: T;\n}\n\n/**\n * Turns the events of one `HttpClient` upload into `StarFileStatus` values for\n * `<star-file-upload [fileStatus]>`: progress while the body is sent, then `done` with the\n * response body, or `error` with a message. The observable does not fail.\n *\n * The control does not upload. The page sends the request with\n * `{ reportProgress: true, observe: 'events' }` and pipes it here:\n *\n * ```ts\n * this.api.upload(file).pipe(toUploadStatus()).subscribe((status) =>\n * this.uploads.update((map) => new Map(map).set(file, status)));\n * ```\n *\n * @param errorMessage Text for a failed upload. The default uses the HTTP status text.\n */\nexport function toUploadStatus<T>(\n errorMessage: (error: unknown) => string = defaultErrorMessage,\n): (events: Observable<HttpEvent<T>>) => Observable<StarUploadResult<T>> {\n return (events) =>\n events.pipe(\n map((event): StarUploadResult<T> | null => {\n switch (event.type) {\n case HttpEventType.Sent:\n return { state: 'uploading', progress: 0 };\n case HttpEventType.UploadProgress:\n return {\n state: 'uploading',\n progress: event.total ? (100 * event.loaded) / event.total : 0,\n };\n case HttpEventType.Response:\n return { state: 'done', progress: 100, response: event.body ?? undefined };\n default:\n return null;\n }\n }),\n filter((status): status is StarUploadResult<T> => status !== null),\n catchError((error: unknown) => of({ state: 'error', message: errorMessage(error) } as const)),\n );\n}\n\nfunction defaultErrorMessage(error: unknown): string {\n const status = (error as { status?: number; statusText?: string } | null) ?? {};\n if (status.status) return `${status.status} ${status.statusText ?? ''}`.trim();\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ const plural = new Intl.PluralRules("de");
2
+ const forCount = (count, one, other) => plural.select(count) === "one" ? one : other;
3
+ const STAR_UI_TEXT_DE = {
4
+ close: "Schließen",
5
+ clear: "Leeren",
6
+ loading: "Wird geladen",
7
+ actions: "Aktionen",
8
+ moreActions: "Weitere Aktionen",
9
+ ofTotal: (index, total) => `${index} von ${total}`,
10
+ expandItem: (label) => `${label} aufklappen`,
11
+ collapseItem: (label) => `${label} zuklappen`,
12
+ removeItem: (label) => `${label} entfernen`,
13
+ tagsHint: "Mit der Eingabetaste oder einem Komma hinzufügen. Die Rücktaste entfernt den letzten Eintrag.",
14
+ tagAdded: (label) => `${label} hinzugefügt`,
15
+ tagRemoved: (label) => `${label} entfernt`,
16
+ tagInvalid: (label) => `${label} ist ungültig.`,
17
+ tagDuplicate: (label) => `${label} ist bereits vorhanden.`,
18
+ tagLimit: (max) => `Sie können bis zu ${max} ${forCount(max, "Eintrag", "Einträge")} hinzufügen.`,
19
+ notifications: "Benachrichtigungen",
20
+ accept: "Bestätigen",
21
+ reject: "Abbrechen",
22
+ selectPlaceholder: "Auswählen",
23
+ filterPlaceholder: "Suchen",
24
+ emptyMessage: "Keine Optionen verfügbar",
25
+ emptyFilterMessage: "Keine Ergebnisse gefunden",
26
+ selectAll: "Alle auswählen",
27
+ selectedItems: (count) => `${count} ${forCount(count, "Element", "Elemente")} ausgewählt`,
28
+ searching: "Suche läuft…",
29
+ showOptions: "Optionen anzeigen",
30
+ resultsAvailable: (count) => `${count} ${forCount(count, "Ergebnis", "Ergebnisse")} verfügbar`,
31
+ pagination: "Seitennavigation",
32
+ firstPage: "Erste Seite",
33
+ previousPage: "Vorherige Seite",
34
+ nextPage: "Nächste Seite",
35
+ lastPage: "Letzte Seite",
36
+ page: (page) => `Seite ${page}`,
37
+ rowsPerPage: "Zeilen pro Seite",
38
+ pageReport: (first, last, total) => `${first}–${last} von ${total}`,
39
+ noData: "Keine Datensätze gefunden",
40
+ selectRow: "Zeile auswählen",
41
+ selectAllRows: "Alle Zeilen auswählen",
42
+ filterBy: (column) => `Nach ${column} filtern`,
43
+ filterAll: "Alle",
44
+ filterMin: (column) => `${column} von`,
45
+ filterMax: (column) => `${column} bis`,
46
+ filterMinShort: "Min.",
47
+ filterMaxShort: "Max.",
48
+ expandRow: "Zeile aufklappen",
49
+ collapseRow: "Zeile zuklappen",
50
+ rowDetails: "Details",
51
+ reorderRows: "Reihenfolge",
52
+ sortMultiHint: "Umschalttaste + Klick fügt diese Spalte der Sortierung hinzu",
53
+ terminalCommand: "Befehl",
54
+ compareImages: "Bilder vergleichen",
55
+ editCell: (column) => `${column} bearbeiten`,
56
+ columns: "Spalten",
57
+ resizeColumn: (column) => `Breite von ${column} ändern`,
58
+ moveColumnEarlier: (column) => `${column} nach vorn verschieben`,
59
+ moveColumnLater: (column) => `${column} nach hinten verschieben`,
60
+ layout: "Layout",
61
+ layoutList: "Liste",
62
+ layoutGrid: "Raster",
63
+ moveSelectedItem: "Ausgewähltes Element verschieben",
64
+ orderListHint: "Mit Alt und den Pfeiltasten verschieben Sie das ausgewählte Element.",
65
+ moveTop: "Ganz nach oben",
66
+ moveUp: "Nach oben",
67
+ moveDown: "Nach unten",
68
+ moveBottom: "Ganz nach unten",
69
+ itemPosition: (label, position, total) => `${label}, Position ${position} von ${total}`,
70
+ transfer: "Übertragen",
71
+ moveSelectedToTarget: "Auswahl ins Ziel verschieben",
72
+ moveAllToTarget: "Alle ins Ziel verschieben",
73
+ moveSelectedToSource: "Auswahl in die Quelle verschieben",
74
+ moveAllToSource: "Alle in die Quelle verschieben",
75
+ pickListSource: "Verfügbar",
76
+ pickListTarget: "Ausgewählt",
77
+ chooseDate: "Datum auswählen",
78
+ chooseMonth: "Monat auswählen",
79
+ chooseYear: "Jahr auswählen",
80
+ previousMonth: "Vorheriger Monat",
81
+ nextMonth: "Nächster Monat",
82
+ previousYears: "Vorherige Jahre",
83
+ nextYears: "Nächste Jahre",
84
+ today: "Heute",
85
+ time: "Uhrzeit",
86
+ startTime: "Startzeit",
87
+ weekNumber: "Kalenderwoche",
88
+ weekShort: "KW",
89
+ endTime: "Endzeit",
90
+ done: "Fertig",
91
+ increase: "Erhöhen",
92
+ decrease: "Verringern",
93
+ showPassword: "Passwort anzeigen",
94
+ hidePassword: "Passwort verbergen",
95
+ passwordWeak: "Passwortstärke: schwach",
96
+ passwordFair: "Passwortstärke: mittel",
97
+ passwordGood: "Passwortstärke: gut",
98
+ passwordStrong: "Passwortstärke: stark",
99
+ passwordRuleLength: (min) => `Mindestens ${min} Zeichen`,
100
+ passwordRuleUpper: "Ein Großbuchstabe",
101
+ passwordRuleLower: "Ein Kleinbuchstabe",
102
+ passwordRuleNumber: "Eine Ziffer",
103
+ passwordRuleSymbol: "Ein Sonderzeichen",
104
+ ruleMet: "erfüllt",
105
+ ruleNotMet: "nicht erfüllt",
106
+ otpLabel: "Bestätigungscode",
107
+ otpCharacter: (position, total) => `Zeichen ${position} von ${total}`,
108
+ ratingLabel: "Bewertung",
109
+ sliderMinimum: (label) => `${label} Minimum`.trim(),
110
+ sliderMaximum: (label) => `${label} Maximum`.trim(),
111
+ colorLabel: "Farbe",
112
+ customColor: "Eigene Farbe",
113
+ hexValue: (label) => `${label} Hex-Wert`,
114
+ chooseFiles: "Dateien auswählen",
115
+ dropFiles: "Dateien hierher ziehen oder",
116
+ fileMaxSize: (size) => `max. ${size}`,
117
+ fileUpTo: (count) => `bis zu ${count} ${forCount(count, "Datei", "Dateien")}`,
118
+ uploadingFile: (name) => `${name} wird hochgeladen`,
119
+ uploaded: "Hochgeladen",
120
+ fileTypeNotAllowed: (name) => `${name}: Dieser Dateityp ist nicht zulässig.`,
121
+ fileTooLarge: (name, max) => `${name}: Die Datei ist größer als ${max}.`,
122
+ fileLimitReached: (limit) => `Sie können bis zu ${limit} ${forCount(limit, "Datei", "Dateien")} hinzufügen.`,
123
+ editorLabel: "Editor",
124
+ editorFormatting: (label) => `${label}: Formatierung`,
125
+ editorBold: "Fett",
126
+ editorItalic: "Kursiv",
127
+ editorUnderline: "Unterstrichen",
128
+ editorHeading: "Überschrift",
129
+ editorBulletList: "Aufzählung",
130
+ editorNumberedList: "Nummerierte Liste",
131
+ editorClearFormatting: "Formatierung entfernen",
132
+ editorLink: "Link",
133
+ editorLinkPrompt: "Linkadresse (https://…)",
134
+ breadcrumb: "Brotkrümelnavigation",
135
+ stepperLabel: "Fortschritt",
136
+ stepCompleted: "(abgeschlossen)",
137
+ resizePanes: "Bereichsgröße ändern",
138
+ dock: "Dock",
139
+ scrollToTop: "Nach oben scrollen",
140
+ theme: "Design",
141
+ themeSystem: "System",
142
+ themeLight: "Hell",
143
+ themeDark: "Dunkel",
144
+ pauseSlides: "Folien anhalten",
145
+ playSlides: "Folien abspielen",
146
+ previousSlides: "Vorherige Folien",
147
+ nextSlides: "Nächste Folien",
148
+ galleryLabel: "Galerie",
149
+ previousImage: "Vorheriges Bild",
150
+ nextImage: "Nächstes Bild",
151
+ showImage: (alt) => `${alt} anzeigen`,
152
+ previewImage: (alt) => `Vorschau: ${alt}`,
153
+ zoomIn: "Vergrößern",
154
+ zoomOut: "Verkleinern",
155
+ chartView: "Diagramm",
156
+ tableView: "Tabelle",
157
+ chartTotal: "Gesamt",
158
+ chartSeries: "Reihe",
159
+ chartX: "X",
160
+ chartY: "Y",
161
+ chartTypeBar: "Balkendiagramm",
162
+ chartTypeStackedBar: "Gestapeltes Balkendiagramm",
163
+ chartTypeLine: "Liniendiagramm",
164
+ chartTypeArea: "Flächendiagramm",
165
+ chartTypeDoughnut: "Ringdiagramm",
166
+ chartTypePie: "Kreisdiagramm",
167
+ chartTypeRadar: "Netzdiagramm",
168
+ chartTypePolarArea: "Polarflächendiagramm",
169
+ chartTypeScatter: "Punktdiagramm",
170
+ chartDescription: (kind, series, items, min, max) => `${kind} mit ${series} ${series === 1 ? "Reihe" : "Reihen"} und ${items} ${items === 1 ? "Eintrag" : "Einträgen"}, Werte von ${min} bis ${max}. Die gleichen Daten stehen in der Tabelle.`,
171
+ chartOther: "Sonstige",
172
+ chartCategory: "Kategorie",
173
+ chartValue: "Wert",
174
+ chartShare: "Anteil",
175
+ meterValue: (value, total) => `${value} von ${total}`
176
+ };
177
+ export { STAR_UI_TEXT_DE };
178
+
179
+ //# sourceMappingURL=star-ng-ui-i18n-de.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-i18n-de.mjs","names":[],"sources":["../../../projects/star-ng/i18n/de/star-ui-text-de.ts"],"sourcesContent":["import type { StarUiText } from '@star-ng/ui/core';\n\nconst plural = new Intl.PluralRules('de');\n\n/** Chooses the German singular or plural form for a count. */\nconst forCount = (count: number, one: string, other: string): string =>\n plural.select(count) === 'one' ? one : other;\n\n/**\n * German control texts (formal address \"Sie\"). Provide them with\n * `provideStarUiText(STAR_UI_TEXT_DE)` or through `provideStarUiTextFromSignal()`.\n * The `StarUiText` type makes a missing entry a compile error.\n */\nexport const STAR_UI_TEXT_DE: StarUiText = {\n close: 'Schließen',\n clear: 'Leeren',\n loading: 'Wird geladen',\n actions: 'Aktionen',\n moreActions: 'Weitere Aktionen',\n ofTotal: (index, total) => `${index} von ${total}`,\n expandItem: (label) => `${label} aufklappen`,\n collapseItem: (label) => `${label} zuklappen`,\n removeItem: (label) => `${label} entfernen`,\n tagsHint:\n 'Mit der Eingabetaste oder einem Komma hinzufügen. Die Rücktaste entfernt den letzten Eintrag.',\n tagAdded: (label) => `${label} hinzugefügt`,\n tagRemoved: (label) => `${label} entfernt`,\n tagInvalid: (label) => `${label} ist ungültig.`,\n tagDuplicate: (label) => `${label} ist bereits vorhanden.`,\n tagLimit: (max) => `Sie können bis zu ${max} ${forCount(max, 'Eintrag', 'Einträge')} hinzufügen.`,\n notifications: 'Benachrichtigungen',\n accept: 'Bestätigen',\n reject: 'Abbrechen',\n\n selectPlaceholder: 'Auswählen',\n filterPlaceholder: 'Suchen',\n emptyMessage: 'Keine Optionen verfügbar',\n emptyFilterMessage: 'Keine Ergebnisse gefunden',\n selectAll: 'Alle auswählen',\n selectedItems: (count) => `${count} ${forCount(count, 'Element', 'Elemente')} ausgewählt`,\n searching: 'Suche läuft…',\n showOptions: 'Optionen anzeigen',\n resultsAvailable: (count) => `${count} ${forCount(count, 'Ergebnis', 'Ergebnisse')} verfügbar`,\n\n pagination: 'Seitennavigation',\n firstPage: 'Erste Seite',\n previousPage: 'Vorherige Seite',\n nextPage: 'Nächste Seite',\n lastPage: 'Letzte Seite',\n page: (page) => `Seite ${page}`,\n rowsPerPage: 'Zeilen pro Seite',\n pageReport: (first, last, total) => `${first}–${last} von ${total}`,\n noData: 'Keine Datensätze gefunden',\n selectRow: 'Zeile auswählen',\n selectAllRows: 'Alle Zeilen auswählen',\n filterBy: (column) => `Nach ${column} filtern`,\n filterAll: 'Alle',\n filterMin: (column) => `${column} von`,\n filterMax: (column) => `${column} bis`,\n filterMinShort: 'Min.',\n filterMaxShort: 'Max.',\n expandRow: 'Zeile aufklappen',\n collapseRow: 'Zeile zuklappen',\n rowDetails: 'Details',\n reorderRows: 'Reihenfolge',\n sortMultiHint: 'Umschalttaste + Klick fügt diese Spalte der Sortierung hinzu',\n terminalCommand: 'Befehl',\n compareImages: 'Bilder vergleichen',\n editCell: (column) => `${column} bearbeiten`,\n columns: 'Spalten',\n resizeColumn: (column) => `Breite von ${column} ändern`,\n moveColumnEarlier: (column) => `${column} nach vorn verschieben`,\n moveColumnLater: (column) => `${column} nach hinten verschieben`,\n layout: 'Layout',\n layoutList: 'Liste',\n layoutGrid: 'Raster',\n\n moveSelectedItem: 'Ausgewähltes Element verschieben',\n orderListHint: 'Mit Alt und den Pfeiltasten verschieben Sie das ausgewählte Element.',\n moveTop: 'Ganz nach oben',\n moveUp: 'Nach oben',\n moveDown: 'Nach unten',\n moveBottom: 'Ganz nach unten',\n itemPosition: (label, position, total) => `${label}, Position ${position} von ${total}`,\n transfer: 'Übertragen',\n moveSelectedToTarget: 'Auswahl ins Ziel verschieben',\n moveAllToTarget: 'Alle ins Ziel verschieben',\n moveSelectedToSource: 'Auswahl in die Quelle verschieben',\n moveAllToSource: 'Alle in die Quelle verschieben',\n pickListSource: 'Verfügbar',\n pickListTarget: 'Ausgewählt',\n\n chooseDate: 'Datum auswählen',\n chooseMonth: 'Monat auswählen',\n chooseYear: 'Jahr auswählen',\n previousMonth: 'Vorheriger Monat',\n nextMonth: 'Nächster Monat',\n previousYears: 'Vorherige Jahre',\n nextYears: 'Nächste Jahre',\n today: 'Heute',\n time: 'Uhrzeit',\n startTime: 'Startzeit',\n weekNumber: 'Kalenderwoche',\n weekShort: 'KW',\n endTime: 'Endzeit',\n done: 'Fertig',\n\n increase: 'Erhöhen',\n decrease: 'Verringern',\n showPassword: 'Passwort anzeigen',\n hidePassword: 'Passwort verbergen',\n passwordWeak: 'Passwortstärke: schwach',\n passwordFair: 'Passwortstärke: mittel',\n passwordGood: 'Passwortstärke: gut',\n passwordStrong: 'Passwortstärke: stark',\n passwordRuleLength: (min) => `Mindestens ${min} Zeichen`,\n passwordRuleUpper: 'Ein Großbuchstabe',\n passwordRuleLower: 'Ein Kleinbuchstabe',\n passwordRuleNumber: 'Eine Ziffer',\n passwordRuleSymbol: 'Ein Sonderzeichen',\n ruleMet: 'erfüllt',\n ruleNotMet: 'nicht erfüllt',\n otpLabel: 'Bestätigungscode',\n otpCharacter: (position, total) => `Zeichen ${position} von ${total}`,\n ratingLabel: 'Bewertung',\n sliderMinimum: (label) => `${label} Minimum`.trim(),\n sliderMaximum: (label) => `${label} Maximum`.trim(),\n colorLabel: 'Farbe',\n customColor: 'Eigene Farbe',\n hexValue: (label) => `${label} Hex-Wert`,\n\n chooseFiles: 'Dateien auswählen',\n dropFiles: 'Dateien hierher ziehen oder',\n fileMaxSize: (size) => `max. ${size}`,\n fileUpTo: (count) => `bis zu ${count} ${forCount(count, 'Datei', 'Dateien')}`,\n uploadingFile: (name) => `${name} wird hochgeladen`,\n uploaded: 'Hochgeladen',\n fileTypeNotAllowed: (name) => `${name}: Dieser Dateityp ist nicht zulässig.`,\n fileTooLarge: (name, max) => `${name}: Die Datei ist größer als ${max}.`,\n fileLimitReached: (limit) =>\n `Sie können bis zu ${limit} ${forCount(limit, 'Datei', 'Dateien')} hinzufügen.`,\n\n editorLabel: 'Editor',\n editorFormatting: (label) => `${label}: Formatierung`,\n editorBold: 'Fett',\n editorItalic: 'Kursiv',\n editorUnderline: 'Unterstrichen',\n editorHeading: 'Überschrift',\n editorBulletList: 'Aufzählung',\n editorNumberedList: 'Nummerierte Liste',\n editorClearFormatting: 'Formatierung entfernen',\n editorLink: 'Link',\n editorLinkPrompt: 'Linkadresse (https://…)',\n\n breadcrumb: 'Brotkrümelnavigation',\n stepperLabel: 'Fortschritt',\n stepCompleted: '(abgeschlossen)',\n resizePanes: 'Bereichsgröße ändern',\n dock: 'Dock',\n scrollToTop: 'Nach oben scrollen',\n theme: 'Design',\n themeSystem: 'System',\n themeLight: 'Hell',\n themeDark: 'Dunkel',\n\n pauseSlides: 'Folien anhalten',\n playSlides: 'Folien abspielen',\n previousSlides: 'Vorherige Folien',\n nextSlides: 'Nächste Folien',\n galleryLabel: 'Galerie',\n previousImage: 'Vorheriges Bild',\n nextImage: 'Nächstes Bild',\n showImage: (alt) => `${alt} anzeigen`,\n previewImage: (alt) => `Vorschau: ${alt}`,\n zoomIn: 'Vergrößern',\n zoomOut: 'Verkleinern',\n\n chartView: 'Diagramm',\n tableView: 'Tabelle',\n chartTotal: 'Gesamt',\n chartSeries: 'Reihe',\n chartX: 'X',\n chartY: 'Y',\n chartTypeBar: 'Balkendiagramm',\n chartTypeStackedBar: 'Gestapeltes Balkendiagramm',\n chartTypeLine: 'Liniendiagramm',\n chartTypeArea: 'Flächendiagramm',\n chartTypeDoughnut: 'Ringdiagramm',\n chartTypePie: 'Kreisdiagramm',\n chartTypeRadar: 'Netzdiagramm',\n chartTypePolarArea: 'Polarflächendiagramm',\n chartTypeScatter: 'Punktdiagramm',\n chartDescription: (kind, series, items, min, max) =>\n `${kind} mit ${series} ${series === 1 ? 'Reihe' : 'Reihen'} und ${items} ${items === 1 ? 'Eintrag' : 'Einträgen'}, Werte von ${min} bis ${max}. Die gleichen Daten stehen in der Tabelle.`,\n chartOther: 'Sonstige',\n chartCategory: 'Kategorie',\n chartValue: 'Wert',\n chartShare: 'Anteil',\n meterValue: (value, total) => `${value} von ${total}`,\n};\n"],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ const plural = new Intl.PluralRules("es");
2
+ const forCount = (count, one, other) => plural.select(count) === "one" ? one : other;
3
+ const STAR_UI_TEXT_ES = {
4
+ close: "Cerrar",
5
+ clear: "Borrar",
6
+ loading: "Cargando",
7
+ actions: "Acciones",
8
+ moreActions: "Más acciones",
9
+ ofTotal: (index, total) => `${index} de ${total}`,
10
+ expandItem: (label) => `Expandir ${label}`,
11
+ collapseItem: (label) => `Contraer ${label}`,
12
+ removeItem: (label) => `Quitar ${label}`,
13
+ tagsHint: "Intro o coma para añadir. Retroceso quita el último elemento.",
14
+ tagAdded: (label) => `Se añadió ${label}`,
15
+ tagRemoved: (label) => `Se quitó ${label}`,
16
+ tagInvalid: (label) => `${label}: valor no válido.`,
17
+ tagDuplicate: (label) => `${label}: ya está en la lista.`,
18
+ tagLimit: (max) => `${forCount(max, "Se permite hasta", "Se permiten hasta")} ${max} ${forCount(max, "elemento", "elementos")}.`,
19
+ notifications: "Notificaciones",
20
+ accept: "Confirmar",
21
+ reject: "Cancelar",
22
+ selectPlaceholder: "Seleccionar",
23
+ filterPlaceholder: "Buscar",
24
+ emptyMessage: "No hay opciones disponibles",
25
+ emptyFilterMessage: "No se encontraron resultados",
26
+ selectAll: "Seleccionar todo",
27
+ selectedItems: (count) => `${count} ${forCount(count, "elemento seleccionado", "elementos seleccionados")}`,
28
+ searching: "Buscando…",
29
+ showOptions: "Mostrar opciones",
30
+ resultsAvailable: (count) => `${count} ${forCount(count, "resultado disponible", "resultados disponibles")}`,
31
+ pagination: "Paginación",
32
+ firstPage: "Primera página",
33
+ previousPage: "Página anterior",
34
+ nextPage: "Página siguiente",
35
+ lastPage: "Última página",
36
+ page: (page) => `Página ${page}`,
37
+ rowsPerPage: "Filas por página",
38
+ pageReport: (first, last, total) => `${first}–${last} de ${total}`,
39
+ noData: "No se encontraron registros",
40
+ selectRow: "Seleccionar fila",
41
+ selectAllRows: "Seleccionar todas las filas",
42
+ filterBy: (column) => `Filtrar por ${column}`,
43
+ filterAll: "Todos",
44
+ filterMin: (column) => `${column} desde`,
45
+ filterMax: (column) => `${column} hasta`,
46
+ filterMinShort: "Mín.",
47
+ filterMaxShort: "Máx.",
48
+ expandRow: "Expandir fila",
49
+ collapseRow: "Contraer fila",
50
+ rowDetails: "Detalles",
51
+ reorderRows: "Orden",
52
+ sortMultiHint: "Mayús + clic añade esta columna a la ordenación",
53
+ terminalCommand: "Comando",
54
+ compareImages: "Comparar imágenes",
55
+ editCell: (column) => `Editar ${column}`,
56
+ columns: "Columnas",
57
+ resizeColumn: (column) => `Cambiar el ancho de ${column}`,
58
+ moveColumnEarlier: (column) => `Mover ${column} antes`,
59
+ moveColumnLater: (column) => `Mover ${column} después`,
60
+ layout: "Diseño",
61
+ layoutList: "Lista",
62
+ layoutGrid: "Cuadrícula",
63
+ moveSelectedItem: "Mover el elemento seleccionado",
64
+ orderListHint: "Alt y las teclas de flecha mueven el elemento seleccionado.",
65
+ moveTop: "Mover al principio",
66
+ moveUp: "Subir",
67
+ moveDown: "Bajar",
68
+ moveBottom: "Mover al final",
69
+ itemPosition: (label, position, total) => `${label}, posición ${position} de ${total}`,
70
+ transfer: "Transferir",
71
+ moveSelectedToTarget: "Mover la selección al destino",
72
+ moveAllToTarget: "Mover todo al destino",
73
+ moveSelectedToSource: "Mover la selección al origen",
74
+ moveAllToSource: "Mover todo al origen",
75
+ pickListSource: "Disponibles",
76
+ pickListTarget: "Seleccionados",
77
+ chooseDate: "Elegir fecha",
78
+ chooseMonth: "Elegir mes",
79
+ chooseYear: "Elegir año",
80
+ previousMonth: "Mes anterior",
81
+ nextMonth: "Mes siguiente",
82
+ previousYears: "Años anteriores",
83
+ nextYears: "Años siguientes",
84
+ today: "Hoy",
85
+ time: "Hora",
86
+ startTime: "Hora de inicio",
87
+ weekNumber: "Número de semana",
88
+ weekShort: "Sem.",
89
+ endTime: "Hora de fin",
90
+ done: "Listo",
91
+ increase: "Aumentar",
92
+ decrease: "Disminuir",
93
+ showPassword: "Mostrar contraseña",
94
+ hidePassword: "Ocultar contraseña",
95
+ passwordWeak: "Seguridad de la contraseña: débil",
96
+ passwordFair: "Seguridad de la contraseña: media",
97
+ passwordGood: "Seguridad de la contraseña: buena",
98
+ passwordStrong: "Seguridad de la contraseña: fuerte",
99
+ passwordRuleLength: (min) => `Al menos ${min} ${forCount(min, "carácter", "caracteres")}`,
100
+ passwordRuleUpper: "Una letra mayúscula",
101
+ passwordRuleLower: "Una letra minúscula",
102
+ passwordRuleNumber: "Un número",
103
+ passwordRuleSymbol: "Un símbolo",
104
+ ruleMet: "cumplida",
105
+ ruleNotMet: "no cumplida",
106
+ otpLabel: "Código de verificación",
107
+ otpCharacter: (position, total) => `Carácter ${position} de ${total}`,
108
+ ratingLabel: "Valoración",
109
+ sliderMinimum: (label) => label ? `${label}: mínimo` : "Mínimo",
110
+ sliderMaximum: (label) => label ? `${label}: máximo` : "Máximo",
111
+ colorLabel: "Color",
112
+ customColor: "Color personalizado",
113
+ hexValue: (label) => `Valor hexadecimal de ${label}`,
114
+ chooseFiles: "Elegir archivos",
115
+ dropFiles: "Arrastrar archivos aquí o",
116
+ fileMaxSize: (size) => `máx. ${size}`,
117
+ fileUpTo: (count) => `hasta ${count} ${forCount(count, "archivo", "archivos")}`,
118
+ uploadingFile: (name) => `Subiendo ${name}`,
119
+ uploaded: "Subido",
120
+ fileTypeNotAllowed: (name) => `${name}: este tipo de archivo no está permitido.`,
121
+ fileTooLarge: (name, max) => `${name}: el archivo supera ${max}.`,
122
+ fileLimitReached: (limit) => `${forCount(limit, "Se permite hasta", "Se permiten hasta")} ${limit} ${forCount(limit, "archivo", "archivos")}.`,
123
+ editorLabel: "Editor",
124
+ editorFormatting: (label) => `Formato de ${label}`,
125
+ editorBold: "Negrita",
126
+ editorItalic: "Cursiva",
127
+ editorUnderline: "Subrayado",
128
+ editorHeading: "Encabezado",
129
+ editorBulletList: "Lista con viñetas",
130
+ editorNumberedList: "Lista numerada",
131
+ editorClearFormatting: "Borrar formato",
132
+ editorLink: "Enlace",
133
+ editorLinkPrompt: "Dirección del enlace (https://…)",
134
+ breadcrumb: "Ruta de navegación",
135
+ stepperLabel: "Progreso",
136
+ stepCompleted: "(completado)",
137
+ resizePanes: "Cambiar el tamaño de los paneles",
138
+ dock: "Acoplar",
139
+ scrollToTop: "Ir al principio",
140
+ theme: "Tema",
141
+ themeSystem: "Sistema",
142
+ themeLight: "Claro",
143
+ themeDark: "Oscuro",
144
+ pauseSlides: "Pausar diapositivas",
145
+ playSlides: "Reproducir diapositivas",
146
+ previousSlides: "Diapositivas anteriores",
147
+ nextSlides: "Diapositivas siguientes",
148
+ galleryLabel: "Galería",
149
+ previousImage: "Imagen anterior",
150
+ nextImage: "Imagen siguiente",
151
+ showImage: (alt) => `Mostrar ${alt}`,
152
+ previewImage: (alt) => `Vista previa: ${alt}`,
153
+ zoomIn: "Acercar",
154
+ zoomOut: "Alejar",
155
+ chartView: "Gráfico",
156
+ tableView: "Tabla",
157
+ chartTotal: "Total",
158
+ chartSeries: "Serie",
159
+ chartX: "X",
160
+ chartY: "Y",
161
+ chartTypeBar: "Gráfico de barras",
162
+ chartTypeStackedBar: "Gráfico de barras apiladas",
163
+ chartTypeLine: "Gráfico de líneas",
164
+ chartTypeArea: "Gráfico de áreas",
165
+ chartTypeDoughnut: "Gráfico de anillo",
166
+ chartTypePie: "Gráfico circular",
167
+ chartTypeRadar: "Gráfico de radar",
168
+ chartTypePolarArea: "Gráfico de áreas polares",
169
+ chartTypeScatter: "Gráfico de dispersión",
170
+ chartDescription: (kind, series, items, min, max) => `${kind} con ${series} ${series === 1 ? "serie" : "series"} y ${items} ${items === 1 ? "elemento" : "elementos"}, valores de ${min} a ${max}. Los mismos datos están en la tabla.`,
171
+ chartOther: "Otros",
172
+ chartCategory: "Categoría",
173
+ chartValue: "Valor",
174
+ chartShare: "Proporción",
175
+ meterValue: (value, total) => `${value} de ${total}`
176
+ };
177
+ export { STAR_UI_TEXT_ES };
178
+
179
+ //# sourceMappingURL=star-ng-ui-i18n-es.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-i18n-es.mjs","names":[],"sources":["../../../projects/star-ng/i18n/es/star-ui-text-es.ts"],"sourcesContent":["import type { StarUiText } from '@star-ng/ui/core';\n\nconst plural = new Intl.PluralRules('es');\n\n/** Chooses the Spanish singular or plural form for a count (0 and large counts are plural). */\nconst forCount = (count: number, one: string, other: string): string =>\n plural.select(count) === 'one' ? one : other;\n\n/**\n * Spanish control texts in neutral Spanish: no regional words, no \"tú\" or \"usted\" forms (actions\n * use the infinitive). Provide them with `provideStarUiText(STAR_UI_TEXT_ES)` or through\n * `provideStarUiTextFromSignal()`. The `StarUiText` type makes a missing entry a compile error.\n */\nexport const STAR_UI_TEXT_ES: StarUiText = {\n close: 'Cerrar',\n clear: 'Borrar',\n loading: 'Cargando',\n actions: 'Acciones',\n moreActions: 'Más acciones',\n ofTotal: (index, total) => `${index} de ${total}`,\n expandItem: (label) => `Expandir ${label}`,\n collapseItem: (label) => `Contraer ${label}`,\n removeItem: (label) => `Quitar ${label}`,\n tagsHint: 'Intro o coma para añadir. Retroceso quita el último elemento.',\n tagAdded: (label) => `Se añadió ${label}`,\n tagRemoved: (label) => `Se quitó ${label}`,\n tagInvalid: (label) => `${label}: valor no válido.`,\n tagDuplicate: (label) => `${label}: ya está en la lista.`,\n tagLimit: (max) =>\n `${forCount(max, 'Se permite hasta', 'Se permiten hasta')} ${max} ${forCount(max, 'elemento', 'elementos')}.`,\n notifications: 'Notificaciones',\n accept: 'Confirmar',\n reject: 'Cancelar',\n\n selectPlaceholder: 'Seleccionar',\n filterPlaceholder: 'Buscar',\n emptyMessage: 'No hay opciones disponibles',\n emptyFilterMessage: 'No se encontraron resultados',\n selectAll: 'Seleccionar todo',\n selectedItems: (count) =>\n `${count} ${forCount(count, 'elemento seleccionado', 'elementos seleccionados')}`,\n searching: 'Buscando…',\n showOptions: 'Mostrar opciones',\n resultsAvailable: (count) =>\n `${count} ${forCount(count, 'resultado disponible', 'resultados disponibles')}`,\n\n pagination: 'Paginación',\n firstPage: 'Primera página',\n previousPage: 'Página anterior',\n nextPage: 'Página siguiente',\n lastPage: 'Última página',\n page: (page) => `Página ${page}`,\n rowsPerPage: 'Filas por página',\n pageReport: (first, last, total) => `${first}–${last} de ${total}`,\n noData: 'No se encontraron registros',\n selectRow: 'Seleccionar fila',\n selectAllRows: 'Seleccionar todas las filas',\n filterBy: (column) => `Filtrar por ${column}`,\n filterAll: 'Todos',\n filterMin: (column) => `${column} desde`,\n filterMax: (column) => `${column} hasta`,\n filterMinShort: 'Mín.',\n filterMaxShort: 'Máx.',\n expandRow: 'Expandir fila',\n collapseRow: 'Contraer fila',\n rowDetails: 'Detalles',\n reorderRows: 'Orden',\n sortMultiHint: 'Mayús + clic añade esta columna a la ordenación',\n terminalCommand: 'Comando',\n compareImages: 'Comparar imágenes',\n editCell: (column) => `Editar ${column}`,\n columns: 'Columnas',\n resizeColumn: (column) => `Cambiar el ancho de ${column}`,\n moveColumnEarlier: (column) => `Mover ${column} antes`,\n moveColumnLater: (column) => `Mover ${column} después`,\n layout: 'Diseño',\n layoutList: 'Lista',\n layoutGrid: 'Cuadrícula',\n\n moveSelectedItem: 'Mover el elemento seleccionado',\n orderListHint: 'Alt y las teclas de flecha mueven el elemento seleccionado.',\n moveTop: 'Mover al principio',\n moveUp: 'Subir',\n moveDown: 'Bajar',\n moveBottom: 'Mover al final',\n itemPosition: (label, position, total) => `${label}, posición ${position} de ${total}`,\n transfer: 'Transferir',\n moveSelectedToTarget: 'Mover la selección al destino',\n moveAllToTarget: 'Mover todo al destino',\n moveSelectedToSource: 'Mover la selección al origen',\n moveAllToSource: 'Mover todo al origen',\n pickListSource: 'Disponibles',\n pickListTarget: 'Seleccionados',\n\n chooseDate: 'Elegir fecha',\n chooseMonth: 'Elegir mes',\n chooseYear: 'Elegir año',\n previousMonth: 'Mes anterior',\n nextMonth: 'Mes siguiente',\n previousYears: 'Años anteriores',\n nextYears: 'Años siguientes',\n today: 'Hoy',\n time: 'Hora',\n startTime: 'Hora de inicio',\n weekNumber: 'Número de semana',\n weekShort: 'Sem.',\n endTime: 'Hora de fin',\n done: 'Listo',\n\n increase: 'Aumentar',\n decrease: 'Disminuir',\n showPassword: 'Mostrar contraseña',\n hidePassword: 'Ocultar contraseña',\n passwordWeak: 'Seguridad de la contraseña: débil',\n passwordFair: 'Seguridad de la contraseña: media',\n passwordGood: 'Seguridad de la contraseña: buena',\n passwordStrong: 'Seguridad de la contraseña: fuerte',\n passwordRuleLength: (min) => `Al menos ${min} ${forCount(min, 'carácter', 'caracteres')}`,\n passwordRuleUpper: 'Una letra mayúscula',\n passwordRuleLower: 'Una letra minúscula',\n passwordRuleNumber: 'Un número',\n passwordRuleSymbol: 'Un símbolo',\n ruleMet: 'cumplida',\n ruleNotMet: 'no cumplida',\n otpLabel: 'Código de verificación',\n otpCharacter: (position, total) => `Carácter ${position} de ${total}`,\n ratingLabel: 'Valoración',\n sliderMinimum: (label) => (label ? `${label}: mínimo` : 'Mínimo'),\n sliderMaximum: (label) => (label ? `${label}: máximo` : 'Máximo'),\n colorLabel: 'Color',\n customColor: 'Color personalizado',\n hexValue: (label) => `Valor hexadecimal de ${label}`,\n\n chooseFiles: 'Elegir archivos',\n dropFiles: 'Arrastrar archivos aquí o',\n fileMaxSize: (size) => `máx. ${size}`,\n fileUpTo: (count) => `hasta ${count} ${forCount(count, 'archivo', 'archivos')}`,\n uploadingFile: (name) => `Subiendo ${name}`,\n uploaded: 'Subido',\n fileTypeNotAllowed: (name) => `${name}: este tipo de archivo no está permitido.`,\n fileTooLarge: (name, max) => `${name}: el archivo supera ${max}.`,\n fileLimitReached: (limit) =>\n `${forCount(limit, 'Se permite hasta', 'Se permiten hasta')} ${limit} ${forCount(limit, 'archivo', 'archivos')}.`,\n\n editorLabel: 'Editor',\n editorFormatting: (label) => `Formato de ${label}`,\n editorBold: 'Negrita',\n editorItalic: 'Cursiva',\n editorUnderline: 'Subrayado',\n editorHeading: 'Encabezado',\n editorBulletList: 'Lista con viñetas',\n editorNumberedList: 'Lista numerada',\n editorClearFormatting: 'Borrar formato',\n editorLink: 'Enlace',\n editorLinkPrompt: 'Dirección del enlace (https://…)',\n\n breadcrumb: 'Ruta de navegación',\n stepperLabel: 'Progreso',\n stepCompleted: '(completado)',\n resizePanes: 'Cambiar el tamaño de los paneles',\n dock: 'Acoplar',\n scrollToTop: 'Ir al principio',\n theme: 'Tema',\n themeSystem: 'Sistema',\n themeLight: 'Claro',\n themeDark: 'Oscuro',\n\n pauseSlides: 'Pausar diapositivas',\n playSlides: 'Reproducir diapositivas',\n previousSlides: 'Diapositivas anteriores',\n nextSlides: 'Diapositivas siguientes',\n galleryLabel: 'Galería',\n previousImage: 'Imagen anterior',\n nextImage: 'Imagen siguiente',\n showImage: (alt) => `Mostrar ${alt}`,\n previewImage: (alt) => `Vista previa: ${alt}`,\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n\n chartView: 'Gráfico',\n tableView: 'Tabla',\n chartTotal: 'Total',\n chartSeries: 'Serie',\n chartX: 'X',\n chartY: 'Y',\n chartTypeBar: 'Gráfico de barras',\n chartTypeStackedBar: 'Gráfico de barras apiladas',\n chartTypeLine: 'Gráfico de líneas',\n chartTypeArea: 'Gráfico de áreas',\n chartTypeDoughnut: 'Gráfico de anillo',\n chartTypePie: 'Gráfico circular',\n chartTypeRadar: 'Gráfico de radar',\n chartTypePolarArea: 'Gráfico de áreas polares',\n chartTypeScatter: 'Gráfico de dispersión',\n chartDescription: (kind, series, items, min, max) =>\n `${kind} con ${series} ${series === 1 ? 'serie' : 'series'} y ${items} ${items === 1 ? 'elemento' : 'elementos'}, valores de ${min} a ${max}. Los mismos datos están en la tabla.`,\n chartOther: 'Otros',\n chartCategory: 'Categoría',\n chartValue: 'Valor',\n chartShare: 'Proporción',\n meterValue: (value, total) => `${value} de ${total}`,\n};\n"],"mappings":"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"}