valtech-components 2.0.434 → 2.0.435

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 (57) hide show
  1. package/esm2022/lib/components/atoms/fab/fab.component.mjs +5 -4
  2. package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +13 -5
  3. package/esm2022/lib/components/molecules/comment-input/types.mjs +2 -0
  4. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +23 -4
  5. package/esm2022/lib/components/molecules/date-input/types.mjs +2 -0
  6. package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +352 -0
  7. package/esm2022/lib/components/molecules/feedback-form/types.mjs +2 -0
  8. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +7 -7
  9. package/esm2022/lib/components/molecules/file-input/types.mjs +2 -0
  10. package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +23 -9
  11. package/esm2022/lib/components/molecules/number-from-to/types.mjs +2 -0
  12. package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +2 -2
  13. package/esm2022/lib/components/molecules/pin-input/types.mjs +2 -0
  14. package/esm2022/lib/components/organisms/form/form.component.mjs +108 -30
  15. package/esm2022/lib/services/content/content-types/blog.mjs +275 -0
  16. package/esm2022/lib/services/content/content-types/documentation.mjs +303 -0
  17. package/esm2022/lib/services/content/content-types/news.mjs +277 -0
  18. package/esm2022/lib/services/content/index.mjs +51 -0
  19. package/esm2022/lib/services/content/transformer.mjs +265 -0
  20. package/esm2022/lib/services/content/types.mjs +41 -0
  21. package/esm2022/lib/services/feedback/config.mjs +49 -0
  22. package/esm2022/lib/services/feedback/feedback.service.mjs +174 -0
  23. package/esm2022/lib/services/feedback/index.mjs +44 -0
  24. package/esm2022/lib/services/feedback/types.mjs +30 -0
  25. package/esm2022/lib/services/firebase/index.mjs +3 -1
  26. package/esm2022/lib/services/firebase/shared-config.mjs +132 -0
  27. package/esm2022/public-api.mjs +14 -1
  28. package/fesm2022/valtech-components.mjs +2225 -177
  29. package/fesm2022/valtech-components.mjs.map +1 -1
  30. package/lib/components/atoms/fab/fab.component.d.ts +2 -0
  31. package/lib/components/molecules/comment-input/comment-input.component.d.ts +4 -4
  32. package/lib/components/molecules/comment-input/types.d.ts +59 -0
  33. package/lib/components/molecules/date-input/date-input.component.d.ts +4 -3
  34. package/lib/components/molecules/date-input/types.d.ts +74 -0
  35. package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +56 -0
  36. package/lib/components/molecules/feedback-form/types.d.ts +54 -0
  37. package/lib/components/molecules/file-input/file-input.component.d.ts +5 -3
  38. package/lib/components/molecules/file-input/types.d.ts +72 -0
  39. package/lib/components/molecules/number-from-to/number-from-to.component.d.ts +8 -2
  40. package/lib/components/molecules/number-from-to/types.d.ts +76 -0
  41. package/lib/components/molecules/pin-input/pin-input.component.d.ts +4 -3
  42. package/lib/components/molecules/pin-input/types.d.ts +63 -0
  43. package/lib/components/organisms/form/form.component.d.ts +16 -2
  44. package/lib/services/content/content-types/blog.d.ts +148 -0
  45. package/lib/services/content/content-types/documentation.d.ts +183 -0
  46. package/lib/services/content/content-types/news.d.ts +162 -0
  47. package/lib/services/content/index.d.ts +49 -0
  48. package/lib/services/content/transformer.d.ts +96 -0
  49. package/lib/services/content/types.d.ts +220 -0
  50. package/lib/services/feedback/config.d.ts +35 -0
  51. package/lib/services/feedback/feedback.service.d.ts +76 -0
  52. package/lib/services/feedback/index.d.ts +40 -0
  53. package/lib/services/feedback/types.d.ts +107 -0
  54. package/lib/services/firebase/index.d.ts +1 -0
  55. package/lib/services/firebase/shared-config.d.ts +120 -0
  56. package/package.json +1 -1
  57. package/public-api.d.ts +9 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Content Types System
