ngwr 14.6.0 → 14.8.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 (169) hide show
  1. package/alert/styles/_index.scss +14 -3
  2. package/avatar/styles/_index.scss +44 -0
  3. package/bar-chart/styles/_index.scss +1 -0
  4. package/calendar-heatmap/styles/_index.scss +1 -0
  5. package/cascader/styles/_rules.scss +86 -18
  6. package/collapse/styles/_index.scss +0 -1
  7. package/date-picker/styles/_index.scss +30 -0
  8. package/density/styles/_index.scss +4 -2
  9. package/donut-chart/styles/_index.scss +10 -0
  10. package/dropdown/styles/_index.scss +67 -5
  11. package/event-calendar/styles/_index.scss +209 -35
  12. package/fesm2022/ngwr-avatar.mjs +19 -2
  13. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  14. package/fesm2022/ngwr-bar-chart.mjs +29 -4
  15. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  16. package/fesm2022/ngwr-calendar-heatmap.mjs +59 -4
  17. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  18. package/fesm2022/ngwr-cascader.mjs +2 -2
  19. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  20. package/fesm2022/ngwr-checkbox.mjs +12 -2
  21. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  22. package/fesm2022/ngwr-date-picker.mjs +705 -46
  23. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  24. package/fesm2022/ngwr-donut-chart.mjs +46 -4
  25. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  26. package/fesm2022/ngwr-dropdown.mjs +166 -17
  27. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  28. package/fesm2022/ngwr-event-calendar.mjs +9 -2
  29. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  30. package/fesm2022/ngwr-form.mjs +52 -1
  31. package/fesm2022/ngwr-form.mjs.map +1 -1
  32. package/fesm2022/ngwr-gauge.mjs +33 -4
  33. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  34. package/fesm2022/ngwr-i18n-ar.mjs +2 -0
  35. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  36. package/fesm2022/ngwr-i18n-cs.mjs +2 -0
  37. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  38. package/fesm2022/ngwr-i18n-de.mjs +2 -0
  39. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  40. package/fesm2022/ngwr-i18n-en.mjs +5 -0
  41. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  42. package/fesm2022/ngwr-i18n-es.mjs +2 -0
  43. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  44. package/fesm2022/ngwr-i18n-fr.mjs +2 -0
  45. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  46. package/fesm2022/ngwr-i18n-he.mjs +2 -0
  47. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  48. package/fesm2022/ngwr-i18n-hi.mjs +2 -0
  49. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  50. package/fesm2022/ngwr-i18n-id.mjs +2 -0
  51. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  52. package/fesm2022/ngwr-i18n-it.mjs +2 -0
  53. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  54. package/fesm2022/ngwr-i18n-ja.mjs +2 -0
  55. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  56. package/fesm2022/ngwr-i18n-ko.mjs +2 -0
  57. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  58. package/fesm2022/ngwr-i18n-nl.mjs +2 -0
  59. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  60. package/fesm2022/ngwr-i18n-pl.mjs +2 -0
  61. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  62. package/fesm2022/ngwr-i18n-pt.mjs +2 -0
  63. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  64. package/fesm2022/ngwr-i18n-ru.mjs +2 -0
  65. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  66. package/fesm2022/ngwr-i18n-sv.mjs +2 -0
  67. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  68. package/fesm2022/ngwr-i18n-tr.mjs +2 -0
  69. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  70. package/fesm2022/ngwr-i18n-uk.mjs +2 -0
  71. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  72. package/fesm2022/ngwr-i18n-vi.mjs +2 -0
  73. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  74. package/fesm2022/ngwr-i18n-zh-TW.mjs +2 -0
  75. package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
  76. package/fesm2022/ngwr-i18n-zh.mjs +2 -0
  77. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  78. package/fesm2022/ngwr-image-cropper.mjs +149 -62
  79. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  80. package/fesm2022/ngwr-input-number.mjs +12 -0
  81. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  82. package/fesm2022/ngwr-lightbox.mjs +2 -2
  83. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  84. package/fesm2022/ngwr-line-chart.mjs +16 -5
  85. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  86. package/fesm2022/ngwr-meter-group-testing.mjs +7 -3
  87. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  88. package/fesm2022/ngwr-meter-group.mjs +24 -4
  89. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  90. package/fesm2022/ngwr-page-header.mjs +10 -2
  91. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  92. package/fesm2022/ngwr-popover.mjs +569 -7
  93. package/fesm2022/ngwr-popover.mjs.map +1 -1
  94. package/fesm2022/ngwr-select.mjs +73 -22
  95. package/fesm2022/ngwr-select.mjs.map +1 -1
  96. package/fesm2022/ngwr-sidebar.mjs +7 -0
  97. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  98. package/fesm2022/ngwr-sparkline.mjs +82 -8
  99. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  100. package/fesm2022/ngwr-table.mjs +1 -1
  101. package/fesm2022/ngwr-table.mjs.map +1 -1
  102. package/fesm2022/ngwr-toolbar.mjs +7 -0
  103. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  104. package/fesm2022/ngwr-version.mjs +1 -1
  105. package/fesm2022/ngwr-version.mjs.map +1 -1
  106. package/form/styles/_index.scss +11 -1
  107. package/gauge/styles/_index.scss +1 -0
  108. package/i18n/ar.json +3 -1
  109. package/i18n/cs.json +3 -1
  110. package/i18n/de.json +3 -1
  111. package/i18n/en.json +3 -1
  112. package/i18n/es.json +3 -1
  113. package/i18n/fr.json +3 -1
  114. package/i18n/he.json +3 -1
  115. package/i18n/hi.json +3 -1
  116. package/i18n/id.json +3 -1
  117. package/i18n/it.json +3 -1
  118. package/i18n/ja.json +3 -1
  119. package/i18n/ko.json +3 -1
  120. package/i18n/nl.json +3 -1
  121. package/i18n/pl.json +3 -1
  122. package/i18n/pt.json +3 -1
  123. package/i18n/ru.json +3 -1
  124. package/i18n/sv.json +3 -1
  125. package/i18n/tr.json +3 -1
  126. package/i18n/uk.json +3 -1
  127. package/i18n/vi.json +3 -1
  128. package/i18n/zh-TW.json +3 -1
  129. package/i18n/zh.json +3 -1
  130. package/input/styles/_index.scss +27 -2
  131. package/input-number/styles/_index.scss +69 -0
  132. package/lightbox/styles/_rules.scss +7 -1
  133. package/line-chart/styles/_index.scss +30 -2
  134. package/llms-full.txt +3 -3
  135. package/meter-group/styles/_index.scss +1 -0
  136. package/overlay/styles/_arrow.scss +27 -2
  137. package/package.json +1 -1
  138. package/page-header/styles/_index.scss +37 -1
  139. package/pagination/styles/_index.scss +9 -5
  140. package/popover/styles/_index.scss +73 -5
  141. package/select/styles/_index.scss +64 -13
  142. package/sidebar/styles/_index.scss +34 -2
  143. package/sparkline/styles/_index.scss +19 -0
  144. package/table/styles/_index.scss +55 -0
  145. package/toast/styles/_index.scss +9 -3
  146. package/toolbar/styles/_index.scss +35 -1
  147. package/tree/styles/_index.scss +45 -9
  148. package/types/ngwr-avatar.d.ts +15 -1
  149. package/types/ngwr-bar-chart.d.ts +19 -1
  150. package/types/ngwr-calendar-heatmap.d.ts +29 -1
  151. package/types/ngwr-checkbox.d.ts +2 -0
  152. package/types/ngwr-date-picker.d.ts +308 -43
  153. package/types/ngwr-donut-chart.d.ts +24 -1
  154. package/types/ngwr-dropdown.d.ts +22 -2
  155. package/types/ngwr-event-calendar.d.ts +8 -0
  156. package/types/ngwr-form.d.ts +35 -5
  157. package/types/ngwr-gauge.d.ts +20 -1
  158. package/types/ngwr-image-cropper.d.ts +48 -0
  159. package/types/ngwr-input-number.d.ts +7 -0
  160. package/types/ngwr-line-chart.d.ts +9 -1
  161. package/types/ngwr-meter-group-testing.d.ts +3 -2
  162. package/types/ngwr-meter-group.d.ts +14 -1
  163. package/types/ngwr-page-header.d.ts +10 -2
  164. package/types/ngwr-popover.d.ts +154 -3
  165. package/types/ngwr-select.d.ts +63 -6
  166. package/types/ngwr-sidebar.d.ts +7 -0
  167. package/types/ngwr-sparkline.d.ts +43 -1
  168. package/types/ngwr-toolbar.d.ts +7 -0
  169. package/types/ngwr-version.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-i18n-zh.mjs","sources":["../../../projects/lib/i18n/zh/public-api.ts","../../../projects/lib/i18n/zh/ngwr-i18n-zh.ts"],"sourcesContent":["import { type WrI18nCatalog } from 'ngwr/i18n';\n\n/** Base Simplified Chinese catalog for ngwr built-in component strings. */\nexport const wrZh: WrI18nCatalog = {\n common: {\n ok: '确定',\n cancel: '取消',\n close: '关闭',\n confirm: '确认',\n delete: '删除',\n save: '保存',\n edit: '编辑',\n add: '添加',\n remove: '移除',\n clear: '清除',\n search: '搜索',\n loading: '加载中…',\n select: '选择',\n next: '下一步',\n previous: '上一步',\n back: '返回',\n today: '今天',\n yesterday: '昨天',\n tomorrow: '明天',\n of: '共',\n },\n pagination: {\n prev: '上一页',\n next: '下一页',\n itemsPerPage: '每页条数',\n perPage: '{{size}} 条/页',\n goToPage: '跳转到第 {{page}} 页',\n label: '分页',\n pageOf: '第 {{current}} 页,共 {{total}} 页',\n range: '{{from}}–{{to}},共 {{total}} 条',\n compact: '{{current}} / {{total}}',\n },\n table: {\n empty: '暂无数据',\n loading: '加载中…',\n sort: '对此列排序',\n filter: '筛选此列',\n selectAll: '选择所有行',\n selectRow: '选择行',\n expandRow: '展开或收起行详情',\n toggleRow: '展开或收起子行',\n selectGroup: '选择分组',\n toggleGroup: '展开或收起分组',\n noMatches: '无匹配结果',\n search: '搜索',\n reset: '重置',\n },\n eventCalendar: {\n today: '今天',\n previous: '上一个',\n next: '下一个',\n month: '月',\n week: '周',\n day: '日',\n time: '时间',\n allDay: '全天',\n label: '日历',\n more: '+{{count}} 项',\n header: '{{year}}年{{month}}',\n range: '{{from}} – {{to}}',\n chipLabel: '{{title}},{{time}}',\n slotLabel: '{{date}} {{time}}',\n allDayCellLabel: '{{date}} {{label}}',\n },\n tour: {\n next: '下一步',\n back: '上一步',\n done: '完成',\n skip: '跳过引导',\n progress: '第 {{current}} 步,共 {{total}} 步',\n },\n splitter: {\n divider: '调整面板大小',\n },\n stepper: {\n optional: '可选',\n },\n transfer: {\n source: '待选',\n target: '已选',\n search: '搜索',\n empty: '暂无内容',\n selectAll: '全选',\n toTarget: '移至已选',\n toSource: '移回待选',\n count: '{{checked}} / {{total}}',\n selectAllAria: '{{pane}} — {{action}}',\n },\n form: {\n optional: '选填',\n },\n validation: {\n required: '此项为必填项。',\n requiredTrue: '请勾选此项。',\n email: '请输入有效的电子邮箱地址。',\n minlength: '请至少输入 {{requiredLength}} 个字符。',\n maxlength: '最多可输入 {{requiredLength}} 个字符。',\n min: '请输入不小于 {{min}} 的值。',\n max: '请输入不大于 {{max}} 的值。',\n pattern: '此值的格式不正确。',\n noWhitespace: '此值不能包含空格。',\n hexColor: '请输入十六进制颜色值,例如 #1a2b3c。',\n url: '请输入有效的网址。',\n cardNumber: '请输入有效的卡号。',\n cvc: '请输入 {{length}} 位安全码。',\n iban: '请输入有效的 IBAN。',\n match: '两个值不一致。',\n matchFields: '这些字段的值不一致。',\n oneOf: '请从允许的值中选择。',\n minDate: '请选择更晚的日期。',\n maxDate: '请选择更早的日期。',\n },\n select: {\n label: '选择',\n placeholder: '请选择',\n empty: '暂无选项',\n clearSelection: '清除选择',\n removeItem: '移除 {{label}}',\n noResults: '无搜索结果',\n loading: '加载中…',\n more: '+{{count}} 项',\n },\n tree: {\n expand: '展开',\n collapse: '收起',\n placeholder: '请选择',\n clearSelection: '清除选择',\n removeItem: '移除 {{label}}',\n more: '+{{count}} 项',\n },\n commandPalette: {\n label: '命令面板',\n placeholder: '输入命令或搜索…',\n noResults: '无搜索结果',\n loading: '搜索中…',\n escHint: 'esc',\n },\n empty: {\n noData: '暂无数据',\n },\n fileUpload: {\n browse: '点击选择文件',\n dropZone: '或将文件拖放到此处',\n dropZoneLabel: '文件拖放区域,点击或拖放文件',\n removeFile: '移除文件',\n invalid: '不支持的文件类型',\n tooBig: '文件过大',\n size: '{{value}} {{unit}}',\n unitByte: 'B',\n unitKb: 'KB',\n unitMb: 'MB',\n unitGb: 'GB',\n unitTb: 'TB',\n },\n popconfirm: {\n label: '确认操作',\n confirm: '确认',\n cancel: '取消',\n },\n toast: {\n region: '通知',\n close: '关闭',\n copy: '复制',\n copied: '已复制',\n closeAll: '全部关闭',\n },\n input: {\n showPassword: '显示密码',\n hidePassword: '隐藏密码',\n },\n inputNumber: {\n increment: '增加',\n decrement: '减少',\n },\n inputOtp: {\n label: '验证码',\n digit: '第 {{index}} 位数字',\n character: '第 {{index}} 个字符',\n },\n anchor: {\n label: '目录',\n },\n avatar: {\n alt: '头像',\n },\n backTop: {\n label: '返回顶部',\n },\n breadcrumbs: {\n label: '面包屑导航',\n },\n burger: {\n label: '打开或关闭菜单',\n },\n calendar: {\n prevMonth: '上个月',\n nextMonth: '下个月',\n prevYear: '上一年',\n nextYear: '下一年',\n monthList: '月份',\n yearList: '年份',\n prevYears: '前 12 年',\n nextYears: '后 12 年',\n header: '{{year}}年{{month}}',\n yearRange: '{{from}} – {{to}}',\n dayLabel: '{{date}} {{weekday}}',\n },\n imageCropper: {\n empty: '暂无图片',\n window: '裁剪区域',\n keyHelp:\n '方向键移动裁剪框。按住 Alt 加方向键可调整大小,按住 Shift 可加大步长。' +\n '裁剪框会以图像像素为单位,依次朗读左、上、宽、高四个值。',\n },\n sortableList: {\n keyHelp: '按空格键拿起此项,然后用方向键移动。再次按空格键放下,或按 Esc 键放回原位。',\n grabbed: '已拿起。第 {{index}} 项,共 {{total}} 项。',\n moved: '第 {{index}} 项,共 {{total}} 项。',\n dropped: '已放下。第 {{index}} 项,共 {{total}} 项。',\n cancelled: '已取消移动。',\n },\n colorPicker: {\n area: '饱和度 {{saturation}}%,明度 {{brightness}}%',\n hue: '色相',\n alpha: '不透明度',\n formatHex: 'HEX',\n formatRgb: 'RGB',\n formatHsl: 'HSL',\n channelHex: 'HEX',\n channelRed: 'R',\n channelGreen: 'G',\n channelBlue: 'B',\n channelHue: 'H',\n channelSaturation: 'S%',\n channelLightness: 'L%',\n channelAlpha: 'A%',\n },\n calendarHeatmap: {\n label: '日历热力图',\n cell: '{{date}}: {{count}}',\n },\n lineChart: {\n label: '折线图',\n thousands: '{{value}}千',\n },\n donutChart: {\n label: '环形图',\n },\n compare: {\n label: '对比分隔条',\n },\n carousel: {\n label: '轮播图',\n goToSlide: '转到第 {{index}} 张幻灯片',\n prev: '上一张幻灯片',\n next: '下一张幻灯片',\n pagination: '轮播分页',\n roledescription: '轮播图',\n slideRoledescription: '幻灯片',\n },\n actionSheet: {\n label: '操作',\n },\n alert: {\n close: '关闭提示',\n },\n qr: {\n label: '二维码',\n },\n image: {\n viewer: '图片预览',\n open: '打开预览',\n close: '关闭预览',\n },\n window: {\n close: '关闭',\n minimize: '最小化',\n maximize: '最大化',\n restore: '还原',\n restoreDown: '向下还原',\n restoreWindow: '还原 {{title}}',\n closeWindow: '关闭窗口',\n untitled: '无标题',\n taskbar: '已最小化的窗口',\n },\n dialog: {\n close: '关闭对话框',\n },\n popover: {\n label: '弹出面板',\n },\n markdown: {\n copy: '复制代码',\n copied: '已复制',\n taskDone: '已完成:',\n taskTodo: '待办:',\n },\n marquee: {\n label: '跑马灯',\n link: '链接',\n },\n mention: {\n listbox: '提及',\n available: '匹配项:{{count}}',\n inserted: '已插入:{{label}}',\n },\n drawer: {\n close: '关闭抽屉',\n },\n datePicker: {\n open: '打开日历',\n openTime: '打开时间选择器',\n openDateTime: '打开日期时间选择器',\n openRange: '打开日期范围日历',\n panel: '选择日期',\n panelTime: '选择时间',\n panelDateTime: '选择日期和时间',\n panelRange: '选择日期范围',\n panelRangeDateTime: '选择日期和时间范围',\n rangeStart: '起始日期',\n rangeEnd: '结束日期',\n startTime: '开始时间',\n endTime: '结束时间',\n hours: '小时',\n minutes: '分钟',\n seconds: '秒',\n incrementHours: '增加小时',\n decrementHours: '减少小时',\n incrementMinutes: '增加分钟',\n decrementMinutes: '减少分钟',\n incrementSeconds: '增加秒',\n decrementSeconds: '减少秒',\n toggleAmPm: '切换上午/下午',\n am: '上午',\n pm: '下午',\n },\n sidebar: {\n label: '侧边栏',\n },\n spinner: {\n label: '加载中',\n },\n rating: {\n label: '评分',\n },\n gauge: {\n label: '仪表盘',\n },\n graph: {\n label: '图',\n parents: '父节点:{{names}}。',\n children: '子节点:{{names}}。',\n },\n progress: {\n label: '进度',\n },\n meterGroup: {\n label: '计量条',\n },\n knob: {\n label: '数值',\n },\n slider: {\n label: '数值',\n lower: '下限值',\n upper: '上限值',\n },\n speedDial: {\n label: '操作',\n },\n statistic: {\n delta: '{{value}}{{suffix}}',\n deltaSuffix: '%',\n },\n result: {\n notFound: '抱歉,您访问的页面不存在。',\n forbidden: '抱歉,您无权访问此页面。',\n serverError: '抱歉,出错了。',\n },\n date: {\n months: {\n jan: '一月',\n feb: '二月',\n mar: '三月',\n apr: '四月',\n may: '五月',\n jun: '六月',\n jul: '七月',\n aug: '八月',\n sep: '九月',\n oct: '十月',\n nov: '十一月',\n dec: '十二月',\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngwr-i18n-zh.mjs","sources":["../../../projects/lib/i18n/zh/public-api.ts","../../../projects/lib/i18n/zh/ngwr-i18n-zh.ts"],"sourcesContent":["import { type WrI18nCatalog } from 'ngwr/i18n';\n\n/** Base Simplified Chinese catalog for ngwr built-in component strings. */\nexport const wrZh: WrI18nCatalog = {\n common: {\n ok: '确定',\n cancel: '取消',\n close: '关闭',\n confirm: '确认',\n delete: '删除',\n save: '保存',\n edit: '编辑',\n add: '添加',\n remove: '移除',\n clear: '清除',\n search: '搜索',\n loading: '加载中…',\n select: '选择',\n next: '下一步',\n previous: '上一步',\n back: '返回',\n today: '今天',\n yesterday: '昨天',\n tomorrow: '明天',\n of: '共',\n },\n pagination: {\n prev: '上一页',\n next: '下一页',\n itemsPerPage: '每页条数',\n perPage: '{{size}} 条/页',\n goToPage: '跳转到第 {{page}} 页',\n label: '分页',\n pageOf: '第 {{current}} 页,共 {{total}} 页',\n range: '{{from}}–{{to}},共 {{total}} 条',\n compact: '{{current}} / {{total}}',\n },\n table: {\n empty: '暂无数据',\n loading: '加载中…',\n sort: '对此列排序',\n filter: '筛选此列',\n selectAll: '选择所有行',\n selectRow: '选择行',\n expandRow: '展开或收起行详情',\n toggleRow: '展开或收起子行',\n selectGroup: '选择分组',\n toggleGroup: '展开或收起分组',\n noMatches: '无匹配结果',\n search: '搜索',\n reset: '重置',\n },\n eventCalendar: {\n today: '今天',\n previous: '上一个',\n next: '下一个',\n month: '月',\n week: '周',\n day: '日',\n time: '时间',\n allDay: '全天',\n label: '日历',\n more: '+{{count}} 项',\n header: '{{year}}年{{month}}',\n range: '{{from}} – {{to}}',\n chipLabel: '{{title}},{{time}}',\n slotLabel: '{{date}} {{time}}',\n allDayCellLabel: '{{date}} {{label}}',\n },\n tour: {\n next: '下一步',\n back: '上一步',\n done: '完成',\n skip: '跳过引导',\n progress: '第 {{current}} 步,共 {{total}} 步',\n },\n splitter: {\n divider: '调整面板大小',\n },\n stepper: {\n optional: '可选',\n },\n transfer: {\n source: '待选',\n target: '已选',\n search: '搜索',\n empty: '暂无内容',\n selectAll: '全选',\n toTarget: '移至已选',\n toSource: '移回待选',\n count: '{{checked}} / {{total}}',\n selectAllAria: '{{pane}} — {{action}}',\n },\n form: {\n optional: '选填',\n },\n validation: {\n required: '此项为必填项。',\n requiredTrue: '请勾选此项。',\n email: '请输入有效的电子邮箱地址。',\n minlength: '请至少输入 {{requiredLength}} 个字符。',\n maxlength: '最多可输入 {{requiredLength}} 个字符。',\n min: '请输入不小于 {{min}} 的值。',\n max: '请输入不大于 {{max}} 的值。',\n pattern: '此值的格式不正确。',\n noWhitespace: '此值不能包含空格。',\n hexColor: '请输入十六进制颜色值,例如 #1a2b3c。',\n url: '请输入有效的网址。',\n cardNumber: '请输入有效的卡号。',\n cvc: '请输入 {{length}} 位安全码。',\n iban: '请输入有效的 IBAN。',\n match: '两个值不一致。',\n matchFields: '这些字段的值不一致。',\n oneOf: '请从允许的值中选择。',\n minDate: '请选择更晚的日期。',\n maxDate: '请选择更早的日期。',\n dateFormat: '格式应为:{{example}}',\n dateFilter: '此日期不可选。',\n },\n select: {\n label: '选择',\n placeholder: '请选择',\n empty: '暂无选项',\n clearSelection: '清除选择',\n removeItem: '移除 {{label}}',\n noResults: '无搜索结果',\n loading: '加载中…',\n more: '+{{count}} 项',\n },\n tree: {\n expand: '展开',\n collapse: '收起',\n placeholder: '请选择',\n clearSelection: '清除选择',\n removeItem: '移除 {{label}}',\n more: '+{{count}} 项',\n },\n commandPalette: {\n label: '命令面板',\n placeholder: '输入命令或搜索…',\n noResults: '无搜索结果',\n loading: '搜索中…',\n escHint: 'esc',\n },\n empty: {\n noData: '暂无数据',\n },\n fileUpload: {\n browse: '点击选择文件',\n dropZone: '或将文件拖放到此处',\n dropZoneLabel: '文件拖放区域,点击或拖放文件',\n removeFile: '移除文件',\n invalid: '不支持的文件类型',\n tooBig: '文件过大',\n size: '{{value}} {{unit}}',\n unitByte: 'B',\n unitKb: 'KB',\n unitMb: 'MB',\n unitGb: 'GB',\n unitTb: 'TB',\n },\n popconfirm: {\n label: '确认操作',\n confirm: '确认',\n cancel: '取消',\n },\n toast: {\n region: '通知',\n close: '关闭',\n copy: '复制',\n copied: '已复制',\n closeAll: '全部关闭',\n },\n input: {\n showPassword: '显示密码',\n hidePassword: '隐藏密码',\n },\n inputNumber: {\n increment: '增加',\n decrement: '减少',\n },\n inputOtp: {\n label: '验证码',\n digit: '第 {{index}} 位数字',\n character: '第 {{index}} 个字符',\n },\n anchor: {\n label: '目录',\n },\n avatar: {\n alt: '头像',\n },\n backTop: {\n label: '返回顶部',\n },\n breadcrumbs: {\n label: '面包屑导航',\n },\n burger: {\n label: '打开或关闭菜单',\n },\n calendar: {\n prevMonth: '上个月',\n nextMonth: '下个月',\n prevYear: '上一年',\n nextYear: '下一年',\n monthList: '月份',\n yearList: '年份',\n prevYears: '前 12 年',\n nextYears: '后 12 年',\n header: '{{year}}年{{month}}',\n yearRange: '{{from}} – {{to}}',\n dayLabel: '{{date}} {{weekday}}',\n },\n imageCropper: {\n empty: '暂无图片',\n window: '裁剪区域',\n keyHelp:\n '方向键移动裁剪框。按住 Alt 加方向键可调整大小,按住 Shift 可加大步长。' +\n '裁剪框会以图像像素为单位,依次朗读左、上、宽、高四个值。',\n },\n sortableList: {\n keyHelp: '按空格键拿起此项,然后用方向键移动。再次按空格键放下,或按 Esc 键放回原位。',\n grabbed: '已拿起。第 {{index}} 项,共 {{total}} 项。',\n moved: '第 {{index}} 项,共 {{total}} 项。',\n dropped: '已放下。第 {{index}} 项,共 {{total}} 项。',\n cancelled: '已取消移动。',\n },\n colorPicker: {\n area: '饱和度 {{saturation}}%,明度 {{brightness}}%',\n hue: '色相',\n alpha: '不透明度',\n formatHex: 'HEX',\n formatRgb: 'RGB',\n formatHsl: 'HSL',\n channelHex: 'HEX',\n channelRed: 'R',\n channelGreen: 'G',\n channelBlue: 'B',\n channelHue: 'H',\n channelSaturation: 'S%',\n channelLightness: 'L%',\n channelAlpha: 'A%',\n },\n calendarHeatmap: {\n label: '日历热力图',\n cell: '{{date}}: {{count}}',\n },\n lineChart: {\n label: '折线图',\n thousands: '{{value}}千',\n },\n donutChart: {\n label: '环形图',\n },\n compare: {\n label: '对比分隔条',\n },\n carousel: {\n label: '轮播图',\n goToSlide: '转到第 {{index}} 张幻灯片',\n prev: '上一张幻灯片',\n next: '下一张幻灯片',\n pagination: '轮播分页',\n roledescription: '轮播图',\n slideRoledescription: '幻灯片',\n },\n actionSheet: {\n label: '操作',\n },\n alert: {\n close: '关闭提示',\n },\n qr: {\n label: '二维码',\n },\n image: {\n viewer: '图片预览',\n open: '打开预览',\n close: '关闭预览',\n },\n window: {\n close: '关闭',\n minimize: '最小化',\n maximize: '最大化',\n restore: '还原',\n restoreDown: '向下还原',\n restoreWindow: '还原 {{title}}',\n closeWindow: '关闭窗口',\n untitled: '无标题',\n taskbar: '已最小化的窗口',\n },\n dialog: {\n close: '关闭对话框',\n },\n popover: {\n label: '弹出面板',\n },\n markdown: {\n copy: '复制代码',\n copied: '已复制',\n taskDone: '已完成:',\n taskTodo: '待办:',\n },\n marquee: {\n label: '跑马灯',\n link: '链接',\n },\n mention: {\n listbox: '提及',\n available: '匹配项:{{count}}',\n inserted: '已插入:{{label}}',\n },\n drawer: {\n close: '关闭抽屉',\n },\n datePicker: {\n open: '打开日历',\n openTime: '打开时间选择器',\n openDateTime: '打开日期时间选择器',\n openRange: '打开日期范围日历',\n panel: '选择日期',\n panelTime: '选择时间',\n panelDateTime: '选择日期和时间',\n panelRange: '选择日期范围',\n panelRangeDateTime: '选择日期和时间范围',\n rangeStart: '起始日期',\n rangeEnd: '结束日期',\n startTime: '开始时间',\n endTime: '结束时间',\n hours: '小时',\n minutes: '分钟',\n seconds: '秒',\n incrementHours: '增加小时',\n decrementHours: '减少小时',\n incrementMinutes: '增加分钟',\n decrementMinutes: '减少分钟',\n incrementSeconds: '增加秒',\n decrementSeconds: '减少秒',\n toggleAmPm: '切换上午/下午',\n am: '上午',\n pm: '下午',\n },\n sidebar: {\n label: '侧边栏',\n },\n spinner: {\n label: '加载中',\n },\n rating: {\n label: '评分',\n },\n gauge: {\n label: '仪表盘',\n },\n graph: {\n label: '图',\n parents: '父节点:{{names}}。',\n children: '子节点:{{names}}。',\n },\n progress: {\n label: '进度',\n },\n meterGroup: {\n label: '计量条',\n },\n knob: {\n label: '数值',\n },\n slider: {\n label: '数值',\n lower: '下限值',\n upper: '上限值',\n },\n speedDial: {\n label: '操作',\n },\n statistic: {\n delta: '{{value}}{{suffix}}',\n deltaSuffix: '%',\n },\n result: {\n notFound: '抱歉,您访问的页面不存在。',\n forbidden: '抱歉,您无权访问此页面。',\n serverError: '抱歉,出错了。',\n },\n date: {\n months: {\n jan: '一月',\n feb: '二月',\n mar: '三月',\n apr: '四月',\n may: '五月',\n jun: '六月',\n jul: '七月',\n aug: '八月',\n sep: '九月',\n oct: '十月',\n nov: '十一月',\n dec: '十二月',\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAEA;AACO,MAAM,IAAI,GAAkB;AACjC,IAAA,MAAM,EAAE;AACN,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,EAAE,EAAE,GAAG;AACR,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,+BAA+B;AACvC,QAAA,KAAK,EAAE,+BAA+B;AACtC,QAAA,OAAO,EAAE,yBAAyB;AACnC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,KAAK,EAAE,mBAAmB;AAC1B,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,eAAe,EAAE,oBAAoB;AACtC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,QAAQ,EAAE,+BAA+B;AAC1C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,QAAQ;AAClB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,yBAAyB;AAChC,QAAA,aAAa,EAAE,uBAAuB;AACvC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,YAAY,EAAE,QAAQ;AACtB,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,SAAS,EAAE,+BAA+B;AAC1C,QAAA,SAAS,EAAE,+BAA+B;AAC1C,QAAA,GAAG,EAAE,oBAAoB;AACzB,QAAA,GAAG,EAAE,oBAAoB;AACzB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,YAAY,EAAE,WAAW;AACzB,QAAA,QAAQ,EAAE,wBAAwB;AAClC,QAAA,GAAG,EAAE,WAAW;AAChB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,GAAG,EAAE,sBAAsB;AAC3B,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,UAAU,EAAE,kBAAkB;AAC9B,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,UAAU,EAAE,cAAc;AAC1B,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,IAAI,EAAE,cAAc;AACrB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,UAAU,EAAE,cAAc;AAC1B,QAAA,IAAI,EAAE,cAAc;AACrB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,IAAI;AAChB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE,iBAAiB;AACxB,QAAA,SAAS,EAAE,iBAAiB;AAC7B,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,IAAI;AACV,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,QAAQ,EAAE,sBAAsB;AACjC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EACL,2CAA2C;YAC3C,8BAA8B;AACjC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,0CAA0C;AACnD,QAAA,OAAO,EAAE,kCAAkC;AAC3C,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,OAAO,EAAE,kCAAkC;AAC3C,QAAA,SAAS,EAAE,QAAQ;AACpB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,wCAAwC;AAC9C,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,YAAY,EAAE,GAAG;AACjB,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,qBAAqB;AAC5B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,YAAY;AACxB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,QAAQ,EAAE,eAAe;AAC1B,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,YAAY,EAAE,WAAW;AACzB,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,kBAAkB,EAAE,WAAW;AAC/B,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,gBAAgB,EAAE,MAAM;AACxB,QAAA,gBAAgB,EAAE,MAAM;AACxB,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,EAAE,EAAE,IAAI;AACT,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,QAAQ,EAAE,gBAAgB;AAC3B,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,GAAG;AACjB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,WAAW,EAAE,SAAS;AACvB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE;AACN,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACX,SAAA;AACF,KAAA;;;ACjZH;;AAEG;;;;"}
@@ -2,7 +2,7 @@ import { coerceNumberProperty } from '@angular/cdk/coercion';
2
2
  import * as i0 from '@angular/core';
3
3
  import { signal, input, output, viewChild, inject, DestroyRef, computed, effect, ViewEncapsulation, Component } from '@angular/core';
4
4
  import { useI18nText } from 'ngwr/i18n';
5
- import { randomId, clamp } from 'ngwr/utils';
5
+ import { clamp, randomId } from 'ngwr/utils';
6
6
 
7
7
  /**
8
8
  * @license
@@ -30,6 +30,67 @@ const NO_OVERRIDE = signal(null).asReadonly();
30
30
  /** Keyboard step in display pixels, and what Shift promotes it to. */
31
31
  const KEY_STEP = 1;
32
32
  const KEY_STEP_COARSE = 10;
33
+ const NO_SIDES = { left: 0, top: 0, right: 0, bottom: 0 };
34
+ /**
35
+ * The rect a resize gesture produces: a pure function of the rect the gesture started
36
+ * from and the TOTAL pointer offset, so the same pointer position always gives the same
37
+ * rect however the pointer got there.
38
+ *
39
+ * The anchor never moves. It is the edge or corner opposite the handle — for `se` the
40
+ * top-left corner, for `e` the west edge's line. The old version clamped `x`, `y`, `w`
41
+ * and `h` one at a time after deriving the second axis, so once the derived axis ran
42
+ * into the image edge the rect slid AWAY from its anchor and, past the far bound, off
43
+ * the image entirely.
44
+ *
45
+ * With a ratio the size is the largest along that ratio which fits from the anchor —
46
+ * the smaller of the width-limited and height-limited sizes — and no smaller than both
47
+ * minimums allow. Where the image cannot fit the minimum from this anchor, the bound
48
+ * wins: a crop past the edge of the image is worse than one under the minimum.
49
+ *
50
+ * An edge handle with a ratio also sizes the axis it does not drive, and that axis has
51
+ * the image's WHOLE extent to grow into: the rect stays centred on its old midline where
52
+ * it can and slides along that axis only as far as it must to stay on the image. Capping
53
+ * the size at twice the distance from the midline to the nearer side instead would leave
54
+ * a square crop resting against the top edge unable to widen at all.
55
+ */
56
+ function resizeFrom(r, handle, dx, dy, bounds, min, ratio) {
57
+ const east = handle.includes('e');
58
+ const west = handle.includes('w');
59
+ const south = handle.includes('s');
60
+ const north = handle.includes('n');
61
+ const right = r.x + r.w;
62
+ const bottom = r.y + r.h;
63
+ if (!ratio || ratio <= 0) {
64
+ let { x, y, w, h } = r;
65
+ if (east)
66
+ w = clamp(r.w + dx, min.w, bounds.w - r.x);
67
+ if (west) {
68
+ w = clamp(r.w - dx, min.w, right);
69
+ x = right - w;
70
+ }
71
+ if (south)
72
+ h = clamp(r.h + dy, min.h, bounds.h - r.y);
73
+ if (north) {
74
+ h = clamp(r.h - dy, min.h, bottom);
75
+ y = bottom - h;
76
+ }
77
+ return { x, y, w, h };
78
+ }
79
+ // Room from the anchor to the image edge on each axis the handle drives; the whole
80
+ // image on an axis it does not.
81
+ const roomW = east ? bounds.w - r.x : west ? right : bounds.w;
82
+ const roomH = south ? bounds.h - r.y : north ? bottom : bounds.h;
83
+ // Corners follow the horizontal delta, as they always have; `n` / `s` the vertical one.
84
+ const wanted = east ? r.w + dx : west ? r.w - dx : (south ? r.h + dy : r.h - dy) * ratio;
85
+ const w = clamp(wanted, Math.max(min.w, min.h * ratio), Math.min(roomW, roomH * ratio));
86
+ const h = w / ratio;
87
+ return {
88
+ x: east ? r.x : west ? right - w : clamp(r.x + r.w / 2 - w / 2, 0, bounds.w - w),
89
+ y: south ? r.y : north ? bottom - h : clamp(r.y + r.h / 2 - h / 2, 0, bounds.h - h),
90
+ w,
91
+ h,
92
+ };
93
+ }
33
94
  /**
34
95
  * Image crop UI. Pass `[src]` (URL, `File`, or `Blob`); the user drags
35
96
  * the crop window or any of its eight handles. Optionally lock the crop
@@ -128,6 +189,12 @@ class WrImageCropper {
128
189
  active = null;
129
190
  startPointer = { x: 0, y: 0 };
130
191
  startRect = { x: 0, y: 0, w: 0, h: 0 };
192
+ /** The element the live drag set pointer capture on, so the end releases that one. */
193
+ captureTarget = null;
194
+ /** The pointer the live drag belongs to. Every other pointer's events are ignored. */
195
+ pointerId = null;
196
+ /** How far past each side of the crop the live resize was pressed — see `onPointerMove`. */
197
+ overhang = NO_SIDES;
131
198
  destroyRef = inject(DestroyRef);
132
199
  statusState = signal('empty', /* @ts-ignore */
133
200
  ...(ngDevMode ? [{ debugName: "statusState" }] : /* istanbul ignore next */ []));
@@ -330,27 +397,98 @@ class WrImageCropper {
330
397
  event.preventDefault();
331
398
  event.stopPropagation();
332
399
  this.active = handle;
400
+ this.pointerId = event.pointerId;
333
401
  this.startPointer = { x: event.clientX, y: event.clientY };
334
402
  this.startRect = { ...this.cropDisplay() };
335
- event.currentTarget.setPointerCapture(event.pointerId);
403
+ this.captureTarget = event.currentTarget;
404
+ this.captureTarget.setPointerCapture(event.pointerId);
405
+ this.overhang = handle === 'move' ? NO_SIDES : this.pastCrop(event);
336
406
  }
407
+ /**
408
+ * A resize ENDS when the pointer leaves the image, exactly as `pointerup` would end it:
409
+ * the move that carried it out is applied — clamped to the image like any other — and
410
+ * then the drag is over. Nothing after that resumes it or changes the crop, pointer
411
+ * back over the image or not, until a new `pointerdown`. A move drag is not affected:
412
+ * its size is fixed, so it simply rests against the edge.
413
+ *
414
+ * The move that leaves is applied rather than dropped because pointer moves are
415
+ * SAMPLES. Dropped, a quick drag toward a corner would stop wherever its last sample
416
+ * inside happened to fall — a single move from a handle to past the image would change
417
+ * nothing at all — and even a slow one would stop a fraction of a pixel short of the
418
+ * edge. A drag that leaves across one edge still ends there: heading for a corner at a
419
+ * slant that crosses the bottom first, the crop's right edge stays where it was then.
420
+ *
421
+ * "The image" is the `<img>`'s own box — the bounds `applyMove` / `applyResize` clamp
422
+ * the crop to — with its edges counting as inside, since the crop may reach them. The
423
+ * box is re-measured on every move and compared with `clientX` / `clientY`: both are
424
+ * viewport coordinates, so a scroll mid-drag cannot put them out of step. The moves
425
+ * outside reach this handler at all only because the drag holds pointer capture.
426
+ *
427
+ * One allowance, fixed at `pointerdown`: the box is widened on each side by however far
428
+ * past that side of the CROP the press landed — at most as far as the pressed handle
429
+ * reaches past it. Half of an edge handle, and three quarters of a corner handle, lies
430
+ * outside the crop, so a press there already has the pointer ahead of the edge it drags.
431
+ * Measured without the allowance, that pointer would leave the image while the crop was
432
+ * still short of the image's edge by the same distance, with nothing able to close the
433
+ * gap; and a handle resting on the image's edge, pressed on its outer part, would begin
434
+ * its drag already outside. A press on a handle's inner part widens nothing.
435
+ */
337
436
  onPointerMove(event) {
338
- if (!this.active)
437
+ if (!this.active || event.pointerId !== this.pointerId)
339
438
  return;
340
439
  const dx = event.clientX - this.startPointer.x;
341
440
  const dy = event.clientY - this.startPointer.y;
342
- if (this.active === 'move')
441
+ if (this.active === 'move') {
343
442
  this.applyMove(dx, dy);
344
- else
345
- this.applyResize(this.active, dx, dy);
443
+ return;
444
+ }
445
+ this.applyResize(this.active, dx, dy);
446
+ if (!this.withinImage(event))
447
+ this.onPointerUp(event);
346
448
  }
449
+ /**
450
+ * Ends the drag — for `pointerup`, `pointercancel`, a capture lost to something else,
451
+ * and a resize whose pointer left the image. Once per drag: the capture released here
452
+ * fires `lostpointercapture` afterwards, and by then there is nothing left to end.
453
+ *
454
+ * Only for the pointer that started it. A second finger is refused a drag of its own at
455
+ * `pointerdown`, but its moves and its lifting reach these handlers all the same, and
456
+ * would otherwise drive or end the first finger's drag.
457
+ */
347
458
  onPointerUp(event) {
348
- if (!this.active)
459
+ if (!this.active || event.pointerId !== this.pointerId)
349
460
  return;
350
- event.currentTarget.releasePointerCapture(event.pointerId);
461
+ const target = this.captureTarget;
351
462
  this.active = null;
463
+ this.pointerId = null;
464
+ this.captureTarget = null;
465
+ this.overhang = NO_SIDES;
466
+ // Asked first: a capture that is already gone has nothing to release, and releasing
467
+ // one for a pointer that is no longer active throws.
468
+ if (target?.hasPointerCapture(event.pointerId))
469
+ target.releasePointerCapture(event.pointerId);
352
470
  void this.emitCropped();
353
471
  }
472
+ /** How far past each side of the crop window the pointer is, in CSS pixels. */
473
+ pastCrop(event) {
474
+ const box = this.imgEl().nativeElement.getBoundingClientRect();
475
+ const c = this.startRect;
476
+ return {
477
+ left: Math.max(0, box.left + c.x - event.clientX),
478
+ top: Math.max(0, box.top + c.y - event.clientY),
479
+ right: Math.max(0, event.clientX - (box.left + c.x + c.w)),
480
+ bottom: Math.max(0, event.clientY - (box.top + c.y + c.h)),
481
+ };
482
+ }
483
+ /** Whether the pointer is on the image, edges and the press's `overhang` included. */
484
+ withinImage(event) {
485
+ const box = this.imgEl().nativeElement.getBoundingClientRect();
486
+ const o = this.overhang;
487
+ return (event.clientX >= box.left - o.left &&
488
+ event.clientX <= box.right + o.right &&
489
+ event.clientY >= box.top - o.top &&
490
+ event.clientY <= box.bottom + o.bottom);
491
+ }
354
492
  // Keyboard
355
493
  /** Whether a key has moved the crop since the last `keyup`. */
356
494
  keyboardDirty = false;
@@ -428,59 +566,8 @@ class WrImageCropper {
428
566
  this.cropDisplay.set(next);
429
567
  }
430
568
  applyResize(handle, dx, dy) {
431
- const display = this.display();
432
569
  const min = { w: this.minWidth(), h: this.minHeight() };
433
- const ratio = this.aspectRatio();
434
- const r = this.startRect;
435
- let x = r.x;
436
- let y = r.y;
437
- let w = r.w;
438
- let h = r.h;
439
- if (handle.includes('e'))
440
- w = clamp(r.w + dx, min.w, display.w - r.x);
441
- if (handle.includes('w')) {
442
- const nextW = clamp(r.w - dx, min.w, r.x + r.w);
443
- x = r.x + (r.w - nextW);
444
- w = nextW;
445
- }
446
- if (handle.includes('s'))
447
- h = clamp(r.h + dy, min.h, display.h - r.y);
448
- if (handle.includes('n')) {
449
- const nextH = clamp(r.h - dy, min.h, r.y + r.h);
450
- y = r.y + (r.h - nextH);
451
- h = nextH;
452
- }
453
- if (ratio && ratio > 0) {
454
- // Lock the orthogonal axis to maintain ratio. For corner handles,
455
- // pick whichever delta drives the larger change so we don't bounce.
456
- if (handle === 'e' || handle === 'w') {
457
- const newH = w / ratio;
458
- const dh = newH - r.h;
459
- if (handle === 'e' || handle === 'w') {
460
- y = r.y - dh / 2;
461
- h = newH;
462
- }
463
- }
464
- else if (handle === 'n' || handle === 's') {
465
- const newW = h * ratio;
466
- const dw = newW - r.w;
467
- x = r.x - dw / 2;
468
- w = newW;
469
- }
470
- else {
471
- // Corner — drive by width, then derive height.
472
- const newH = w / ratio;
473
- if (handle.includes('n'))
474
- y = r.y + r.h - newH;
475
- h = newH;
476
- }
477
- // Re-clamp after ratio adjustment so we never spill out of the canvas.
478
- x = clamp(x, 0, display.w - w);
479
- y = clamp(y, 0, display.h - h);
480
- w = clamp(w, min.w, display.w - x);
481
- h = clamp(h, min.h, display.h - y);
482
- }
483
- this.cropDisplay.set({ x, y, w, h });
570
+ this.cropDisplay.set(resizeFrom(this.startRect, handle, dx, dy, this.display(), min, this.aspectRatio()));
484
571
  }
485
572
  // Public API
486
573
  /** Render the current crop as a Blob. */
@@ -543,14 +630,14 @@ class WrImageCropper {
543
630
  }
544
631
  }
545
632
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrImageCropper, deps: [], target: i0.ɵɵFactoryTarget.Component });
546
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: WrImageCropper, isStandalone: true, selector: "wr-image-cropper", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, outputType: { classPropertyName: "outputType", publicName: "outputType", isSignal: true, isRequired: false, transformFunction: null }, outputQuality: { classPropertyName: "outputQuality", publicName: "outputQuality", isSignal: true, isRequired: false, transformFunction: null }, maxOutputSize: { classPropertyName: "maxOutputSize", publicName: "maxOutputSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cropped: "cropped", loadError: "loadError" }, host: { properties: { "class.wr-image-cropper--failed": "status() === 'failed'" }, classAttribute: "wr-image-cropper" }, viewQueries: [{ propertyName: "imgEl", first: true, predicate: ["img"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (objectUrl(); as url) {\n <div class=\"wr-image-cropper__canvas\">\n <img\n #img\n class=\"wr-image-cropper__image\"\n [src]=\"url\"\n alt=\"\"\n draggable=\"false\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n\n @if (display().w > 0) {\n <!-- Semi-transparent backdrop with a cut-out for the crop window. -->\n <div\n class=\"wr-image-cropper__backdrop\"\n [style.clip-path]=\"`polygon(0 0, 100% 0, 100% 100%, 0 100%, 0 ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y}px, 0 ${cropDisplay().y}px)`\"\n ></div>\n\n <!--\n Crop window \u2014 drag to move, with eight resize handles, and the ONE\n keyboard control the component has (see `onWindowKeydown`). The eight\n handles stay pointer-only and `aria-hidden`: eight extra tab stops per\n cropper would be hostile. The keys resize from the east and south edges\n only, so a west or north drag comes out as a resize plus a move rather\n than as one gesture.\n\n `role=\"group\"` rather than no role at all, because `aria-label` is\n prohibited on a roleless `<div>` and this needs a name; and rather than\n `role=\"application\"`, which would switch the reader out of its own\n browse mode for the whole subtree \u2014 far more than one rectangle is worth.\n -->\n <div\n class=\"wr-image-cropper__window\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-label]=\"resolvedWindowLabel()\"\n [attr.aria-describedby]=\"helpId\"\n [style.left.px]=\"cropDisplay().x\"\n [style.top.px]=\"cropDisplay().y\"\n [style.width.px]=\"cropDisplay().w\"\n [style.height.px]=\"cropDisplay().h\"\n (pointerdown)=\"onPointerDown('move', $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown)=\"onWindowKeydown($event)\"\n (keyup)=\"onWindowKeyup()\"\n >\n @for (h of handles; track h) {\n <span\n aria-hidden=\"true\"\n [class]=\"`wr-image-cropper__handle wr-image-cropper__handle--${h}`\"\n (pointerdown)=\"onPointerDown(h, $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></span>\n }\n </div>\n\n <p class=\"wr-image-cropper__sr-only\" [id]=\"helpId\">{{ resolvedKeyHelp() }}</p>\n\n <!--\n The crop rect in SOURCE pixels, announced after a keyboard change only \u2014\n a pointer drag already gives sighted feedback and would flood the region,\n and the initial crop is not news. Deliberately bare numbers: a sentence\n here would be a translated string the catalog does not carry, and the\n reader has just been told what the four numbers mean by `helpId`.\n -->\n <p class=\"wr-image-cropper__sr-only\" role=\"status\">{{ announcement() }}</p>\n }\n </div>\n} @else {\n <div class=\"wr-image-cropper__empty\">{{ emptyText() }}</div>\n}\n", encapsulation: i0.ViewEncapsulation.None });
633
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: WrImageCropper, isStandalone: true, selector: "wr-image-cropper", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, outputType: { classPropertyName: "outputType", publicName: "outputType", isSignal: true, isRequired: false, transformFunction: null }, outputQuality: { classPropertyName: "outputQuality", publicName: "outputQuality", isSignal: true, isRequired: false, transformFunction: null }, maxOutputSize: { classPropertyName: "maxOutputSize", publicName: "maxOutputSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cropped: "cropped", loadError: "loadError" }, host: { properties: { "class.wr-image-cropper--failed": "status() === 'failed'" }, classAttribute: "wr-image-cropper" }, viewQueries: [{ propertyName: "imgEl", first: true, predicate: ["img"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (objectUrl(); as url) {\n <div class=\"wr-image-cropper__canvas\">\n <img\n #img\n class=\"wr-image-cropper__image\"\n [src]=\"url\"\n alt=\"\"\n draggable=\"false\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n\n @if (display().w > 0) {\n <!-- Semi-transparent backdrop with a cut-out for the crop window. -->\n <div\n class=\"wr-image-cropper__backdrop\"\n [style.clip-path]=\"`polygon(0 0, 100% 0, 100% 100%, 0 100%, 0 ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y}px, 0 ${cropDisplay().y}px)`\"\n ></div>\n\n <!--\n Crop window \u2014 drag to move, with eight resize handles, and the ONE\n keyboard control the component has (see `onWindowKeydown`). The eight\n handles stay pointer-only and `aria-hidden`: eight extra tab stops per\n cropper would be hostile. The keys resize from the east and south edges\n only, so a west or north drag comes out as a resize plus a move rather\n than as one gesture.\n\n `role=\"group\"` rather than no role at all, because `aria-label` is\n prohibited on a roleless `<div>` and this needs a name; and rather than\n `role=\"application\"`, which would switch the reader out of its own\n browse mode for the whole subtree \u2014 far more than one rectangle is worth.\n -->\n <div\n class=\"wr-image-cropper__window\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-label]=\"resolvedWindowLabel()\"\n [attr.aria-describedby]=\"helpId\"\n [style.left.px]=\"cropDisplay().x\"\n [style.top.px]=\"cropDisplay().y\"\n [style.width.px]=\"cropDisplay().w\"\n [style.height.px]=\"cropDisplay().h\"\n (pointerdown)=\"onPointerDown('move', $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (lostpointercapture)=\"onPointerUp($event)\"\n (keydown)=\"onWindowKeydown($event)\"\n (keyup)=\"onWindowKeyup()\"\n >\n @for (h of handles; track h) {\n <span\n aria-hidden=\"true\"\n [class]=\"`wr-image-cropper__handle wr-image-cropper__handle--${h}`\"\n (pointerdown)=\"onPointerDown(h, $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (lostpointercapture)=\"onPointerUp($event)\"\n ></span>\n }\n </div>\n\n <p class=\"wr-image-cropper__sr-only\" [id]=\"helpId\">{{ resolvedKeyHelp() }}</p>\n\n <!--\n The crop rect in SOURCE pixels, announced after a keyboard change only \u2014\n a pointer drag already gives sighted feedback and would flood the region,\n and the initial crop is not news. Deliberately bare numbers: a sentence\n here would be a translated string the catalog does not carry, and the\n reader has just been told what the four numbers mean by `helpId`.\n -->\n <p class=\"wr-image-cropper__sr-only\" role=\"status\">{{ announcement() }}</p>\n }\n </div>\n} @else {\n <div class=\"wr-image-cropper__empty\">{{ emptyText() }}</div>\n}\n", encapsulation: i0.ViewEncapsulation.None });
547
634
  }
