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.
- package/esm2022/lib/components/atoms/fab/fab.component.mjs +5 -4
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +13 -5
- package/esm2022/lib/components/molecules/comment-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +23 -4
- package/esm2022/lib/components/molecules/date-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +352 -0
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +2 -0
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +7 -7
- package/esm2022/lib/components/molecules/file-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +23 -9
- package/esm2022/lib/components/molecules/number-from-to/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +2 -2
- package/esm2022/lib/components/molecules/pin-input/types.mjs +2 -0
- package/esm2022/lib/components/organisms/form/form.component.mjs +108 -30
- package/esm2022/lib/services/content/content-types/blog.mjs +275 -0
- package/esm2022/lib/services/content/content-types/documentation.mjs +303 -0
- package/esm2022/lib/services/content/content-types/news.mjs +277 -0
- package/esm2022/lib/services/content/index.mjs +51 -0
- package/esm2022/lib/services/content/transformer.mjs +265 -0
- package/esm2022/lib/services/content/types.mjs +41 -0
- package/esm2022/lib/services/feedback/config.mjs +49 -0
- package/esm2022/lib/services/feedback/feedback.service.mjs +174 -0
- package/esm2022/lib/services/feedback/index.mjs +44 -0
- package/esm2022/lib/services/feedback/types.mjs +30 -0
- package/esm2022/lib/services/firebase/index.mjs +3 -1
- package/esm2022/lib/services/firebase/shared-config.mjs +132 -0
- package/esm2022/public-api.mjs +14 -1
- package/fesm2022/valtech-components.mjs +2225 -177
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/fab/fab.component.d.ts +2 -0
- package/lib/components/molecules/comment-input/comment-input.component.d.ts +4 -4
- package/lib/components/molecules/comment-input/types.d.ts +59 -0
- package/lib/components/molecules/date-input/date-input.component.d.ts +4 -3
- package/lib/components/molecules/date-input/types.d.ts +74 -0
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +56 -0
- package/lib/components/molecules/feedback-form/types.d.ts +54 -0
- package/lib/components/molecules/file-input/file-input.component.d.ts +5 -3
- package/lib/components/molecules/file-input/types.d.ts +72 -0
- package/lib/components/molecules/number-from-to/number-from-to.component.d.ts +8 -2
- package/lib/components/molecules/number-from-to/types.d.ts +76 -0
- package/lib/components/molecules/pin-input/pin-input.component.d.ts +4 -3
- package/lib/components/molecules/pin-input/types.d.ts +63 -0
- package/lib/components/organisms/form/form.component.d.ts +16 -2
- package/lib/services/content/content-types/blog.d.ts +148 -0
- package/lib/services/content/content-types/documentation.d.ts +183 -0
- package/lib/services/content/content-types/news.d.ts +162 -0
- package/lib/services/content/index.d.ts +49 -0
- package/lib/services/content/transformer.d.ts +96 -0
- package/lib/services/content/types.d.ts +220 -0
- package/lib/services/feedback/config.d.ts +35 -0
- package/lib/services/feedback/feedback.service.d.ts +76 -0
- package/lib/services/feedback/index.d.ts +40 -0
- package/lib/services/feedback/types.d.ts +107 -0
- package/lib/services/firebase/index.d.ts +1 -0
- package/lib/services/firebase/shared-config.d.ts +120 -0
- package/package.json +1 -1
- 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,
|
|
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
|