3
+ *
4
+ * This module provides a content abstraction layer that transforms
5
+ * structured content documents (blog posts, documentation, news articles)
6
+ * into ArticleMetadata for rendering with val-article component.
7
+ */
8
+ // =============================================================================
9
+ // TYPE GUARDS
10
+ // =============================================================================
11
+ /**
12
+ * Type guard to check if a block is a heading
13
+ */
14
+ export function isHeadingBlock(block) {
15
+ return block.type === 'heading';
16
+ }
17
+ /**
18
+ * Type guard to check if a block is a paragraph
19
+ */
20
+ export function isParagraphBlock(block) {
21
+ return block.type === 'paragraph';
22
+ }
23
+ /**
24
+ * Type guard to check if a block is a code block
25
+ */
26
+ export function isCodeBlock(block) {
27
+ return block.type === 'code';
28
+ }
29
+ /**
30
+ * Type guard to check if a block is a list
31
+ */
32
+ export function isListBlock(block) {
33
+ return block.type === 'list';
34
+ }
35
+ /**
36
+ * Type guard to check if a block is a callout
37
+ */
38
+ export function isCalloutBlock(block) {
39
+ return block.type === 'callout';
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBd09ILGdGQUFnRjtBQUNoRixjQUFjO0FBQ2QsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUNoRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFtQjtJQUNsRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBbUI7SUFDN0MsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUMvQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQW1CO0lBQzdDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUNoRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRlbnQgVHlwZXMgU3lzdGVtXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjb250ZW50IGFic3RyYWN0aW9uIGxheWVyIHRoYXQgdHJhbnNmb3Jtc1xuICogc3RydWN0dXJlZCBjb250ZW50IGRvY3VtZW50cyAoYmxvZyBwb3N0cywgZG9jdW1lbnRhdGlvbiwgbmV3cyBhcnRpY2xlcylcbiAqIGludG8gQXJ0aWNsZU1ldGFkYXRhIGZvciByZW5kZXJpbmcgd2l0aCB2YWwtYXJ0aWNsZSBjb21wb25lbnQuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFVVEhPUiAmIE1FVEFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQXV0aG9yIGluZm9ybWF0aW9uIGZvciBjb250ZW50IGRvY3VtZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBdXRob3Ige1xuICAvKiogQXV0aG9yJ3MgZGlzcGxheSBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFVSTCB0byBhdXRob3IncyBhdmF0YXIgaW1hZ2UgKi9cbiAgYXZhdGFyPzogc3RyaW5nO1xuICAvKiogQXV0aG9yJ3Mgcm9sZSBvciB0aXRsZSAqL1xuICByb2xlPzogc3RyaW5nO1xuICAvKiogTGluayB0byBhdXRob3IncyBwcm9maWxlICovXG4gIHByb2ZpbGVVcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tbW9uIG1ldGFkYXRhIGZvciBhbGwgY29udGVudCBkb2N1bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50TWV0YSB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFVSTC1mcmllbmRseSBzbHVnICovXG4gIHNsdWc/OiBzdHJpbmc7XG4gIC8qKiBDcmVhdGlvbiBkYXRlICovXG4gIGNyZWF0ZWRBdD86IERhdGUgfCBzdHJpbmc7XG4gIC8qKiBMYXN0IHVwZGF0ZSBkYXRlICovXG4gIHVwZGF0ZWRBdD86IERhdGUgfCBzdHJpbmc7XG4gIC8qKiBQdWJsaWNhdGlvbiBkYXRlICovXG4gIHB1Ymxpc2hlZEF0PzogRGF0ZSB8IHN0cmluZztcbiAgLyoqIENvbnRlbnQgYXV0aG9yICovXG4gIGF1dGhvcj86IENvbnRlbnRBdXRob3I7XG4gIC8qKiBUYWdzIGZvciBjYXRlZ29yaXphdGlvbiAqL1xuICB0YWdzPzogc3RyaW5nW107XG4gIC8qKiBQcmltYXJ5IGNhdGVnb3J5ICovXG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogQ29udGVudCBsb2NhbGUgKGUuZy4sICdlcycsICdlbicpICovXG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlRFTlQgQkxPQ0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEhlYWRpbmcgYmxvY2sgLSByZW5kZXJzIGFzIHRpdGxlIG9yIHN1YnRpdGxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGluZ0Jsb2NrIHtcbiAgdHlwZTogJ2hlYWRpbmcnO1xuICAvKiogSGVhZGluZyBsZXZlbDogMSA9IHRpdGxlLCAyLTMgPSBzdWJ0aXRsZSAqL1xuICBsZXZlbDogMSB8IDIgfCAzO1xuICAvKiogSGVhZGluZyB0ZXh0ICovXG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhZ3JhcGggYmxvY2sgLSByZW5kZXJzIGFzIHRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhZ3JhcGhCbG9jayB7XG4gIHR5cGU6ICdwYXJhZ3JhcGgnO1xuICAvKiogUGFyYWdyYXBoIHRleHQgY29udGVudCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBBcHBseSBlbXBoYXNpcyBzdHlsaW5nICovXG4gIGVtcGhhc2lzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBRdW90ZSBibG9jayAtIHJlbmRlcnMgYXMgYmxvY2txdW90ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RlQmxvY2sge1xuICB0eXBlOiAncXVvdGUnO1xuICAvKiogUXVvdGUgdGV4dCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBRdW90ZSBhdXRob3IgbmFtZSAqL1xuICBhdXRob3I/OiBzdHJpbmc7XG4gIC8qKiBRdW90ZSBzb3VyY2UgKi9cbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvZGUgYmxvY2sgLSByZW5kZXJzIGFzIHN5bnRheC1oaWdobGlnaHRlZCBjb2RlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrIHtcbiAgdHlwZTogJ2NvZGUnO1xuICAvKiogQ29kZSBjb250ZW50ICovXG4gIGNvZGU6IHN0cmluZztcbiAgLyoqIFByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nICovXG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICAvKiogQ29kZSBibG9jayB0aXRsZS9maWxlbmFtZSAqL1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBMaXN0IGJsb2NrIC0gcmVuZGVycyBhcyBvcmRlcmVkLCB1bm9yZGVyZWQsIG9yIGNoZWNrbGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RCbG9jayB7XG4gIHR5cGU6ICdsaXN0JztcbiAgLyoqIExpc3QgaXRlbXMgKHNpbXBsZSBzdHJpbmdzKSAqL1xuICBpdGVtczogc3RyaW5nW107XG4gIC8qKiBSZW5kZXIgYXMgbnVtYmVyZWQgbGlzdCAqL1xuICBvcmRlcmVkPzogYm9vbGVhbjtcbiAgLyoqIFJlbmRlciBhcyBjaGVja2xpc3Qgd2l0aCBjaGVja21hcmtzICovXG4gIGNoZWNrbGlzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW1hZ2UgYmxvY2sgLSByZW5kZXJzIGFzIGltYWdlIHdpdGggb3B0aW9uYWwgY2FwdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQmxvY2sge1xuICB0eXBlOiAnaW1hZ2UnO1xuICAvKiogSW1hZ2Ugc291cmNlIFVSTCAqL1xuICBzcmM6IHN0cmluZztcbiAgLyoqIEFsdCB0ZXh0IGZvciBhY2Nlc3NpYmlsaXR5ICovXG4gIGFsdDogc3RyaW5nO1xuICAvKiogSW1hZ2UgY2FwdGlvbiAqL1xuICBjYXB0aW9uPzogc3RyaW5nO1xuICAvKiogSW1hZ2UgYWxpZ25tZW50ICovXG4gIGFsaWdubWVudD86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jztcbn1cblxuLyoqXG4gKiBDYWxsb3V0IGJsb2NrIC0gcmVuZGVycyBhcyBoaWdobGlnaHRlZCBub3RlL3dhcm5pbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWxsb3V0QmxvY2sge1xuICB0eXBlOiAnY2FsbG91dCc7XG4gIC8qKiBDYWxsb3V0IHRleHQgY29udGVudCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBDYWxsb3V0IHZhcmlhbnQgZGV0ZXJtaW5lcyBzdHlsaW5nICovXG4gIHZhcmlhbnQ6ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcic7XG4gIC8qKiBPcHRpb25hbCB0aXRsZS9wcmVmaXggKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGl2aWRlciBibG9jayAtIHJlbmRlcnMgYXMgc2VwYXJhdG9yIGxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXZpZGVyQmxvY2sge1xuICB0eXBlOiAnZGl2aWRlcic7XG4gIC8qKiBEaXZpZGVyIHN0eWxlICovXG4gIHN0eWxlPzogJ2xpbmUnIHwgJ2RvdHMnIHwgJ3NwYWNlJztcbn1cblxuLyoqXG4gKiBCdXR0b24gYmxvY2sgLSByZW5kZXJzIGFzIGNhbGwtdG8tYWN0aW9uIGJ1dHRvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvbkJsb2NrIHtcbiAgdHlwZTogJ2J1dHRvbic7XG4gIC8qKiBCdXR0b24gdGV4dCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBMaW5rIFVSTCAoZm9yIG5hdmlnYXRpb24pICovXG4gIGhyZWY/OiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gaWRlbnRpZmllciAoZm9yIGV2ZW50IGhhbmRsaW5nKSAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdkYW5nZXInO1xuICAvKiogQnV0dG9uIGFsaWdubWVudCAqL1xuICBhbGlnbm1lbnQ/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59XG5cbi8qKlxuICogQ29tbWFuZCBibG9jayAtIHJlbmRlcnMgYXMgdGVybWluYWwvQ0xJIGNvbW1hbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmxvY2sge1xuICB0eXBlOiAnY29tbWFuZCc7XG4gIC8qKiBDb21tYW5kIHRvIGRpc3BsYXkgKi9cbiAgY29tbWFuZDogc3RyaW5nO1xuICAvKiogU2hvdyBjb3B5IGJ1dHRvbiAqL1xuICBjb3B5YWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVW5pb24gdHlwZSBvZiBhbGwgY29udGVudCBibG9ja3NcbiAqL1xuZXhwb3J0IHR5cGUgQ29udGVudEJsb2NrID1cbiAgfCBIZWFkaW5nQmxvY2tcbiAgfCBQYXJhZ3JhcGhCbG9ja1xuICB8IFF1b3RlQmxvY2tcbiAgfCBDb2RlQmxvY2tcbiAgfCBMaXN0QmxvY2tcbiAgfCBJbWFnZUJsb2NrXG4gIHwgQ2FsbG91dEJsb2NrXG4gIHwgRGl2aWRlckJsb2NrXG4gIHwgQnV0dG9uQmxvY2tcbiAgfCBDb21tYW5kQmxvY2s7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05URU5UIERPQ1VNRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29udGVudCByZW5kZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50Q29uZmlnIHtcbiAgLyoqIEFydGljbGUgdGhlbWUgKi9cbiAgdGhlbWU/OiAnbGlnaHQnIHwgJ2RhcmsnIHwgJ2F1dG8nO1xuICAvKiogTWF4aW11bSB3aWR0aCBvZiB0aGUgY29udGVudCBjb250YWluZXIgKi9cbiAgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBTaG93IG1ldGFkYXRhIChhdXRob3IsIGRhdGUsIGV0Yy4pICovXG4gIHNob3dNZXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgdGFibGUgb2YgY29udGVudHMgKi9cbiAgc2hvd1RhYmxlT2ZDb250ZW50cz86IGJvb2xlYW47XG4gIC8qKiBDZW50ZXIgdGhlIGNvbnRlbnQgY29udGFpbmVyICovXG4gIGNlbnRlcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYWxsIGNvbnRlbnQgZG9jdW1lbnRzLlxuICogR2VuZXJpYyB0eXBlIFQgcmVwcmVzZW50cyB0aGUgZG9jdW1lbnQgdHlwZSBkaXNjcmltaW5hdG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgQmxvZ1Bvc3QgZXh0ZW5kcyBDb250ZW50RG9jdW1lbnQ8J2Jsb2cnPiB7XG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKiAgIGV4Y2VycHQ6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnREb2N1bWVudDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIC8qKiBEb2N1bWVudCB0eXBlIGRpc2NyaW1pbmF0b3IgKi9cbiAgdHlwZTogVDtcbiAgLyoqIERvY3VtZW50IG1ldGFkYXRhICovXG4gIG1ldGE6IENvbnRlbnRNZXRhO1xuICAvKiogQXJyYXkgb2YgY29udGVudCBibG9ja3MgKi9cbiAgY29udGVudDogQ29udGVudEJsb2NrW107XG4gIC8qKiBSZW5kZXJpbmcgY29uZmlndXJhdGlvbiAqL1xuICBjb25maWc/OiBDb250ZW50Q29uZmlnO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRSBHVUFSRFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGJsb2NrIGlzIGEgaGVhZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIZWFkaW5nQmxvY2soYmxvY2s6IENvbnRlbnRCbG9jayk6IGJsb2NrIGlzIEhlYWRpbmdCbG9jayB7XG4gIHJldHVybiBibG9jay50eXBlID09PSAnaGVhZGluZyc7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGJsb2NrIGlzIGEgcGFyYWdyYXBoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmFncmFwaEJsb2NrKGJsb2NrOiBDb250ZW50QmxvY2spOiBibG9jayBpcyBQYXJhZ3JhcGhCbG9jayB7XG4gIHJldHVybiBibG9jay50eXBlID09PSAncGFyYWdyYXBoJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBjb2RlIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvZGVCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgQ29kZUJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdjb2RlJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgTGlzdEJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdsaXN0Jztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBjYWxsb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbGxvdXRCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgQ2FsbG91dEJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdjYWxsb3V0Jztcbn1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { InjectionToken, makeEnvironmentProviders, } from '@angular/core';
2
+ /**
3
+ * Token de inyección para la configuración de Feedback.
4
+ */
5
+ export const VALTECH_FEEDBACK_CONFIG = new InjectionToken('ValtechFeedbackConfig');
6
+ /**
7
+ * Configuración por defecto.
8
+ */
9
+ export const DEFAULT_FEEDBACK_CONFIG = {
10
+ feedbackPrefix: '/v1/feedback',
11
+ maxAttachments: 5,
12
+ maxFileSize: 10 * 1024 * 1024, // 10MB
13
+ allowedFileTypes: ['image/*', 'video/*', 'application/pdf'],
14
+ storagePath: 'feedback',
15
+ };
16
+ /**
17
+ * Provee el servicio de feedback a la aplicación Angular.
18
+ *
19
+ * @param config - Configuración de feedback
20
+ * @returns EnvironmentProviders para usar en bootstrapApplication
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // main.ts
25
+ * import { bootstrapApplication } from '@angular/platform-browser';
26
+ * import { provideValtechFeedback } from 'valtech-components';
27
+ * import { environment } from './environments/environment';
28
+ *
29
+ * bootstrapApplication(AppComponent, {
30
+ * providers: [
31
+ * provideValtechAuth({ apiUrl: environment.apiUrl }),
32
+ * provideValtechFeedback({
33
+ * apiUrl: environment.apiUrl,
34
+ * appId: 'my-app-name',
35
+ * }),
36
+ * ],
37
+ * });
38
+ * ```
39
+ */
40
+ export function provideValtechFeedback(config) {
41
+ const mergedConfig = {
42
+ ...DEFAULT_FEEDBACK_CONFIG,
43
+ ...config,
44
+ };
45
+ return makeEnvironmentProviders([
46
+ { provide: VALTECH_FEEDBACK_CONFIG, useValue: mergedConfig },
47
+ ]);
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9mZWVkYmFjay9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsRUFDZCx3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFHdkI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFtQztJQUNyRSxjQUFjLEVBQUUsY0FBYztJQUM5QixjQUFjLEVBQUUsQ0FBQztJQUNqQixXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsT0FBTztJQUN0QyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUM7SUFDM0QsV0FBVyxFQUFFLFVBQVU7Q0FDeEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsTUFBNkI7SUFFN0IsTUFBTSxZQUFZLEdBQTBCO1FBQzFDLEdBQUcsdUJBQXVCO1FBQzFCLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFFRixPQUFPLHdCQUF3QixDQUFDO1FBQzlCLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7S0FDN0QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbHRlY2hGZWVkYmFja0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRva2VuIGRlIGlueWVjY2nDs24gcGFyYSBsYSBjb25maWd1cmFjacOzbiBkZSBGZWVkYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfRkVFREJBQ0tfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFZhbHRlY2hGZWVkYmFja0NvbmZpZz4oXG4gICdWYWx0ZWNoRmVlZGJhY2tDb25maWcnXG4pO1xuXG4vKipcbiAqIENvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GRUVEQkFDS19DT05GSUc6IFBhcnRpYWw8VmFsdGVjaEZlZWRiYWNrQ29uZmlnPiA9IHtcbiAgZmVlZGJhY2tQcmVmaXg6ICcvdjEvZmVlZGJhY2snLFxuICBtYXhBdHRhY2htZW50czogNSxcbiAgbWF4RmlsZVNpemU6IDEwICogMTAyNCAqIDEwMjQsIC8vIDEwTUJcbiAgYWxsb3dlZEZpbGVUeXBlczogWydpbWFnZS8qJywgJ3ZpZGVvLyonLCAnYXBwbGljYXRpb24vcGRmJ10sXG4gIHN0b3JhZ2VQYXRoOiAnZmVlZGJhY2snLFxufTtcblxuLyoqXG4gKiBQcm92ZWUgZWwgc2VydmljaW8gZGUgZmVlZGJhY2sgYSBsYSBhcGxpY2FjacOzbiBBbmd1bGFyLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjacOzbiBkZSBmZWVkYmFja1xuICogQHJldHVybnMgRW52aXJvbm1lbnRQcm92aWRlcnMgcGFyYSB1c2FyIGVuIGJvb3RzdHJhcEFwcGxpY2F0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIG1haW4udHNcbiAqIGltcG9ydCB7IGJvb3RzdHJhcEFwcGxpY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4gKiBpbXBvcnQgeyBwcm92aWRlVmFsdGVjaEZlZWRiYWNrIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlVmFsdGVjaEF1dGgoeyBhcGlVcmw6IGVudmlyb25tZW50LmFwaVVybCB9KSxcbiAqICAgICBwcm92aWRlVmFsdGVjaEZlZWRiYWNrKHtcbiAqICAgICAgIGFwaVVybDogZW52aXJvbm1lbnQuYXBpVXJsLFxuICogICAgICAgYXBwSWQ6ICdteS1hcHAtbmFtZScsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hGZWVkYmFjayhcbiAgY29uZmlnOiBWYWx0ZWNoRmVlZGJhY2tDb25maWdcbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgbWVyZ2VkQ29uZmlnOiBWYWx0ZWNoRmVlZGJhY2tDb25maWcgPSB7XG4gICAgLi4uREVGQVVMVF9GRUVEQkFDS19DT05GSUcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHsgcHJvdmlkZTogVkFMVEVDSF9GRUVEQkFDS19DT05GSUcsIHVzZVZhbHVlOiBtZXJnZWRDb25maWcgfSxcbiAgXSk7XG59XG4iXX0=
@@ -0,0 +1,174 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { firstValueFrom } from 'rxjs';
4
+ import { VALTECH_FEEDBACK_CONFIG } from './config';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Servicio para gestionar feedback de usuarios.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * @Component({...})
12
+ * export class MyComponent {
13
+ * private feedbackService = inject(FeedbackService);
14
+ *
15
+ * async submitFeedback() {
16
+ * const response = await this.feedbackService.createAsync(
17
+ * 'feedback',
18
+ * 'Mi comentario',
19
+ * 'Descripción detallada...'
20
+ * );
21
+ * console.log('Feedback enviado:', response.feedbackId);
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ export class FeedbackService {
27
+ constructor() {
28
+ this.config = inject(VALTECH_FEEDBACK_CONFIG);
29
+ this.http = inject(HttpClient);
30
+ }
31
+ /**
32
+ * URL base para endpoints de feedback.
33
+ */
34
+ get baseUrl() {
35
+ return `${this.config.apiUrl}${this.config.feedbackPrefix}`;
36
+ }
37
+ /**
38
+ * Captura el contexto del dispositivo automáticamente.
39
+ */
40
+ captureDeviceContext() {
41
+ const ua = navigator.userAgent;
42
+ return {
43
+ browser: this.detectBrowser(ua),
44
+ os: this.detectOS(ua),
45
+ viewport: `${window.innerWidth}x${window.innerHeight}`,
46
+ language: navigator.language,
47
+ userAgent: ua,
48
+ pageUrl: window.location.href,
49
+ };
50
+ }
51
+ /**
52
+ * Crea un nuevo feedback.
53
+ *
54
+ * @param type - Tipo de feedback
55
+ * @param title - Título del feedback
56
+ * @param description - Descripción detallada
57
+ * @param attachments - URLs de archivos adjuntos (opcional)
58
+ * @param contentRef - Referencia a contenido específico (opcional)
59
+ * @returns Observable con la respuesta
60
+ */
61
+ create(type, title, description, attachments = [], contentRef) {
62
+ const request = {
63
+ type,
64
+ title,
65
+ description,
66
+ attachments,
67
+ contentRef,
68
+ deviceContext: this.captureDeviceContext(),
69
+ appId: this.config.appId,
70
+ };
71
+ return this.http.post(this.baseUrl, request);
72
+ }
73
+ /**
74
+ * Crea un nuevo feedback (versión async/await).
75
+ */
76
+ async createAsync(type, title, description, attachments = [], contentRef) {
77
+ return firstValueFrom(this.create(type, title, description, attachments, contentRef));
78
+ }
79
+ /**
80
+ * Obtiene un feedback por ID (solo el propietario).
81
+ *
82
+ * @param feedbackId - ID del feedback
83
+ * @returns Observable con la respuesta
84
+ */
85
+ getById(feedbackId) {
86
+ return this.http.get(`${this.baseUrl}/${feedbackId}`);
87
+ }
88
+ /**
89
+ * Obtiene un feedback por ID (versión async/await).
90
+ */
91
+ async getByIdAsync(feedbackId) {
92
+ return firstValueFrom(this.getById(feedbackId));
93
+ }
94
+ /**
95
+ * Valida si un archivo cumple con las restricciones.
96
+ */
97
+ validateFile(file) {
98
+ // Verificar tamaño
99
+ if (file.size > this.config.maxFileSize) {
100
+ const maxSizeMB = Math.round(this.config.maxFileSize / (1024 * 1024));
101
+ return {
102
+ valid: false,
103
+ error: `El archivo excede el tamaño máximo de ${maxSizeMB}MB`,
104
+ };
105
+ }
106
+ // Verificar tipo
107
+ const allowedTypes = this.config.allowedFileTypes || [];
108
+ const isAllowed = allowedTypes.some((pattern) => {
109
+ if (pattern.endsWith('/*')) {
110
+ const baseType = pattern.replace('/*', '');
111
+ return file.type.startsWith(baseType);
112
+ }
113
+ return file.type === pattern;
114
+ });
115
+ if (!isAllowed) {
116
+ return {
117
+ valid: false,
118
+ error: 'Tipo de archivo no permitido',
119
+ };
120
+ }
121
+ return { valid: true };
122
+ }
123
+ /**
124
+ * Obtiene la configuración actual del servicio.
125
+ */
126
+ getConfig() {
127
+ return this.config;
128
+ }
129
+ // =========================================================================
130
+ // Helpers privados para detección de browser/OS
131
+ // =========================================================================
132
+ detectBrowser(ua) {
133
+ if (ua.includes('Edg/'))
134
+ return 'Edge';
135
+ if (ua.includes('Chrome/'))
136
+ return 'Chrome';
137
+ if (ua.includes('Firefox/'))
138
+ return 'Firefox';
139
+ if (ua.includes('Safari/') && !ua.includes('Chrome'))
140
+ return 'Safari';
141
+ if (ua.includes('Opera') || ua.includes('OPR/'))
142
+ return 'Opera';
143
+ return 'Unknown';
144
+ }
145
+ detectOS(ua) {
146
+ if (ua.includes('Windows NT 10'))
147
+ return 'Windows 10';
148
+ if (ua.includes('Windows NT 11'))
149
+ return 'Windows 11';
150
+ if (ua.includes('Windows'))
151
+ return 'Windows';
152
+ if (ua.includes('Mac OS X')) {
153
+ const match = ua.match(/Mac OS X (\d+[._]\d+)/);
154
+ if (match) {
155
+ return `macOS ${match[1].replace('_', '.')}`;
156
+ }
157
+ return 'macOS';
158
+ }
159
+ if (ua.includes('Android'))
160
+ return 'Android';
161
+ if (ua.includes('iPhone') || ua.includes('iPad'))
162
+ return 'iOS';
163
+ if (ua.includes('Linux'))
164
+ return 'Linux';
165
+ return 'Unknown';
166
+ }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
168
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, providedIn: 'root' }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackService, decorators: [{
171
+ type: Injectable,
172
+ args: [{ providedIn: 'root' }]
173
+ }] });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmVlZGJhY2svZmVlZGJhY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBVW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFVSxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQTJKbkM7SUF6SkM7O09BRUc7SUFDSCxJQUFZLE9BQU87UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDL0IsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3RELFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxNQUFN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QUFTLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDekMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzsrR0E1SlUsZUFBZTttSEFBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZBTFRFQ0hfRkVFREJBQ0tfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlRmVlZGJhY2tSZXF1ZXN0LFxuICBDcmVhdGVGZWVkYmFja1Jlc3BvbnNlLFxuICBHZXRGZWVkYmFja1Jlc3BvbnNlLFxuICBEZXZpY2VDb250ZXh0LFxuICBGZWVkYmFja1R5cGUsXG4gIENvbnRlbnRSZWYsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgZ2VzdGlvbmFyIGZlZWRiYWNrIGRlIHVzdWFyaW9zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlKTtcbiAqXG4gKiAgIGFzeW5jIHN1Ym1pdEZlZWRiYWNrKCkge1xuICogICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZWVkYmFja1NlcnZpY2UuY3JlYXRlQXN5bmMoXG4gKiAgICAgICAnZmVlZGJhY2snLFxuICogICAgICAgJ01pIGNvbWVudGFyaW8nLFxuICogICAgICAgJ0Rlc2NyaXBjacOzbiBkZXRhbGxhZGEuLi4nXG4gKiAgICAgKTtcbiAqICAgICBjb25zb2xlLmxvZygnRmVlZGJhY2sgZW52aWFkbzonLCByZXNwb25zZS5mZWVkYmFja0lkKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmVlZGJhY2tTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoVkFMVEVDSF9GRUVEQkFDS19DT05GSUcpO1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgLyoqXG4gICAqIFVSTCBiYXNlIHBhcmEgZW5kcG9pbnRzIGRlIGZlZWRiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5mZWVkYmFja1ByZWZpeH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgY29udGV4dG8gZGVsIGRpc3Bvc2l0aXZvIGF1dG9tw6F0aWNhbWVudGUuXG4gICAqL1xuICBjYXB0dXJlRGV2aWNlQ29udGV4dCgpOiBEZXZpY2VDb250ZXh0IHtcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyb3dzZXI6IHRoaXMuZGV0ZWN0QnJvd3Nlcih1YSksXG4gICAgICBvczogdGhpcy5kZXRlY3RPUyh1YSksXG4gICAgICB2aWV3cG9ydDogYCR7d2luZG93LmlubmVyV2lkdGh9eCR7d2luZG93LmlubmVySGVpZ2h0fWAsXG4gICAgICBsYW5ndWFnZTogbmF2aWdhdG9yLmxhbmd1YWdlLFxuICAgICAgdXNlckFnZW50OiB1YSxcbiAgICAgIHBhZ2VVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBmZWVkYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaXBvIGRlIGZlZWRiYWNrXG4gICAqIEBwYXJhbSB0aXRsZSAtIFTDrXR1bG8gZGVsIGZlZWRiYWNrXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIERlc2NyaXBjacOzbiBkZXRhbGxhZGFcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRzIC0gVVJMcyBkZSBhcmNoaXZvcyBhZGp1bnRvcyAob3BjaW9uYWwpXG4gICAqIEBwYXJhbSBjb250ZW50UmVmIC0gUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyBlc3BlY8OtZmljbyAob3BjaW9uYWwpXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY29uIGxhIHJlc3B1ZXN0YVxuICAgKi9cbiAgY3JlYXRlKFxuICAgIHR5cGU6IEZlZWRiYWNrVHlwZSxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgY29udGVudFJlZj86IENvbnRlbnRSZWZcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdDogQ3JlYXRlRmVlZGJhY2tSZXF1ZXN0ID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBhdHRhY2htZW50cyxcbiAgICAgIGNvbnRlbnRSZWYsXG4gICAgICBkZXZpY2VDb250ZXh0OiB0aGlzLmNhcHR1cmVEZXZpY2VDb250ZXh0KCksXG4gICAgICBhcHBJZDogdGhpcy5jb25maWcuYXBwSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPih0aGlzLmJhc2VVcmwsIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgdW4gbnVldm8gZmVlZGJhY2sgKHZlcnNpw7NuIGFzeW5jL2F3YWl0KS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFzeW5jKFxuICAgIHR5cGU6IEZlZWRiYWNrVHlwZSxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgY29udGVudFJlZj86IENvbnRlbnRSZWZcbiAgKTogUHJvbWlzZTxDcmVhdGVGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5jcmVhdGUodHlwZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCBhdHRhY2htZW50cywgY29udGVudFJlZilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZmVlZGJhY2sgcG9yIElEIChzb2xvIGVsIHByb3BpZXRhcmlvKS5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRiYWNrSWQgLSBJRCBkZWwgZmVlZGJhY2tcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBjb24gbGEgcmVzcHVlc3RhXG4gICAqL1xuICBnZXRCeUlkKGZlZWRiYWNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0RmVlZGJhY2tSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdldEZlZWRiYWNrUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vJHtmZWVkYmFja0lkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZmVlZGJhY2sgcG9yIElEICh2ZXJzacOzbiBhc3luYy9hd2FpdCkuXG4gICAqL1xuICBhc3luYyBnZXRCeUlkQXN5bmMoZmVlZGJhY2tJZDogc3RyaW5nKTogUHJvbWlzZTxHZXRGZWVkYmFja1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuZ2V0QnlJZChmZWVkYmFja0lkKSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhIHNpIHVuIGFyY2hpdm8gY3VtcGxlIGNvbiBsYXMgcmVzdHJpY2Npb25lcy5cbiAgICovXG4gIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gICAgLy8gVmVyaWZpY2FyIHRhbWHDsW9cbiAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5jb25maWcubWF4RmlsZVNpemUhKSB7XG4gICAgICBjb25zdCBtYXhTaXplTUIgPSBNYXRoLnJvdW5kKHRoaXMuY29uZmlnLm1heEZpbGVTaXplISAvICgxMDI0ICogMTAyNCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYEVsIGFyY2hpdm8gZXhjZWRlIGVsIHRhbWHDsW8gbcOheGltbyBkZSAke21heFNpemVNQn1NQmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciB0aXBvXG4gICAgY29uc3QgYWxsb3dlZFR5cGVzID0gdGhpcy5jb25maWcuYWxsb3dlZEZpbGVUeXBlcyB8fCBbXTtcbiAgICBjb25zdCBpc0FsbG93ZWQgPSBhbGxvd2VkVHlwZXMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgaWYgKHBhdHRlcm4uZW5kc1dpdGgoJy8qJykpIHtcbiAgICAgICAgY29uc3QgYmFzZVR5cGUgPSBwYXR0ZXJuLnJlcGxhY2UoJy8qJywgJycpO1xuICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoYmFzZVR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbGUudHlwZSA9PT0gcGF0dGVybjtcbiAgICB9KTtcblxuICAgIGlmICghaXNBbGxvd2VkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiAnVGlwbyBkZSBhcmNoaXZvIG5vIHBlcm1pdGlkbycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBhY3R1YWwgZGVsIHNlcnZpY2lvLlxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IFJlYWRvbmx5PHR5cGVvZiB0aGlzLmNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSGVscGVycyBwcml2YWRvcyBwYXJhIGRldGVjY2nDs24gZGUgYnJvd3Nlci9PU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBkZXRlY3RCcm93c2VyKHVhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh1YS5pbmNsdWRlcygnRWRnLycpKSByZXR1cm4gJ0VkZ2UnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnQ2hyb21lLycpKSByZXR1cm4gJ0Nocm9tZSc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdGaXJlZm94LycpKSByZXR1cm4gJ0ZpcmVmb3gnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnU2FmYXJpLycpICYmICF1YS5pbmNsdWRlcygnQ2hyb21lJykpIHJldHVybiAnU2FmYXJpJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ09wZXJhJykgfHwgdWEuaW5jbHVkZXMoJ09QUi8nKSkgcmV0dXJuICdPcGVyYSc7XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0T1ModWE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzIE5UIDEwJykpIHJldHVybiAnV2luZG93cyAxMCc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzIE5UIDExJykpIHJldHVybiAnV2luZG93cyAxMSc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzJykpIHJldHVybiAnV2luZG93cyc7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdNYWMgT1MgWCcpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHVhLm1hdGNoKC9NYWMgT1MgWCAoXFxkK1suX11cXGQrKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBgbWFjT1MgJHttYXRjaFsxXS5yZXBsYWNlKCdfJywgJy4nKX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdtYWNPUyc7XG4gICAgfVxuICAgIGlmICh1YS5pbmNsdWRlcygnQW5kcm9pZCcpKSByZXR1cm4gJ0FuZHJvaWQnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnaVBob25lJykgfHwgdWEuaW5jbHVkZXMoJ2lQYWQnKSkgcmV0dXJuICdpT1MnO1xuICAgIGlmICh1YS5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdMaW51eCc7XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxufVxuIl19
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Valtech Feedback Service
3
+ *
4
+ * Servicio para gestionar feedback de usuarios a nivel de plataforma.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // main.ts - Configuración
9
+ * import { provideValtechFeedback } from 'valtech-components';
10
+ *
11
+ * bootstrapApplication(AppComponent, {
12
+ * providers: [
13
+ * provideValtechAuth({ apiUrl: environment.apiUrl }),
14
+ * provideValtechFeedback({
15
+ * apiUrl: environment.apiUrl,
16
+ * appId: 'my-app-name',
17
+ * }),
18
+ * ],
19
+ * });
20
+ *
21
+ * // component.ts - Uso
22
+ * import { FeedbackService } from 'valtech-components';
23
+ *
24
+ * @Component({...})
25
+ * export class MyComponent {
26
+ * private feedbackService = inject(FeedbackService);
27
+ *
28
+ * async submitFeedback() {
29
+ * const response = await this.feedbackService.createAsync(
30
+ * 'feedback',
31
+ * 'Título',
32
+ * 'Descripción...'
33
+ * );
34
+ * }
35
+ * }
36
+ * ```
37
+ */
38
+ // Configuration
39
+ export { VALTECH_FEEDBACK_CONFIG, provideValtechFeedback, DEFAULT_FEEDBACK_CONFIG } from './config';
40
+ // Service
41
+ export { FeedbackService } from './feedback.service';
42
+ // Types
43
+ export { DEFAULT_FEEDBACK_TYPE_OPTIONS, } from './types';
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZlZWRiYWNrL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFFSCxnQkFBZ0I7QUFDaEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBHLFVBQVU7QUFDVixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsUUFBUTtBQUNSLE9BQU8sRUFZTCw2QkFBNkIsR0FDOUIsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbHRlY2ggRmVlZGJhY2sgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgZ2VzdGlvbmFyIGZlZWRiYWNrIGRlIHVzdWFyaW9zIGEgbml2ZWwgZGUgcGxhdGFmb3JtYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gbWFpbi50cyAtIENvbmZpZ3VyYWNpw7NuXG4gKiBpbXBvcnQgeyBwcm92aWRlVmFsdGVjaEZlZWRiYWNrIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hBdXRoKHsgYXBpVXJsOiBlbnZpcm9ubWVudC5hcGlVcmwgfSksXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hGZWVkYmFjayh7XG4gKiAgICAgICBhcGlVcmw6IGVudmlyb25tZW50LmFwaVVybCxcbiAqICAgICAgIGFwcElkOiAnbXktYXBwLW5hbWUnLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKlxuICogLy8gY29tcG9uZW50LnRzIC0gVXNvXG4gKiBpbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgc3VibWl0RmVlZGJhY2soKSB7XG4gKiAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZlZWRiYWNrU2VydmljZS5jcmVhdGVBc3luYyhcbiAqICAgICAgICdmZWVkYmFjaycsXG4gKiAgICAgICAnVMOtdHVsbycsXG4gKiAgICAgICAnRGVzY3JpcGNpw7NuLi4uJ1xuICogICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIENvbmZpZ3VyYXRpb25cbmV4cG9ydCB7IFZBTFRFQ0hfRkVFREJBQ0tfQ09ORklHLCBwcm92aWRlVmFsdGVjaEZlZWRiYWNrLCBERUZBVUxUX0ZFRURCQUNLX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcblxuLy8gU2VydmljZVxuZXhwb3J0IHsgRmVlZGJhY2tTZXJ2aWNlIH0gZnJvbSAnLi9mZWVkYmFjay5zZXJ2aWNlJztcblxuLy8gVHlwZXNcbmV4cG9ydCB7XG4gIFZhbHRlY2hGZWVkYmFja0NvbmZpZyxcbiAgRmVlZGJhY2tUeXBlLFxuICBGZWVkYmFja1N0YXR1cyxcbiAgQ29udGVudFR5cGUsXG4gIENvbnRlbnRSZWYsXG4gIERldmljZUNvbnRleHQsXG4gIEZlZWRiYWNrLFxuICBDcmVhdGVGZWVkYmFja1JlcXVlc3QsXG4gIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2UsXG4gIEdldEZlZWRiYWNrUmVzcG9uc2UsXG4gIEZlZWRiYWNrVHlwZU9wdGlvbixcbiAgREVGQVVMVF9GRUVEQkFDS19UWVBFX09QVElPTlMsXG59IGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Configuración por defecto de tipos de feedback.
3
+ */
4
+ export const DEFAULT_FEEDBACK_TYPE_OPTIONS = [
5
+ {
6
+ value: 'issue',
7
+ label: 'Reportar problema',
8
+ description: 'Algo no funciona correctamente',
9
+ icon: 'bug-outline',
10
+ },
11
+ {
12
+ value: 'poor-content',
13
+ label: 'Contenido incorrecto',
14
+ description: 'Información incorrecta o desactualizada',
15
+ icon: 'document-text-outline',
16
+ },
17
+ {
18
+ value: 'feedback',
19
+ label: 'Comentario general',
20
+ description: 'Tu opinión o experiencia',
21
+ icon: 'chatbubble-outline',
22
+ },
23
+ {
24
+ value: 'suggestion',
25
+ label: 'Sugerencia',
26
+ description: 'Propuesta de mejora o nueva funcionalidad',
27
+ icon: 'bulb-outline',
28
+ },
29
+ ];
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZlZWRiYWNrL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlIQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUF5QjtJQUNqRTtRQUNFLEtBQUssRUFBRSxPQUFPO1FBQ2QsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLElBQUksRUFBRSxhQUFhO0tBQ3BCO0lBQ0Q7UUFDRSxLQUFLLEVBQUUsY0FBYztRQUNyQixLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLFdBQVcsRUFBRSx5Q0FBeUM7UUFDdEQsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QjtJQUNEO1FBQ0UsS0FBSyxFQUFFLFVBQVU7UUFDakIsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLElBQUksRUFBRSxvQkFBb0I7S0FDM0I7SUFDRDtRQUNFLEtBQUssRUFBRSxZQUFZO1FBQ25CLEtBQUssRUFBRSxZQUFZO1FBQ25CLFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsSUFBSSxFQUFFLGNBQWM7S0FDckI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmFjacOzbiBkZWwgc2VydmljaW8gZGUgRmVlZGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdGVjaEZlZWRiYWNrQ29uZmlnIHtcbiAgLyoqIFVSTCBiYXNlIGRlIGxhIEFQSSAqL1xuICBhcGlVcmw6IHN0cmluZztcbiAgLyoqIElEIGRlIGxhIGFwbGljYWNpw7NuIChlajogJ215LXZhbHRlY2gtYXBwJykgKi9cbiAgYXBwSWQ6IHN0cmluZztcbiAgLyoqIFByZWZpam8gcGFyYSBlbmRwb2ludHMgKGRlZmF1bHQ6ICcvdjEvZmVlZGJhY2snKSAqL1xuICBmZWVkYmFja1ByZWZpeD86IHN0cmluZztcbiAgLyoqIE7Dum1lcm8gbcOheGltbyBkZSBhZGp1bnRvcyAoZGVmYXVsdDogNSkgKi9cbiAgbWF4QXR0YWNobWVudHM/OiBudW1iZXI7XG4gIC8qKiBUYW1hw7FvIG3DoXhpbW8gcG9yIGFyY2hpdm8gZW4gYnl0ZXMgKGRlZmF1bHQ6IDEwTUIpICovXG4gIG1heEZpbGVTaXplPzogbnVtYmVyO1xuICAvKiogVGlwb3MgZGUgYXJjaGl2byBwZXJtaXRpZG9zIChkZWZhdWx0OiBbJ2ltYWdlLyonLCAndmlkZW8vKicsICdhcHBsaWNhdGlvbi9wZGYnXSkgKi9cbiAgYWxsb3dlZEZpbGVUeXBlcz86IHN0cmluZ1tdO1xuICAvKiogUnV0YSBlbiBGaXJlYmFzZSBTdG9yYWdlIHBhcmEgYWRqdW50b3MgKGRlZmF1bHQ6ICdmZWVkYmFjaycpICovXG4gIHN0b3JhZ2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRpcG9zIGRlIGZlZWRiYWNrIGRpc3BvbmlibGVzLlxuICovXG5leHBvcnQgdHlwZSBGZWVkYmFja1R5cGUgPSAnaXNzdWUnIHwgJ3Bvb3ItY29udGVudCcgfCAnZmVlZGJhY2snIHwgJ3N1Z2dlc3Rpb24nO1xuXG4vKipcbiAqIEVzdGFkbyBkZSB1biBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IHR5cGUgRmVlZGJhY2tTdGF0dXMgPSAnbmV3JyB8ICdyZXZpZXdlZCcgfCAncmVzb2x2ZWQnO1xuXG4vKipcbiAqIFRpcG9zIGRlIGNvbnRlbmlkbyBwYXJhIHJlZmVyZW5jaWEuXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRlbnRUeXBlID1cbiAgfCAnYXJ0aWNsZSdcbiAgfCAnZmFxJ1xuICB8ICduZXdzJ1xuICB8ICdwYWdlJ1xuICB8ICdwcm9kdWN0J1xuICB8ICdldmVudCdcbiAgfCAnb3RoZXInO1xuXG4vKipcbiAqIFJlZmVyZW5jaWEgYSBjb250ZW5pZG8gZXNwZWPDrWZpY28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFJlZiB7XG4gIGNvbnRlbnRJZDogc3RyaW5nO1xuICBjb250ZW50VHlwZTogQ29udGVudFR5cGU7XG59XG5cbi8qKlxuICogQ29udGV4dG8gZGVsIGRpc3Bvc2l0aXZvIGRlbCB1c3VhcmlvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvbnRleHQge1xuICBicm93c2VyOiBzdHJpbmc7XG4gIG9zOiBzdHJpbmc7XG4gIHZpZXdwb3J0OiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwYWdlVXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50cmFkYSBkZSBmZWVkYmFjayBjb21wbGV0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFjayB7XG4gIGZlZWRiYWNrSWQ6IHN0cmluZztcbiAgYXBwSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHR5cGU6IEZlZWRiYWNrVHlwZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYXR0YWNobWVudHM6IHN0cmluZ1tdO1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcbiAgZGV2aWNlQ29udGV4dDogRGV2aWNlQ29udGV4dDtcbiAgc3RhdHVzOiBGZWVkYmFja1N0YXR1cztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBjcmVhciBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVGZWVkYmFja1JlcXVlc3Qge1xuICB0eXBlOiBGZWVkYmFja1R5cGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogc3RyaW5nW107XG4gIGNvbnRlbnRSZWY/OiBDb250ZW50UmVmO1xuICBkZXZpY2VDb250ZXh0OiBEZXZpY2VDb250ZXh0O1xuICBhcHBJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGFsIGNyZWFyIGZlZWRiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBmZWVkYmFja0lkOiBzdHJpbmc7XG4gIHN0YXR1czogRmVlZGJhY2tTdGF0dXM7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGFsIG9idGVuZXIgZmVlZGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmVlZGJhY2tSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGZlZWRiYWNrOiBGZWVkYmFjaztcbn1cblxuLyoqXG4gKiBPcGNpb25lcyBkZSB0aXBvIGRlIGZlZWRiYWNrIHBhcmEgVUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tUeXBlT3B0aW9uIHtcbiAgdmFsdWU6IEZlZWRiYWNrVHlwZTtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gcG9yIGRlZmVjdG8gZGUgdGlwb3MgZGUgZmVlZGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUzogRmVlZGJhY2tUeXBlT3B0aW9uW10gPSBbXG4gIHtcbiAgICB2YWx1ZTogJ2lzc3VlJyxcbiAgICBsYWJlbDogJ1JlcG9ydGFyIHByb2JsZW1hJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FsZ28gbm8gZnVuY2lvbmEgY29ycmVjdGFtZW50ZScsXG4gICAgaWNvbjogJ2J1Zy1vdXRsaW5lJyxcbiAgfSxcbiAge1xuICAgIHZhbHVlOiAncG9vci1jb250ZW50JyxcbiAgICBsYWJlbDogJ0NvbnRlbmlkbyBpbmNvcnJlY3RvJyxcbiAgICBkZXNjcmlwdGlvbjogJ0luZm9ybWFjacOzbiBpbmNvcnJlY3RhIG8gZGVzYWN0dWFsaXphZGEnLFxuICAgIGljb246ICdkb2N1bWVudC10ZXh0LW91dGxpbmUnLFxuICB9LFxuICB7XG4gICAgdmFsdWU6ICdmZWVkYmFjaycsXG4gICAgbGFiZWw6ICdDb21lbnRhcmlvIGdlbmVyYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnVHUgb3BpbmnDs24gbyBleHBlcmllbmNpYScsXG4gICAgaWNvbjogJ2NoYXRidWJibGUtb3V0bGluZScsXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGxhYmVsOiAnU3VnZXJlbmNpYScsXG4gICAgZGVzY3JpcHRpb246ICdQcm9wdWVzdGEgZGUgbWVqb3JhIG8gbnVldmEgZnVuY2lvbmFsaWRhZCcsXG4gICAgaWNvbjogJ2J1bGItb3V0bGluZScsXG4gIH0sXG5dO1xuIl19
@@ -31,6 +31,8 @@
31
31
  export * from './types';
32
32
  // Configuración
33
33
  export { VALTECH_FIREBASE_CONFIG, hasEmulators, provideValtechFirebase } from './config';
34
+ // Configuración compartida del monorepo
35
+ export { APP_IDS, FIREBASE_PROJECTS, SHARED_EMULATOR_CONFIG, collections, createFirebaseConfig, isEmulatorMode, storagePaths, } from './shared-config';
34
36
  // Servicios
35
37
  export { FirebaseService } from './firebase.service';
36
38
  // Firestore
@@ -43,4 +45,4 @@ export { buildPath, extractPathParams, getCollectionPath, getDocumentId, isColle
43
45
  export { StorageService } from './storage.service';
44
46
  // Messaging (FCM)
45
47
  export { MessagingService } from './messaging.service';
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBRUgsUUFBUTtBQUNSLGNBQWMsU0FBUyxDQUFDO0FBRXhCLGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpGLFlBQVk7QUFDWixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsWUFBWTtBQUNaLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBcUIsbUJBQW1CLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7QUFFbEcsYUFBYTtBQUNiLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxRQUFRLEdBQ1QsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyZWJhc2UgU2VydmljZXNcbiAqXG4gKiBTZXJ2aWNpb3MgcmV1dGlsaXphYmxlcyBwYXJhIGludGVncmFjacOzbiBjb24gRmlyZWJhc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEVuIG1haW4udHNcbiAqIGltcG9ydCB7IHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlVmFsdGVjaEZpcmViYXNlKHtcbiAqICAgICAgIGZpcmViYXNlOiBlbnZpcm9ubWVudC5maXJlYmFzZSxcbiAqICAgICAgIHBlcnNpc3RlbmNlOiB0cnVlLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKlxuICogLy8gRW4gY29tcG9uZW50ZXNcbiAqIGltcG9ydCB7IEZpcmViYXNlU2VydmljZSwgRmlyZXN0b3JlU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTtcbiAqICAgcHJpdmF0ZSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlU2VydmljZSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vLyBUaXBvc1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5cbi8vIENvbmZpZ3VyYWNpw7NuXG5leHBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRywgaGFzRW11bGF0b3JzLCBwcm92aWRlVmFsdGVjaEZpcmViYXNlIH0gZnJvbSAnLi9jb25maWcnO1xuXG4vLyBTZXJ2aWNpb3NcbmV4cG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4vZmlyZWJhc2Uuc2VydmljZSc7XG5cbi8vIEZpcmVzdG9yZVxuZXhwb3J0IHsgRmlyZXN0b3JlU2VydmljZSB9IGZyb20gJy4vZmlyZXN0b3JlLnNlcnZpY2UnO1xuZXhwb3J0IHsgQ29sbGVjdGlvbk9wdGlvbnMsIEZpcmVzdG9yZUNvbGxlY3Rpb24sIFN1YkNvbGxlY3Rpb25SZWYgfSBmcm9tICcuL2ZpcmVzdG9yZS1jb2xsZWN0aW9uJztcblxuLy8gVXRpbGlkYWRlc1xuZXhwb3J0IHsgUXVlcnlCdWlsZGVyLCBxdWVyeSB9IGZyb20gJy4vdXRpbHMvcXVlcnktYnVpbGRlcic7XG5leHBvcnQge1xuICBidWlsZFBhdGgsXG4gIGV4dHJhY3RQYXRoUGFyYW1zLFxuICBnZXRDb2xsZWN0aW9uUGF0aCxcbiAgZ2V0RG9jdW1lbnRJZCxcbiAgaXNDb2xsZWN0aW9uUGF0aCxcbiAgaXNEb2N1bWVudFBhdGgsXG4gIGlzVmFsaWRQYXRoLFxuICBqb2luUGF0aCxcbn0gZnJvbSAnLi91dGlscy9wYXRoLWJ1aWxkZXInO1xuXG4vLyBTdG9yYWdlXG5leHBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuLy8gTWVzc2FnaW5nIChGQ00pXG5leHBvcnQgeyBNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tZXNzYWdpbmcuc2VydmljZSc7XG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBRUgsUUFBUTtBQUNSLGNBQWMsU0FBUyxDQUFDO0FBRXhCLGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpGLHdDQUF3QztBQUN4QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsWUFBWSxHQUdiLE1BQU0saUJBQWlCLENBQUM7QUFFekIsWUFBWTtBQUNaLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFxQixtQkFBbUIsRUFBb0IsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRyxhQUFhO0FBQ2IsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsV0FBVyxFQUNYLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLFVBQVU7QUFDVixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsa0JBQWtCO0FBQ2xCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlYmFzZSBTZXJ2aWNlc1xuICpcbiAqIFNlcnZpY2lvcyByZXV0aWxpemFibGVzIHBhcmEgaW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRW4gbWFpbi50c1xuICogaW1wb3J0IHsgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2Uoe1xuICogICAgICAgZmlyZWJhc2U6IGVudmlyb25tZW50LmZpcmViYXNlLFxuICogICAgICAgcGVyc2lzdGVuY2U6IHRydWUsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiAvLyBFbiBjb21wb25lbnRlc1xuICogaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlLCBGaXJlc3RvcmVTZXJ2aWNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpO1xuICogICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmVTZXJ2aWNlKTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIFRpcG9zXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuLy8gQ29uZmlndXJhY2nDs25cbmV4cG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHLCBoYXNFbXVsYXRvcnMsIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8vIENvbmZpZ3VyYWNpw7NuIGNvbXBhcnRpZGEgZGVsIG1vbm9yZXBvXG5leHBvcnQge1xuICBBUFBfSURTLFxuICBGSVJFQkFTRV9QUk9KRUNUUyxcbiAgU0hBUkVEX0VNVUxBVE9SX0NPTkZJRyxcbiAgY29sbGVjdGlvbnMsXG4gIGNyZWF0ZUZpcmViYXNlQ29uZmlnLFxuICBpc0VtdWxhdG9yTW9kZSxcbiAgc3RvcmFnZVBhdGhzLFxuICB0eXBlIEFwcElkLFxuICB0eXBlIENyZWF0ZUZpcmViYXNlQ29uZmlnT3B0aW9ucyxcbn0gZnJvbSAnLi9zaGFyZWQtY29uZmlnJztcblxuLy8gU2VydmljaW9zXG5leHBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmViYXNlLnNlcnZpY2UnO1xuXG4vLyBGaXJlc3RvcmVcbmV4cG9ydCB7IEZpcmVzdG9yZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmVzdG9yZS5zZXJ2aWNlJztcbmV4cG9ydCB7IENvbGxlY3Rpb25PcHRpb25zLCBGaXJlc3RvcmVDb2xsZWN0aW9uLCBTdWJDb2xsZWN0aW9uUmVmIH0gZnJvbSAnLi9maXJlc3RvcmUtY29sbGVjdGlvbic7XG5cbi8vIFV0aWxpZGFkZXNcbmV4cG9ydCB7IFF1ZXJ5QnVpbGRlciwgcXVlcnkgfSBmcm9tICcuL3V0aWxzL3F1ZXJ5LWJ1aWxkZXInO1xuZXhwb3J0IHtcbiAgYnVpbGRQYXRoLFxuICBleHRyYWN0UGF0aFBhcmFtcyxcbiAgZ2V0Q29sbGVjdGlvblBhdGgsXG4gIGdldERvY3VtZW50SWQsXG4gIGlzQ29sbGVjdGlvblBhdGgsXG4gIGlzRG9jdW1lbnRQYXRoLFxuICBpc1ZhbGlkUGF0aCxcbiAgam9pblBhdGgsXG59IGZyb20gJy4vdXRpbHMvcGF0aC1idWlsZGVyJztcblxuLy8gU3RvcmFnZVxuZXhwb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5cbi8vIE1lc3NhZ2luZyAoRkNNKVxuZXhwb3J0IHsgTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4vbWVzc2FnaW5nLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Firebase Shared Configuration
3
+ *
4
+ * Configuración base de Firebase compartida entre todas las apps del monorepo.
5
+ * Los secrets (apiKey, appId) se inyectan en build time via environment.
6
+ */
7
+ export const APP_IDS = {
8
+ SHOWCASE: 'showcase',
9
+ ADMIN_PORTAL: 'admin-portal',
10
+ APP: 'app',
11
+ };
12
+ // ============================================================================
13
+ // FIREBASE PROJECT IDS
14
+ // ============================================================================
15
+ /**
16
+ * IDs de los proyectos Firebase por ambiente.
17
+ * Deben coincidir con los proyectos creados en Firebase Console.
18
+ */
19
+ export const FIREBASE_PROJECTS = {
20
+ development: 'myvaltech-dev',
21
+ production: 'myvaltech-prod',
22
+ };
23
+ // ============================================================================
24
+ // EMULATOR CONFIGURATION (shared across all apps)
25
+ // ============================================================================
26
+ /**
27
+ * Configuración de emuladores compartida.
28
+ * Todos los puertos deben coincidir con frontend/firebase/firebase.json
29
+ */
30
+ export const SHARED_EMULATOR_CONFIG = {
31
+ firestore: { host: 'localhost', port: 9080 },
32
+ storage: { host: 'localhost', port: 9199 },
33
+ auth: { host: 'localhost', port: 9099 },
34
+ };
35
+ // ============================================================================
36
+ // STORAGE PATH BUILDERS
37
+ // ============================================================================
38
+ /**
39
+ * Genera paths de Storage con namespace por app.
40
+ *
41
+ * @example
42
+ * // Path específico de la app
43
+ * storagePaths.forApp('showcase', 'uploads', 'image.jpg')
44
+ * // => 'showcase/uploads/image.jpg'
45
+ *
46
+ * // Path compartido
47
+ * storagePaths.shared.profilePhoto('user123', 'avatar.jpg')
48
+ * // => 'profile-photos/user123/avatar.jpg'
49
+ */
50
+ export const storagePaths = {
51
+ /** Carpeta específica de la app: {appId}/{...paths} */
52
+ forApp: (appId, ...paths) => [appId, ...paths].join('/'),
53
+ /** Carpetas compartidas (sin namespace) */
54
+ shared: {
55
+ /** Foto de perfil de usuario */
56
+ profilePhoto: (userId, fileName) => `profile-photos/${userId}/${fileName}`,
57
+ /** Archivos públicos accesibles sin autenticación */
58
+ public: (...paths) => `public/${paths.join('/')}`,
59
+ },
60
+ /** Carpetas de desarrollo (acceso libre en emuladores) */
61
+ demo: (...paths) => `demo-uploads/${paths.join('/')}`,
62
+ };
63
+ // ============================================================================
64
+ // FIRESTORE COLLECTION BUILDERS
65
+ // ============================================================================
66
+ /**
67
+ * Genera nombres de colecciones con namespace por app.
68
+ *
69
+ * @example
70
+ * // Colección específica de la app
71
+ * collections.forApp('showcase', 'items')
72
+ * // => 'showcase-items'
73
+ *
74
+ * // Colección compartida
75
+ * collections.shared.users
76
+ * // => 'users'
77
+ */
78
+ export const collections = {
79
+ /** Colección específica de la app: {appId}-{collection} */
80
+ forApp: (appId, collectionName) => `${appId}-${collectionName}`,
81
+ /** Colecciones compartidas (sin namespace) */
82
+ shared: {
83
+ /** Usuarios del sistema */
84
+ users: 'users',
85
+ /** Perfiles públicos */
86
+ profiles: 'profiles',
87
+ /** Notificaciones de usuarios */
88
+ notifications: 'notifications',
89
+ },
90
+ /** Colecciones de desarrollo (acceso libre en emuladores) */
91
+ demo: (collectionName) => `demo-${collectionName}`,
92
+ };
93
+ /**
94
+ * Crea la configuración completa de Firebase desde variables de entorno.
95
+ * Usa esto en el environment.ts de cada app.
96
+ *
97
+ * @example
98
+ * // environment.ts
99
+ * export const environment = {
100
+ * firebase: createFirebaseConfig(
101
+ * {
102
+ * apiKey: 'AIza...',
103
+ * authDomain: 'myvaltech-dev.firebaseapp.com',
104
+ * projectId: 'myvaltech-dev',
105
+ * storageBucket: 'myvaltech-dev.appspot.com',
106
+ * messagingSenderId: '123456789',
107
+ * appId: '1:123456789:web:abc123',
108
+ * },
109
+ * { useEmulators: true, persistence: true }
110
+ * ),
111
+ * };
112
+ */
113
+ export function createFirebaseConfig(envConfig, options = {}) {
114
+ const { useEmulators = false, persistence = true, enableMessaging = false, messagingVapidKey } = options;
115
+ return {
116
+ firebase: envConfig,
117
+ persistence,
118
+ enableMessaging,
119
+ messagingVapidKey,
120
+ emulator: useEmulators ? SHARED_EMULATOR_CONFIG : undefined,
121
+ };
122
+ }
123
+ // ============================================================================
124
+ // UTILITY: Check if running in emulator mode
125
+ // ============================================================================
126
+ /**
127
+ * Verifica si la configuración tiene emuladores habilitados
128
+ */
129
+ export function isEmulatorMode(config) {
130
+ return config.emulator !== undefined;
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2Uvc2hhcmVkLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixRQUFRLEVBQUUsVUFBbUI7SUFDN0IsWUFBWSxFQUFFLGNBQXVCO0lBQ3JDLEdBQUcsRUFBRSxLQUFjO0NBQ1gsQ0FBQztBQUVYLCtFQUErRTtBQUMvRSx1QkFBdUI7QUFDdkIsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLFdBQVcsRUFBRSxlQUFlO0lBQzVCLFVBQVUsRUFBRSxnQkFBZ0I7Q0FDcEIsQ0FBQztBQUVYLCtFQUErRTtBQUMvRSxrREFBa0Q7QUFDbEQsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFtQjtJQUNwRCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDNUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQzFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtDQUN4QyxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLHdCQUF3QjtBQUN4QiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsdURBQXVEO0lBQ3ZELE1BQU0sRUFBRSxDQUFDLEtBQVksRUFBRSxHQUFHLEtBQWUsRUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRWpGLDJDQUEyQztJQUMzQyxNQUFNLEVBQUU7UUFDTixnQ0FBZ0M7UUFDaEMsWUFBWSxFQUFFLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQVUsRUFBRSxDQUN6RCxrQkFBa0IsTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUV4QyxxREFBcUQ7UUFDckQsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFlLEVBQVUsRUFBRSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtLQUNwRTtJQUVELDBEQUEwRDtJQUMxRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQWUsRUFBVSxFQUFFLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Q0FDeEUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxnQ0FBZ0M7QUFDaEMsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLDJEQUEyRDtJQUMzRCxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsY0FBc0IsRUFBVSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksY0FBYyxFQUFFO0lBRXRGLDhDQUE4QztJQUM5QyxNQUFNLEVBQUU7UUFDTiwyQkFBMkI7UUFDM0IsS0FBSyxFQUFFLE9BQU87UUFDZCx3QkFBd0I7UUFDeEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsaUNBQWlDO1FBQ2pDLGFBQWEsRUFBRSxlQUFlO0tBQy9CO0lBRUQsNkRBQTZEO0lBQzdELElBQUksRUFBRSxDQUFDLGNBQXNCLEVBQVUsRUFBRSxDQUFDLFFBQVEsY0FBYyxFQUFFO0NBQ25FLENBQUM7QUFvQkY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFNBQXlCLEVBQ3pCLFVBQXVDLEVBQUU7SUFFekMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQzVGLE9BQU8sQ0FBQztJQUVWLE9BQU87UUFDTCxRQUFRLEVBQUUsU0FBUztRQUNuQixXQUFXO1FBQ1gsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUM1RCxDQUFDO0FBQ0osQ0FBQztBQUVELCtFQUErRTtBQUMvRSw2Q0FBNkM7QUFDN0MsK0VBQStFO0FBRS9FOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUE2QjtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcmViYXNlIFNoYXJlZCBDb25maWd1cmF0aW9uXG4gKlxuICogQ29uZmlndXJhY2nDs24gYmFzZSBkZSBGaXJlYmFzZSBjb21wYXJ0aWRhIGVudHJlIHRvZGFzIGxhcyBhcHBzIGRlbCBtb25vcmVwby5cbiAqIExvcyBzZWNyZXRzIChhcGlLZXksIGFwcElkKSBzZSBpbnllY3RhbiBlbiBidWlsZCB0aW1lIHZpYSBlbnZpcm9ubWVudC5cbiAqL1xuXG5pbXBvcnQgeyBFbXVsYXRvckNvbmZpZywgRmlyZWJhc2VDb25maWcsIFZhbHRlY2hGaXJlYmFzZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBUFAgSURTIC0gSWRlbnRpZmljYWRvcmVzIMO6bmljb3MgcG9yIGFwbGljYWNpw7NuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSWRlbnRpZmljYWRvcmVzIGRlIGxhcyBhcHBzIGRlbCBtb25vcmVwby5cbiAqIFVzYWRvcyBwYXJhIG5hbWVzcGFjaW5nIGRlIGNvbGVjY2lvbmVzIEZpcmVzdG9yZSB5IHBhdGhzIGRlIFN0b3JhZ2UuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcElkID0gJ3Nob3djYXNlJyB8ICdhZG1pbi1wb3J0YWwnIHwgJ2FwcCc7XG5cbmV4cG9ydCBjb25zdCBBUFBfSURTID0ge1xuICBTSE9XQ0FTRTogJ3Nob3djYXNlJyBhcyBBcHBJZCxcbiAgQURNSU5fUE9SVEFMOiAnYWRtaW4tcG9ydGFsJyBhcyBBcHBJZCxcbiAgQVBQOiAnYXBwJyBhcyBBcHBJZCxcbn0gYXMgY29uc3Q7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZJUkVCQVNFIFBST0pFQ1QgSURTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSURzIGRlIGxvcyBwcm95ZWN0b3MgRmlyZWJhc2UgcG9yIGFtYmllbnRlLlxuICogRGViZW4gY29pbmNpZGlyIGNvbiBsb3MgcHJveWVjdG9zIGNyZWFkb3MgZW4gRmlyZWJhc2UgQ29uc29sZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEZJUkVCQVNFX1BST0pFQ1RTID0ge1xuICBkZXZlbG9wbWVudDogJ215dmFsdGVjaC1kZXYnLFxuICBwcm9kdWN0aW9uOiAnbXl2YWx0ZWNoLXByb2QnLFxufSBhcyBjb25zdDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRU1VTEFUT1IgQ09ORklHVVJBVElPTiAoc2hhcmVkIGFjcm9zcyBhbGwgYXBwcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb25maWd1cmFjacOzbiBkZSBlbXVsYWRvcmVzIGNvbXBhcnRpZGEuXG4gKiBUb2RvcyBsb3MgcHVlcnRvcyBkZWJlbiBjb2luY2lkaXIgY29uIGZyb250ZW5kL2ZpcmViYXNlL2ZpcmViYXNlLmpzb25cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJFRF9FTVVMQVRPUl9DT05GSUc6IEVtdWxhdG9yQ29uZmlnID0ge1xuICBmaXJlc3RvcmU6IHsgaG9zdDogJ2xvY2FsaG9zdCcsIHBvcnQ6IDkwODAgfSxcbiAgc3RvcmFnZTogeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogOTE5OSB9LFxuICBhdXRoOiB7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA5MDk5IH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTVE9SQUdFIFBBVEggQlVJTERFUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZW5lcmEgcGF0aHMgZGUgU3RvcmFnZSBjb24gbmFtZXNwYWNlIHBvciBhcHAuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBhdGggZXNwZWPDrWZpY28gZGUgbGEgYXBwXG4gKiBzdG9yYWdlUGF0aHMuZm9yQXBwKCdzaG93Y2FzZScsICd1cGxvYWRzJywgJ2ltYWdlLmpwZycpXG4gKiAvLyA9PiAnc2hvd2Nhc2UvdXBsb2Fkcy9pbWFnZS5qcGcnXG4gKlxuICogLy8gUGF0aCBjb21wYXJ0aWRvXG4gKiBzdG9yYWdlUGF0aHMuc2hhcmVkLnByb2ZpbGVQaG90bygndXNlcjEyMycsICdhdmF0YXIuanBnJylcbiAqIC8vID0+ICdwcm9maWxlLXBob3Rvcy91c2VyMTIzL2F2YXRhci5qcGcnXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yYWdlUGF0aHMgPSB7XG4gIC8qKiBDYXJwZXRhIGVzcGVjw61maWNhIGRlIGxhIGFwcDoge2FwcElkfS97Li4ucGF0aHN9ICovXG4gIGZvckFwcDogKGFwcElkOiBBcHBJZCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IFthcHBJZCwgLi4ucGF0aHNdLmpvaW4oJy8nKSxcblxuICAvKiogQ2FycGV0YXMgY29tcGFydGlkYXMgKHNpbiBuYW1lc3BhY2UpICovXG4gIHNoYXJlZDoge1xuICAgIC8qKiBGb3RvIGRlIHBlcmZpbCBkZSB1c3VhcmlvICovXG4gICAgcHJvZmlsZVBob3RvOiAodXNlcklkOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgIGBwcm9maWxlLXBob3Rvcy8ke3VzZXJJZH0vJHtmaWxlTmFtZX1gLFxuXG4gICAgLyoqIEFyY2hpdm9zIHDDumJsaWNvcyBhY2Nlc2libGVzIHNpbiBhdXRlbnRpY2FjacOzbiAqL1xuICAgIHB1YmxpYzogKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyA9PiBgcHVibGljLyR7cGF0aHMuam9pbignLycpfWAsXG4gIH0sXG5cbiAgLyoqIENhcnBldGFzIGRlIGRlc2Fycm9sbG8gKGFjY2VzbyBsaWJyZSBlbiBlbXVsYWRvcmVzKSAqL1xuICBkZW1vOiAoLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IGBkZW1vLXVwbG9hZHMvJHtwYXRocy5qb2luKCcvJyl9YCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZJUkVTVE9SRSBDT0xMRUNUSU9OIEJVSUxERVJTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2VuZXJhIG5vbWJyZXMgZGUgY29sZWNjaW9uZXMgY29uIG5hbWVzcGFjZSBwb3IgYXBwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb2xlY2Npw7NuIGVzcGVjw61maWNhIGRlIGxhIGFwcFxuICogY29sbGVjdGlvbnMuZm9yQXBwKCdzaG93Y2FzZScsICdpdGVtcycpXG4gKiAvLyA9PiAnc2hvd2Nhc2UtaXRlbXMnXG4gKlxuICogLy8gQ29sZWNjacOzbiBjb21wYXJ0aWRhXG4gKiBjb2xsZWN0aW9ucy5zaGFyZWQudXNlcnNcbiAqIC8vID0+ICd1c2VycydcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbGxlY3Rpb25zID0ge1xuICAvKiogQ29sZWNjacOzbiBlc3BlY8OtZmljYSBkZSBsYSBhcHA6IHthcHBJZH0te2NvbGxlY3Rpb259ICovXG4gIGZvckFwcDogKGFwcElkOiBBcHBJZCwgY29sbGVjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiBgJHthcHBJZH0tJHtjb2xsZWN0aW9uTmFtZX1gLFxuXG4gIC8qKiBDb2xlY2Npb25lcyBjb21wYXJ0aWRhcyAoc2luIG5hbWVzcGFjZSkgKi9cbiAgc2hhcmVkOiB7XG4gICAgLyoqIFVzdWFyaW9zIGRlbCBzaXN0ZW1hICovXG4gICAgdXNlcnM6ICd1c2VycycsXG4gICAgLyoqIFBlcmZpbGVzIHDDumJsaWNvcyAqL1xuICAgIHByb2ZpbGVzOiAncHJvZmlsZXMnLFxuICAgIC8qKiBOb3RpZmljYWNpb25lcyBkZSB1c3VhcmlvcyAqL1xuICAgIG5vdGlmaWNhdGlvbnM6ICdub3RpZmljYXRpb25zJyxcbiAgfSxcblxuICAvKiogQ29sZWNjaW9uZXMgZGUgZGVzYXJyb2xsbyAoYWNjZXNvIGxpYnJlIGVuIGVtdWxhZG9yZXMpICovXG4gIGRlbW86IChjb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGBkZW1vLSR7Y29sbGVjdGlvbk5hbWV9YCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUjogQ3JlYXRlIEZpcmViYXNlIENvbmZpZyBmcm9tIEVudmlyb25tZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogT3BjaW9uZXMgcGFyYSBjcmVhciBsYSBjb25maWd1cmFjacOzbiBkZSBGaXJlYmFzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZpcmViYXNlQ29uZmlnT3B0aW9ucyB7XG4gIC8qKiBVc2FyIGVtdWxhZG9yZXMgbG9jYWxlcyAocGFyYSBkZXNhcnJvbGxvKSAqL1xuICB1c2VFbXVsYXRvcnM/OiBib29sZWFuO1xuICAvKiogSGFiaWxpdGFyIHBlcnNpc3RlbmNpYSBvZmZsaW5lIGRlIEZpcmVzdG9yZSAqL1xuICBwZXJzaXN0ZW5jZT86IGJvb2xlYW47XG4gIC8qKiBIYWJpbGl0YXIgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nICovXG4gIGVuYWJsZU1lc3NhZ2luZz86IGJvb2xlYW47XG4gIC8qKiBWQVBJRCBrZXkgcGFyYSBGQ00gKHJlcXVlcmlkbyBzaSBlbmFibGVNZXNzYWdpbmcgZXMgdHJ1ZSkgKi9cbiAgbWVzc2FnaW5nVmFwaWRLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYSBsYSBjb25maWd1cmFjacOzbiBjb21wbGV0YSBkZSBGaXJlYmFzZSBkZXNkZSB2YXJpYWJsZXMgZGUgZW50b3Juby5cbiAqIFVzYSBlc3RvIGVuIGVsIGVudmlyb25tZW50LnRzIGRlIGNhZGEgYXBwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBlbnZpcm9ubWVudC50c1xuICogZXhwb3J0IGNvbnN0IGVudmlyb25tZW50ID0ge1xuICogICBmaXJlYmFzZTogY3JlYXRlRmlyZWJhc2VDb25maWcoXG4gKiAgICAge1xuICogICAgICAgYXBpS2V5OiAnQUl6YS4uLicsXG4gKiAgICAgICBhdXRoRG9tYWluOiAnbXl2YWx0ZWNoLWRldi5maXJlYmFzZWFwcC5jb20nLFxuICogICAgICAgcHJvamVjdElkOiAnbXl2YWx0ZWNoLWRldicsXG4gKiAgICAgICBzdG9yYWdlQnVja2V0OiAnbXl2YWx0ZWNoLWRldi5hcHBzcG90LmNvbScsXG4gKiAgICAgICBtZXNzYWdpbmdTZW5kZXJJZDogJzEyMzQ1Njc4OScsXG4gKiAgICAgICBhcHBJZDogJzE6MTIzNDU2Nzg5OndlYjphYmMxMjMnLFxuICogICAgIH0sXG4gKiAgICAgeyB1c2VFbXVsYXRvcnM6IHRydWUsIHBlcnNpc3RlbmNlOiB0cnVlIH1cbiAqICAgKSxcbiAqIH07XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaXJlYmFzZUNvbmZpZyhcbiAgZW52Q29uZmlnOiBGaXJlYmFzZUNvbmZpZyxcbiAgb3B0aW9uczogQ3JlYXRlRmlyZWJhc2VDb25maWdPcHRpb25zID0ge31cbik6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyB7XG4gIGNvbnN0IHsgdXNlRW11bGF0b3JzID0gZmFsc2UsIHBlcnNpc3RlbmNlID0gdHJ1ZSwgZW5hYmxlTWVzc2FnaW5nID0gZmFsc2UsIG1lc3NhZ2luZ1ZhcGlkS2V5IH0gPVxuICAgIG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXJlYmFzZTogZW52Q29uZmlnLFxuICAgIHBlcnNpc3RlbmNlLFxuICAgIGVuYWJsZU1lc3NhZ2luZyxcbiAgICBtZXNzYWdpbmdWYXBpZEtleSxcbiAgICBlbXVsYXRvcjogdXNlRW11bGF0b3JzID8gU0hBUkVEX0VNVUxBVE9SX0NPTkZJRyA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVRJTElUWTogQ2hlY2sgaWYgcnVubmluZyBpbiBlbXVsYXRvciBtb2RlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgY29uZmlndXJhY2nDs24gdGllbmUgZW11bGFkb3JlcyBoYWJpbGl0YWRvc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXVsYXRvck1vZGUoY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbmZpZy5lbXVsYXRvciAhPT0gdW5kZWZpbmVkO1xufVxuIl19