@acorex/core 21.0.3-next.33 → 21.0.3-next.36

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 (61) hide show
  1. package/fesm2022/acorex-core-components.mjs +3 -3
  2. package/fesm2022/acorex-core-components.mjs.map +1 -1
  3. package/fesm2022/acorex-core-config.mjs +3 -3
  4. package/fesm2022/acorex-core-config.mjs.map +1 -1
  5. package/fesm2022/acorex-core-constants.mjs.map +1 -1
  6. package/fesm2022/acorex-core-date-time.mjs +25 -25
  7. package/fesm2022/acorex-core-date-time.mjs.map +1 -1
  8. package/fesm2022/acorex-core-events.mjs +3 -3
  9. package/fesm2022/acorex-core-events.mjs.map +1 -1
  10. package/fesm2022/acorex-core-file.mjs +37 -37
  11. package/fesm2022/acorex-core-file.mjs.map +1 -1
  12. package/fesm2022/acorex-core-format.mjs +19 -19
  13. package/fesm2022/acorex-core-format.mjs.map +1 -1
  14. package/fesm2022/acorex-core-full-screen.mjs +4 -4
  15. package/fesm2022/acorex-core-full-screen.mjs.map +1 -1
  16. package/fesm2022/acorex-core-icon.mjs +3 -3
  17. package/fesm2022/acorex-core-icon.mjs.map +1 -1
  18. package/fesm2022/acorex-core-image.mjs +3 -3
  19. package/fesm2022/acorex-core-image.mjs.map +1 -1
  20. package/fesm2022/acorex-core-locale.mjs +12 -12
  21. package/fesm2022/acorex-core-locale.mjs.map +1 -1
  22. package/fesm2022/acorex-core-memoize.mjs.map +1 -1
  23. package/fesm2022/acorex-core-network.mjs +4 -4
  24. package/fesm2022/acorex-core-network.mjs.map +1 -1
  25. package/fesm2022/acorex-core-pipes.mjs +3 -3
  26. package/fesm2022/acorex-core-pipes.mjs.map +1 -1
  27. package/fesm2022/acorex-core-platform.mjs +4 -4
  28. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  29. package/fesm2022/acorex-core-storage.mjs +9 -9
  30. package/fesm2022/acorex-core-storage.mjs.map +1 -1
  31. package/fesm2022/acorex-core-translation.mjs +27 -20
  32. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  33. package/fesm2022/acorex-core-utils.mjs +9 -7
  34. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  35. package/fesm2022/acorex-core-validation.mjs +40 -40
  36. package/fesm2022/acorex-core-validation.mjs.map +1 -1
  37. package/fesm2022/acorex-core-z-index.mjs +3 -3
  38. package/fesm2022/acorex-core-z-index.mjs.map +1 -1
  39. package/fesm2022/acorex-core.mjs.map +1 -1
  40. package/package.json +25 -24
  41. package/{format/index.d.ts → types/acorex-core-format.d.ts} +2 -2
  42. package/{utils/index.d.ts → types/acorex-core-utils.d.ts} +10 -2
  43. package/{validation/index.d.ts → types/acorex-core-validation.d.ts} +10 -10
  44. /package/{components/index.d.ts → types/acorex-core-components.d.ts} +0 -0
  45. /package/{config/index.d.ts → types/acorex-core-config.d.ts} +0 -0
  46. /package/{constants/index.d.ts → types/acorex-core-constants.d.ts} +0 -0
  47. /package/{date-time/index.d.ts → types/acorex-core-date-time.d.ts} +0 -0
  48. /package/{events/index.d.ts → types/acorex-core-events.d.ts} +0 -0
  49. /package/{file/index.d.ts → types/acorex-core-file.d.ts} +0 -0
  50. /package/{full-screen/index.d.ts → types/acorex-core-full-screen.d.ts} +0 -0
  51. /package/{icon/index.d.ts → types/acorex-core-icon.d.ts} +0 -0
  52. /package/{image/index.d.ts → types/acorex-core-image.d.ts} +0 -0
  53. /package/{locale/index.d.ts → types/acorex-core-locale.d.ts} +0 -0
  54. /package/{memoize/index.d.ts → types/acorex-core-memoize.d.ts} +0 -0
  55. /package/{network/index.d.ts → types/acorex-core-network.d.ts} +0 -0
  56. /package/{pipes/index.d.ts → types/acorex-core-pipes.d.ts} +0 -0
  57. /package/{platform/index.d.ts → types/acorex-core-platform.d.ts} +0 -0
  58. /package/{storage/index.d.ts → types/acorex-core-storage.d.ts} +0 -0
  59. /package/{translation/index.d.ts → types/acorex-core-translation.d.ts} +0 -0
  60. /package/{z-index/index.d.ts → types/acorex-core-z-index.d.ts} +0 -0
  61. /package/{index.d.ts → types/acorex-core.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-file.mjs","sources":["../tmp-esm2022/file/lib/file-size-formatter.js","../tmp-esm2022/file/lib/format-file-size.js","../tmp-esm2022/file/lib/file-type/file-type.models.js","../tmp-esm2022/file/lib/file-type/file-type.metadata.js","../tmp-esm2022/file/lib/file-type/file-type.copy.js","../tmp-esm2022/file/lib/file-type/file-type.merge.js","../tmp-esm2022/file/lib/file-type/file-type.resolve.js","../tmp-esm2022/file/lib/file-type/file-type.open.js","../tmp-esm2022/file/lib/file-type/file-type-info-provider.js","../tmp-esm2022/file/lib/file-type/file-type.validate.js","../tmp-esm2022/file/lib/file-type/file-type-registry.service.js","../tmp-esm2022/file/lib/file-type/types.providers/audio-file-type.provider.js","../tmp-esm2022/file/lib/file-type/types.providers/document-file-type.provider.js","../tmp-esm2022/file/lib/file-type/types.providers/file-file-type.provider.js","../tmp-esm2022/file/lib/file-type/types.providers/image-file-type.provider.js","../tmp-esm2022/file/lib/file-type/types.providers/video-file-type.provider.js","../tmp-esm2022/file/lib/file-type/types.providers/index.js","../tmp-esm2022/file/lib/file-type/rules/file-mime-type.rule.js","../tmp-esm2022/file/lib/file-type/rules/file-min-size.rule.js","../tmp-esm2022/file/lib/file-type/rules/file-max-size.rule.js","../tmp-esm2022/file/lib/file-type/index.js","../tmp-esm2022/file/lib/file.module.js","../tmp-esm2022/file/lib/file.service.js","../tmp-esm2022/file/acorex-core-file.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXFileSizeFormatter {\n /**\n * Gets the name of the formatter.\n *\n * @returns string - The formatter name 'filesize'\n */\n get name() {\n return 'filesize';\n }\n /**\n * Formats a file size value to human-readable format.\n *\n * @param value - The file size in bytes\n * @returns string - The formatted file size string (e.g., '1.5 MB')\n */\n format(value) {\n const size = Number(value);\n if (size === 0)\n return '0 Bytes';\n if (Number.isNaN(size))\n return 'Unknown';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(size) / Math.log(k));\n return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileSizeFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileSizeFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileSizeFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zaXplLWZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZmlsZS9zcmMvbGliL2ZpbGUtc2l6ZS1mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFhM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7OztPQUlHO0lBRUgsSUFBSSxJQUFJO1FBQ04sT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBRUgsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksSUFBSSxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFekMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsT0FBTyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7OEdBN0JVLG1CQUFtQjtrSEFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtYXRPcHRpb25zLCBBWEZvcm1hdHRlciB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRmlsZVNpemVGb3JtYXR0ZXJPcHRpb25zIGV4dGVuZHMgQVhGb3JtYXRPcHRpb25zIHtcbiAgZm9ybWF0OiBzdHJpbmc7XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAYWNvcmV4L2NvcmUvZm9ybWF0JyB7XG4gIGludGVyZmFjZSBBWEZvcm1hdE9wdGlvbnNNYXAge1xuICAgIGZpbGVzaXplOiBBWEZpbGVTaXplRm9ybWF0dGVyT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhGaWxlU2l6ZUZvcm1hdHRlciBpbXBsZW1lbnRzIEFYRm9ybWF0dGVyIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvcm1hdHRlci5cbiAgICpcbiAgICogQHJldHVybnMgc3RyaW5nIC0gVGhlIGZvcm1hdHRlciBuYW1lICdmaWxlc2l6ZSdcbiAgICovXG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2ZpbGVzaXplJztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgZmlsZSBzaXplIHZhbHVlIHRvIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgKiBAcmV0dXJucyBzdHJpbmcgLSBUaGUgZm9ybWF0dGVkIGZpbGUgc2l6ZSBzdHJpbmcgKGUuZy4sICcxLjUgTUInKVxuICAgKi9cblxuICBmb3JtYXQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2l6ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJztcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHNpemUpKSByZXR1cm4gJ1Vua25vd24nO1xuXG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XG5cbiAgICByZXR1cm4gcGFyc2VGbG9hdCgoc2l6ZSAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArICcgJyArIHNpemVzW2ldO1xuICB9XG59XG4iXX0=","/** Human-readable file size (binary units, e.g. `41.5 MB`). */\nexport function formatFileSizeBytes(bytes) {\n if (!Number.isFinite(bytes) || bytes < 0) {\n return '0 B';\n }\n if (bytes === 0) {\n return '0 B';\n }\n const k = 1024;\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.min(Math.floor(Math.log(bytes) / Math.log(k)), units.length - 1);\n const value = bytes / Math.pow(k, i);\n if (i === 0) {\n return `${bytes} B`;\n }\n const digits = value >= 100 ? 0 : value >= 10 ? 1 : 2;\n return `${value.toFixed(digits)} ${units[i]}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWZpbGUtc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZmlsZS9zcmMvbGliL2Zvcm1hdC1maWxlLXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDZixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDWixPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBIdW1hbi1yZWFkYWJsZSBmaWxlIHNpemUgKGJpbmFyeSB1bml0cywgZS5nLiBgNDEuNSBNQmApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplQnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGJ5dGVzKSB8fCBieXRlcyA8IDApIHtcbiAgICByZXR1cm4gJzAgQic7XG4gIH1cbiAgaWYgKGJ5dGVzID09PSAwKSB7XG4gICAgcmV0dXJuICcwIEInO1xuICB9XG5cbiAgY29uc3QgayA9IDEwMjQ7XG4gIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XG4gIGNvbnN0IGkgPSBNYXRoLm1pbihNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKSwgdW5pdHMubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IHZhbHVlID0gYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKTtcblxuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBgJHtieXRlc30gQmA7XG4gIH1cblxuICBjb25zdCBkaWdpdHMgPSB2YWx1ZSA+PSAxMDAgPyAwIDogdmFsdWUgPj0gMTAgPyAxIDogMjtcbiAgcmV0dXJuIGAke3ZhbHVlLnRvRml4ZWQoZGlnaXRzKX0gJHt1bml0c1tpXX1gO1xufVxuIl19","/** Metadata key for catalog usage context. */\nexport const AX_FILE_TYPE_METADATA_PURPOSE = 'purpose';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZmlsZS9zcmMvbGliL2ZpbGUtdHlwZS9maWxlLXR5cGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxTQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB9IGZyb20gJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZUNvbnRleHQsIEFYRmlsZVR5cGVPcGVuQ29udGV4dCB9IGZyb20gJy4vZmlsZS10eXBlLmNvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBBWEZpbGVDb3B5UmVzdWx0IH0gZnJvbSAnLi9maWxlLXR5cGUuY29weSc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZU9wZW5SZXN1bHQgfSBmcm9tICcuL2ZpbGUtdHlwZS5vcGVuJztcblxuLyoqIE1ldGFkYXRhIGtleSBmb3IgY2F0YWxvZyB1c2FnZSBjb250ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IEFYX0ZJTEVfVFlQRV9NRVRBREFUQV9QVVJQT1NFID0gJ3B1cnBvc2UnIGFzIGNvbnN0O1xuXG4vKiogQ2F0YWxvZyBtZXRhZGF0YSBiYWc7IGBwdXJwb3NlYCBsaXN0cyB1c2FnZSBjb250ZXh0cyAoZS5nLiBgWydzeXN0ZW0nXWApLiAqL1xuZXhwb3J0IHR5cGUgQVhGaWxlVHlwZU1ldGFkYXRhID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7XG4gIFtBWF9GSUxFX1RZUEVfTUVUQURBVEFfUFVSUE9TRV0/OiBzdHJpbmdbXTtcbn07XG5cbi8qKiBGaWx0ZXIgY2F0YWxvZyBlbnRyaWVzIGJ5IHtAbGluayBBWF9GSUxFX1RZUEVfTUVUQURBVEFfUFVSUE9TRX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEFYRmlsZVR5cGVRdWVyeSB7XG4gIHB1cnBvc2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLyoqIEdlbmVyaWMgcnVsZSBleGVjdXRlZCB2aWEge0BsaW5rIEFYVmFsaWRhdGlvblNlcnZpY2V9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWEZpbGVWYWxpZGF0aW9uUnVsZSB7XG4gIHJ1bGU6IHN0cmluZztcbiAgb3B0aW9ucz86IEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zO1xufVxuXG4vKipcbiAqIENvbW1vbiBmaWxlIGNvbnN0cmFpbnRzIHNoYXJlZCBieSB7QGxpbmsgQVhGaWxlVHlwZX0gYW5kIHtAbGluayBBWEZpbGVUeXBlRXh0ZW5zaW9ufS5cbiAqIEV4dGVuc2lvbiBgdmFsaWRhdGlvbnNgIG92ZXJyaWRlIHRoZSBwYXJlbnQgdHlwZSBmaWVsZC1ieS1maWVsZCB3aGVuIG1lcmdlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWEZpbGVWYWxpZGF0aW9ucyB7XG4gIG1pbWVUeXBlcz86IHN0cmluZ1tdO1xuICBtaW5TaXplPzogbnVtYmVyO1xuICBtYXhTaXplPzogbnVtYmVyO1xuICBydWxlcz86IEFYRmlsZVZhbGlkYXRpb25SdWxlW107XG59XG5cbnR5cGUgQVhGaWxlVHlwZVV0aWxpdGllcyA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICAoY3R4OiBBWEZpbGVUeXBlQ29udGV4dCwgLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93blxuPjtcblxuLyoqXG4gKiBMb2dpY2FsIGZpbGUgY2F0ZWdvcnkgKGltYWdlLCB2aWRlbywg4oCmKS5cbiAqXG4gKiAtIFdpdGggdHlwZSBgdmFsaWRhdGlvbnNgIHNldDogYW55IGZpbGUgbWF0Y2hpbmcgdGhvc2UgcnVsZXMgaXMgYWxsb3dlZDsgYGV4dGVuc2lvbnNgIG9ubHkgb3ZlcnJpZGUgd2hlbiBtYXRjaGVkLlxuICogLSBXaXRoIGVtcHR5IC8gb21pdHRlZCBgdmFsaWRhdGlvbnNgIGFuZCBgZXh0ZW5zaW9uc2AgbGlzdGVkOiBvbmx5IHRob3NlIGV4dGVuc2lvbnMgYXJlIGFsbG93ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhGaWxlVHlwZTxUIGV4dGVuZHMgQVhGaWxlVHlwZVV0aWxpdGllcyA9IEFYRmlsZVR5cGVVdGlsaXRpZXM+IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBBWEZpbGVUeXBlTWV0YWRhdGE7XG4gIHZhbGlkYXRpb25zPzogQVhGaWxlVmFsaWRhdGlvbnM7XG4gIGV4dGVuc2lvbnM/OiBBWEZpbGVUeXBlRXh0ZW5zaW9uPFQ+W107XG4gIC8qKiBEeW5hbWljIHV0aWxpdHkgZnVuY3Rpb25zIGF2YWlsYWJsZSBmb3IgdGhpcyBmaWxlIHR5cGUuICovXG4gIHV0aWxpdGllcz86IFQ7XG4gIHBhc3RlPzogKCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIFByb2R1Y2UgY29weWFibGUgY29udGVudCBmcm9tIGEgcGF5bG9hZCAoZG9lcyBub3Qgd3JpdGUgdG8gdGhlIGNsaXBib2FyZCkuXG4gICAqIFJldHVybnMgYSBwbGFpbiBzdHJpbmcgb3Ige0BsaW5rIEFYRmlsZUNvcHlEYXRhfSB3aXRoIGB0ZXh0YCBhbmQgb3B0aW9uYWwgYG1ldGFgLlxuICAgKi9cbiAgY29weT86IChwYXlsb2FkOiB1bmtub3duKSA9PiBQcm9taXNlPEFYRmlsZUNvcHlSZXN1bHQ+IHwgQVhGaWxlQ29weVJlc3VsdDtcbiAgLyoqXG4gICAqIE9wZW4gb3IgcHJldmlldyBhIHBheWxvYWQgKGUuZy4gbmF2aWdhdGUsIHNob3cgYSBkaWFsb2cpLlxuICAgKiBJbnZva2UgdmlhIHtAbGluayBydW5GaWxlVHlwZU9wZW59IHNvIGBpbmplY3QoKWAgd29ya3MgaW4gdGhlIGNhbGxlcidzIGNvbnRleHQuXG4gICAqL1xuICBvcGVuPzogKFxuICAgIGN0eDogQVhGaWxlVHlwZU9wZW5Db250ZXh0LFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICkgPT4gUHJvbWlzZTxBWEZpbGVPcGVuUmVzdWx0PiB8IEFYRmlsZU9wZW5SZXN1bHQ7XG59XG5cbi8qKiBFeHRlbnNpb24gZW50cnkg4oCUIHtAbGluayBBWEZpbGVUeXBlfSB3aXRob3V0IG5lc3RlZCBgZXh0ZW5zaW9uc2AuICovXG5leHBvcnQgdHlwZSBBWEZpbGVUeXBlRXh0ZW5zaW9uPFQgZXh0ZW5kcyBBWEZpbGVUeXBlVXRpbGl0aWVzID0gQVhGaWxlVHlwZVV0aWxpdGllcz4gPSBPbWl0PFxuICBBWEZpbGVUeXBlPFQ+LFxuICAnZXh0ZW5zaW9ucydcbj47XG4iXX0=","import { AX_FILE_TYPE_METADATA_PURPOSE } from './file-type.models';\nexport { AX_FILE_TYPE_METADATA_PURPOSE } from './file-type.models';\nconst CONVERSATION_NAME_PREFIX = 'conversation-';\nexport function getFileTypePurposes(type) {\n const raw = type.metadata?.[AX_FILE_TYPE_METADATA_PURPOSE];\n if (Array.isArray(raw)) {\n const values = raw.filter((entry) => typeof entry === 'string' && entry.trim().length > 0);\n if (values.length) {\n return values;\n }\n }\n if (type.name.startsWith(CONVERSATION_NAME_PREFIX)) {\n return ['conversation'];\n }\n return ['system'];\n}\nexport function fileTypeMatchesPurpose(type, purpose) {\n const allowed = Array.isArray(purpose) ? purpose : [purpose];\n return getFileTypePurposes(type).some((entry) => allowed.includes(entry));\n}\nexport function filterFileTypesByPurpose(types, purpose) {\n if (!purpose) {\n return types;\n }\n return types.filter((type) => fileTypeMatchesPurpose(type, purpose));\n}\nexport function createFileTypeMetadata(purpose) {\n const values = (Array.isArray(purpose) ? purpose : [purpose]).filter((entry) => typeof entry === 'string' && entry.trim().length > 0);\n return { [AX_FILE_TYPE_METADATA_PURPOSE]: values };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLm1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL2ZpbGUtdHlwZS5tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRSxNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQztBQUVqRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBZ0I7SUFDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDM0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVHLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFnQixFQUFFLE9BQTBCO0lBQ2pGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBbUIsRUFBRSxPQUEyQjtJQUN2RixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBMEI7SUFDL0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2xFLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqRixDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUMsNkJBQTZCLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWEZpbGVUeXBlIH0gZnJvbSAnLi9maWxlLXR5cGUubW9kZWxzJztcbmltcG9ydCB7IEFYX0ZJTEVfVFlQRV9NRVRBREFUQV9QVVJQT1NFIH0gZnJvbSAnLi9maWxlLXR5cGUubW9kZWxzJztcblxuZXhwb3J0IHsgQVhfRklMRV9UWVBFX01FVEFEQVRBX1BVUlBPU0UgfSBmcm9tICcuL2ZpbGUtdHlwZS5tb2RlbHMnO1xuXG5jb25zdCBDT05WRVJTQVRJT05fTkFNRV9QUkVGSVggPSAnY29udmVyc2F0aW9uLSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlVHlwZVB1cnBvc2VzKHR5cGU6IEFYRmlsZVR5cGUpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJhdyA9IHR5cGUubWV0YWRhdGE/LltBWF9GSUxFX1RZUEVfTUVUQURBVEFfUFVSUE9TRV07XG4gIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSByYXcuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIGVudHJ5LnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGUubmFtZS5zdGFydHNXaXRoKENPTlZFUlNBVElPTl9OQU1FX1BSRUZJWCkpIHtcbiAgICByZXR1cm4gWydjb252ZXJzYXRpb24nXTtcbiAgfVxuICByZXR1cm4gWydzeXN0ZW0nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVUeXBlTWF0Y2hlc1B1cnBvc2UodHlwZTogQVhGaWxlVHlwZSwgcHVycG9zZTogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgYWxsb3dlZCA9IEFycmF5LmlzQXJyYXkocHVycG9zZSkgPyBwdXJwb3NlIDogW3B1cnBvc2VdO1xuICByZXR1cm4gZ2V0RmlsZVR5cGVQdXJwb3Nlcyh0eXBlKS5zb21lKChlbnRyeSkgPT4gYWxsb3dlZC5pbmNsdWRlcyhlbnRyeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRmlsZVR5cGVzQnlQdXJwb3NlKHR5cGVzOiBBWEZpbGVUeXBlW10sIHB1cnBvc2U/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IEFYRmlsZVR5cGVbXSB7XG4gIGlmICghcHVycG9zZSkge1xuICAgIHJldHVybiB0eXBlcztcbiAgfVxuICByZXR1cm4gdHlwZXMuZmlsdGVyKCh0eXBlKSA9PiBmaWxlVHlwZU1hdGNoZXNQdXJwb3NlKHR5cGUsIHB1cnBvc2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbGVUeXBlTWV0YWRhdGEocHVycG9zZTogc3RyaW5nIHwgc3RyaW5nW10pOiBOb25OdWxsYWJsZTxBWEZpbGVUeXBlWydtZXRhZGF0YSddPiB7XG4gIGNvbnN0IHZhbHVlcyA9IChBcnJheS5pc0FycmF5KHB1cnBvc2UpID8gcHVycG9zZSA6IFtwdXJwb3NlXSkuZmlsdGVyKFxuICAgIChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIGVudHJ5LnRyaW0oKS5sZW5ndGggPiAwLFxuICApO1xuICByZXR1cm4geyBbQVhfRklMRV9UWVBFX01FVEFEQVRBX1BVUlBPU0VdOiB2YWx1ZXMgfTtcbn1cbiJdfQ==","/** Resolves clipboard/plain text from a copy result. */\nexport function resolveFileCopyText(result) {\n if (result == null) {\n return null;\n }\n if (typeof result === 'string') {\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n const trimmed = result.text?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLmNvcHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvZmlsZS10eXBlLmNvcHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0Esd0RBQXdEO0FBQ3hELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUF3QjtJQUMxRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3QyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNwQyxPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTdHJ1Y3R1cmVkIGNvcHkgcGF5bG9hZCBmcm9tIHtAbGluayBBWEZpbGVUeXBlLmNvcHl9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWEZpbGVDb3B5RGF0YSB7XG4gIC8qKiBQcmltYXJ5IHBsYWluLXRleHQgdmFsdWUgZm9yIGNsaXBib2FyZCBvciBwcmV2aWV3cy4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgdHlwZS1zcGVjaWZpYyBtZXRhZGF0YSBmb3IgY29uc3VtZXJzIChVUkxzLCBuYW1lcywgbWltZSB0eXBlcywg4oCmKS4gKi9cbiAgbWV0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogUmV0dXJuIHZhbHVlIG9mIHtAbGluayBBWEZpbGVUeXBlLmNvcHl9IOKAlCBzaG9ydGhhbmQgc3RyaW5nIG9yIHN0cnVjdHVyZWQgZGF0YS4gKi9cbmV4cG9ydCB0eXBlIEFYRmlsZUNvcHlSZXN1bHQgPSBzdHJpbmcgfCBBWEZpbGVDb3B5RGF0YSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbi8qKiBSZXNvbHZlcyBjbGlwYm9hcmQvcGxhaW4gdGV4dCBmcm9tIGEgY29weSByZXN1bHQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVDb3B5VGV4dChyZXN1bHQ6IEFYRmlsZUNvcHlSZXN1bHQpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHJlc3VsdC50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiBudWxsO1xuICB9XG4gIGNvbnN0IHRyaW1tZWQgPSByZXN1bHQudGV4dD8udHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCAmJiB0cmltbWVkLmxlbmd0aCA+IDAgPyB0cmltbWVkIDogbnVsbDtcbn1cbiJdfQ==","/** Merges type-level validations with extension overrides (extension wins per field). */\nexport function mergeFileValidations(base, override) {\n if (!override) {\n return { ...base };\n }\n return {\n mimeTypes: override.mimeTypes ?? base.mimeTypes,\n minSize: override.minSize ?? base.minSize,\n maxSize: override.maxSize ?? base.maxSize,\n rules: override.rules ?? base.rules,\n };\n}\n/** Resolved validations for a type + optional extension entry. */\nexport function resolveFileValidations(type, extension) {\n return mergeFileValidations(type.validations ?? {}, extension?.validations);\n}\n/** True when no mime/size/rules are defined on the type. */\nexport function isEmptyFileValidations(validations) {\n if (!validations) {\n return true;\n }\n return ((validations.mimeTypes?.length ?? 0) === 0 &&\n validations.minSize == null &&\n validations.maxSize == null &&\n (validations.rules?.length ?? 0) === 0);\n}\n/**\n * Extension-only mode: empty type `validations` and a non-empty `extensions` list.\n * Files must match a listed extension; rules come from that extension entry.\n */\nexport function isExtensionsOnlyType(type) {\n return isEmptyFileValidations(type.validations) && (type.extensions?.length ?? 0) > 0;\n}\n/** File extension from name (lowercase, no dot). */\nexport function getFileExtension(fileName) {\n const parts = fileName.trim().split('.');\n return parts.length > 1 ? (parts.pop()?.toLowerCase() ?? '') : '';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLm1lcmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL2ZpbGUtdHlwZS5tZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUF1QixFQUN2QixRQUFxQztJQUVyQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTO1FBQy9DLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPO1FBQ3pDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPO1FBQ3pDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLO0tBQ3BDLENBQUM7QUFDSixDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFnQixFQUFFLFNBQStCO0lBQ3RGLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFdBQStCO0lBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLENBQ0wsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFDLFdBQVcsQ0FBQyxPQUFPLElBQUksSUFBSTtRQUMzQixXQUFXLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDM0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQWdCO0lBQ25ELE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQy9DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWEZpbGVUeXBlLCBBWEZpbGVUeXBlRXh0ZW5zaW9uLCBBWEZpbGVWYWxpZGF0aW9ucyB9IGZyb20gJy4vZmlsZS10eXBlLm1vZGVscyc7XG5cbi8qKiBNZXJnZXMgdHlwZS1sZXZlbCB2YWxpZGF0aW9ucyB3aXRoIGV4dGVuc2lvbiBvdmVycmlkZXMgKGV4dGVuc2lvbiB3aW5zIHBlciBmaWVsZCkuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWxlVmFsaWRhdGlvbnMoXG4gIGJhc2U6IEFYRmlsZVZhbGlkYXRpb25zLFxuICBvdmVycmlkZT86IFBhcnRpYWw8QVhGaWxlVmFsaWRhdGlvbnM+LFxuKTogQVhGaWxlVmFsaWRhdGlvbnMge1xuICBpZiAoIW92ZXJyaWRlKSB7XG4gICAgcmV0dXJuIHsgLi4uYmFzZSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtaW1lVHlwZXM6IG92ZXJyaWRlLm1pbWVUeXBlcyA/PyBiYXNlLm1pbWVUeXBlcyxcbiAgICBtaW5TaXplOiBvdmVycmlkZS5taW5TaXplID8/IGJhc2UubWluU2l6ZSxcbiAgICBtYXhTaXplOiBvdmVycmlkZS5tYXhTaXplID8/IGJhc2UubWF4U2l6ZSxcbiAgICBydWxlczogb3ZlcnJpZGUucnVsZXMgPz8gYmFzZS5ydWxlcyxcbiAgfTtcbn1cblxuLyoqIFJlc29sdmVkIHZhbGlkYXRpb25zIGZvciBhIHR5cGUgKyBvcHRpb25hbCBleHRlbnNpb24gZW50cnkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVWYWxpZGF0aW9ucyh0eXBlOiBBWEZpbGVUeXBlLCBleHRlbnNpb24/OiBBWEZpbGVUeXBlRXh0ZW5zaW9uKTogQVhGaWxlVmFsaWRhdGlvbnMge1xuICByZXR1cm4gbWVyZ2VGaWxlVmFsaWRhdGlvbnModHlwZS52YWxpZGF0aW9ucyA/PyB7fSwgZXh0ZW5zaW9uPy52YWxpZGF0aW9ucyk7XG59XG5cbi8qKiBUcnVlIHdoZW4gbm8gbWltZS9zaXplL3J1bGVzIGFyZSBkZWZpbmVkIG9uIHRoZSB0eXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlGaWxlVmFsaWRhdGlvbnModmFsaWRhdGlvbnM/OiBBWEZpbGVWYWxpZGF0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIXZhbGlkYXRpb25zKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAodmFsaWRhdGlvbnMubWltZVR5cGVzPy5sZW5ndGggPz8gMCkgPT09IDAgJiZcbiAgICB2YWxpZGF0aW9ucy5taW5TaXplID09IG51bGwgJiZcbiAgICB2YWxpZGF0aW9ucy5tYXhTaXplID09IG51bGwgJiZcbiAgICAodmFsaWRhdGlvbnMucnVsZXM/Lmxlbmd0aCA/PyAwKSA9PT0gMFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuc2lvbi1vbmx5IG1vZGU6IGVtcHR5IHR5cGUgYHZhbGlkYXRpb25zYCBhbmQgYSBub24tZW1wdHkgYGV4dGVuc2lvbnNgIGxpc3QuXG4gKiBGaWxlcyBtdXN0IG1hdGNoIGEgbGlzdGVkIGV4dGVuc2lvbjsgcnVsZXMgY29tZSBmcm9tIHRoYXQgZXh0ZW5zaW9uIGVudHJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlbnNpb25zT25seVR5cGUodHlwZTogQVhGaWxlVHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNFbXB0eUZpbGVWYWxpZGF0aW9ucyh0eXBlLnZhbGlkYXRpb25zKSAmJiAodHlwZS5leHRlbnNpb25zPy5sZW5ndGggPz8gMCkgPiAwO1xufVxuXG4vKiogRmlsZSBleHRlbnNpb24gZnJvbSBuYW1lIChsb3dlcmNhc2UsIG5vIGRvdCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBmaWxlTmFtZS50cmltKCkuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgPyAocGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCkgPz8gJycpIDogJyc7XG59XG4iXX0=","import { getFileExtension } from './file-type.merge';\n/** Matches a MIME type against a catalog pattern (`image/*`, exact type, …). */\nexport function matchesFileMime(mime, pattern) {\n const normalizedMime = mime.trim().toLowerCase();\n const normalizedPattern = pattern.trim().toLowerCase();\n if (!normalizedPattern || normalizedPattern === '*/*' || normalizedPattern === '*') {\n return true;\n }\n if (normalizedPattern.endsWith('/*')) {\n const category = normalizedPattern.slice(0, -2);\n return normalizedMime.startsWith(`${category}/`) || (normalizedMime === '' && category === 'application');\n }\n return normalizedMime === normalizedPattern;\n}\n/** Finds an extension entry by its `name` (without dot). */\nexport function findFileTypeExtensionByName(type, extensionName) {\n const ext = extensionName.replace(/^\\./, '').trim().toLowerCase();\n if (!ext || !type.extensions?.length) {\n return undefined;\n }\n return type.extensions.find((entry) => entry.name.toLowerCase() === ext);\n}\n/** Finds an extension entry whose validations include the given MIME type. */\nexport function findFileTypeExtensionForMime(type, mimeType) {\n const mime = mimeType.trim().toLowerCase();\n if (!mime || !type.extensions?.length) {\n return undefined;\n }\n return type.extensions.find((entry) => entry.validations?.mimeTypes?.some((pattern) => matchesFileMime(mime, pattern)));\n}\n/** Matching extension entry for a file within a type, if any. */\nexport function findFileTypeExtension(file, type) {\n return resolveFileTypeExtension(type, { file });\n}\n/** Resolves the best-matching extension entry for a file or hint. */\nexport function resolveFileTypeExtension(type, hint) {\n if (!hint) {\n return undefined;\n }\n if (hint.file) {\n const byFileName = findFileTypeExtensionByName(type, getFileExtension(hint.file.name));\n if (byFileName) {\n return byFileName;\n }\n if (hint.file.type) {\n const byFileMime = findFileTypeExtensionForMime(type, hint.file.type);\n if (byFileMime) {\n return byFileMime;\n }\n }\n }\n if (hint.extensionName) {\n const byName = findFileTypeExtensionByName(type, hint.extensionName);\n if (byName) {\n return byName;\n }\n }\n if (hint.mimeType) {\n return findFileTypeExtensionForMime(type, hint.mimeType);\n }\n return undefined;\n}\nexport function resolveFileTypeCopy(type, extension) {\n return extension?.copy ?? type.copy;\n}\nexport function resolveFileTypeOpen(type, extension) {\n return extension?.open ?? type.open;\n}\nexport function resolveFileTypePaste(type, extension) {\n return extension?.paste ?? type.paste;\n}\nexport function resolveFileTypeUtility(type, extension, name) {\n const fromExtension = extension?.utilities?.[name];\n if (fromExtension) {\n return fromExtension;\n }\n return type.utilities?.[name];\n}\n/** Runs `copy` from extension first, then parent type. */\nexport async function runFileTypeCopy(type, payload, extension) {\n const copy = resolveFileTypeCopy(type, extension);\n if (!copy) {\n return undefined;\n }\n return copy(payload);\n}\n/** Runs a utility from extension first, then parent type. */\nexport function runFileTypeUtility(type, ctx, extension, name, ...args) {\n const utility = resolveFileTypeUtility(type, extension, name);\n if (!utility) {\n return undefined;\n }\n return utility(ctx, ...args);\n}\n/** Runs a catalog utility with optional file-based extension resolution. */\nexport function runFileTypeUtilityForFile(type, ctx, file, name, ...args) {\n const extension = file ? findFileTypeExtension(file, type) : undefined;\n return runFileTypeUtility(type, ctx, extension, name, ...args);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLnJlc29sdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvZmlsZS10eXBlLnJlc29sdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFVckQsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQWU7SUFDM0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXZELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLElBQUksaUJBQWlCLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxFQUFFLElBQUksUUFBUSxLQUFLLGFBQWEsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxPQUFPLGNBQWMsS0FBSyxpQkFBaUIsQ0FBQztBQUM5QyxDQUFDO0FBRUQsNERBQTREO0FBQzVELE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsSUFBZ0IsRUFDaEIsYUFBcUI7SUFFckIsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUs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Q0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLElBQWdCLEVBQ2hCLEdBQXNCLEVBQ3RCLElBQXNCLEVBQ3RCLElBQVksRUFDWixHQUFHLElBQWU7SUFFbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RSxPQUFPLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFYRmlsZVR5cGVDb250ZXh0IH0gZnJvbSAnLi9maWxlLXR5cGUuY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZUNvcHlSZXN1bHQgfSBmcm9tICcuL2ZpbGUtdHlwZS5jb3B5JztcbmltcG9ydCB7IGdldEZpbGVFeHRlbnNpb24gfSBmcm9tICcuL2ZpbGUtdHlwZS5tZXJnZSc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVR5cGUsIEFYRmlsZVR5cGVFeHRlbnNpb24gfSBmcm9tICcuL2ZpbGUtdHlwZS5tb2RlbHMnO1xuXG4vKiogSGludCBmb3IgcmVzb2x2aW5nIGEgY2F0YWxvZyBleHRlbnNpb24gZW50cnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYRmlsZVR5cGVFeHRlbnNpb25IaW50IHtcbiAgZmlsZT86IEZpbGU7XG4gIGV4dGVuc2lvbk5hbWU/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogc3RyaW5nO1xufVxuXG4vKiogTWF0Y2hlcyBhIE1JTUUgdHlwZSBhZ2FpbnN0IGEgY2F0YWxvZyBwYXR0ZXJuIChgaW1hZ2UvKmAsIGV4YWN0IHR5cGUsIOKApikuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc0ZpbGVNaW1lKG1pbWU6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRNaW1lID0gbWltZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdHRlcm4gPSBwYXR0ZXJuLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICghbm9ybWFsaXplZFBhdHRlcm4gfHwgbm9ybWFsaXplZFBhdHRlcm4gPT09ICcqLyonIHx8IG5vcm1hbGl6ZWRQYXR0ZXJuID09PSAnKicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkUGF0dGVybi5lbmRzV2l0aCgnLyonKSkge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gbm9ybWFsaXplZFBhdHRlcm4uc2xpY2UoMCwgLTIpO1xuICAgIHJldHVybiBub3JtYWxpemVkTWltZS5zdGFydHNXaXRoKGAke2NhdGVnb3J5fS9gKSB8fCAobm9ybWFsaXplZE1pbWUgPT09ICcnICYmIGNhdGVnb3J5ID09PSAnYXBwbGljYXRpb24nKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkTWltZSA9PT0gbm9ybWFsaXplZFBhdHRlcm47XG59XG5cbi8qKiBGaW5kcyBhbiBleHRlbnNpb24gZW50cnkgYnkgaXRzIGBuYW1lYCAod2l0aG91dCBkb3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaWxlVHlwZUV4dGVuc2lvbkJ5TmFtZShcbiAgdHlwZTogQVhGaWxlVHlwZSxcbiAgZXh0ZW5zaW9uTmFtZTogc3RyaW5nLFxuKTogQVhGaWxlVHlwZUV4dGVuc2lvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4dCA9IGV4dGVuc2lvbk5hbWUucmVwbGFjZSgvXlxcLi8sICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFleHQgfHwgIXR5cGUuZXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gdHlwZS5leHRlbnNpb25zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGV4dCk7XG59XG5cbi8qKiBGaW5kcyBhbiBleHRlbnNpb24gZW50cnkgd2hvc2UgdmFsaWRhdGlvbnMgaW5jbHVkZSB0aGUgZ2l2ZW4gTUlNRSB0eXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaWxlVHlwZUV4dGVuc2lvbkZvck1pbWUoXG4gIHR5cGU6IEFYRmlsZVR5cGUsXG4gIG1pbWVUeXBlOiBzdHJpbmcsXG4pOiBBWEZpbGVUeXBlRXh0ZW5zaW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWltZSA9IG1pbWVUeXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIW1pbWUgfHwgIXR5cGUuZXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0eXBlLmV4dGVuc2lvbnMuZmluZCgoZW50cnkpID0+XG4gICAgZW50cnkudmFsaWRhdGlvbnM/Lm1pbWVUeXBlcz8uc29tZSgocGF0dGVybikgPT4gbWF0Y2hlc0ZpbGVNaW1lKG1pbWUsIHBhdHRlcm4pKSxcbiAgKTtcbn1cblxuLyoqIE1hdGNoaW5nIGV4dGVuc2lvbiBlbnRyeSBmb3IgYSBmaWxlIHdpdGhpbiBhIHR5cGUsIGlmIGFueS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlsZVR5cGVFeHRlbnNpb24oZmlsZTogRmlsZSwgdHlwZTogQVhGaWxlVHlwZSk6IEFYRmlsZVR5cGVFeHRlbnNpb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVzb2x2ZUZpbGVUeXBlRXh0ZW5zaW9uKHR5cGUsIHsgZmlsZSB9KTtcbn1cblxuLyoqIFJlc29sdmVzIHRoZSBiZXN0LW1hdGNoaW5nIGV4dGVuc2lvbiBlbnRyeSBmb3IgYSBmaWxlIG9yIGhpbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVUeXBlRXh0ZW5zaW9uKFxuICB0eXBlOiBBWEZpbGVUeXBlLFxuICBoaW50PzogQVhGaWxlVHlwZUV4dGVuc2lvbkhpbnQsXG4pOiBBWEZpbGVUeXBlRXh0ZW5zaW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFoaW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChoaW50LmZpbGUpIHtcbiAgICBjb25zdCBieUZpbGVOYW1lID0gZmluZEZpbGVUeXBlRXh0ZW5zaW9uQnlOYW1lKHR5cGUsIGdldEZpbGVFeHRlbnNpb24oaGludC5maWxlLm5hbWUpKTtcbiAgICBpZiAoYnlGaWxlTmFtZSkge1xuICAgICAgcmV0dXJuIGJ5RmlsZU5hbWU7XG4gICAgfVxuICAgIGlmIChoaW50LmZpbGUudHlwZSkge1xuICAgICAgY29uc3QgYnlGaWxlTWltZSA9IGZpbmRGaWxlVHlwZUV4dGVuc2lvbkZvck1pbWUodHlwZSwgaGludC5maWxlLnR5cGUpO1xuICAgICAgaWYgKGJ5RmlsZU1pbWUpIHtcbiAgICAgICAgcmV0dXJuIGJ5RmlsZU1pbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpbnQuZXh0ZW5zaW9uTmFtZSkge1xuICAgIGNvbnN0IGJ5TmFtZSA9IGZpbmRGaWxlVHlwZUV4dGVuc2lvbkJ5TmFtZSh0eXBlLCBoaW50LmV4dGVuc2lvbk5hbWUpO1xuICAgIGlmIChieU5hbWUpIHtcbiAgICAgIHJldHVybiBieU5hbWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpbnQubWltZVR5cGUpIHtcbiAgICByZXR1cm4gZmluZEZpbGVUeXBlRXh0ZW5zaW9uRm9yTWltZSh0eXBlLCBoaW50Lm1pbWVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZVR5cGVDb3B5KFxuICB0eXBlOiBBWEZpbGVUeXBlLFxuICBleHRlbnNpb24/OiBBWEZpbGVUeXBlRXh0ZW5zaW9uLFxuKTogQVhGaWxlVHlwZVsnY29weSddIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGV4dGVuc2lvbj8uY29weSA/PyB0eXBlLmNvcHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZVR5cGVPcGVuKFxuICB0eXBlOiBBWEZpbGVUeXBlLFxuICBleHRlbnNpb24/OiBBWEZpbGVUeXBlRXh0ZW5zaW9uLFxuKTogQVhGaWxlVHlwZVsnb3BlbiddIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGV4dGVuc2lvbj8ub3BlbiA/PyB0eXBlLm9wZW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZVR5cGVQYXN0ZShcbiAgdHlwZTogQVhGaWxlVHlwZSxcbiAgZXh0ZW5zaW9uPzogQVhGaWxlVHlwZUV4dGVuc2lvbixcbik6IEFYRmlsZVR5cGVbJ3Bhc3RlJ10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZXh0ZW5zaW9uPy5wYXN0ZSA/PyB0eXBlLnBhc3RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVUeXBlVXRpbGl0eShcbiAgdHlwZTogQVhGaWxlVHlwZSxcbiAgZXh0ZW5zaW9uOiBBWEZpbGVUeXBlRXh0ZW5zaW9uIHwgdW5kZWZpbmVkLFxuICBuYW1lOiBzdHJpbmcsXG4pOiAoKGN0eDogQVhGaWxlVHlwZUNvbnRleHQsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24pIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZnJvbUV4dGVuc2lvbiA9IGV4dGVuc2lvbj8udXRpbGl0aWVzPy5bbmFtZV07XG4gIGlmIChmcm9tRXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZyb21FeHRlbnNpb247XG4gIH1cbiAgcmV0dXJuIHR5cGUudXRpbGl0aWVzPy5bbmFtZV07XG59XG5cbi8qKiBSdW5zIGBjb3B5YCBmcm9tIGV4dGVuc2lvbiBmaXJzdCwgdGhlbiBwYXJlbnQgdHlwZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5GaWxlVHlwZUNvcHkoXG4gIHR5cGU6IEFYRmlsZVR5cGUsXG4gIHBheWxvYWQ6IHVua25vd24sXG4gIGV4dGVuc2lvbj86IEFYRmlsZVR5cGVFeHRlbnNpb24sXG4pOiBQcm9taXNlPEFYRmlsZUNvcHlSZXN1bHQ+IHtcbiAgY29uc3QgY29weSA9IHJlc29sdmVGaWxlVHlwZUNvcHkodHlwZSwgZXh0ZW5zaW9uKTtcbiAgaWYgKCFjb3B5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29weShwYXlsb2FkKTtcbn1cblxuLyoqIFJ1bnMgYSB1dGlsaXR5IGZyb20gZXh0ZW5zaW9uIGZpcnN0LCB0aGVuIHBhcmVudCB0eXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkZpbGVUeXBlVXRpbGl0eShcbiAgdHlwZTogQVhGaWxlVHlwZSxcbiAgY3R4OiBBWEZpbGVUeXBlQ29udGV4dCxcbiAgZXh0ZW5zaW9uOiBBWEZpbGVUeXBlRXh0ZW5zaW9uIHwgdW5kZWZpbmVkLFxuICBuYW1lOiBzdHJpbmcsXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKTogUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24ge1xuICBjb25zdCB1dGlsaXR5ID0gcmVzb2x2ZUZpbGVUeXBlVXRpbGl0eSh0eXBlLCBleHRlbnNpb24sIG5hbWUpO1xuICBpZiAoIXV0aWxpdHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB1dGlsaXR5KGN0eCwgLi4uYXJncyk7XG59XG5cbi8qKiBSdW5zIGEgY2F0YWxvZyB1dGlsaXR5IHdpdGggb3B0aW9uYWwgZmlsZS1iYXNlZCBleHRlbnNpb24gcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5GaWxlVHlwZVV0aWxpdHlGb3JGaWxlKFxuICB0eXBlOiBBWEZpbGVUeXBlLFxuICBjdHg6IEFYRmlsZVR5cGVDb250ZXh0LFxuICBmaWxlOiBGaWxlIHwgdW5kZWZpbmVkLFxuICBuYW1lOiBzdHJpbmcsXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKTogUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24ge1xuICBjb25zdCBleHRlbnNpb24gPSBmaWxlID8gZmluZEZpbGVUeXBlRXh0ZW5zaW9uKGZpbGUsIHR5cGUpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcnVuRmlsZVR5cGVVdGlsaXR5KHR5cGUsIGN0eCwgZXh0ZW5zaW9uLCBuYW1lLCAuLi5hcmdzKTtcbn1cbiJdfQ==","import { runInInjectionContext } from '@angular/core';\nimport { resolveFileTypeOpen } from './file-type.resolve';\n/** Runs `open` from extension first, then parent type, in the caller's injection context. */\nexport function runFileTypeOpen(type, ctx, payload, extension) {\n const open = resolveFileTypeOpen(type, extension);\n if (!open) {\n return false;\n }\n return runInInjectionContext(ctx.injector, () => open(ctx, payload));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLm9wZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvZmlsZS10eXBlLm9wZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSzFELDZGQUE2RjtBQUM3RixNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFnQixFQUNoQixHQUEwQixFQUMxQixPQUFnQixFQUNoQixTQUErQjtJQUUvQixNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZU9wZW5Db250ZXh0IH0gZnJvbSAnLi9maWxlLXR5cGUuY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVR5cGUsIEFYRmlsZVR5cGVFeHRlbnNpb24gfSBmcm9tICcuL2ZpbGUtdHlwZS5tb2RlbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUZpbGVUeXBlT3BlbiB9IGZyb20gJy4vZmlsZS10eXBlLnJlc29sdmUnO1xuXG4vKiogUmVzdWx0IG9mIHtAbGluayBBWEZpbGVUeXBlLm9wZW59OyBgZmFsc2VgIG1lYW5zIHRoZSBwYXlsb2FkIHdhcyBub3Qgb3BlbmVkLiAqL1xuZXhwb3J0IHR5cGUgQVhGaWxlT3BlblJlc3VsdCA9IHZvaWQgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuLyoqIFJ1bnMgYG9wZW5gIGZyb20gZXh0ZW5zaW9uIGZpcnN0LCB0aGVuIHBhcmVudCB0eXBlLCBpbiB0aGUgY2FsbGVyJ3MgaW5qZWN0aW9uIGNvbnRleHQuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuRmlsZVR5cGVPcGVuKFxuICB0eXBlOiBBWEZpbGVUeXBlLFxuICBjdHg6IEFYRmlsZVR5cGVPcGVuQ29udGV4dCxcbiAgcGF5bG9hZDogdW5rbm93bixcbiAgZXh0ZW5zaW9uPzogQVhGaWxlVHlwZUV4dGVuc2lvbixcbik6IFByb21pc2U8QVhGaWxlT3BlblJlc3VsdD4gfCBBWEZpbGVPcGVuUmVzdWx0IHtcbiAgY29uc3Qgb3BlbiA9IHJlc29sdmVGaWxlVHlwZU9wZW4odHlwZSwgZXh0ZW5zaW9uKTtcbiAgaWYgKCFvcGVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoY3R4LmluamVjdG9yLCAoKSA9PiBvcGVuKGN0eCwgcGF5bG9hZCkpO1xufVxuIl19","import { InjectionToken } from '@angular/core';\n/** Contributes {@link AXFileType} entries (multi provider). */\nexport class AXFileTypeInfoProvider {\n}\nexport const AX_FILE_TYPE_INFO_PROVIDER = new InjectionToken('AX_FILE_TYPE_INFO_PROVIDER');\nexport function provideFileTypeInfoProvider(provider) {\n return {\n provide: AX_FILE_TYPE_INFO_PROVIDER,\n useClass: provider,\n multi: true,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLWluZm8tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvZmlsZS10eXBlLWluZm8tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHL0QsK0RBQStEO0FBQy9ELE1BQU0sT0FBZ0Isc0JBQXNCO0NBRTNDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQTJCLDRCQUE0QixDQUFDLENBQUM7QUFFckgsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFFBQXNDO0lBQ2hGLE9BQU87UUFDTCxPQUFPLEVBQUUsMEJBQTBCO1FBQ25DLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSB9IGZyb20gJy4vZmlsZS10eXBlLm1vZGVscyc7XG5cbi8qKiBDb250cmlidXRlcyB7QGxpbmsgQVhGaWxlVHlwZX0gZW50cmllcyAobXVsdGkgcHJvdmlkZXIpLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYRmlsZVR5cGVJbmZvUHJvdmlkZXIge1xuICBhYnN0cmFjdCBpdGVtcygpOiBQcm9taXNlPEFYRmlsZVR5cGVbXT47XG59XG5cbmV4cG9ydCBjb25zdCBBWF9GSUxFX1RZUEVfSU5GT19QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyW10+KCdBWF9GSUxFX1RZUEVfSU5GT19QUk9WSURFUicpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZpbGVUeXBlSW5mb1Byb3ZpZGVyKHByb3ZpZGVyOiBUeXBlPEFYRmlsZVR5cGVJbmZvUHJvdmlkZXI+KTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFYX0ZJTEVfVFlQRV9JTkZPX1BST1ZJREVSLFxuICAgIHVzZUNsYXNzOiBwcm92aWRlcixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cbiJdfQ==","import { getFileExtension, isExtensionsOnlyType, resolveFileValidations, } from './file-type.merge';\nimport { findFileTypeExtension } from './file-type.resolve';\n/** Maps {@link AXFileValidations} to executable validation entries. */\nexport function fileValidationsToRules(validations) {\n const rules = [];\n if (validations.mimeTypes?.length) {\n rules.push({\n rule: 'fileMimeType',\n options: { allowed: validations.mimeTypes },\n });\n }\n if (validations.minSize != null) {\n rules.push({\n rule: 'fileMinSize',\n options: { minSize: validations.minSize },\n });\n }\n if (validations.maxSize != null) {\n rules.push({\n rule: 'fileMaxSize',\n options: { maxSize: validations.maxSize },\n });\n }\n if (validations.rules?.length) {\n rules.push(...validations.rules);\n }\n return rules;\n}\n/** Failed validation results; empty array means the file is valid. */\nexport async function validateFileWithValidations(validation, file, validations) {\n const entries = fileValidationsToRules(validations);\n const errors = [];\n for (const { rule, options } of entries) {\n const result = await validation.validate(rule, file, options);\n if (!result.result) {\n errors.push(result);\n }\n }\n return errors;\n}\n/** Validates a file against a type; extension rules override when the file name matches. */\nexport async function validateFileAgainstType(validation, file, type, extension) {\n const matchedExtension = extension ?? findFileTypeExtension(file, type);\n if (isExtensionsOnlyType(type) && !matchedExtension) {\n const ext = getFileExtension(file.name);\n return [\n {\n rule: 'fileExtension',\n result: false,\n message: ext ? `Extension \".${ext}\" is not allowed.` : 'File must have an allowed extension.',\n value: ext,\n },\n ];\n }\n const resolved = resolveFileValidations(type, matchedExtension);\n return validateFileWithValidations(validation, file, resolved);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLnZhbGlkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL2ZpbGUtdHlwZS52YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixzQkFBc0IsR0FDdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc1RCx1RUFBdUU7QUFDdkUsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFdBQThCO0lBQ25FLE1BQU0sS0FBSyxHQUEyQixFQUFFLENBQUM7SUFFekMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLEVBQUUsY0FBYztZQUNwQixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRTtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLEVBQUUsYUFBYTtZQUNuQixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLEVBQUUsYUFBYTtZQUNuQixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxVQUErQixFQUMvQixJQUFVLEVBQ1YsV0FBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztJQUU1QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxVQUErQixFQUMvQixJQUFVLEVBQ1YsSUFBZ0IsRUFDaEIsU0FBK0I7SUFFL0IsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXhFLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO2dCQUM3RixLQUFLLEVBQUUsR0FBRzthQUNYO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRSxPQUFPLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVmFsaWRhdGlvblNlcnZpY2UsIHR5cGUgQVhWYWxpZGF0aW9uUnVsZVJlc3VsdCB9IGZyb20gJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJztcbmltcG9ydCB7XG4gIGdldEZpbGVFeHRlbnNpb24sXG4gIGlzRXh0ZW5zaW9uc09ubHlUeXBlLFxuICByZXNvbHZlRmlsZVZhbGlkYXRpb25zLFxufSBmcm9tICcuL2ZpbGUtdHlwZS5tZXJnZSc7XG5pbXBvcnQgeyBmaW5kRmlsZVR5cGVFeHRlbnNpb24gfSBmcm9tICcuL2ZpbGUtdHlwZS5yZXNvbHZlJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSwgQVhGaWxlVHlwZUV4dGVuc2lvbiwgQVhGaWxlVmFsaWRhdGlvblJ1bGUsIEFYRmlsZVZhbGlkYXRpb25zIH0gZnJvbSAnLi9maWxlLXR5cGUubW9kZWxzJztcblxuLyoqIE1hcHMge0BsaW5rIEFYRmlsZVZhbGlkYXRpb25zfSB0byBleGVjdXRhYmxlIHZhbGlkYXRpb24gZW50cmllcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxlVmFsaWRhdGlvbnNUb1J1bGVzKHZhbGlkYXRpb25zOiBBWEZpbGVWYWxpZGF0aW9ucyk6IEFYRmlsZVZhbGlkYXRpb25SdWxlW10ge1xuICBjb25zdCBydWxlczogQVhGaWxlVmFsaWRhdGlvblJ1bGVbXSA9IFtdO1xuXG4gIGlmICh2YWxpZGF0aW9ucy5taW1lVHlwZXM/Lmxlbmd0aCkge1xuICAgIHJ1bGVzLnB1c2goe1xuICAgICAgcnVsZTogJ2ZpbGVNaW1lVHlwZScsXG4gICAgICBvcHRpb25zOiB7IGFsbG93ZWQ6IHZhbGlkYXRpb25zLm1pbWVUeXBlcyB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRpb25zLm1pblNpemUgIT0gbnVsbCkge1xuICAgIHJ1bGVzLnB1c2goe1xuICAgICAgcnVsZTogJ2ZpbGVNaW5TaXplJyxcbiAgICAgIG9wdGlvbnM6IHsgbWluU2l6ZTogdmFsaWRhdGlvbnMubWluU2l6ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRpb25zLm1heFNpemUgIT0gbnVsbCkge1xuICAgIHJ1bGVzLnB1c2goe1xuICAgICAgcnVsZTogJ2ZpbGVNYXhTaXplJyxcbiAgICAgIG9wdGlvbnM6IHsgbWF4U2l6ZTogdmFsaWRhdGlvbnMubWF4U2l6ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRpb25zLnJ1bGVzPy5sZW5ndGgpIHtcbiAgICBydWxlcy5wdXNoKC4uLnZhbGlkYXRpb25zLnJ1bGVzKTtcbiAgfVxuXG4gIHJldHVybiBydWxlcztcbn1cblxuLyoqIEZhaWxlZCB2YWxpZGF0aW9uIHJlc3VsdHM7IGVtcHR5IGFycmF5IG1lYW5zIHRoZSBmaWxlIGlzIHZhbGlkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRmlsZVdpdGhWYWxpZGF0aW9ucyhcbiAgdmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uU2VydmljZSxcbiAgZmlsZTogRmlsZSxcbiAgdmFsaWRhdGlvbnM6IEFYRmlsZVZhbGlkYXRpb25zLFxuKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGZpbGVWYWxpZGF0aW9uc1RvUnVsZXModmFsaWRhdGlvbnMpO1xuICBjb25zdCBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgeyBydWxlLCBvcHRpb25zIH0gb2YgZW50cmllcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRpb24udmFsaWRhdGUocnVsZSwgZmlsZSwgb3B0aW9ucyk7XG4gICAgaWYgKCFyZXN1bHQucmVzdWx0KSB7XG4gICAgICBlcnJvcnMucHVzaChyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKiBWYWxpZGF0ZXMgYSBmaWxlIGFnYWluc3QgYSB0eXBlOyBleHRlbnNpb24gcnVsZXMgb3ZlcnJpZGUgd2hlbiB0aGUgZmlsZSBuYW1lIG1hdGNoZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVGaWxlQWdhaW5zdFR5cGUoXG4gIHZhbGlkYXRpb246IEFYVmFsaWRhdGlvblNlcnZpY2UsXG4gIGZpbGU6IEZpbGUsXG4gIHR5cGU6IEFYRmlsZVR5cGUsXG4gIGV4dGVuc2lvbj86IEFYRmlsZVR5cGVFeHRlbnNpb24sXG4pOiBQcm9taXNlPEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXT4ge1xuICBjb25zdCBtYXRjaGVkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID8/IGZpbmRGaWxlVHlwZUV4dGVuc2lvbihmaWxlLCB0eXBlKTtcblxuICBpZiAoaXNFeHRlbnNpb25zT25seVR5cGUodHlwZSkgJiYgIW1hdGNoZWRFeHRlbnNpb24pIHtcbiAgICBjb25zdCBleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgcnVsZTogJ2ZpbGVFeHRlbnNpb24nLFxuICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBleHQgPyBgRXh0ZW5zaW9uIFwiLiR7ZXh0fVwiIGlzIG5vdCBhbGxvd2VkLmAgOiAnRmlsZSBtdXN0IGhhdmUgYW4gYWxsb3dlZCBleHRlbnNpb24uJyxcbiAgICAgICAgdmFsdWU6IGV4dCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUZpbGVWYWxpZGF0aW9ucyh0eXBlLCBtYXRjaGVkRXh0ZW5zaW9uKTtcbiAgcmV0dXJuIHZhbGlkYXRlRmlsZVdpdGhWYWxpZGF0aW9ucyh2YWxpZGF0aW9uLCBmaWxlLCByZXNvbHZlZCk7XG59XG4iXX0=","import { AXValidationService } from '@acorex/core/validation';\nimport { Injectable, inject } from '@angular/core';\nimport { AX_FILE_TYPE_INFO_PROVIDER } from './file-type-info-provider';\nimport { findFileTypeExtension, matchesFileMime } from './file-type.resolve';\nimport { filterFileTypesByPurpose } from './file-type.metadata';\nimport { validateFileAgainstType } from './file-type.validate';\nimport * as i0 from \"@angular/core\";\nexport class AXFileTypeRegistryService {\n constructor() {\n this.validation = inject(AXValidationService);\n this.providers = inject(AX_FILE_TYPE_INFO_PROVIDER, { optional: true }) ?? [];\n this.registeredTypes = [];\n this.cache = null;\n }\n /** Registers or replaces catalog entries (e.g. from feature bootstrap). */\n registerTypes(types) {\n for (const type of types) {\n const index = this.registeredTypes.findIndex((t) => t.name === type.name);\n if (index >= 0) {\n this.registeredTypes[index] = type;\n }\n else {\n this.registeredTypes.push(type);\n }\n }\n this.invalidateCache();\n }\n invalidateCache() {\n this.cache = null;\n }\n async resolveTypes() {\n if (this.cache) {\n return this.cache;\n }\n const byName = new Map();\n if (this.providers.length) {\n const batches = await Promise.all(this.providers.map((p) => p.items()));\n for (const batch of batches) {\n for (const type of batch) {\n if (!byName.has(type.name)) {\n byName.set(type.name, type);\n }\n }\n }\n }\n for (const type of this.registeredTypes) {\n byName.set(type.name, type);\n }\n this.cache = [...byName.values()];\n return this.cache;\n }\n async getTypes(query) {\n const types = await this.resolveTypes();\n return filterFileTypesByPurpose(types, query?.purpose);\n }\n async get(name) {\n const types = await this.resolveTypes();\n return types.find((t) => t.name === name);\n }\n async accept(typeNames) {\n const names = typeNames ? (Array.isArray(typeNames) ? typeNames : [typeNames]) : undefined;\n const types = await this.resolveTypes();\n const selected = names?.length ? types.filter((t) => names.includes(t.name)) : types;\n if (names?.length && selected.length === 0) {\n return '';\n }\n const parts = new Set();\n for (const type of selected) {\n type.validations?.mimeTypes?.forEach((m) => parts.add(m));\n type.extensions?.forEach((ext) => {\n ext.validations?.mimeTypes?.forEach((m) => parts.add(m));\n parts.add(`.${ext.name.replace(/^\\./, '')}`);\n });\n }\n return [...parts].join(',');\n }\n async matchType(file) {\n const types = await this.resolveTypes();\n const mime = file.type.trim().toLowerCase();\n return types.find((type) => {\n const patterns = [\n ...(type.validations?.mimeTypes ?? []),\n ...(type.extensions?.flatMap((e) => e.validations?.mimeTypes ?? []) ?? []),\n ];\n if (!patterns.length) {\n return false;\n }\n return patterns.some((pattern) => matchesFileMime(mime, pattern));\n });\n }\n async validate(file, typeName) {\n const type = await this.get(typeName);\n if (!type) {\n return [\n {\n rule: 'fileType',\n result: false,\n message: `Unknown file type: ${typeName}`,\n value: typeName,\n },\n ];\n }\n const extension = findFileTypeExtension(file, type);\n return validateFileAgainstType(this.validation, file, type, extension);\n }\n async validateAgainstTypes(file, typeNames) {\n const names = Array.isArray(typeNames) ? typeNames : [typeNames];\n let lastErrors = [];\n for (const name of names) {\n const errors = await this.validate(file, name);\n if (errors.length === 0) {\n return [];\n }\n lastErrors = errors;\n }\n return lastErrors;\n }\n async validateMany(files, typeNames) {\n const accepted = [];\n const rejected = [];\n for (const file of files) {\n const errors = await this.validateAgainstTypes(file, typeNames);\n if (errors.length === 0) {\n accepted.push(file);\n }\n else {\n rejected.push({ file, errors });\n }\n }\n return { accepted, rejected };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileTypeRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileTypeRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileTypeRegistryService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10eXBlLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvZmlsZS10eXBlLXJlZ2lzdHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSTdFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUcvRCxNQUFNLE9BQU8seUJBQXlCO0lBRHRDO1FBRW1CLGVBQVUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV6QyxjQUFTLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXpFLG9CQUFlLEdBQWlCLEVBQUUsQ0FBQztRQUU1QyxVQUFLLEdBQXdCLElBQUksQ0FBQztLQTRLM0M7SUExS0MsMkVBQTJFO0lBRTNFLGFBQWEsQ0FBQyxLQUFtQjtRQUMvQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUxRSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFeEUsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDOUIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUF1QjtRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxPQUFPLHdCQUF3QixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBWTtRQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBNkI7UUFDeEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFM0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXJGLElBQUksS0FBSyxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFaEMsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQixHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFekQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVU7UUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU1QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBRztnQkFDZixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO2dCQUV0QyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMzRSxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFVLEVBQUUsUUFBZ0I7UUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFVBQVU7b0JBRWhCLE1BQU0sRUFBRSxLQUFLO29CQUViLE9BQU8sRUFBRSxzQkFBc0IsUUFBUSxFQUFFO29CQUV6QyxLQUFLLEVBQUUsUUFBUTtpQkFDaEI7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwRCxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixJQUFVLEVBRVYsU0FBNEI7UUFFNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpFLElBQUksVUFBVSxHQUE2QixFQUFFLENBQUM7UUFFOUMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRS9DLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN0QixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQ2hCLEtBQWEsRUFFYixTQUE0QjtRQUU1QixNQUFNLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFFNUIsTUFBTSxRQUFRLEdBQXVELEVBQUUsQ0FBQztRQUV4RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVoRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs4R0FsTFUseUJBQXlCO2tIQUF6Qix5QkFBeUIsY0FEWixNQUFNOzsyRkFDbkIseUJBQXlCO2tCQURyQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhWYWxpZGF0aW9uUnVsZVJlc3VsdCB9IGZyb20gJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJztcblxuaW1wb3J0IHsgQVhWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJztcblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYX0ZJTEVfVFlQRV9JTkZPX1BST1ZJREVSIH0gZnJvbSAnLi9maWxlLXR5cGUtaW5mby1wcm92aWRlcic7XG5cbmltcG9ydCB7IGZpbmRGaWxlVHlwZUV4dGVuc2lvbiwgbWF0Y2hlc0ZpbGVNaW1lIH0gZnJvbSAnLi9maWxlLXR5cGUucmVzb2x2ZSc7XG5cbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSwgQVhGaWxlVHlwZVF1ZXJ5IH0gZnJvbSAnLi9maWxlLXR5cGUubW9kZWxzJztcblxuaW1wb3J0IHsgZmlsdGVyRmlsZVR5cGVzQnlQdXJwb3NlIH0gZnJvbSAnLi9maWxlLXR5cGUubWV0YWRhdGEnO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVBZ2FpbnN0VHlwZSB9IGZyb20gJy4vZmlsZS10eXBlLnZhbGlkYXRlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0aW9uID0gaW5qZWN0KEFYVmFsaWRhdGlvblNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJzID0gaW5qZWN0KEFYX0ZJTEVfVFlQRV9JTkZPX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0ZXJlZFR5cGVzOiBBWEZpbGVUeXBlW10gPSBbXTtcblxuICBwcml2YXRlIGNhY2hlOiBBWEZpbGVUeXBlW10gfCBudWxsID0gbnVsbDtcblxuICAvKiogUmVnaXN0ZXJzIG9yIHJlcGxhY2VzIGNhdGFsb2cgZW50cmllcyAoZS5nLiBmcm9tIGZlYXR1cmUgYm9vdHN0cmFwKS4gKi9cblxuICByZWdpc3RlclR5cGVzKHR5cGVzOiBBWEZpbGVUeXBlW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkVHlwZXMuZmluZEluZGV4KCh0KSA9PiB0Lm5hbWUgPT09IHR5cGUubmFtZSk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZFR5cGVzW2luZGV4XSA9IHR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRUeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW52YWxpZGF0ZUNhY2hlKCk7XG4gIH1cblxuICBpbnZhbGlkYXRlQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVUeXBlcygpOiBQcm9taXNlPEFYRmlsZVR5cGVbXT4ge1xuICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZTtcbiAgICB9XG5cbiAgICBjb25zdCBieU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQVhGaWxlVHlwZT4oKTtcblxuICAgIGlmICh0aGlzLnByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGJhdGNoZXMgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnByb3ZpZGVycy5tYXAoKHApID0+IHAuaXRlbXMoKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIGJhdGNoZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIGJhdGNoKSB7XG4gICAgICAgICAgaWYgKCFieU5hbWUuaGFzKHR5cGUubmFtZSkpIHtcbiAgICAgICAgICAgIGJ5TmFtZS5zZXQodHlwZS5uYW1lLCB0eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdGhpcy5yZWdpc3RlcmVkVHlwZXMpIHtcbiAgICAgIGJ5TmFtZS5zZXQodHlwZS5uYW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhY2hlID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV07XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZTtcbiAgfVxuXG4gIGFzeW5jIGdldFR5cGVzKHF1ZXJ5PzogQVhGaWxlVHlwZVF1ZXJ5KTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICBjb25zdCB0eXBlcyA9IGF3YWl0IHRoaXMucmVzb2x2ZVR5cGVzKCk7XG4gICAgcmV0dXJuIGZpbHRlckZpbGVUeXBlc0J5UHVycG9zZSh0eXBlcywgcXVlcnk/LnB1cnBvc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhGaWxlVHlwZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5yZXNvbHZlVHlwZXMoKTtcblxuICAgIHJldHVybiB0eXBlcy5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgYXN5bmMgYWNjZXB0KHR5cGVOYW1lcz86IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBuYW1lcyA9IHR5cGVOYW1lcyA/IChBcnJheS5pc0FycmF5KHR5cGVOYW1lcykgPyB0eXBlTmFtZXMgOiBbdHlwZU5hbWVzXSkgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB0eXBlcyA9IGF3YWl0IHRoaXMucmVzb2x2ZVR5cGVzKCk7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IG5hbWVzPy5sZW5ndGggPyB0eXBlcy5maWx0ZXIoKHQpID0+IG5hbWVzLmluY2x1ZGVzKHQubmFtZSkpIDogdHlwZXM7XG5cbiAgICBpZiAobmFtZXM/Lmxlbmd0aCAmJiBzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHNlbGVjdGVkKSB7XG4gICAgICB0eXBlLnZhbGlkYXRpb25zPy5taW1lVHlwZXM/LmZvckVhY2goKG0pID0+IHBhcnRzLmFkZChtKSk7XG5cbiAgICAgIHR5cGUuZXh0ZW5zaW9ucz8uZm9yRWFjaCgoZXh0KSA9PiB7XG4gICAgICAgIGV4dC52YWxpZGF0aW9ucz8ubWltZVR5cGVzPy5mb3JFYWNoKChtKSA9PiBwYXJ0cy5hZGQobSkpO1xuXG4gICAgICAgIHBhcnRzLmFkZChgLiR7ZXh0Lm5hbWUucmVwbGFjZSgvXlxcLi8sICcnKX1gKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4ucGFydHNdLmpvaW4oJywnKTtcbiAgfVxuXG4gIGFzeW5jIG1hdGNoVHlwZShmaWxlOiBGaWxlKTogUHJvbWlzZTxBWEZpbGVUeXBlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLnJlc29sdmVUeXBlcygpO1xuXG4gICAgY29uc3QgbWltZSA9IGZpbGUudHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgLi4uKHR5cGUudmFsaWRhdGlvbnM/Lm1pbWVUeXBlcyA/PyBbXSksXG5cbiAgICAgICAgLi4uKHR5cGUuZXh0ZW5zaW9ucz8uZmxhdE1hcCgoZSkgPT4gZS52YWxpZGF0aW9ucz8ubWltZVR5cGVzID8/IFtdKSA/PyBbXSksXG4gICAgICBdO1xuXG4gICAgICBpZiAoIXBhdHRlcm5zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXR0ZXJucy5zb21lKChwYXR0ZXJuKSA9PiBtYXRjaGVzRmlsZU1pbWUobWltZSwgcGF0dGVybikpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoZmlsZTogRmlsZSwgdHlwZU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdPiB7XG4gICAgY29uc3QgdHlwZSA9IGF3YWl0IHRoaXMuZ2V0KHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGU6ICdmaWxlVHlwZScsXG5cbiAgICAgICAgICByZXN1bHQ6IGZhbHNlLFxuXG4gICAgICAgICAgbWVzc2FnZTogYFVua25vd24gZmlsZSB0eXBlOiAke3R5cGVOYW1lfWAsXG5cbiAgICAgICAgICB2YWx1ZTogdHlwZU5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbmRGaWxlVHlwZUV4dGVuc2lvbihmaWxlLCB0eXBlKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVBZ2FpbnN0VHlwZSh0aGlzLnZhbGlkYXRpb24sIGZpbGUsIHR5cGUsIGV4dGVuc2lvbik7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUFnYWluc3RUeXBlcyhcbiAgICBmaWxlOiBGaWxlLFxuXG4gICAgdHlwZU5hbWVzOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10+IHtcbiAgICBjb25zdCBuYW1lcyA9IEFycmF5LmlzQXJyYXkodHlwZU5hbWVzKSA/IHR5cGVOYW1lcyA6IFt0eXBlTmFtZXNdO1xuXG4gICAgbGV0IGxhc3RFcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKGZpbGUsIG5hbWUpO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIGxhc3RFcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFcnJvcnM7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZU1hbnkoXG4gICAgZmlsZXM6IEZpbGVbXSxcblxuICAgIHR5cGVOYW1lczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICk6IFByb21pc2U8eyBhY2NlcHRlZDogRmlsZVtdOyByZWplY3RlZDogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W10gfT4ge1xuICAgIGNvbnN0IGFjY2VwdGVkOiBGaWxlW10gPSBbXTtcblxuICAgIGNvbnN0IHJlamVjdGVkOiB7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWdhaW5zdFR5cGVzKGZpbGUsIHR5cGVOYW1lcyk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjY2VwdGVkLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3RlZC5wdXNoKHsgZmlsZSwgZXJyb3JzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGFjY2VwdGVkLCByZWplY3RlZCB9O1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport * as i0 from \"@angular/core\";\nconst MB = 1024 * 1024;\nexport const AX_AUDIO_FILE_TYPE = {\n name: 'audio',\n metadata: createFileTypeMetadata('system'),\n title: 'Audio',\n icon: 'fa-light fa-music ax-text-amber-500',\n validations: {\n mimeTypes: ['audio/*'],\n minSize: 1,\n maxSize: 50 * MB,\n },\n extensions: [\n { name: 'mp3', title: 'MP3' },\n { name: 'wav', title: 'WAV', validations: { maxSize: 30 * MB } },\n { name: 'ogg', title: 'OGG' },\n { name: 'm4a', title: 'M4A' },\n ],\n};\nexport class AXAudioFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([AX_AUDIO_FILE_TYPE]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXAudioFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXAudioFileTypeProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXAudioFileTypeProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8tZmlsZS10eXBlLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3R5cGVzLnByb3ZpZGVycy9hdWRpby1maWxlLXR5cGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHL0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBZTtJQUM1QyxJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUscUNBQXFDO0lBQzNDLFdBQVcsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRTtLQUNqQjtJQUNELFVBQVUsRUFBRTtRQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1FBQzdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDaEUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDN0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7S0FDOUI7Q0FDRixDQUFDO0FBR0YsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHNCQUFzQjtJQUNqRSxLQUFLO1FBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7OEdBSFUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIH0gZnJvbSAnLi4vZmlsZS10eXBlLWluZm8tcHJvdmlkZXInO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGUtdHlwZS5tZXRhZGF0YSc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVR5cGUgfSBmcm9tICcuLi9maWxlLXR5cGUubW9kZWxzJztcblxuY29uc3QgTUIgPSAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGNvbnN0IEFYX0FVRElPX0ZJTEVfVFlQRTogQVhGaWxlVHlwZSA9IHtcbiAgbmFtZTogJ2F1ZGlvJyxcbiAgbWV0YWRhdGE6IGNyZWF0ZUZpbGVUeXBlTWV0YWRhdGEoJ3N5c3RlbScpLFxuICB0aXRsZTogJ0F1ZGlvJyxcbiAgaWNvbjogJ2ZhLWxpZ2h0IGZhLW11c2ljIGF4LXRleHQtYW1iZXItNTAwJyxcbiAgdmFsaWRhdGlvbnM6IHtcbiAgICBtaW1lVHlwZXM6IFsnYXVkaW8vKiddLFxuICAgIG1pblNpemU6IDEsXG4gICAgbWF4U2l6ZTogNTAgKiBNQixcbiAgfSxcbiAgZXh0ZW5zaW9uczogW1xuICAgIHsgbmFtZTogJ21wMycsIHRpdGxlOiAnTVAzJyB9LFxuICAgIHsgbmFtZTogJ3dhdicsIHRpdGxlOiAnV0FWJywgdmFsaWRhdGlvbnM6IHsgbWF4U2l6ZTogMzAgKiBNQiB9IH0sXG4gICAgeyBuYW1lOiAnb2dnJywgdGl0bGU6ICdPR0cnIH0sXG4gICAgeyBuYW1lOiAnbTRhJywgdGl0bGU6ICdNNEEnIH0sXG4gIF0sXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhBdWRpb0ZpbGVUeXBlUHJvdmlkZXIgZXh0ZW5kcyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIHtcbiAgaXRlbXMoKTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtBWF9BVURJT19GSUxFX1RZUEVdKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport * as i0 from \"@angular/core\";\nconst MB = 1024 * 1024;\n/** Extension-only: no type `validations` — only listed extensions are allowed. */\nexport const AX_DOCUMENT_FILE_TYPE = {\n name: 'document',\n metadata: createFileTypeMetadata('system'),\n title: 'Document',\n icon: 'fa-light fa-file-lines ax-text-red-500',\n extensions: [{ name: 'pdf', title: 'PDF', validations: { mimeTypes: ['application/pdf'], maxSize: 5 * MB } }],\n};\nexport class AXDocumentFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([AX_DOCUMENT_FILE_TYPE]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDocumentFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDocumentFileTypeProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDocumentFileTypeProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZmlsZS10eXBlLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3R5cGVzLnByb3ZpZGVycy9kb2N1bWVudC1maWxlLXR5cGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHL0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWU7SUFDL0MsSUFBSSxFQUFFLFVBQVU7SUFDaEIsUUFBUSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztJQUMxQyxLQUFLLEVBQUUsVUFBVTtJQUNqQixJQUFJLEVBQUUsd0NBQXdDO0lBQzlDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQzlHLENBQUM7QUFHRixNQUFNLE9BQU8sMEJBQTJCLFNBQVEsc0JBQXNCO0lBQ3BFLEtBQUs7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0FIVSwwQkFBMEI7a0hBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRmlsZVR5cGVJbmZvUHJvdmlkZXIgfSBmcm9tICcuLi9maWxlLXR5cGUtaW5mby1wcm92aWRlcic7XG5pbXBvcnQgeyBjcmVhdGVGaWxlVHlwZU1ldGFkYXRhIH0gZnJvbSAnLi4vZmlsZS10eXBlLm1ldGFkYXRhJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSB9IGZyb20gJy4uL2ZpbGUtdHlwZS5tb2RlbHMnO1xuXG5jb25zdCBNQiA9IDEwMjQgKiAxMDI0O1xuXG4vKiogRXh0ZW5zaW9uLW9ubHk6IG5vIHR5cGUgYHZhbGlkYXRpb25zYCDigJQgb25seSBsaXN0ZWQgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKi9cbmV4cG9ydCBjb25zdCBBWF9ET0NVTUVOVF9GSUxFX1RZUEU6IEFYRmlsZVR5cGUgPSB7XG4gIG5hbWU6ICdkb2N1bWVudCcsXG4gIG1ldGFkYXRhOiBjcmVhdGVGaWxlVHlwZU1ldGFkYXRhKCdzeXN0ZW0nKSxcbiAgdGl0bGU6ICdEb2N1bWVudCcsXG4gIGljb246ICdmYS1saWdodCBmYS1maWxlLWxpbmVzIGF4LXRleHQtcmVkLTUwMCcsXG4gIGV4dGVuc2lvbnM6IFt7IG5hbWU6ICdwZGYnLCB0aXRsZTogJ1BERicsIHZhbGlkYXRpb25zOiB7IG1pbWVUeXBlczogWydhcHBsaWNhdGlvbi9wZGYnXSwgbWF4U2l6ZTogNSAqIE1CIH0gfV0sXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhEb2N1bWVudEZpbGVUeXBlUHJvdmlkZXIgZXh0ZW5kcyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIHtcbiAgaXRlbXMoKTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtBWF9ET0NVTUVOVF9GSUxFX1RZUEVdKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport * as i0 from \"@angular/core\";\nconst MB = 1024 * 1024;\nexport const AX_FILE_FILE_TYPE = {\n name: 'file',\n metadata: createFileTypeMetadata('system'),\n title: 'File',\n icon: 'fa-light fa-file ax-text-neutral-500',\n validations: {\n mimeTypes: ['application/*', 'text/*'],\n minSize: 1,\n maxSize: 100 * MB,\n },\n extensions: [\n { name: 'pdf', title: 'PDF', validations: { mimeTypes: ['application/pdf'], maxSize: 25 * MB } },\n { name: 'doc', title: 'Word' },\n { name: 'docx', title: 'Word' },\n { name: 'txt', title: 'Text', validations: { mimeTypes: ['text/plain'], maxSize: 5 * MB } },\n { name: 'zip', title: 'ZIP', validations: { maxSize: 50 * MB } },\n ],\n};\nexport class AXFileFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([AX_FILE_FILE_TYPE]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileFileTypeProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileFileTypeProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1maWxlLXR5cGUucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvdHlwZXMucHJvdmlkZXJzL2ZpbGUtZmlsZS10eXBlLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRy9ELE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWU7SUFDM0MsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDO0lBQzFDLEtBQUssRUFBRSxNQUFNO0lBQ2IsSUFBSSxFQUFFLHNDQUFzQztJQUM1QyxXQUFXLEVBQUU7UUFDWCxTQUFTLEVBQUUsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFO0tBQ2xCO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO1FBQ2hHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzlCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQy9CLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDM0YsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtLQUNqRTtDQUNGLENBQUM7QUFHRixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsc0JBQXNCO0lBQ2hFLEtBQUs7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FIVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRmlsZVR5cGVJbmZvUHJvdmlkZXIgfSBmcm9tICcuLi9maWxlLXR5cGUtaW5mby1wcm92aWRlcic7XG5pbXBvcnQgeyBjcmVhdGVGaWxlVHlwZU1ldGFkYXRhIH0gZnJvbSAnLi4vZmlsZS10eXBlLm1ldGFkYXRhJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSB9IGZyb20gJy4uL2ZpbGUtdHlwZS5tb2RlbHMnO1xuXG5jb25zdCBNQiA9IDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgY29uc3QgQVhfRklMRV9GSUxFX1RZUEU6IEFYRmlsZVR5cGUgPSB7XG4gIG5hbWU6ICdmaWxlJyxcbiAgbWV0YWRhdGE6IGNyZWF0ZUZpbGVUeXBlTWV0YWRhdGEoJ3N5c3RlbScpLFxuICB0aXRsZTogJ0ZpbGUnLFxuICBpY29uOiAnZmEtbGlnaHQgZmEtZmlsZSBheC10ZXh0LW5ldXRyYWwtNTAwJyxcbiAgdmFsaWRhdGlvbnM6IHtcbiAgICBtaW1lVHlwZXM6IFsnYXBwbGljYXRpb24vKicsICd0ZXh0LyonXSxcbiAgICBtaW5TaXplOiAxLFxuICAgIG1heFNpemU6IDEwMCAqIE1CLFxuICB9LFxuICBleHRlbnNpb25zOiBbXG4gICAgeyBuYW1lOiAncGRmJywgdGl0bGU6ICdQREYnLCB2YWxpZGF0aW9uczogeyBtaW1lVHlwZXM6IFsnYXBwbGljYXRpb24vcGRmJ10sIG1heFNpemU6IDI1ICogTUIgfSB9LFxuICAgIHsgbmFtZTogJ2RvYycsIHRpdGxlOiAnV29yZCcgfSxcbiAgICB7IG5hbWU6ICdkb2N4JywgdGl0bGU6ICdXb3JkJyB9LFxuICAgIHsgbmFtZTogJ3R4dCcsIHRpdGxlOiAnVGV4dCcsIHZhbGlkYXRpb25zOiB7IG1pbWVUeXBlczogWyd0ZXh0L3BsYWluJ10sIG1heFNpemU6IDUgKiBNQiB9IH0sXG4gICAgeyBuYW1lOiAnemlwJywgdGl0bGU6ICdaSVAnLCB2YWxpZGF0aW9uczogeyBtYXhTaXplOiA1MCAqIE1CIH0gfSxcbiAgXSxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWEZpbGVGaWxlVHlwZVByb3ZpZGVyIGV4dGVuZHMgQVhGaWxlVHlwZUluZm9Qcm92aWRlciB7XG4gIGl0ZW1zKCk6IFByb21pc2U8QVhGaWxlVHlwZVtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbQVhfRklMRV9GSUxFX1RZUEVdKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport * as i0 from \"@angular/core\";\nconst MB = 1024 * 1024;\nexport const AX_IMAGE_FILE_TYPE = {\n name: 'image',\n metadata: createFileTypeMetadata('system'),\n title: 'Image',\n icon: 'fa-light fa-image ax-text-purple-500',\n validations: {\n mimeTypes: ['image/*'],\n minSize: 1,\n maxSize: 100 * MB,\n },\n extensions: [\n { name: 'jpg', title: 'JPEG' },\n { name: 'jpeg', title: 'JPEG', validations: { maxSize: 5 * MB } },\n { name: 'png', title: 'PNG' },\n { name: 'gif', title: 'GIF' },\n { name: 'webp', title: 'WebP' },\n { name: 'svg', title: 'SVG', validations: { maxSize: 2 * MB } },\n ],\n};\nexport class AXImageFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([AX_IMAGE_FILE_TYPE]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXImageFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXImageFileTypeProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXImageFileTypeProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmlsZS10eXBlLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3R5cGVzLnByb3ZpZGVycy9pbWFnZS1maWxlLXR5cGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHL0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBZTtJQUM1QyxJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsc0NBQXNDO0lBQzVDLFdBQVcsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRTtLQUNsQjtJQUNELFVBQVUsRUFBRTtRQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzlCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDakUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDN0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDN0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDL0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtLQUNoRTtDQUNGLENBQUM7QUFHRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBQ2pFLEtBQUs7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQzs4R0FIVSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRmlsZVR5cGVJbmZvUHJvdmlkZXIgfSBmcm9tICcuLi9maWxlLXR5cGUtaW5mby1wcm92aWRlcic7XG5pbXBvcnQgeyBjcmVhdGVGaWxlVHlwZU1ldGFkYXRhIH0gZnJvbSAnLi4vZmlsZS10eXBlLm1ldGFkYXRhJztcbmltcG9ydCB0eXBlIHsgQVhGaWxlVHlwZSB9IGZyb20gJy4uL2ZpbGUtdHlwZS5tb2RlbHMnO1xuXG5jb25zdCBNQiA9IDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgY29uc3QgQVhfSU1BR0VfRklMRV9UWVBFOiBBWEZpbGVUeXBlID0ge1xuICBuYW1lOiAnaW1hZ2UnLFxuICBtZXRhZGF0YTogY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSgnc3lzdGVtJyksXG4gIHRpdGxlOiAnSW1hZ2UnLFxuICBpY29uOiAnZmEtbGlnaHQgZmEtaW1hZ2UgYXgtdGV4dC1wdXJwbGUtNTAwJyxcbiAgdmFsaWRhdGlvbnM6IHtcbiAgICBtaW1lVHlwZXM6IFsnaW1hZ2UvKiddLFxuICAgIG1pblNpemU6IDEsXG4gICAgbWF4U2l6ZTogMTAwICogTUIsXG4gIH0sXG4gIGV4dGVuc2lvbnM6IFtcbiAgICB7IG5hbWU6ICdqcGcnLCB0aXRsZTogJ0pQRUcnIH0sXG4gICAgeyBuYW1lOiAnanBlZycsIHRpdGxlOiAnSlBFRycsIHZhbGlkYXRpb25zOiB7IG1heFNpemU6IDUgKiBNQiB9IH0sXG4gICAgeyBuYW1lOiAncG5nJywgdGl0bGU6ICdQTkcnIH0sXG4gICAgeyBuYW1lOiAnZ2lmJywgdGl0bGU6ICdHSUYnIH0sXG4gICAgeyBuYW1lOiAnd2VicCcsIHRpdGxlOiAnV2ViUCcgfSxcbiAgICB7IG5hbWU6ICdzdmcnLCB0aXRsZTogJ1NWRycsIHZhbGlkYXRpb25zOiB7IG1heFNpemU6IDIgKiBNQiB9IH0sXG4gIF0sXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhJbWFnZUZpbGVUeXBlUHJvdmlkZXIgZXh0ZW5kcyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIHtcbiAgaXRlbXMoKTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtBWF9JTUFHRV9GSUxFX1RZUEVdKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport * as i0 from \"@angular/core\";\nconst MB = 1024 * 1024;\nexport const AX_VIDEO_FILE_TYPE = {\n name: 'video',\n metadata: createFileTypeMetadata('system'),\n title: 'Video',\n icon: 'fa-light fa-video ax-text-blue-500',\n validations: {\n mimeTypes: ['video/*'],\n minSize: 1,\n maxSize: 500 * MB,\n },\n extensions: [\n { name: 'mp4', title: 'MP4' },\n { name: 'webm', title: 'WebM', validations: { maxSize: 200 * MB } },\n { name: 'ogg', title: 'OGG' },\n ],\n};\nexport class AXVideoFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([AX_VIDEO_FILE_TYPE]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXVideoFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXVideoFileTypeProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXVideoFileTypeProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tZmlsZS10eXBlLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3R5cGVzLnByb3ZpZGVycy92aWRlby1maWxlLXR5cGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHL0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBZTtJQUM1QyxJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLFdBQVcsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRTtLQUNsQjtJQUNELFVBQVUsRUFBRTtRQUNWLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1FBQzdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDbkUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7S0FDOUI7Q0FDRixDQUFDO0FBR0YsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHNCQUFzQjtJQUNqRSxLQUFLO1FBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7OEdBSFUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIH0gZnJvbSAnLi4vZmlsZS10eXBlLWluZm8tcHJvdmlkZXInO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGUtdHlwZS5tZXRhZGF0YSc7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVR5cGUgfSBmcm9tICcuLi9maWxlLXR5cGUubW9kZWxzJztcblxuY29uc3QgTUIgPSAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGNvbnN0IEFYX1ZJREVPX0ZJTEVfVFlQRTogQVhGaWxlVHlwZSA9IHtcbiAgbmFtZTogJ3ZpZGVvJyxcbiAgbWV0YWRhdGE6IGNyZWF0ZUZpbGVUeXBlTWV0YWRhdGEoJ3N5c3RlbScpLFxuICB0aXRsZTogJ1ZpZGVvJyxcbiAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXZpZGVvIGF4LXRleHQtYmx1ZS01MDAnLFxuICB2YWxpZGF0aW9uczoge1xuICAgIG1pbWVUeXBlczogWyd2aWRlby8qJ10sXG4gICAgbWluU2l6ZTogMSxcbiAgICBtYXhTaXplOiA1MDAgKiBNQixcbiAgfSxcbiAgZXh0ZW5zaW9uczogW1xuICAgIHsgbmFtZTogJ21wNCcsIHRpdGxlOiAnTVA0JyB9LFxuICAgIHsgbmFtZTogJ3dlYm0nLCB0aXRsZTogJ1dlYk0nLCB2YWxpZGF0aW9uczogeyBtYXhTaXplOiAyMDAgKiBNQiB9IH0sXG4gICAgeyBuYW1lOiAnb2dnJywgdGl0bGU6ICdPR0cnIH0sXG4gIF0sXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhWaWRlb0ZpbGVUeXBlUHJvdmlkZXIgZXh0ZW5kcyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIHtcbiAgaXRlbXMoKTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtBWF9WSURFT19GSUxFX1RZUEVdKTtcbiAgfVxufVxuIl19","import { provideFileTypeInfoProvider } from '../file-type-info-provider';\nimport { AXAudioFileTypeProvider } from './audio-file-type.provider';\nimport { AXDocumentFileTypeProvider } from './document-file-type.provider';\nimport { AXFileFileTypeProvider } from './file-file-type.provider';\nimport { AXImageFileTypeProvider } from './image-file-type.provider';\nimport { AXVideoFileTypeProvider } from './video-file-type.provider';\nexport * from './image-file-type.provider';\nexport * from './video-file-type.provider';\nexport * from './audio-file-type.provider';\nexport * from './file-file-type.provider';\nexport * from './document-file-type.provider';\n/** Built-in file type provider classes (one logical type per provider). */\nexport const AX_BUILTIN_FILE_TYPE_PROVIDERS = [\n AXImageFileTypeProvider,\n AXVideoFileTypeProvider,\n AXAudioFileTypeProvider,\n AXFileFileTypeProvider,\n AXDocumentFileTypeProvider,\n];\n/** Registers all built-in file type providers (image, video, audio, file, document). */\nexport function provideBuiltinFileTypeProviders() {\n return AX_BUILTIN_FILE_TYPE_PROVIDERS.map((provider) => provideFileTypeInfoProvider(provider));\n}\n/** @deprecated Use {@link provideBuiltinFileTypeProviders}. */\nexport const provideDefaultFileTypeProviders = provideBuiltinFileTypeProviders;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvdHlwZXMucHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwyQkFBMkIsRUFBMEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHO0lBQzVDLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0QiwwQkFBMEI7Q0FDZ0MsQ0FBQztBQUU3RCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLCtCQUErQjtJQUM3QyxPQUFPLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHByb3ZpZGVGaWxlVHlwZUluZm9Qcm92aWRlciwgQVhGaWxlVHlwZUluZm9Qcm92aWRlciB9IGZyb20gJy4uL2ZpbGUtdHlwZS1pbmZvLXByb3ZpZGVyJztcbmltcG9ydCB7IEFYQXVkaW9GaWxlVHlwZVByb3ZpZGVyIH0gZnJvbSAnLi9hdWRpby1maWxlLXR5cGUucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhEb2N1bWVudEZpbGVUeXBlUHJvdmlkZXIgfSBmcm9tICcuL2RvY3VtZW50LWZpbGUtdHlwZS5wcm92aWRlcic7XG5pbXBvcnQgeyBBWEZpbGVGaWxlVHlwZVByb3ZpZGVyIH0gZnJvbSAnLi9maWxlLWZpbGUtdHlwZS5wcm92aWRlcic7XG5pbXBvcnQgeyBBWEltYWdlRmlsZVR5cGVQcm92aWRlciB9IGZyb20gJy4vaW1hZ2UtZmlsZS10eXBlLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYVmlkZW9GaWxlVHlwZVByb3ZpZGVyIH0gZnJvbSAnLi92aWRlby1maWxlLXR5cGUucHJvdmlkZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLWZpbGUtdHlwZS5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZpZGVvLWZpbGUtdHlwZS5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2F1ZGlvLWZpbGUtdHlwZS5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtZmlsZS10eXBlLnByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnQtZmlsZS10eXBlLnByb3ZpZGVyJztcblxuLyoqIEJ1aWx0LWluIGZpbGUgdHlwZSBwcm92aWRlciBjbGFzc2VzIChvbmUgbG9naWNhbCB0eXBlIHBlciBwcm92aWRlcikuICovXG5leHBvcnQgY29uc3QgQVhfQlVJTFRJTl9GSUxFX1RZUEVfUFJPVklERVJTID0gW1xuICBBWEltYWdlRmlsZVR5cGVQcm92aWRlcixcbiAgQVhWaWRlb0ZpbGVUeXBlUHJvdmlkZXIsXG4gIEFYQXVkaW9GaWxlVHlwZVByb3ZpZGVyLFxuICBBWEZpbGVGaWxlVHlwZVByb3ZpZGVyLFxuICBBWERvY3VtZW50RmlsZVR5cGVQcm92aWRlcixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFR5cGU8QVhGaWxlVHlwZUluZm9Qcm92aWRlcj5bXTtcblxuLyoqIFJlZ2lzdGVycyBhbGwgYnVpbHQtaW4gZmlsZSB0eXBlIHByb3ZpZGVycyAoaW1hZ2UsIHZpZGVvLCBhdWRpbywgZmlsZSwgZG9jdW1lbnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCdWlsdGluRmlsZVR5cGVQcm92aWRlcnMoKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBBWF9CVUlMVElOX0ZJTEVfVFlQRV9QUk9WSURFUlMubWFwKChwcm92aWRlcikgPT4gcHJvdmlkZUZpbGVUeXBlSW5mb1Byb3ZpZGVyKHByb3ZpZGVyKSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIHByb3ZpZGVCdWlsdGluRmlsZVR5cGVQcm92aWRlcnN9LiAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVEZWZhdWx0RmlsZVR5cGVQcm92aWRlcnMgPSBwcm92aWRlQnVpbHRpbkZpbGVUeXBlUHJvdmlkZXJzO1xuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXFileMimeTypeValidationRule {\n get name() {\n return 'fileMimeType';\n }\n async validate(value, options) {\n const mime = (value instanceof File || value instanceof Blob ? value.type : '').trim().toLowerCase();\n const allowed = options.allowed ?? [];\n const valid = allowed.length === 0 ||\n allowed.some((pattern) => this.matchesMime(mime, pattern.trim().toLowerCase()));\n return {\n rule: this.name,\n result: valid,\n message: valid ? '' : (options.message ?? 'File type is not allowed.'),\n value: mime,\n };\n }\n matchesMime(mime, pattern) {\n if (!pattern || pattern === '*/*' || pattern === '*') {\n return true;\n }\n if (pattern.endsWith('/*')) {\n const category = pattern.slice(0, -2);\n return mime.startsWith(`${category}/`) || (mime === '' && category === 'application');\n }\n return mime === pattern;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMimeTypeValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMimeTypeValidationRule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMimeTypeValidationRule, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1taW1lLXR5cGUucnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZmlsZS9zcmMvbGliL2ZpbGUtdHlwZS9ydWxlcy9maWxlLW1pbWUtdHlwZS5ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbUIzQyxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLElBQUksSUFBSTtRQUNOLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWtCLEVBQ2xCLE9BQTRDO1FBRTVDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsRixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQztZQUN0RSxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVksRUFBRSxPQUFlO1FBQy9DLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLEtBQUssSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELE9BQU8sSUFBSSxLQUFLLE9BQU8sQ0FBQztJQUMxQixDQUFDOzhHQWhDVSw0QkFBNEI7a0hBQTVCLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhGaWxlTWltZVR5cGVWYWxpZGF0aW9uUnVsZU9wdGlvbnMgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIC8qKiBNSU1FIHBhdHRlcm5zLCBlLmcuIGBpbWFnZS8qYCwgYGltYWdlL3BuZ2AuICovXG4gIGFsbG93ZWQ6IHN0cmluZ1tdO1xufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBmaWxlTWltZVR5cGU6IEFYRmlsZU1pbWVUeXBlVmFsaWRhdGlvblJ1bGVPcHRpb25zO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWEZpbGVNaW1lVHlwZVZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdmaWxlTWltZVR5cGUnO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IEZpbGUgfCBCbG9iLFxuICAgIG9wdGlvbnM6IEFYRmlsZU1pbWVUeXBlVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICApOiBQcm9taXNlPEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQ+IHtcbiAgICBjb25zdCBtaW1lID0gKHZhbHVlIGluc3RhbmNlb2YgRmlsZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IgPyB2YWx1ZS50eXBlIDogJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBvcHRpb25zLmFsbG93ZWQgPz8gW107XG4gICAgY29uc3QgdmFsaWQgPVxuICAgICAgYWxsb3dlZC5sZW5ndGggPT09IDAgfHxcbiAgICAgIGFsbG93ZWQuc29tZSgocGF0dGVybikgPT4gdGhpcy5tYXRjaGVzTWltZShtaW1lLCBwYXR0ZXJuLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcnVsZTogdGhpcy5uYW1lLFxuICAgICAgcmVzdWx0OiB2YWxpZCxcbiAgICAgIG1lc3NhZ2U6IHZhbGlkID8gJycgOiAob3B0aW9ucy5tZXNzYWdlID8/ICdGaWxlIHR5cGUgaXMgbm90IGFsbG93ZWQuJyksXG4gICAgICB2YWx1ZTogbWltZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaGVzTWltZShtaW1lOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGF0dGVybiB8fCBwYXR0ZXJuID09PSAnKi8qJyB8fCBwYXR0ZXJuID09PSAnKicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAocGF0dGVybi5lbmRzV2l0aCgnLyonKSkge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBwYXR0ZXJuLnNsaWNlKDAsIC0yKTtcbiAgICAgIHJldHVybiBtaW1lLnN0YXJ0c1dpdGgoYCR7Y2F0ZWdvcnl9L2ApIHx8IChtaW1lID09PSAnJyAmJiBjYXRlZ29yeSA9PT0gJ2FwcGxpY2F0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBtaW1lID09PSBwYXR0ZXJuO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { formatFileSizeBytes } from '../../format-file-size';\nimport * as i0 from \"@angular/core\";\nexport class AXFileMinSizeValidationRule {\n get name() {\n return 'fileMinSize';\n }\n async validate(value, options) {\n const size = value instanceof File || value instanceof Blob ? value.size : 0;\n const valid = size >= options.minSize;\n const limitLabel = formatFileSizeBytes(options.minSize);\n return {\n rule: this.name,\n result: valid,\n message: valid\n ? ''\n : (options.message ?? `File is too small. Minimum size is ${limitLabel}.`),\n value: size,\n minSize: options.minSize,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMinSizeValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMinSizeValidationRule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMinSizeValidationRule, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1taW4tc2l6ZS5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3J1bGVzL2ZpbGUtbWluLXNpemUucnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWM3RCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLElBQUksSUFBSTtRQUNOLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWtCLEVBQ2xCLE9BQTJDO1FBRTNDLE1BQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztnQkFDWixDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLHNDQUFzQyxVQUFVLEdBQUcsQ0FBQztZQUM1RSxLQUFLLEVBQUUsSUFBSTtZQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0F0QlUsMkJBQTJCO2tIQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWFZhbGlkYXRpb25SdWxlLFxuICBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyxcbiAgQVhWYWxpZGF0aW9uUnVsZVJlc3VsdCxcbn0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemVCeXRlcyB9IGZyb20gJy4uLy4uL2Zvcm1hdC1maWxlLXNpemUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRmlsZU1pblNpemVWYWxpZGF0aW9uUnVsZU9wdGlvbnMgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIC8qKiBNaW5pbXVtIHNpemUgaW4gYnl0ZXMuICovXG4gIG1pblNpemU6IG51bWJlcjtcbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJyB7XG4gIGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgZmlsZU1pblNpemU6IEFYRmlsZU1pblNpemVWYWxpZGF0aW9uUnVsZU9wdGlvbnM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYRmlsZU1pblNpemVWYWxpZGF0aW9uUnVsZSBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGUge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZmlsZU1pblNpemUnO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IEZpbGUgfCBCbG9iLFxuICAgIG9wdGlvbnM6IEFYRmlsZU1pblNpemVWYWxpZGF0aW9uUnVsZU9wdGlvbnMsXG4gICk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdD4ge1xuICAgIGNvbnN0IHNpemUgPSB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBCbG9iID8gdmFsdWUuc2l6ZSA6IDA7XG4gICAgY29uc3QgdmFsaWQgPSBzaXplID49IG9wdGlvbnMubWluU2l6ZTtcbiAgICBjb25zdCBsaW1pdExhYmVsID0gZm9ybWF0RmlsZVNpemVCeXRlcyhvcHRpb25zLm1pblNpemUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgIHJlc3VsdDogdmFsaWQsXG4gICAgICBtZXNzYWdlOiB2YWxpZFxuICAgICAgICA/ICcnXG4gICAgICAgIDogKG9wdGlvbnMubWVzc2FnZSA/PyBgRmlsZSBpcyB0b28gc21hbGwuIE1pbmltdW0gc2l6ZSBpcyAke2xpbWl0TGFiZWx9LmApLFxuICAgICAgdmFsdWU6IHNpemUsXG4gICAgICBtaW5TaXplOiBvcHRpb25zLm1pblNpemUsXG4gICAgfTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { formatFileSizeBytes } from '../../format-file-size';\nimport * as i0 from \"@angular/core\";\nexport class AXFileMaxSizeValidationRule {\n get name() {\n return 'fileMaxSize';\n }\n async validate(value, options) {\n const size = value instanceof File || value instanceof Blob ? value.size : 0;\n const valid = size <= options.maxSize;\n const limitLabel = formatFileSizeBytes(options.maxSize);\n return {\n rule: this.name,\n result: valid,\n message: valid\n ? ''\n : (options.message ??\n `File is too large. Maximum size is ${limitLabel}.`),\n value: size,\n maxSize: options.maxSize,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMaxSizeValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMaxSizeValidationRule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileMaxSizeValidationRule, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYXgtc2l6ZS5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS10eXBlL3J1bGVzL2ZpbGUtbWF4LXNpemUucnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWM3RCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLElBQUksSUFBSTtRQUNOLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWtCLEVBQ2xCLE9BQTJDO1FBRTNDLE1BQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztnQkFDWixDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTztvQkFDaEIsc0NBQXNDLFVBQVUsR0FBRyxDQUFDO1lBQ3hELEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1NBQ3pCLENBQUM7SUFDSixDQUFDOzhHQXZCVSwyQkFBMkI7a0hBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZUJ5dGVzIH0gZnJvbSAnLi4vLi4vZm9ybWF0LWZpbGUtc2l6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhGaWxlTWF4U2l6ZVZhbGlkYXRpb25SdWxlT3B0aW9ucyBleHRlbmRzIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zIHtcbiAgLyoqIE1heGltdW0gc2l6ZSBpbiBieXRlcy4gKi9cbiAgbWF4U2l6ZTogbnVtYmVyO1xufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBmaWxlTWF4U2l6ZTogQVhGaWxlTWF4U2l6ZVZhbGlkYXRpb25SdWxlT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhGaWxlTWF4U2l6ZVZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdmaWxlTWF4U2l6ZSc7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogRmlsZSB8IEJsb2IsXG4gICAgb3B0aW9uczogQVhGaWxlTWF4U2l6ZVZhbGlkYXRpb25SdWxlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgY29uc3Qgc2l6ZSA9IHZhbHVlIGluc3RhbmNlb2YgRmlsZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IgPyB2YWx1ZS5zaXplIDogMDtcbiAgICBjb25zdCB2YWxpZCA9IHNpemUgPD0gb3B0aW9ucy5tYXhTaXplO1xuICAgIGNvbnN0IGxpbWl0TGFiZWwgPSBmb3JtYXRGaWxlU2l6ZUJ5dGVzKG9wdGlvbnMubWF4U2l6ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcnVsZTogdGhpcy5uYW1lLFxuICAgICAgcmVzdWx0OiB2YWxpZCxcbiAgICAgIG1lc3NhZ2U6IHZhbGlkXG4gICAgICAgID8gJydcbiAgICAgICAgOiAob3B0aW9ucy5tZXNzYWdlID8/XG4gICAgICAgICAgYEZpbGUgaXMgdG9vIGxhcmdlLiBNYXhpbXVtIHNpemUgaXMgJHtsaW1pdExhYmVsfS5gKSxcbiAgICAgIHZhbHVlOiBzaXplLFxuICAgICAgbWF4U2l6ZTogb3B0aW9ucy5tYXhTaXplLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==","export * from './file-type.metadata';\nexport * from './file-type.models';\nexport * from './file-type.context';\nexport * from './file-type.copy';\nexport * from './file-type.open';\nexport * from './file-type.resolve';\nexport * from './file-type-info-provider';\nexport * from './file-type-registry.service';\nexport * from './file-type.merge';\nexport * from './file-type.validate';\nexport * from './types.providers';\nexport * from './rules/file-mime-type.rule';\nexport * from './rules/file-min-size.rule';\nexport * from './rules/file-max-size.rule';\nimport { AXValidationRegistryService } from '@acorex/core/validation';\nimport { provideBuiltinFileTypeProviders } from './types.providers';\nimport { AXFileMaxSizeValidationRule } from './rules/file-max-size.rule';\nimport { AXFileMimeTypeValidationRule } from './rules/file-mime-type.rule';\nimport { AXFileMinSizeValidationRule } from './rules/file-min-size.rule';\n/** Validation rule classes to register with {@link AXValidationModule}. */\nexport const AX_FILE_VALIDATION_RULES = [\n AXFileMimeTypeValidationRule,\n AXFileMinSizeValidationRule,\n AXFileMaxSizeValidationRule,\n];\n/** Registers file validation rules with {@link AXValidationRegistryService}. */\nexport function provideFileValidationRules() {\n return {\n provide: 'AXValidationModuleFactory',\n useFactory: (registry) => () => {\n registry.register(...AX_FILE_VALIDATION_RULES);\n },\n deps: [AXValidationRegistryService],\n multi: true,\n };\n}\n/** Registers built-in image / video / audio / file / document type providers. */\nexport { provideBuiltinFileTypeProviders, provideDefaultFileTypeProviders } from './types.providers';\n/**\n * Registers validation rules and optional built-in file type providers.\n * {@link AXFileTypeRegistryService} and {@link AXFileService} are `providedIn: 'root'`.\n */\nexport function provideFileTypeSystem() {\n return [provideFileValidationRules(), ...provideBuiltinFileTypeProviders()];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLXR5cGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDRCQUE0QixDQUFDO0FBRzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0Qyw0QkFBNEI7SUFDNUIsMkJBQTJCO0lBQzNCLDJCQUEyQjtDQUNuQixDQUFDO0FBRVgsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTztRQUNMLE9BQU8sRUFBRSwyQkFBMkI7UUFDcEMsVUFBVSxFQUFFLENBQUMsUUFBcUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQzFELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztRQUNuQyxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJHOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsR0FBRywrQkFBK0IsRUFBRSxDQUFDLENBQUM7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmlsZS10eXBlLm1ldGFkYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS10eXBlLm1vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtdHlwZS5jb250ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS10eXBlLmNvcHknO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLXR5cGUub3Blbic7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtdHlwZS5yZXNvbHZlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS10eXBlLWluZm8tcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLXR5cGUtcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtdHlwZS5tZXJnZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtdHlwZS52YWxpZGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLnByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3J1bGVzL2ZpbGUtbWltZS10eXBlLnJ1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9ydWxlcy9maWxlLW1pbi1zaXplLnJ1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9ydWxlcy9maWxlLW1heC1zaXplLnJ1bGUnO1xuXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgcHJvdmlkZUJ1aWx0aW5GaWxlVHlwZVByb3ZpZGVycyB9IGZyb20gJy4vdHlwZXMucHJvdmlkZXJzJztcbmltcG9ydCB7IEFYRmlsZU1heFNpemVWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvZmlsZS1tYXgtc2l6ZS5ydWxlJztcbmltcG9ydCB7IEFYRmlsZU1pbWVUeXBlVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL2ZpbGUtbWltZS10eXBlLnJ1bGUnO1xuaW1wb3J0IHsgQVhGaWxlTWluU2l6ZVZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9maWxlLW1pbi1zaXplLnJ1bGUnO1xuXG4vKiogVmFsaWRhdGlvbiBydWxlIGNsYXNzZXMgdG8gcmVnaXN0ZXIgd2l0aCB7QGxpbmsgQVhWYWxpZGF0aW9uTW9kdWxlfS4gKi9cbmV4cG9ydCBjb25zdCBBWF9GSUxFX1ZBTElEQVRJT05fUlVMRVMgPSBbXG4gIEFYRmlsZU1pbWVUeXBlVmFsaWRhdGlvblJ1bGUsXG4gIEFYRmlsZU1pblNpemVWYWxpZGF0aW9uUnVsZSxcbiAgQVhGaWxlTWF4U2l6ZVZhbGlkYXRpb25SdWxlLFxuXSBhcyBjb25zdDtcblxuLyoqIFJlZ2lzdGVycyBmaWxlIHZhbGlkYXRpb24gcnVsZXMgd2l0aCB7QGxpbmsgQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRmlsZVZhbGlkYXRpb25SdWxlcygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogJ0FYVmFsaWRhdGlvbk1vZHVsZUZhY3RvcnknLFxuICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICByZWdpc3RyeS5yZWdpc3RlciguLi5BWF9GSUxFX1ZBTElEQVRJT05fUlVMRVMpO1xuICAgIH0sXG4gICAgZGVwczogW0FYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZV0sXG4gICAgbXVsdGk6IHRydWUsXG4gIH07XG59XG5cbi8qKiBSZWdpc3RlcnMgYnVpbHQtaW4gaW1hZ2UgLyB2aWRlbyAvIGF1ZGlvIC8gZmlsZSAvIGRvY3VtZW50IHR5cGUgcHJvdmlkZXJzLiAqL1xuZXhwb3J0IHsgcHJvdmlkZUJ1aWx0aW5GaWxlVHlwZVByb3ZpZGVycywgcHJvdmlkZURlZmF1bHRGaWxlVHlwZVByb3ZpZGVycyB9IGZyb20gJy4vdHlwZXMucHJvdmlkZXJzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdmFsaWRhdGlvbiBydWxlcyBhbmQgb3B0aW9uYWwgYnVpbHQtaW4gZmlsZSB0eXBlIHByb3ZpZGVycy5cbiAqIHtAbGluayBBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlfSBhbmQge0BsaW5rIEFYRmlsZVNlcnZpY2V9IGFyZSBgcHJvdmlkZWRJbjogJ3Jvb3QnYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVGaWxlVHlwZVN5c3RlbSgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtwcm92aWRlRmlsZVZhbGlkYXRpb25SdWxlcygpLCAuLi5wcm92aWRlQnVpbHRpbkZpbGVUeXBlUHJvdmlkZXJzKCldO1xufVxuIl19","import { AXFormatModule } from '@acorex/core/format';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { NgModule } from '@angular/core';\nimport { AXFileSizeFormatter } from './file-size-formatter';\nimport { AX_FILE_VALIDATION_RULES, provideDefaultFileTypeProviders, provideFileValidationRules, } from './file-type';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/core/format\";\nimport * as i2 from \"@acorex/core/validation\";\nexport class AXFileModule {\n static forRoot(config) {\n const includeDefaults = config?.includeDefaultFileTypes !== false;\n return {\n ngModule: AXFileModule,\n providers: [\n provideFileValidationRules(),\n ...(includeDefaults ? provideDefaultFileTypeProviders() : []),\n ...(config?.fileTypeProviders ?? []),\n ],\n };\n }\n static forChild(config) {\n return AXFileModule.forRoot(config);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileModule, imports: [i1.AXFormatModule, i2.AXValidationModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileModule, providers: [AXFileSizeFormatter], imports: [AXFormatModule.forChild({ formatters: [AXFileSizeFormatter] }),\n AXValidationModule.forChild({ rules: [...AX_FILE_VALIDATION_RULES] })] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n AXFormatModule.forChild({ formatters: [AXFileSizeFormatter] }),\n AXValidationModule.forChild({ rules: [...AX_FILE_VALIDATION_RULES] }),\n ],\n providers: [AXFileSizeFormatter],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2ZpbGUvc3JjL2xpYi9maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUF1QixRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsMEJBQTBCLEdBQzNCLE1BQU0sYUFBYSxDQUFDOzs7O0FBY3JCLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMkI7UUFDeEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxFQUFFLHVCQUF1QixLQUFLLEtBQUssQ0FBQztRQUVsRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVk7WUFDdEIsU0FBUyxFQUFFO2dCQUNULDBCQUEwQixFQUFFO2dCQUM1QixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELEdBQUcsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDO2FBQ3JDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQTJCO1FBQ3pDLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDOzhHQWhCVSxZQUFZOytHQUFaLFlBQVk7K0dBQVosWUFBWSxhQUZaLENBQUMsbUJBQW1CLENBQUMsWUFIOUIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixDQUFDLEVBQUUsQ0FBQzs7MkZBSTVELFlBQVk7a0JBUHhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7d0JBQzlELGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsRUFBRSxDQUFDO3FCQUN0RTtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEZvcm1hdE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhWYWxpZGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEZpbGVTaXplRm9ybWF0dGVyIH0gZnJvbSAnLi9maWxlLXNpemUtZm9ybWF0dGVyJztcbmltcG9ydCB7XG4gIEFYX0ZJTEVfVkFMSURBVElPTl9SVUxFUyxcbiAgcHJvdmlkZURlZmF1bHRGaWxlVHlwZVByb3ZpZGVycyxcbiAgcHJvdmlkZUZpbGVWYWxpZGF0aW9uUnVsZXMsXG59IGZyb20gJy4vZmlsZS10eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWEZpbGVNb2R1bGVDb25maWcge1xuICBmaWxlVHlwZVByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIGluY2x1ZGVEZWZhdWx0RmlsZVR5cGVzPzogYm9vbGVhbjtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIEFYRm9ybWF0TW9kdWxlLmZvckNoaWxkKHsgZm9ybWF0dGVyczogW0FYRmlsZVNpemVGb3JtYXR0ZXJdIH0pLFxuICAgIEFYVmFsaWRhdGlvbk1vZHVsZS5mb3JDaGlsZCh7IHJ1bGVzOiBbLi4uQVhfRklMRV9WQUxJREFUSU9OX1JVTEVTXSB9KSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQVhGaWxlU2l6ZUZvcm1hdHRlcl0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRmlsZU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFYRmlsZU1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhGaWxlTW9kdWxlPiB7XG4gICAgY29uc3QgaW5jbHVkZURlZmF1bHRzID0gY29uZmlnPy5pbmNsdWRlRGVmYXVsdEZpbGVUeXBlcyAhPT0gZmFsc2U7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYRmlsZU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlRmlsZVZhbGlkYXRpb25SdWxlcygpLFxuICAgICAgICAuLi4oaW5jbHVkZURlZmF1bHRzID8gcHJvdmlkZURlZmF1bHRGaWxlVHlwZVByb3ZpZGVycygpIDogW10pLFxuICAgICAgICAuLi4oY29uZmlnPy5maWxlVHlwZVByb3ZpZGVycyA/PyBbXSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZm9yQ2hpbGQoY29uZmlnPzogQVhGaWxlTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBWEZpbGVNb2R1bGU+IHtcbiAgICByZXR1cm4gQVhGaWxlTW9kdWxlLmZvclJvb3QoY29uZmlnKTtcbiAgfVxufVxuIl19","import { DOCUMENT, inject, Injectable, isDevMode } from '@angular/core';\nimport { AXFileTypeRegistryService } from './file-type/file-type-registry.service';\nimport * as i0 from \"@angular/core\";\nexport class AXFileService {\n constructor() {\n this.document = inject(DOCUMENT);\n this.fileTypes = inject(AXFileTypeRegistryService);\n }\n async getFileTypes() {\n return this.fileTypes.getTypes();\n }\n async getFileType(name) {\n return this.fileTypes.get(name);\n }\n async getAcceptAttribute(fileType) {\n return this.fileTypes.accept(fileType);\n }\n async matchFileType(file) {\n return this.fileTypes.matchType(file);\n }\n validate(file, fileType) {\n return this.fileTypes.validateAgainstTypes(file, fileType);\n }\n validateMany(files, fileType) {\n return this.fileTypes.validateMany(files, fileType);\n }\n /**\n * Opens a file selection dialog.\n * With `fileType`, returns files that pass catalog validation (`accept` defaults from the catalog).\n * Without `fileType`, returns all selected files (legacy `accept` / `multiple` only).\n */\n async chooseValidated(options) {\n const resolved = await this.resolveChooseOptions(options);\n const files = await this.openFileDialog(resolved);\n if (files.length === 0) {\n return { accepted: [], rejected: [] };\n }\n if (options.fileType) {\n return this.validateMany(files, options.fileType);\n }\n return { accepted: files, rejected: [] };\n }\n async choose(options) {\n const { accepted } = await this.chooseValidated(options);\n return accepted;\n }\n blobToBase64(blob) {\n if (!(blob instanceof Blob)) {\n return Promise.reject(new Error('input is not blob'));\n }\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(reader.error);\n reader.onload = () => resolve(reader.result);\n reader.readAsDataURL(blob);\n });\n }\n getSize(file) {\n if (this.isBase64(file)) {\n return this.getBase64Size(file);\n }\n return false;\n }\n isBase64(base64) {\n const regx = /[^:]\\w+\\/[\\w-+\\d.]+(?=;|,)/;\n return regx.test(base64);\n }\n getBase64Size(base64) {\n return atob(base64.substring(base64.indexOf(',') + 1)).length;\n }\n async resolveChooseOptions(options) {\n const multiple = options.multiple ?? false;\n if (options.fileType) {\n const accept = options.accept ?? (await this.getAcceptAttribute(options.fileType));\n if (isDevMode() && !accept) {\n const name = Array.isArray(options.fileType) ? options.fileType.join(', ') : options.fileType;\n console.warn(`[AXFileService] No accept filter for file type \"${name}\". ` +\n 'Register a file type provider (e.g. provideConversationFileCatalog).');\n }\n return { accept, multiple };\n }\n return { accept: options.accept ?? '', multiple };\n }\n openFileDialog(options) {\n return new Promise((resolve, reject) => {\n const input = this.document.createElement('input');\n input.style.display = 'none';\n this.document.body.appendChild(input);\n input.type = 'file';\n input.accept = options.accept;\n input.multiple = options.multiple;\n const cleanup = () => {\n input.removeEventListener('change', onChange);\n input.removeEventListener('error', onError);\n if (input.parentNode) {\n this.document.body.removeChild(input);\n }\n input.remove();\n };\n const onError = (e) => {\n cleanup();\n reject(e);\n };\n const onChange = () => {\n const files = Array.from(input.files ?? []);\n cleanup();\n resolve(files);\n };\n input.addEventListener('change', onChange);\n input.addEventListener('error', onError);\n input.click();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFileService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9maWxlL3NyYy9saWIvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBV25GLE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRW1CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBNEloRTtJQTFJQyxLQUFLLENBQUMsWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBNEI7UUFDbkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFVO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFVLEVBQUUsUUFBMkI7UUFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsWUFBWSxDQUNWLEtBQWEsRUFDYixRQUEyQjtR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QUMsQ0FBQztnQkFDNUMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFRLEVBQUUsRUFBRTtnQkFDM0IsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBRUYsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM7WUFFRixLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDekMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E3SVUsYUFBYTtrSEFBYixhQUFhLGNBREEsTUFBTTs7MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWFZhbGlkYXRpb25SdWxlUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGluamVjdCwgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi9maWxlLXR5cGUvZmlsZS10eXBlLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBWEZpbGVUeXBlIH0gZnJvbSAnLi9maWxlLXR5cGUvZmlsZS10eXBlLm1vZGVscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhGaWxlQ2hvb3NlT3B0aW9ucyB7XG4gIC8qKiBMb2dpY2FsIHR5cGUgbmFtZShzKSBmcm9tIHtAbGluayBBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlfS4gV2hlbiBzZXQsIGZpbGVzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgY2F0YWxvZy4gKi9cbiAgZmlsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhGaWxlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVUeXBlcyA9IGluamVjdChBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlKTtcblxuICBhc3luYyBnZXRGaWxlVHlwZXMoKTogUHJvbWlzZTxBWEZpbGVUeXBlW10+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXMuZ2V0VHlwZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVUeXBlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhGaWxlVHlwZSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmZpbGVUeXBlcy5nZXQobmFtZSk7XG4gIH1cblxuICBhc3luYyBnZXRBY2NlcHRBdHRyaWJ1dGUoZmlsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVR5cGVzLmFjY2VwdChmaWxlVHlwZSk7XG4gIH1cblxuICBhc3luYyBtYXRjaEZpbGVUeXBlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEFYRmlsZVR5cGUgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXMubWF0Y2hUeXBlKGZpbGUpO1xuICB9XG5cbiAgdmFsaWRhdGUoZmlsZTogRmlsZSwgZmlsZVR5cGU6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXMudmFsaWRhdGVBZ2FpbnN0VHlwZXMoZmlsZSwgZmlsZVR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVNYW55KFxuICAgIGZpbGVzOiBGaWxlW10sXG4gICAgZmlsZVR5cGU6IHN0cmluZyB8IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHsgYWNjZXB0ZWQ6IEZpbGVbXTsgcmVqZWN0ZWQ6IHsgZmlsZTogRmlsZTsgZXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gfVtdIH0+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXMudmFsaWRhdGVNYW55KGZpbGVzLCBmaWxlVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuXG4gICAqIFdpdGggYGZpbGVUeXBlYCwgcmV0dXJucyBmaWxlcyB0aGF0IHBhc3MgY2F0YWxvZyB2YWxpZGF0aW9uIChgYWNjZXB0YCBkZWZhdWx0cyBmcm9tIHRoZSBjYXRhbG9nKS5cbiAgICogV2l0aG91dCBgZmlsZVR5cGVgLCByZXR1cm5zIGFsbCBzZWxlY3RlZCBmaWxlcyAobGVnYWN5IGBhY2NlcHRgIC8gYG11bHRpcGxlYCBvbmx5KS5cbiAgICovXG4gIGFzeW5jIGNob29zZVZhbGlkYXRlZChcbiAgICBvcHRpb25zOiBBWEZpbGVDaG9vc2VPcHRpb25zLFxuICApOiBQcm9taXNlPHsgYWNjZXB0ZWQ6IEZpbGVbXTsgcmVqZWN0ZWQ6IHsgZmlsZTogRmlsZTsgZXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gfVtdIH0+IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZUNob29zZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLm9wZW5GaWxlRGlhbG9nKHJlc29sdmVkKTtcblxuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IGFjY2VwdGVkOiBbXSwgcmVqZWN0ZWQ6IFtdIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZmlsZVR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTWFueShmaWxlcywgb3B0aW9ucy5maWxlVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWNjZXB0ZWQ6IGZpbGVzLCByZWplY3RlZDogW10gfTtcbiAgfVxuXG4gIGFzeW5jIGNob29zZShvcHRpb25zOiBBWEZpbGVDaG9vc2VPcHRpb25zKTogUHJvbWlzZTxGaWxlW10+IHtcbiAgICBjb25zdCB7IGFjY2VwdGVkIH0gPSBhd2FpdCB0aGlzLmNob29zZVZhbGlkYXRlZChvcHRpb25zKTtcbiAgICByZXR1cm4gYWNjZXB0ZWQ7XG4gIH1cblxuICBibG9iVG9CYXNlNjQoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCEoYmxvYiBpbnN0YW5jZW9mIEJsb2IpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdpbnB1dCBpcyBub3QgYmxvYicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNpemUoZmlsZTogRmlsZSB8IEJsb2IgfCBzdHJpbmcpOiBudW1iZXIgfCBmYWxzZSB7XG4gICAgaWYgKHRoaXMuaXNCYXNlNjQoZmlsZSBhcyBzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXNlNjRTaXplKGZpbGUgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNCYXNlNjQoYmFzZTY0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWd4ID0gL1teOl1cXHcrXFwvW1xcdy0rXFxkLl0rKD89O3wsKS87XG4gICAgcmV0dXJuIHJlZ3gudGVzdChiYXNlNjQpO1xuICB9XG5cbiAgZ2V0QmFzZTY0U2l6ZShiYXNlNjQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGF0b2IoYmFzZTY0LnN1YnN0cmluZyhiYXNlNjQuaW5kZXhPZignLCcpICsgMSkpLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUNob29zZU9wdGlvbnMoXG4gICAgb3B0aW9uczogQVhGaWxlQ2hvb3NlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx7IGFjY2VwdDogc3RyaW5nOyBtdWx0aXBsZTogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlID8/IGZhbHNlO1xuXG4gICAgaWYgKG9wdGlvbnMuZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IGFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0ID8/IChhd2FpdCB0aGlzLmdldEFjY2VwdEF0dHJpYnV0ZShvcHRpb25zLmZpbGVUeXBlKSk7XG5cbiAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhYWNjZXB0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuZmlsZVR5cGUpID8gb3B0aW9ucy5maWxlVHlwZS5qb2luKCcsICcpIDogb3B0aW9ucy5maWxlVHlwZTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbQVhGaWxlU2VydmljZV0gTm8gYWNjZXB0IGZpbHRlciBmb3IgZmlsZSB0eXBlIFwiJHtuYW1lfVwiLiBgICtcbiAgICAgICAgICAgICdSZWdpc3RlciBhIGZpbGUgdHlwZSBwcm92aWRlciAoZS5nLiBwcm92aWRlQ29udmVyc2F0aW9uRmlsZUNhdGFsb2cpLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGFjY2VwdCwgbXVsdGlwbGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBhY2NlcHQ6IG9wdGlvbnMuYWNjZXB0ID8/ICcnLCBtdWx0aXBsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZURpYWxvZyhvcHRpb25zOiB7IGFjY2VwdDogc3RyaW5nOyBtdWx0aXBsZTogYm9vbGVhbiB9KTogUHJvbWlzZTxGaWxlW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RmlsZVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnB1dDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgIGlucHV0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICAgICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICAgIGlucHV0LmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0O1xuICAgICAgaW5wdXQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIGlmIChpbnB1dC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5yZW1vdmUoKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKGlucHV0LmZpbGVzID8/IFtdKTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGZpbGVzKTtcbiAgICAgIH07XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZmlsZS9zcmMvYWNvcmV4LWNvcmUtZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["MB"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-file.mjs","sources":["../../../../packages/core/file/src/lib/file-size-formatter.ts","../../../../packages/core/file/src/lib/format-file-size.ts","../../../../packages/core/file/src/lib/file-type/file-type.models.ts","../../../../packages/core/file/src/lib/file-type/file-type.metadata.ts","../../../../packages/core/file/src/lib/file-type/file-type.copy.ts","../../../../packages/core/file/src/lib/file-type/file-type.merge.ts","../../../../packages/core/file/src/lib/file-type/file-type.resolve.ts","../../../../packages/core/file/src/lib/file-type/file-type.open.ts","../../../../packages/core/file/src/lib/file-type/file-type-info-provider.ts","../../../../packages/core/file/src/lib/file-type/file-type.validate.ts","../../../../packages/core/file/src/lib/file-type/file-type-registry.service.ts","../../../../packages/core/file/src/lib/file-type/types.providers/audio-file-type.provider.ts","../../../../packages/core/file/src/lib/file-type/types.providers/document-file-type.provider.ts","../../../../packages/core/file/src/lib/file-type/types.providers/file-file-type.provider.ts","../../../../packages/core/file/src/lib/file-type/types.providers/image-file-type.provider.ts","../../../../packages/core/file/src/lib/file-type/types.providers/video-file-type.provider.ts","../../../../packages/core/file/src/lib/file-type/types.providers/index.ts","../../../../packages/core/file/src/lib/file-type/rules/file-mime-type.rule.ts","../../../../packages/core/file/src/lib/file-type/rules/file-min-size.rule.ts","../../../../packages/core/file/src/lib/file-type/rules/file-max-size.rule.ts","../../../../packages/core/file/src/lib/file-type/index.ts","../../../../packages/core/file/src/lib/file.module.ts","../../../../packages/core/file/src/lib/file.service.ts","../../../../packages/core/file/src/acorex-core-file.ts"],"sourcesContent":["import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { Injectable } from '@angular/core';\n\nexport interface AXFileSizeFormatterOptions extends AXFormatOptions {\n format: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n filesize: AXFileSizeFormatterOptions;\n }\n}\n\n@Injectable()\nexport class AXFileSizeFormatter implements AXFormatter {\n /**\n * Gets the name of the formatter.\n *\n * @returns string - The formatter name 'filesize'\n */\n\n get name(): string {\n return 'filesize';\n }\n\n /**\n * Formats a file size value to human-readable format.\n *\n * @param value - The file size in bytes\n * @returns string - The formatted file size string (e.g., '1.5 MB')\n */\n\n format(value: number): string {\n const size = Number(value);\n\n if (size === 0) return '0 Bytes';\n if (Number.isNaN(size)) return 'Unknown';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(size) / Math.log(k));\n\n return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n}\n","/** Human-readable file size (binary units, e.g. `41.5 MB`). */\nexport function formatFileSizeBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) {\n return '0 B';\n }\n if (bytes === 0) {\n return '0 B';\n }\n\n const k = 1024;\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.min(Math.floor(Math.log(bytes) / Math.log(k)), units.length - 1);\n const value = bytes / Math.pow(k, i);\n\n if (i === 0) {\n return `${bytes} B`;\n }\n\n const digits = value >= 100 ? 0 : value >= 10 ? 1 : 2;\n return `${value.toFixed(digits)} ${units[i]}`;\n}\n","import type { AXValidationRuleOptions } from '@acorex/core/validation';\nimport type { AXFileTypeContext, AXFileTypeOpenContext } from './file-type.context';\nimport type { AXFileCopyResult } from './file-type.copy';\nimport type { AXFileOpenResult } from './file-type.open';\n\n/** Metadata key for catalog usage context. */\nexport const AX_FILE_TYPE_METADATA_PURPOSE = 'purpose' as const;\n\n/** Catalog metadata bag; `purpose` lists usage contexts (e.g. `['system']`). */\nexport type AXFileTypeMetadata = Record<string, unknown> & {\n [AX_FILE_TYPE_METADATA_PURPOSE]?: string[];\n};\n\n/** Filter catalog entries by {@link AX_FILE_TYPE_METADATA_PURPOSE}. */\nexport interface AXFileTypeQuery {\n purpose?: string | string[];\n}\n\n/** Generic rule executed via {@link AXValidationService}. */\nexport interface AXFileValidationRule {\n rule: string;\n options?: AXValidationRuleOptions;\n}\n\n/**\n * Common file constraints shared by {@link AXFileType} and {@link AXFileTypeExtension}.\n * Extension `validations` override the parent type field-by-field when merged.\n */\nexport interface AXFileValidations {\n mimeTypes?: string[];\n minSize?: number;\n maxSize?: number;\n rules?: AXFileValidationRule[];\n}\n\ntype AXFileTypeUtilities = Record<\n string,\n (ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown\n>;\n\n/**\n * Logical file category (image, video, …).\n *\n * - With type `validations` set: any file matching those rules is allowed; `extensions` only override when matched.\n * - With empty / omitted `validations` and `extensions` listed: only those extensions are allowed.\n */\nexport interface AXFileType<T extends AXFileTypeUtilities = AXFileTypeUtilities> {\n name: string;\n title?: string;\n icon?: string;\n metadata?: AXFileTypeMetadata;\n validations?: AXFileValidations;\n extensions?: AXFileTypeExtension<T>[];\n /** Dynamic utility functions available for this file type. */\n utilities?: T;\n paste?: () => Promise<unknown>;\n /**\n * Produce copyable content from a payload (does not write to the clipboard).\n * Returns a plain string or {@link AXFileCopyData} with `text` and optional `meta`.\n */\n copy?: (payload: unknown) => Promise<AXFileCopyResult> | AXFileCopyResult;\n /**\n * Open or preview a payload (e.g. navigate, show a dialog).\n * Invoke via {@link runFileTypeOpen} so `inject()` works in the caller's context.\n */\n open?: (\n ctx: AXFileTypeOpenContext,\n payload: unknown,\n ) => Promise<AXFileOpenResult> | AXFileOpenResult;\n}\n\n/** Extension entry — {@link AXFileType} without nested `extensions`. */\nexport type AXFileTypeExtension<T extends AXFileTypeUtilities = AXFileTypeUtilities> = Omit<\n AXFileType<T>,\n 'extensions'\n>;\n","import type { AXFileType } from './file-type.models';\nimport { AX_FILE_TYPE_METADATA_PURPOSE } from './file-type.models';\n\nexport { AX_FILE_TYPE_METADATA_PURPOSE } from './file-type.models';\n\nconst CONVERSATION_NAME_PREFIX = 'conversation-';\n\nexport function getFileTypePurposes(type: AXFileType): string[] {\n const raw = type.metadata?.[AX_FILE_TYPE_METADATA_PURPOSE];\n if (Array.isArray(raw)) {\n const values = raw.filter((entry): entry is string => typeof entry === 'string' && entry.trim().length > 0);\n if (values.length) {\n return values;\n }\n }\n if (type.name.startsWith(CONVERSATION_NAME_PREFIX)) {\n return ['conversation'];\n }\n return ['system'];\n}\n\nexport function fileTypeMatchesPurpose(type: AXFileType, purpose: string | string[]): boolean {\n const allowed = Array.isArray(purpose) ? purpose : [purpose];\n return getFileTypePurposes(type).some((entry) => allowed.includes(entry));\n}\n\nexport function filterFileTypesByPurpose(types: AXFileType[], purpose?: string | string[]): AXFileType[] {\n if (!purpose) {\n return types;\n }\n return types.filter((type) => fileTypeMatchesPurpose(type, purpose));\n}\n\nexport function createFileTypeMetadata(purpose: string | string[]): NonNullable<AXFileType['metadata']> {\n const values = (Array.isArray(purpose) ? purpose : [purpose]).filter(\n (entry): entry is string => typeof entry === 'string' && entry.trim().length > 0,\n );\n return { [AX_FILE_TYPE_METADATA_PURPOSE]: values };\n}\n","/** Structured copy payload from {@link AXFileType.copy}. */\nexport interface AXFileCopyData {\n /** Primary plain-text value for clipboard or previews. */\n text: string;\n /** Optional type-specific metadata for consumers (URLs, names, mime types, …). */\n meta?: Record<string, unknown>;\n}\n\n/** Return value of {@link AXFileType.copy} — shorthand string or structured data. */\nexport type AXFileCopyResult = string | AXFileCopyData | null | undefined;\n\n/** Resolves clipboard/plain text from a copy result. */\nexport function resolveFileCopyText(result: AXFileCopyResult): string | null {\n if (result == null) {\n return null;\n }\n if (typeof result === 'string') {\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n const trimmed = result.text?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : null;\n}\n","import type { AXFileType, AXFileTypeExtension, AXFileValidations } from './file-type.models';\n\n/** Merges type-level validations with extension overrides (extension wins per field). */\nexport function mergeFileValidations(\n base: AXFileValidations,\n override?: Partial<AXFileValidations>,\n): AXFileValidations {\n if (!override) {\n return { ...base };\n }\n\n return {\n mimeTypes: override.mimeTypes ?? base.mimeTypes,\n minSize: override.minSize ?? base.minSize,\n maxSize: override.maxSize ?? base.maxSize,\n rules: override.rules ?? base.rules,\n };\n}\n\n/** Resolved validations for a type + optional extension entry. */\nexport function resolveFileValidations(type: AXFileType, extension?: AXFileTypeExtension): AXFileValidations {\n return mergeFileValidations(type.validations ?? {}, extension?.validations);\n}\n\n/** True when no mime/size/rules are defined on the type. */\nexport function isEmptyFileValidations(validations?: AXFileValidations): boolean {\n if (!validations) {\n return true;\n }\n return (\n (validations.mimeTypes?.length ?? 0) === 0 &&\n validations.minSize == null &&\n validations.maxSize == null &&\n (validations.rules?.length ?? 0) === 0\n );\n}\n\n/**\n * Extension-only mode: empty type `validations` and a non-empty `extensions` list.\n * Files must match a listed extension; rules come from that extension entry.\n */\nexport function isExtensionsOnlyType(type: AXFileType): boolean {\n return isEmptyFileValidations(type.validations) && (type.extensions?.length ?? 0) > 0;\n}\n\n/** File extension from name (lowercase, no dot). */\nexport function getFileExtension(fileName: string): string {\n const parts = fileName.trim().split('.');\n return parts.length > 1 ? (parts.pop()?.toLowerCase() ?? '') : '';\n}\n","import type { AXFileTypeContext } from './file-type.context';\nimport type { AXFileCopyResult } from './file-type.copy';\nimport { getFileExtension } from './file-type.merge';\nimport type { AXFileType, AXFileTypeExtension } from './file-type.models';\n\n/** Hint for resolving a catalog extension entry. */\nexport interface AXFileTypeExtensionHint {\n file?: File;\n extensionName?: string;\n mimeType?: string;\n}\n\n/** Matches a MIME type against a catalog pattern (`image/*`, exact type, …). */\nexport function matchesFileMime(mime: string, pattern: string): boolean {\n const normalizedMime = mime.trim().toLowerCase();\n const normalizedPattern = pattern.trim().toLowerCase();\n\n if (!normalizedPattern || normalizedPattern === '*/*' || normalizedPattern === '*') {\n return true;\n }\n\n if (normalizedPattern.endsWith('/*')) {\n const category = normalizedPattern.slice(0, -2);\n return normalizedMime.startsWith(`${category}/`) || (normalizedMime === '' && category === 'application');\n }\n\n return normalizedMime === normalizedPattern;\n}\n\n/** Finds an extension entry by its `name` (without dot). */\nexport function findFileTypeExtensionByName(\n type: AXFileType,\n extensionName: string,\n): AXFileTypeExtension | undefined {\n const ext = extensionName.replace(/^\\./, '').trim().toLowerCase();\n if (!ext || !type.extensions?.length) {\n return undefined;\n }\n return type.extensions.find((entry) => entry.name.toLowerCase() === ext);\n}\n\n/** Finds an extension entry whose validations include the given MIME type. */\nexport function findFileTypeExtensionForMime(\n type: AXFileType,\n mimeType: string,\n): AXFileTypeExtension | undefined {\n const mime = mimeType.trim().toLowerCase();\n if (!mime || !type.extensions?.length) {\n return undefined;\n }\n\n return type.extensions.find((entry) =>\n entry.validations?.mimeTypes?.some((pattern) => matchesFileMime(mime, pattern)),\n );\n}\n\n/** Matching extension entry for a file within a type, if any. */\nexport function findFileTypeExtension(file: File, type: AXFileType): AXFileTypeExtension | undefined {\n return resolveFileTypeExtension(type, { file });\n}\n\n/** Resolves the best-matching extension entry for a file or hint. */\nexport function resolveFileTypeExtension(\n type: AXFileType,\n hint?: AXFileTypeExtensionHint,\n): AXFileTypeExtension | undefined {\n if (!hint) {\n return undefined;\n }\n\n if (hint.file) {\n const byFileName = findFileTypeExtensionByName(type, getFileExtension(hint.file.name));\n if (byFileName) {\n return byFileName;\n }\n if (hint.file.type) {\n const byFileMime = findFileTypeExtensionForMime(type, hint.file.type);\n if (byFileMime) {\n return byFileMime;\n }\n }\n }\n\n if (hint.extensionName) {\n const byName = findFileTypeExtensionByName(type, hint.extensionName);\n if (byName) {\n return byName;\n }\n }\n\n if (hint.mimeType) {\n return findFileTypeExtensionForMime(type, hint.mimeType);\n }\n\n return undefined;\n}\n\nexport function resolveFileTypeCopy(\n type: AXFileType,\n extension?: AXFileTypeExtension,\n): AXFileType['copy'] | undefined {\n return extension?.copy ?? type.copy;\n}\n\nexport function resolveFileTypeOpen(\n type: AXFileType,\n extension?: AXFileTypeExtension,\n): AXFileType['open'] | undefined {\n return extension?.open ?? type.open;\n}\n\nexport function resolveFileTypePaste(\n type: AXFileType,\n extension?: AXFileTypeExtension,\n): AXFileType['paste'] | undefined {\n return extension?.paste ?? type.paste;\n}\n\nexport function resolveFileTypeUtility(\n type: AXFileType,\n extension: AXFileTypeExtension | undefined,\n name: string,\n): ((ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown) | undefined {\n const fromExtension = extension?.utilities?.[name];\n if (fromExtension) {\n return fromExtension;\n }\n return type.utilities?.[name];\n}\n\n/** Runs `copy` from extension first, then parent type. */\nexport async function runFileTypeCopy(\n type: AXFileType,\n payload: unknown,\n extension?: AXFileTypeExtension,\n): Promise<AXFileCopyResult> {\n const copy = resolveFileTypeCopy(type, extension);\n if (!copy) {\n return undefined;\n }\n return copy(payload);\n}\n\n/** Runs a utility from extension first, then parent type. */\nexport function runFileTypeUtility(\n type: AXFileType,\n ctx: AXFileTypeContext,\n extension: AXFileTypeExtension | undefined,\n name: string,\n ...args: unknown[]\n): Promise<unknown> | unknown {\n const utility = resolveFileTypeUtility(type, extension, name);\n if (!utility) {\n return undefined;\n }\n return utility(ctx, ...args);\n}\n\n/** Runs a catalog utility with optional file-based extension resolution. */\nexport function runFileTypeUtilityForFile(\n type: AXFileType,\n ctx: AXFileTypeContext,\n file: File | undefined,\n name: string,\n ...args: unknown[]\n): Promise<unknown> | unknown {\n const extension = file ? findFileTypeExtension(file, type) : undefined;\n return runFileTypeUtility(type, ctx, extension, name, ...args);\n}\n","import { runInInjectionContext } from '@angular/core';\n\nimport type { AXFileTypeOpenContext } from './file-type.context';\nimport type { AXFileType, AXFileTypeExtension } from './file-type.models';\nimport { resolveFileTypeOpen } from './file-type.resolve';\n\n/** Result of {@link AXFileType.open}; `false` means the payload was not opened. */\nexport type AXFileOpenResult = void | boolean | null | undefined;\n\n/** Runs `open` from extension first, then parent type, in the caller's injection context. */\nexport function runFileTypeOpen(\n type: AXFileType,\n ctx: AXFileTypeOpenContext,\n payload: unknown,\n extension?: AXFileTypeExtension,\n): Promise<AXFileOpenResult> | AXFileOpenResult {\n const open = resolveFileTypeOpen(type, extension);\n if (!open) {\n return false;\n }\n return runInInjectionContext(ctx.injector, () => open(ctx, payload));\n}\n","import { InjectionToken, Provider, Type } from '@angular/core';\nimport type { AXFileType } from './file-type.models';\n\n/** Contributes {@link AXFileType} entries (multi provider). */\nexport abstract class AXFileTypeInfoProvider {\n abstract items(): Promise<AXFileType[]>;\n}\n\nexport const AX_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXFileTypeInfoProvider[]>('AX_FILE_TYPE_INFO_PROVIDER');\n\nexport function provideFileTypeInfoProvider(provider: Type<AXFileTypeInfoProvider>): Provider {\n return {\n provide: AX_FILE_TYPE_INFO_PROVIDER,\n useClass: provider,\n multi: true,\n };\n}\n","import { AXValidationService, type AXValidationRuleResult } from '@acorex/core/validation';\nimport {\n getFileExtension,\n isExtensionsOnlyType,\n resolveFileValidations,\n} from './file-type.merge';\nimport { findFileTypeExtension } from './file-type.resolve';\nimport type { AXFileType, AXFileTypeExtension, AXFileValidationRule, AXFileValidations } from './file-type.models';\n\n/** Maps {@link AXFileValidations} to executable validation entries. */\nexport function fileValidationsToRules(validations: AXFileValidations): AXFileValidationRule[] {\n const rules: AXFileValidationRule[] = [];\n\n if (validations.mimeTypes?.length) {\n rules.push({\n rule: 'fileMimeType',\n options: { allowed: validations.mimeTypes },\n });\n }\n\n if (validations.minSize != null) {\n rules.push({\n rule: 'fileMinSize',\n options: { minSize: validations.minSize },\n });\n }\n\n if (validations.maxSize != null) {\n rules.push({\n rule: 'fileMaxSize',\n options: { maxSize: validations.maxSize },\n });\n }\n\n if (validations.rules?.length) {\n rules.push(...validations.rules);\n }\n\n return rules;\n}\n\n/** Failed validation results; empty array means the file is valid. */\nexport async function validateFileWithValidations(\n validation: AXValidationService,\n file: File,\n validations: AXFileValidations,\n): Promise<AXValidationRuleResult[]> {\n const entries = fileValidationsToRules(validations);\n const errors: AXValidationRuleResult[] = [];\n\n for (const { rule, options } of entries) {\n const result = await validation.validate(rule, file, options);\n if (!result.result) {\n errors.push(result);\n }\n }\n\n return errors;\n}\n\n/** Validates a file against a type; extension rules override when the file name matches. */\nexport async function validateFileAgainstType(\n validation: AXValidationService,\n file: File,\n type: AXFileType,\n extension?: AXFileTypeExtension,\n): Promise<AXValidationRuleResult[]> {\n const matchedExtension = extension ?? findFileTypeExtension(file, type);\n\n if (isExtensionsOnlyType(type) && !matchedExtension) {\n const ext = getFileExtension(file.name);\n return [\n {\n rule: 'fileExtension',\n result: false,\n message: ext ? `Extension \".${ext}\" is not allowed.` : 'File must have an allowed extension.',\n value: ext,\n },\n ];\n }\n\n const resolved = resolveFileValidations(type, matchedExtension);\n return validateFileWithValidations(validation, file, resolved);\n}\n","import type { AXValidationRuleResult } from '@acorex/core/validation';\n\nimport { AXValidationService } from '@acorex/core/validation';\n\nimport { Injectable, inject } from '@angular/core';\n\nimport { AX_FILE_TYPE_INFO_PROVIDER } from './file-type-info-provider';\n\nimport { findFileTypeExtension, matchesFileMime } from './file-type.resolve';\n\nimport type { AXFileType, AXFileTypeQuery } from './file-type.models';\n\nimport { filterFileTypesByPurpose } from './file-type.metadata';\n\nimport { validateFileAgainstType } from './file-type.validate';\n\n@Injectable({ providedIn: 'root' })\nexport class AXFileTypeRegistryService {\n private readonly validation = inject(AXValidationService);\n\n private readonly providers = inject(AX_FILE_TYPE_INFO_PROVIDER, { optional: true }) ?? [];\n\n private readonly registeredTypes: AXFileType[] = [];\n\n private cache: AXFileType[] | null = null;\n\n /** Registers or replaces catalog entries (e.g. from feature bootstrap). */\n\n registerTypes(types: AXFileType[]): void {\n for (const type of types) {\n const index = this.registeredTypes.findIndex((t) => t.name === type.name);\n\n if (index >= 0) {\n this.registeredTypes[index] = type;\n } else {\n this.registeredTypes.push(type);\n }\n }\n\n this.invalidateCache();\n }\n\n invalidateCache(): void {\n this.cache = null;\n }\n\n private async resolveTypes(): Promise<AXFileType[]> {\n if (this.cache) {\n return this.cache;\n }\n\n const byName = new Map<string, AXFileType>();\n\n if (this.providers.length) {\n const batches = await Promise.all(this.providers.map((p) => p.items()));\n\n for (const batch of batches) {\n for (const type of batch) {\n if (!byName.has(type.name)) {\n byName.set(type.name, type);\n }\n }\n }\n }\n\n for (const type of this.registeredTypes) {\n byName.set(type.name, type);\n }\n\n this.cache = [...byName.values()];\n\n return this.cache;\n }\n\n async getTypes(query?: AXFileTypeQuery): Promise<AXFileType[]> {\n const types = await this.resolveTypes();\n return filterFileTypesByPurpose(types, query?.purpose);\n }\n\n async get(name: string): Promise<AXFileType | undefined> {\n const types = await this.resolveTypes();\n\n return types.find((t) => t.name === name);\n }\n\n async accept(typeNames?: string | string[]): Promise<string> {\n const names = typeNames ? (Array.isArray(typeNames) ? typeNames : [typeNames]) : undefined;\n\n const types = await this.resolveTypes();\n\n const selected = names?.length ? types.filter((t) => names.includes(t.name)) : types;\n\n if (names?.length && selected.length === 0) {\n return '';\n }\n\n const parts = new Set<string>();\n\n for (const type of selected) {\n type.validations?.mimeTypes?.forEach((m) => parts.add(m));\n\n type.extensions?.forEach((ext) => {\n ext.validations?.mimeTypes?.forEach((m) => parts.add(m));\n\n parts.add(`.${ext.name.replace(/^\\./, '')}`);\n });\n }\n\n return [...parts].join(',');\n }\n\n async matchType(file: File): Promise<AXFileType | undefined> {\n const types = await this.resolveTypes();\n\n const mime = file.type.trim().toLowerCase();\n\n return types.find((type) => {\n const patterns = [\n ...(type.validations?.mimeTypes ?? []),\n\n ...(type.extensions?.flatMap((e) => e.validations?.mimeTypes ?? []) ?? []),\n ];\n\n if (!patterns.length) {\n return false;\n }\n\n return patterns.some((pattern) => matchesFileMime(mime, pattern));\n });\n }\n\n async validate(file: File, typeName: string): Promise<AXValidationRuleResult[]> {\n const type = await this.get(typeName);\n\n if (!type) {\n return [\n {\n rule: 'fileType',\n\n result: false,\n\n message: `Unknown file type: ${typeName}`,\n\n value: typeName,\n },\n ];\n }\n\n const extension = findFileTypeExtension(file, type);\n\n return validateFileAgainstType(this.validation, file, type, extension);\n }\n\n async validateAgainstTypes(\n file: File,\n\n typeNames: string | string[],\n ): Promise<AXValidationRuleResult[]> {\n const names = Array.isArray(typeNames) ? typeNames : [typeNames];\n\n let lastErrors: AXValidationRuleResult[] = [];\n\n for (const name of names) {\n const errors = await this.validate(file, name);\n\n if (errors.length === 0) {\n return [];\n }\n\n lastErrors = errors;\n }\n\n return lastErrors;\n }\n\n async validateMany(\n files: File[],\n\n typeNames: string | string[],\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n const accepted: File[] = [];\n\n const rejected: { file: File; errors: AXValidationRuleResult[] }[] = [];\n\n for (const file of files) {\n const errors = await this.validateAgainstTypes(file, typeNames);\n\n if (errors.length === 0) {\n accepted.push(file);\n } else {\n rejected.push({ file, errors });\n }\n }\n\n return { accepted, rejected };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport type { AXFileType } from '../file-type.models';\n\nconst MB = 1024 * 1024;\n\nexport const AX_AUDIO_FILE_TYPE: AXFileType = {\n name: 'audio',\n metadata: createFileTypeMetadata('system'),\n title: 'Audio',\n icon: 'fa-light fa-music ax-text-amber-500',\n validations: {\n mimeTypes: ['audio/*'],\n minSize: 1,\n maxSize: 50 * MB,\n },\n extensions: [\n { name: 'mp3', title: 'MP3' },\n { name: 'wav', title: 'WAV', validations: { maxSize: 30 * MB } },\n { name: 'ogg', title: 'OGG' },\n { name: 'm4a', title: 'M4A' },\n ],\n};\n\n@Injectable()\nexport class AXAudioFileTypeProvider extends AXFileTypeInfoProvider {\n items(): Promise<AXFileType[]> {\n return Promise.resolve([AX_AUDIO_FILE_TYPE]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport type { AXFileType } from '../file-type.models';\n\nconst MB = 1024 * 1024;\n\n/** Extension-only: no type `validations` — only listed extensions are allowed. */\nexport const AX_DOCUMENT_FILE_TYPE: AXFileType = {\n name: 'document',\n metadata: createFileTypeMetadata('system'),\n title: 'Document',\n icon: 'fa-light fa-file-lines ax-text-red-500',\n extensions: [{ name: 'pdf', title: 'PDF', validations: { mimeTypes: ['application/pdf'], maxSize: 5 * MB } }],\n};\n\n@Injectable()\nexport class AXDocumentFileTypeProvider extends AXFileTypeInfoProvider {\n items(): Promise<AXFileType[]> {\n return Promise.resolve([AX_DOCUMENT_FILE_TYPE]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport type { AXFileType } from '../file-type.models';\n\nconst MB = 1024 * 1024;\n\nexport const AX_FILE_FILE_TYPE: AXFileType = {\n name: 'file',\n metadata: createFileTypeMetadata('system'),\n title: 'File',\n icon: 'fa-light fa-file ax-text-neutral-500',\n validations: {\n mimeTypes: ['application/*', 'text/*'],\n minSize: 1,\n maxSize: 100 * MB,\n },\n extensions: [\n { name: 'pdf', title: 'PDF', validations: { mimeTypes: ['application/pdf'], maxSize: 25 * MB } },\n { name: 'doc', title: 'Word' },\n { name: 'docx', title: 'Word' },\n { name: 'txt', title: 'Text', validations: { mimeTypes: ['text/plain'], maxSize: 5 * MB } },\n { name: 'zip', title: 'ZIP', validations: { maxSize: 50 * MB } },\n ],\n};\n\n@Injectable()\nexport class AXFileFileTypeProvider extends AXFileTypeInfoProvider {\n items(): Promise<AXFileType[]> {\n return Promise.resolve([AX_FILE_FILE_TYPE]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport type { AXFileType } from '../file-type.models';\n\nconst MB = 1024 * 1024;\n\nexport const AX_IMAGE_FILE_TYPE: AXFileType = {\n name: 'image',\n metadata: createFileTypeMetadata('system'),\n title: 'Image',\n icon: 'fa-light fa-image ax-text-purple-500',\n validations: {\n mimeTypes: ['image/*'],\n minSize: 1,\n maxSize: 100 * MB,\n },\n extensions: [\n { name: 'jpg', title: 'JPEG' },\n { name: 'jpeg', title: 'JPEG', validations: { maxSize: 5 * MB } },\n { name: 'png', title: 'PNG' },\n { name: 'gif', title: 'GIF' },\n { name: 'webp', title: 'WebP' },\n { name: 'svg', title: 'SVG', validations: { maxSize: 2 * MB } },\n ],\n};\n\n@Injectable()\nexport class AXImageFileTypeProvider extends AXFileTypeInfoProvider {\n items(): Promise<AXFileType[]> {\n return Promise.resolve([AX_IMAGE_FILE_TYPE]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { createFileTypeMetadata } from '../file-type.metadata';\nimport type { AXFileType } from '../file-type.models';\n\nconst MB = 1024 * 1024;\n\nexport const AX_VIDEO_FILE_TYPE: AXFileType = {\n name: 'video',\n metadata: createFileTypeMetadata('system'),\n title: 'Video',\n icon: 'fa-light fa-video ax-text-blue-500',\n validations: {\n mimeTypes: ['video/*'],\n minSize: 1,\n maxSize: 500 * MB,\n },\n extensions: [\n { name: 'mp4', title: 'MP4' },\n { name: 'webm', title: 'WebM', validations: { maxSize: 200 * MB } },\n { name: 'ogg', title: 'OGG' },\n ],\n};\n\n@Injectable()\nexport class AXVideoFileTypeProvider extends AXFileTypeInfoProvider {\n items(): Promise<AXFileType[]> {\n return Promise.resolve([AX_VIDEO_FILE_TYPE]);\n }\n}\n","import { Provider, Type } from '@angular/core';\nimport { provideFileTypeInfoProvider, AXFileTypeInfoProvider } from '../file-type-info-provider';\nimport { AXAudioFileTypeProvider } from './audio-file-type.provider';\nimport { AXDocumentFileTypeProvider } from './document-file-type.provider';\nimport { AXFileFileTypeProvider } from './file-file-type.provider';\nimport { AXImageFileTypeProvider } from './image-file-type.provider';\nimport { AXVideoFileTypeProvider } from './video-file-type.provider';\n\nexport * from './image-file-type.provider';\nexport * from './video-file-type.provider';\nexport * from './audio-file-type.provider';\nexport * from './file-file-type.provider';\nexport * from './document-file-type.provider';\n\n/** Built-in file type provider classes (one logical type per provider). */\nexport const AX_BUILTIN_FILE_TYPE_PROVIDERS = [\n AXImageFileTypeProvider,\n AXVideoFileTypeProvider,\n AXAudioFileTypeProvider,\n AXFileFileTypeProvider,\n AXDocumentFileTypeProvider,\n] as const satisfies readonly Type<AXFileTypeInfoProvider>[];\n\n/** Registers all built-in file type providers (image, video, audio, file, document). */\nexport function provideBuiltinFileTypeProviders(): Provider[] {\n return AX_BUILTIN_FILE_TYPE_PROVIDERS.map((provider) => provideFileTypeInfoProvider(provider));\n}\n\n/** @deprecated Use {@link provideBuiltinFileTypeProviders}. */\nexport const provideDefaultFileTypeProviders = provideBuiltinFileTypeProviders;\n","import { Injectable } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '@acorex/core/validation';\n\nexport interface AXFileMimeTypeValidationRuleOptions extends AXValidationRuleOptions {\n /** MIME patterns, e.g. `image/*`, `image/png`. */\n allowed: string[];\n}\n\ndeclare module '@acorex/core/validation' {\n interface AXValidationRuleOptionsMap {\n fileMimeType: AXFileMimeTypeValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXFileMimeTypeValidationRule implements AXValidationRule {\n get name(): string {\n return 'fileMimeType';\n }\n\n async validate(\n value: File | Blob,\n options: AXFileMimeTypeValidationRuleOptions,\n ): Promise<AXValidationRuleResult> {\n const mime = (value instanceof File || value instanceof Blob ? value.type : '').trim().toLowerCase();\n const allowed = options.allowed ?? [];\n const valid =\n allowed.length === 0 ||\n allowed.some((pattern) => this.matchesMime(mime, pattern.trim().toLowerCase()));\n\n return {\n rule: this.name,\n result: valid,\n message: valid ? '' : (options.message ?? 'File type is not allowed.'),\n value: mime,\n };\n }\n\n private matchesMime(mime: string, pattern: string): boolean {\n if (!pattern || pattern === '*/*' || pattern === '*') {\n return true;\n }\n if (pattern.endsWith('/*')) {\n const category = pattern.slice(0, -2);\n return mime.startsWith(`${category}/`) || (mime === '' && category === 'application');\n }\n return mime === pattern;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '@acorex/core/validation';\nimport { formatFileSizeBytes } from '../../format-file-size';\n\nexport interface AXFileMinSizeValidationRuleOptions extends AXValidationRuleOptions {\n /** Minimum size in bytes. */\n minSize: number;\n}\n\ndeclare module '@acorex/core/validation' {\n interface AXValidationRuleOptionsMap {\n fileMinSize: AXFileMinSizeValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXFileMinSizeValidationRule implements AXValidationRule {\n get name(): string {\n return 'fileMinSize';\n }\n\n async validate(\n value: File | Blob,\n options: AXFileMinSizeValidationRuleOptions,\n ): Promise<AXValidationRuleResult> {\n const size = value instanceof File || value instanceof Blob ? value.size : 0;\n const valid = size >= options.minSize;\n const limitLabel = formatFileSizeBytes(options.minSize);\n\n return {\n rule: this.name,\n result: valid,\n message: valid\n ? ''\n : (options.message ?? `File is too small. Minimum size is ${limitLabel}.`),\n value: size,\n minSize: options.minSize,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '@acorex/core/validation';\nimport { formatFileSizeBytes } from '../../format-file-size';\n\nexport interface AXFileMaxSizeValidationRuleOptions extends AXValidationRuleOptions {\n /** Maximum size in bytes. */\n maxSize: number;\n}\n\ndeclare module '@acorex/core/validation' {\n interface AXValidationRuleOptionsMap {\n fileMaxSize: AXFileMaxSizeValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXFileMaxSizeValidationRule implements AXValidationRule {\n get name(): string {\n return 'fileMaxSize';\n }\n\n async validate(\n value: File | Blob,\n options: AXFileMaxSizeValidationRuleOptions,\n ): Promise<AXValidationRuleResult> {\n const size = value instanceof File || value instanceof Blob ? value.size : 0;\n const valid = size <= options.maxSize;\n const limitLabel = formatFileSizeBytes(options.maxSize);\n\n return {\n rule: this.name,\n result: valid,\n message: valid\n ? ''\n : (options.message ??\n `File is too large. Maximum size is ${limitLabel}.`),\n value: size,\n maxSize: options.maxSize,\n };\n }\n}\n","export * from './file-type.metadata';\nexport * from './file-type.models';\nexport * from './file-type.context';\nexport * from './file-type.copy';\nexport * from './file-type.open';\nexport * from './file-type.resolve';\nexport * from './file-type-info-provider';\nexport * from './file-type-registry.service';\nexport * from './file-type.merge';\nexport * from './file-type.validate';\nexport * from './types.providers';\nexport * from './rules/file-mime-type.rule';\nexport * from './rules/file-min-size.rule';\nexport * from './rules/file-max-size.rule';\n\nimport { Provider } from '@angular/core';\nimport { AXValidationRegistryService } from '@acorex/core/validation';\nimport { provideBuiltinFileTypeProviders } from './types.providers';\nimport { AXFileMaxSizeValidationRule } from './rules/file-max-size.rule';\nimport { AXFileMimeTypeValidationRule } from './rules/file-mime-type.rule';\nimport { AXFileMinSizeValidationRule } from './rules/file-min-size.rule';\n\n/** Validation rule classes to register with {@link AXValidationModule}. */\nexport const AX_FILE_VALIDATION_RULES = [\n AXFileMimeTypeValidationRule,\n AXFileMinSizeValidationRule,\n AXFileMaxSizeValidationRule,\n] as const;\n\n/** Registers file validation rules with {@link AXValidationRegistryService}. */\nexport function provideFileValidationRules(): Provider {\n return {\n provide: 'AXValidationModuleFactory',\n useFactory: (registry: AXValidationRegistryService) => () => {\n registry.register(...AX_FILE_VALIDATION_RULES);\n },\n deps: [AXValidationRegistryService],\n multi: true,\n };\n}\n\n/** Registers built-in image / video / audio / file / document type providers. */\nexport { provideBuiltinFileTypeProviders, provideDefaultFileTypeProviders } from './types.providers';\n\n/**\n * Registers validation rules and optional built-in file type providers.\n * {@link AXFileTypeRegistryService} and {@link AXFileService} are `providedIn: 'root'`.\n */\nexport function provideFileTypeSystem(): Provider[] {\n return [provideFileValidationRules(), ...provideBuiltinFileTypeProviders()];\n}\n","import { AXFormatModule } from '@acorex/core/format';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { AXFileSizeFormatter } from './file-size-formatter';\nimport {\n AX_FILE_VALIDATION_RULES,\n provideDefaultFileTypeProviders,\n provideFileValidationRules,\n} from './file-type';\n\nexport interface AXFileModuleConfig {\n fileTypeProviders?: Provider[];\n includeDefaultFileTypes?: boolean;\n}\n\n@NgModule({\n imports: [\n AXFormatModule.forChild({ formatters: [AXFileSizeFormatter] }),\n AXValidationModule.forChild({ rules: [...AX_FILE_VALIDATION_RULES] }),\n ],\n providers: [AXFileSizeFormatter],\n})\nexport class AXFileModule {\n static forRoot(config?: AXFileModuleConfig): ModuleWithProviders<AXFileModule> {\n const includeDefaults = config?.includeDefaultFileTypes !== false;\n\n return {\n ngModule: AXFileModule,\n providers: [\n provideFileValidationRules(),\n ...(includeDefaults ? provideDefaultFileTypeProviders() : []),\n ...(config?.fileTypeProviders ?? []),\n ],\n };\n }\n\n static forChild(config?: AXFileModuleConfig): ModuleWithProviders<AXFileModule> {\n return AXFileModule.forRoot(config);\n }\n}\n","import type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { DOCUMENT, inject, Injectable, isDevMode } from '@angular/core';\nimport { AXFileTypeRegistryService } from './file-type/file-type-registry.service';\nimport type { AXFileType } from './file-type/file-type.models';\n\nexport interface AXFileChooseOptions {\n /** Logical type name(s) from {@link AXFileTypeRegistryService}. When set, files are validated against the catalog. */\n fileType?: string | string[];\n accept?: string;\n multiple?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXFileService {\n private readonly document = inject(DOCUMENT);\n private readonly fileTypes = inject(AXFileTypeRegistryService);\n\n async getFileTypes(): Promise<AXFileType[]> {\n return this.fileTypes.getTypes();\n }\n\n async getFileType(name: string): Promise<AXFileType | undefined> {\n return this.fileTypes.get(name);\n }\n\n async getAcceptAttribute(fileType?: string | string[]): Promise<string> {\n return this.fileTypes.accept(fileType);\n }\n\n async matchFileType(file: File): Promise<AXFileType | undefined> {\n return this.fileTypes.matchType(file);\n }\n\n validate(file: File, fileType: string | string[]): Promise<AXValidationRuleResult[]> {\n return this.fileTypes.validateAgainstTypes(file, fileType);\n }\n\n validateMany(\n files: File[],\n fileType: string | string[],\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n return this.fileTypes.validateMany(files, fileType);\n }\n\n /**\n * Opens a file selection dialog.\n * With `fileType`, returns files that pass catalog validation (`accept` defaults from the catalog).\n * Without `fileType`, returns all selected files (legacy `accept` / `multiple` only).\n */\n async chooseValidated(\n options: AXFileChooseOptions,\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n const resolved = await this.resolveChooseOptions(options);\n const files = await this.openFileDialog(resolved);\n\n if (files.length === 0) {\n return { accepted: [], rejected: [] };\n }\n\n if (options.fileType) {\n return this.validateMany(files, options.fileType);\n }\n\n return { accepted: files, rejected: [] };\n }\n\n async choose(options: AXFileChooseOptions): Promise<File[]> {\n const { accepted } = await this.chooseValidated(options);\n return accepted;\n }\n\n blobToBase64(blob: Blob): Promise<string> {\n if (!(blob instanceof Blob)) {\n return Promise.reject(new Error('input is not blob'));\n }\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(reader.error);\n reader.onload = () => resolve(reader.result as string);\n reader.readAsDataURL(blob);\n });\n }\n\n getSize(file: File | Blob | string): number | false {\n if (this.isBase64(file as string)) {\n return this.getBase64Size(file as string);\n }\n return false;\n }\n\n isBase64(base64: string): boolean {\n const regx = /[^:]\\w+\\/[\\w-+\\d.]+(?=;|,)/;\n return regx.test(base64);\n }\n\n getBase64Size(base64: string): number {\n return atob(base64.substring(base64.indexOf(',') + 1)).length;\n }\n\n private async resolveChooseOptions(\n options: AXFileChooseOptions,\n ): Promise<{ accept: string; multiple: boolean }> {\n const multiple = options.multiple ?? false;\n\n if (options.fileType) {\n const accept = options.accept ?? (await this.getAcceptAttribute(options.fileType));\n\n if (isDevMode() && !accept) {\n const name = Array.isArray(options.fileType) ? options.fileType.join(', ') : options.fileType;\n console.warn(\n `[AXFileService] No accept filter for file type \"${name}\". ` +\n 'Register a file type provider (e.g. provideConversationFileCatalog).',\n );\n }\n\n return { accept, multiple };\n }\n\n return { accept: options.accept ?? '', multiple };\n }\n\n private openFileDialog(options: { accept: string; multiple: boolean }): Promise<File[]> {\n return new Promise<File[]>((resolve, reject) => {\n const input: HTMLInputElement = this.document.createElement('input');\n input.style.display = 'none';\n this.document.body.appendChild(input);\n input.type = 'file';\n input.accept = options.accept;\n input.multiple = options.multiple;\n\n const cleanup = () => {\n input.removeEventListener('change', onChange);\n input.removeEventListener('error', onError);\n if (input.parentNode) {\n this.document.body.removeChild(input);\n }\n input.remove();\n };\n\n const onError = (e: Event) => {\n cleanup();\n reject(e);\n };\n\n const onChange = () => {\n const files = Array.from(input.files ?? []);\n cleanup();\n resolve(files);\n };\n\n input.addEventListener('change', onChange);\n input.addEventListener('error', onError);\n input.click();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["MB"],"mappings":"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"}