548
635
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrImageCropper, decorators: [{
549
636
  type: Component,
550
637
  args: [{ selector: 'wr-image-cropper', encapsulation: ViewEncapsulation.None, host: {
551
638
  class: 'wr-image-cropper',
552
639
  '[class.wr-image-cropper--failed]': "status() === 'failed'",
553
- }, template: "@if (objectUrl(); as url) {\n <div class=\"wr-image-cropper__canvas\">\n <img\n #img\n class=\"wr-image-cropper__image\"\n [src]=\"url\"\n alt=\"\"\n draggable=\"false\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n\n @if (display().w > 0) {\n <!-- Semi-transparent backdrop with a cut-out for the crop window. -->\n <div\n class=\"wr-image-cropper__backdrop\"\n [style.clip-path]=\"`polygon(0 0, 100% 0, 100% 100%, 0 100%, 0 ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y}px, 0 ${cropDisplay().y}px)`\"\n ></div>\n\n <!--\n Crop window \u2014 drag to move, with eight resize handles, and the ONE\n keyboard control the component has (see `onWindowKeydown`). The eight\n handles stay pointer-only and `aria-hidden`: eight extra tab stops per\n cropper would be hostile. The keys resize from the east and south edges\n only, so a west or north drag comes out as a resize plus a move rather\n than as one gesture.\n\n `role=\"group\"` rather than no role at all, because `aria-label` is\n prohibited on a roleless `<div>` and this needs a name; and rather than\n `role=\"application\"`, which would switch the reader out of its own\n browse mode for the whole subtree \u2014 far more than one rectangle is worth.\n -->\n <div\n class=\"wr-image-cropper__window\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-label]=\"resolvedWindowLabel()\"\n [attr.aria-describedby]=\"helpId\"\n [style.left.px]=\"cropDisplay().x\"\n [style.top.px]=\"cropDisplay().y\"\n [style.width.px]=\"cropDisplay().w\"\n [style.height.px]=\"cropDisplay().h\"\n (pointerdown)=\"onPointerDown('move', $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown)=\"onWindowKeydown($event)\"\n (keyup)=\"onWindowKeyup()\"\n >\n @for (h of handles; track h) {\n <span\n aria-hidden=\"true\"\n [class]=\"`wr-image-cropper__handle wr-image-cropper__handle--${h}`\"\n (pointerdown)=\"onPointerDown(h, $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n ></span>\n }\n </div>\n\n <p class=\"wr-image-cropper__sr-only\" [id]=\"helpId\">{{ resolvedKeyHelp() }}</p>\n\n <!--\n The crop rect in SOURCE pixels, announced after a keyboard change only \u2014\n a pointer drag already gives sighted feedback and would flood the region,\n and the initial crop is not news. Deliberately bare numbers: a sentence\n here would be a translated string the catalog does not carry, and the\n reader has just been told what the four numbers mean by `helpId`.\n -->\n <p class=\"wr-image-cropper__sr-only\" role=\"status\">{{ announcement() }}</p>\n }\n </div>\n} @else {\n <div class=\"wr-image-cropper__empty\">{{ emptyText() }}</div>\n}\n" }]
640
+ }, template: "@if (objectUrl(); as url) {\n <div class=\"wr-image-cropper__canvas\">\n <img\n #img\n class=\"wr-image-cropper__image\"\n [src]=\"url\"\n alt=\"\"\n draggable=\"false\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n\n @if (display().w > 0) {\n <!-- Semi-transparent backdrop with a cut-out for the crop window. -->\n <div\n class=\"wr-image-cropper__backdrop\"\n [style.clip-path]=\"`polygon(0 0, 100% 0, 100% 100%, 0 100%, 0 ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y}px, ${cropDisplay().x}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y + cropDisplay().h}px, ${cropDisplay().x + cropDisplay().w}px ${cropDisplay().y}px, 0 ${cropDisplay().y}px)`\"\n ></div>\n\n <!--\n Crop window \u2014 drag to move, with eight resize handles, and the ONE\n keyboard control the component has (see `onWindowKeydown`). The eight\n handles stay pointer-only and `aria-hidden`: eight extra tab stops per\n cropper would be hostile. The keys resize from the east and south edges\n only, so a west or north drag comes out as a resize plus a move rather\n than as one gesture.\n\n `role=\"group\"` rather than no role at all, because `aria-label` is\n prohibited on a roleless `<div>` and this needs a name; and rather than\n `role=\"application\"`, which would switch the reader out of its own\n browse mode for the whole subtree \u2014 far more than one rectangle is worth.\n -->\n <div\n class=\"wr-image-cropper__window\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-label]=\"resolvedWindowLabel()\"\n [attr.aria-describedby]=\"helpId\"\n [style.left.px]=\"cropDisplay().x\"\n [style.top.px]=\"cropDisplay().y\"\n [style.width.px]=\"cropDisplay().w\"\n [style.height.px]=\"cropDisplay().h\"\n (pointerdown)=\"onPointerDown('move', $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (lostpointercapture)=\"onPointerUp($event)\"\n (keydown)=\"onWindowKeydown($event)\"\n (keyup)=\"onWindowKeyup()\"\n >\n @for (h of handles; track h) {\n <span\n aria-hidden=\"true\"\n [class]=\"`wr-image-cropper__handle wr-image-cropper__handle--${h}`\"\n (pointerdown)=\"onPointerDown(h, $event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (lostpointercapture)=\"onPointerUp($event)\"\n ></span>\n }\n </div>\n\n <p class=\"wr-image-cropper__sr-only\" [id]=\"helpId\">{{ resolvedKeyHelp() }}</p>\n\n <!--\n The crop rect in SOURCE pixels, announced after a keyboard change only \u2014\n a pointer drag already gives sighted feedback and would flood the region,\n and the initial crop is not news. Deliberately bare numbers: a sentence\n here would be a translated string the catalog does not carry, and the\n reader has just been told what the four numbers mean by `helpId`.\n -->\n <p class=\"wr-image-cropper__sr-only\" role=\"status\">{{ announcement() }}</p>\n }\n </div>\n} @else {\n <div class=\"wr-image-cropper__empty\">{{ emptyText() }}</div>\n}\n" }]
554
641
  }], ctorParameters: () => [], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], aspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspectRatio", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], outputType: [{ type: i0.Input, args: [{ isSignal: true, alias: "outputType", required: false }] }], outputQuality: [{ type: i0.Input, args: [{ isSignal: true, alias: "outputQuality", required: false }] }], maxOutputSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxOutputSize", required: false }] }], cropped: [{ type: i0.Output, args: ["cropped"] }], loadError: [{ type: i0.Output, args: ["loadError"] }], imgEl: [{ type: i0.ViewChild, args: ['img', { isSignal: true }] }] } });
555
642
 
556
643
  /**